From 907a9cef10bf4f0309bf2f0c6384a9bb60882f16 Mon Sep 17 00:00:00 2001 From: Preston Smith <92108534+thetolbean@users.noreply.github.com> Date: Tue, 29 Oct 2024 19:52:43 -0500 Subject: [PATCH 01/97] Fix: Make Plushie Damage Unexaminable (#33061) Set hidden to true --- Resources/Prototypes/Entities/Objects/Fun/toys.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/Resources/Prototypes/Entities/Objects/Fun/toys.yml b/Resources/Prototypes/Entities/Objects/Fun/toys.yml index 4993614964..c3ef0d0329 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/toys.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/toys.yml @@ -35,6 +35,7 @@ damage: types: Blunt: 0 + hidden: true - type: PhysicalComposition materialComposition: Cloth: 100 From 440da3c640d0c5db3653cab56a165cfcd359c9d0 Mon Sep 17 00:00:00 2001 From: Milon Date: Wed, 30 Oct 2024 02:03:06 +0100 Subject: [PATCH 02/97] fix chameleon projector bot whitelist (#33055) fix --- .../Prototypes/Entities/Objects/Devices/chameleon_projector.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/Resources/Prototypes/Entities/Objects/Devices/chameleon_projector.yml b/Resources/Prototypes/Entities/Objects/Devices/chameleon_projector.yml index 99d58c6a3a..f07ae63569 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/chameleon_projector.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/chameleon_projector.yml @@ -12,6 +12,7 @@ components: - Anchorable - Item + tags: - Bot # for funny bot moments blacklist: components: From 3d70cdf23c17384d81cdf495c3075f9b02d8ab91 Mon Sep 17 00:00:00 2001 From: Flareguy <78941145+Flareguy@users.noreply.github.com> Date: Tue, 29 Oct 2024 22:12:49 -0500 Subject: [PATCH 03/97] =?UTF-8?q?Various=20Vaugely=20Connected=20Sprite=20?= =?UTF-8?q?Updates=E2=84=A2:=20Encryption=20Keys,=20Station=20Map,=20Brig?= =?UTF-8?q?=20Timer=20(#32786)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * various resprites (encryption keys + signal screens + station map) * brig timer update * fixes n shit --- .../Entities/Structures/Wallmounts/timer.yml | 4 +-- .../encryption_keys.rsi/crypt_blue.png | Bin 505 -> 311 bytes .../encryption_keys.rsi/crypt_gold.png | Bin 501 -> 307 bytes .../encryption_keys.rsi/crypt_gray.png | Bin 509 -> 300 bytes .../encryption_keys.rsi/crypt_orange.png | Bin 507 -> 313 bytes .../Devices/encryption_keys.rsi/crypt_red.png | Bin 499 -> 286 bytes .../encryption_keys.rsi/crypt_rusted.png | Bin 636 -> 514 bytes .../encryption_keys.rsi/crypt_silver.png | Bin 512 -> 313 bytes .../Devices/encryption_keys.rsi/meta.json | 2 +- .../Objects/Devices/tablets.rsi/generic.png | Bin 271 -> 230 bytes .../Objects/Devices/tablets.rsi/meta.json | 27 +++++++++++++++++- .../Objects/Devices/tablets.rsi/tablet.png | Bin 348 -> 302 bytes .../Objects/Devices/tablets.rsi/tabletsol.png | Bin 414 -> 389 bytes .../Machines/station_map.rsi/meta.json | 2 +- .../Machines/station_map.rsi/station_map0.png | Bin 15417 -> 2926 bytes .../station_map.rsi/station_map_broken.png | Bin 16171 -> 609 bytes .../station_map.rsi/station_map_frame0.png | Bin 15800 -> 423 bytes .../station_map.rsi/station_map_frame1.png | Bin 16488 -> 642 bytes .../station_map.rsi/station_map_frame2.png | Bin 16277 -> 341 bytes .../Wallmounts/signalscreen.rsi/meta.json | 2 +- .../signalscreen.rsi/signalscreen.png | Bin 870 -> 286 bytes 21 files changed, 31 insertions(+), 6 deletions(-) diff --git a/Resources/Prototypes/Entities/Structures/Wallmounts/timer.yml b/Resources/Prototypes/Entities/Structures/Wallmounts/timer.yml index 595915202d..1f2a5ebeb0 100644 --- a/Resources/Prototypes/Entities/Structures/Wallmounts/timer.yml +++ b/Resources/Prototypes/Entities/Structures/Wallmounts/timer.yml @@ -64,8 +64,8 @@ canEditLabel: true - type: TextScreenVisuals color: FloralWhite - textOffset: 0,8 - timerOffset: 0,8 + textOffset: 0,6 + timerOffset: 0,6 textLength: 5 rows: 1 - type: Sprite diff --git a/Resources/Textures/Objects/Devices/encryption_keys.rsi/crypt_blue.png b/Resources/Textures/Objects/Devices/encryption_keys.rsi/crypt_blue.png index a1b463f7896d5d6b8c2fc4300c01a8871c3de454..45e0c9755e4f077515ab8cf0b41d4bb1d3c4715d 100644 GIT binary patch delta 271 zcmey#yq#%+Vf{x>7srr@*5m{U*2M`TJxz>kJt`~yp3fF)3P1SVINQT?vI%>{mw4qB zFI*Oic|O}T;Q<315VS2XU-xM0_80q)6)XyPZNITk;U;7M^0r6e6ZXzh`P@;)u-=p7 zaACIuo84pqHnTw2HCc6g_wk2w`|`6e3UB25QIp2|cw6zFBlVJ}&bhAHc*MHly2_LK z&+A{hto-}^v-DS42W^8_43jo1GBYb}<)6W9=ew^xbdG*_=Qpt4!`q6#Sv+Mqb2#%g zL-)UIp0oQ4PCCBeSI>OH5Mld4W7*uq+m>-``iswNlpNbC6VxLO_8b$)4b&00bPKu6{1-oD!MY&A?g#R1Xw^(G1KB7@?|x z<}6@>t5#URj9`OwespsD1Ee?$JR*x37)-B#Fk@WmQx2e@Os0!}2#^L^2nGT`QUi!V zGzhO=Skd?!NSAxMIEF-UCM8I)E><*OR^<2O8w$=de+VwRB%aY;A z;c6Nnz^|H&6im|F7ez>j`A!gPf3@pdeJR^5(zkXXF0P zzpnCR|AutUFrG=wD;Za+UW#}$wbzQllEuNXm;16R*FSmlU;Vt7Re2knl3s^YuaOY* zQkeDQit7@u84njIsI_E1V~F_1%xbS8av^hujjxPDibJoKG;iZY0f{O_U_6FKJS{!I Ryd7vYgQu&X%Q~loCIBPRh=~9I diff --git a/Resources/Textures/Objects/Devices/encryption_keys.rsi/crypt_gold.png b/Resources/Textures/Objects/Devices/encryption_keys.rsi/crypt_gold.png index 641a4c22153e4c61e72b9fd9e842a708bdca640e..53b97f4c783c567aae26c9f93716597ed2d440f5 100644 GIT binary patch delta 267 zcmey$yqRf&Vf|ZA7srr@*5m{U*2M`TJxz>kJt`~y%4h0yg&+L1dA+CUWE1v3^%tFQ zICKh4I+Ln+kdX%j{^!XY*8czBm7jUB%gOpAS;tMxGi0wloch1I!Q^vCnZuHe8qA0P zrt(ZYwumRvZ&JinpWEMM)``uM<6u%tlHKsze*iukfWe1rbQ ztd;K=q8bC)C(PlMln_{1dqC#H?REUCEnY8Fx@Dd4^X7G)ZJ(xZJSA)QdsZUnTG@u} zb~D%}Tl+|}%e;&|asUVtgpVBB@K#2@dHTh4ky-B#RtNP+gFVK?1_BIczB{~8>G)#B P00f?{el9HQoD!M<8Y&A?g#R1Xw^(G1KB7@?|x z<}6@>t5#URj9`OwespsD1Ee?$JR*x37)-B#Fk@WmQx2e@Os0!}2#^L^2nGT`QUi!V zGzc$VznJqRkk0pXaSVyzOiGYoU94yz#RMcmoE{XcyjP!OaP|-Lra%9?<^KHmU%x>) z^AX1c=6`Y=N*#`UEGw7pQm$eWJvhx>s{7yZc8CbG!?b_)c`Rl!;ZY7{DpzG0j0#?d zR4S1Y`z_h0bn|KX)o5r!Uo zOW2l7^GNOtH+#kKM1Xx6a)we zA2KOs(E0t>KJQEY>yY37UzqsJQ{z)GTHrRdx9va%2hU!hza6(MiwK!KWd_J0p00i_ I>zopr01_yI%K!iX diff --git a/Resources/Textures/Objects/Devices/encryption_keys.rsi/crypt_gray.png b/Resources/Textures/Objects/Devices/encryption_keys.rsi/crypt_gray.png index 47d410736e70e9c8254247ce1db5374f4db03e73..8f905fb9a88cd0f8feae32d63cf1a5317969637e 100644 GIT binary patch delta 259 zcmV+e0sQ{`1FQm&F@NSsL_t(oh3%C+3IZ_@MnA<;Td~{D0|+)US}h1R-oSte9>cwY zrC7}sEcOIb2*O@r*=`Fv4-gxF5Hy>hi_JU;3CYLs2q6O~ilY3PMnKjQkuxA7p*6z< zn7J}!j0vjS3J?GQ0#}mYFR8=SY&|zV^cV27HJJi~bgSB1BR2Hd7SE zBYS%fl{9??M5K{s9q+7fU2g#*vgh{FJNt8ix=?}Oe*k#C_P+`AhU>TcY&A?g#R1Xw^(G1KB7@?|x z<}6@>t5#URj9`OwespsD1Ee?$JR*x37)-B#Fk@WmQx2e@Os0!}2#^L^2nGT`QUi!V zGzhO>ChGbKNLPEhIEF-UCM8I)E><*l_1XCjee;m1>?;-Tv+^Wp!Fi}ljdv;SYbcrn7z zqc4q*;b+F{km^M;4yE^-c}z@9Sbq1-5MWrTdQA{$Im7?|FD;(U05bAH&PYyB5R#CR z`WL^W;31MJd`sAtO!G+Y3^#kl@I-)t)l|=Cx(0`4%pZB_W!_Q@%Vz!G=9mhy?U^FO zrUrp!k$NlEuKmk@=zqWT-}_cq<(k`0UOvKjB>hIL`_5pLiGxM2P#idTB)7}A-j(uaWmAH&mZq2c8 z4E~lhb^xS4ID}o&8d6tmB*8qA65-WnUm31G`^q40^^4&w2RjB0lOF}6U=)l3QUCxl XW>a1!R>=_n015yANkvXXu0mjf%#?U| literal 507 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}6{!)PX}-P; zT0k}j0}G=R11m@g5Zf_I!`W_(8Vt-}aV7?a_DlvAs2V>Y&A?g#R1Xw^(G1KB7@?|x z<}6@>t5#URj9`OwespsD1Ee?$JR*x37)-B#Fk@WmQx2e@Os0!}2#^L^2nGT`QUi!V zGzhP|C{$Vkq^mq#977^FlM*CY7b_Y_F#(AXr-YU2hwGCJ&i-NE^yhn*#Gi_2%Nr9- z3RzAt>fidxku*WsF>B?!j-ucWW(N~Ho+1^Gd1`z=>hEy8*?o8Cs{b1kBQ!1^VN{UM zotx!9g?Yuh>Ise8k|t;{{1lq~-Z5!|0K-bvYl1+#8UFuYSd}afWaNQdk({6)bfe4g zPyNMp-|K-c_zyHJ!q9_n3EPrs9?6~IX0I5Y2r#gk>iJC9;LwcuBQL$oTS~(`^+&#R zNSkQ$lMFc~1#XVSSx=cF_WZZc`%?cp_e T;_+|YAUAlr`njxgN@xNA=(CAd diff --git a/Resources/Textures/Objects/Devices/encryption_keys.rsi/crypt_red.png b/Resources/Textures/Objects/Devices/encryption_keys.rsi/crypt_red.png index d30341b1422ba957935c3067f3e8b2d494c241fc..14b22cf14a4163d8c3cc7a205a2f9da62e4bb9da 100644 GIT binary patch delta 245 zcmey&JdbIDVf_tH7srr@*5m{U*2M`TJxz>kJt`~y`ZF7Q7B|eCDe36C+;6VZ$rv#q znFAp3;pJuZJ)hFj(s+R4zx>xIdz2mMl{WuyDmx=%LW-OxpM~W|{^pPgDu*v^&);~; zott}diX}4;2yk!0o;8o-6&pRcy&3&Bu p!RS|ylemAKXICNE2Z3ORGBEi1m^;jnZDeNv0#8>zmvv4FO#qGaY}Wt) literal 499 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}6{!)PX}-P; zT0k}j0}G=R11m@g5Zf_I!`W_(8Vt-}aV7?a_DlvAs2V>Y&A?g#R1Xw^(G1KB7@?|x z<}6@>t5#URj9`OwespsD1Ee?$JR*x37)-B#Fk@WmQx2e@Os0!}2#^L^2nGT`QUi!V zGzc$sJFo_%xzN+aF(iUBDM5mDv7&(#6OagTatI3gWN)XVp}{e2`OJEUX|rd}e0cQU zy?a}VSxzuYNlCF7o|w4c!h$M~1|C++1Sx6hIG!M9WA;Dxd0*<~FEEDh+_^Dng3MVN z2ChqMgWq-*FefvK& zFK>;63VRT9koS^}N3^9&8HzX>nxw>+d5g5HG5^=kds&s&hxymNeXhLPY$q?;usDbb z95Ol0YGh>e-|@%)!o~lim)}ahU{E>BqTvUR^{OHh7B}aFj#dVSo#M(#P2qKmfL1ej My85}Sb4q9e09mksl>h($ diff --git a/Resources/Textures/Objects/Devices/encryption_keys.rsi/crypt_rusted.png b/Resources/Textures/Objects/Devices/encryption_keys.rsi/crypt_rusted.png index ce82c248db8d03f5ce27802e954258c56294475e..8223bcca8fa87d56495186ceba1cd934457725f1 100644 GIT binary patch delta 476 zcmV<20VDqW1cC&RFn^LR_hNiU@kouD=ljMo(4L2 zpXH9{9=<&91Mm01#l^+tKjV=a-iLY>pK8n#+%F^csd?mpp)J1^;@M3UPqn{Hp;; zJ9iFH>ITHO;Lp=(t*_KgD@f>ElidL)i^vKRIe%|xAHC3zfY9*fy-TCH$f|>u z94(@BI*n3_?)okOdJ132cY&A?g#R1Xw^(G1KB7@?|x z<}6@>t5#URj9`OwespsD1Ee?$JR*x37)-B#Fk@WmQx2e@Os0!}2#^L^2nGT`QUi!V zGzh<1u=vAYAid4g#W5s;GburWb+Mv>6cdmLaZ)fm@Yep!+O01G|7Uj>|G$3inv+2X zuZVLPbFjCmRN9X-r(XQuJvAkw zAh4*D*`e=-)m6Fu%seIs_!jJX@5m-4CDp{s&T79-fZ=4L6T^~e5$-^DGyMO*Wz{;6 zPd9^nker|(Bq1gBFMdbC!+L4v-v1XbUX0k-+shll>!CaGn9zEjXAI`Wp=+i!%eacO z^Tcputo##iu~1HiRl&WXhWqe>fX2?oD-v4Wmle1g+L|siTzE9$&`}MG&3PZ|1=uWC znAvvynszvd>qLRAsAq-74YsL&-H$nxPH^$)7HF_!a%q-f;>rr>XfQOA)^M8~)9?oD yxBR(T|K;bhS@tXoYA0_QT9`SVbb6Mw<&;$V2jLF&n diff --git a/Resources/Textures/Objects/Devices/encryption_keys.rsi/crypt_silver.png b/Resources/Textures/Objects/Devices/encryption_keys.rsi/crypt_silver.png index c31a743f473e0440a89cf06984930634deb7f86b..03e2960779226fb6ab002f96db054f4443615009 100644 GIT binary patch delta 273 zcmV+s0q*{Q1i1o`F@N((L_t(og=1hC1*2dTjDi6Mj3lW2@8cJQSHYG|>qs?|GzUC+ z@`Ruw85tRp%w-|L0SpWb3=FSdy}~R1>F3}F~ z@eBH|@4u92wN!Tit-z=QNG=B$7!av_z#PD#9Eer?$KCa`cfgiS>lkcY&A?g#R1Xw^(G1KB7@?|x z<}6@>t5#URj9`OwespsD1Ee?$JR*x37)-B#Fk@WmQx2e@Os0!}2#^L^2nGT`QUi!V zGzhP|C{$Vkq^mq#977^FlM*CY7b_Y_F#(AXr-YxMp8oGVX!4o=#3yzCc@K{MZ)8}~ zr`E?HS@Z9XWs}4ck69Lr_HJg++1Vd|p}q#lpAfaGo$17d|Hpd|v^Cds@E(@&6lQOz z*;2a7Hjr<@uJ?{?O--_5dv4V53pKYgc<65I1KQ2-|G$TDy$O&}401(sf`ZVGAFO}v z>)+k^|Lxqo|EH(xAMbK3QZQB6>LTU6XHy`%LOX-Tio(QQE{+}#AN{{!5POM1LnWvA z)P|%8jmC^e!QvCO65E=aW(X{s$(-=<-~SyK|E~>x`+xCegUVSJ4JR6;Le0Ql{NlvG XaH#5as#k1qA;=+~u6{1-oD!MNklgg2Ll0DPQRqor##>K zvfuNBh50oJ2ze@Bx|XrJ+uZu{v-6*om48-#DrN*~V>rSaV0QIc(uphmD>)wQ2@s#( zrhj7ipbPby|V%1H5Ls@F7jJhTL0%$P#_R^I?-8YS(fwqnTVq09TA;= zYb!7VKv5JfG5`Q|T^ln^0&`VW&Vtu8O#>p@!-WsD)ub8ya$ z{XYT=T5Bk!(D%KSfRqwi>qCK;)!!Wu1fC@@41-?*6SoQoA^ZxMc-9{9z67QU9G(RL z5XUj3lvbgPv2R-lfwpb02_#8^EX%CI_xx1>&NH?L9Mauszg3^5D`fP(nk>EmGb!+-mCsA93aq6z~aA3s)4 z5zGZFEUXk+{^!qc{N^*z35ZHaF&savhj~_BF-rihkc9pn3<-pRh+`Kg zFKI|v82k=~FW?t&aCFmXFuFN9IJ)TI*xbbAP9Q9pIJhwzh9*t!2Am+A_Q>%^8Q_`V zrS0$Gg`@>0CdSUJ?xE|tdG($#HY;k3vD&#^1#$pz9H);A0DnLb1ky~IK<;^7r?89D zdmP?g;p6fKcaP^~Jq$xI#@2Foe@-smI?FP|aSYCRV}ZqDjy=5M=y(oYe}iq?FbqRF z_Lo3`5CWWYBuUa(pbDiFLWqq5JDpbVfk|Lo0%@8KDKD8Pr?q!0ekfO$-KZCjUVpiPHfvaOdVViY;F=b$=s@wIsn~rw^#=ti@Mnp!vUby3al+?;HJ*N$*__E#%5r6&Oj+ZZVh2|05(Om h1S6*$7c)mncXHTiZgKqPPFo8G3F3^szB}fv6B>2M{#_Lfv6@0r6B=)IgLUixG%wVNn+4{?a;%{cN^A0BR&5aT3ah^uk~V!LeRgarAQfqB;UMZDTPlds zVo%qBskf=fE%5cV^2jVM$uFt|T7_bJaB3mQ_G9c|dw#GRfVAs##Db{F9Cje;21kT5 zLYIPq4cPjeOk|_LLJ+ec#@pzlTRXXq6C7CUIL$$(zJyRJT;Ont;?e^N_HdbksH0q_ z^$;5&cDbY$Cl_TFlw{`Tfh~oI2D!Kac|eP-fL7(EmL!6B_7w$*$=RtT3aNQ1wn{}x z_ICUWKV1W+fg(>A#}Etux0Ag28VopCGc$MopV<1zlr*<{an^LB{Ts53G~sw literal 15417 zcmeI3eQX=$9mg-FDQzm+wF+ujwaqoG1nBu*eYS6o+ca)TwmGDZOVa^q&v%cLQ*58> zyAa0{>zhEdTcv8_rA)Nd1}lR?1PFz725A@#o{b_FZ4tMP1X?8I8klkNr1$7W{7(ixco` zPOfvkNm27&xBnU*yk*{Eijtf4M4#0c`@XCi8K0sVN#HAFav&0TkWC}`-;e0Gp zFGy3%F}dM<+8LUrG9V2yAZwX0j;kA&8#FA#95kj$S$0pG7}g{fE9b5|-b|)$YSUVE zH$+fES~t>6jOG9n2c|KcSHY^g;jLU>@9r%b6$-<9 zl{@l4v5b7eFwzlsmi0^`^mKGMv&z%DPS0w_hU@aX_PkiXzaOA7}y>2(babKg`&R z7fMvdRhk>6_WIH(5d;JQ7FSG)L03AdY8)MsSXJ}~B+eh?zqE8J=oeJYmgXi$?FV#H z1)Rw7e2Q0+|5JKEhcnyd;amnqAPKxG(4xwRXi)%AFPTiyDhP&@0OTZvQuRgM)>`=0 zmBp3LUJwT}TKFn2DtGi% zsv=q>2?7Lf5?pvbh?n3(fZ$Dn3(p7f5?lxnyh(83`5<0`3ju;R2`)Sz#7l4?K=3BP zh3A8K2`&T(-Xys2d=M|eg#f{u1Q(tU;w88cAb6AD!t+7A1Q!AXZxUR1K8Tm#LV(~+ zf(y?F@e*7J5WGon;rSq5f(rqHHwi90AH+*=AwcjZ!G-68cnK~92;L;P@O%(2!G!?9 zn*p)HH{E*w9- z;NDjnqPNi(X1?G0@$MVu?1&FO*0A;P#-Fq=-oEqND!xCc+m! zoy)y;ZO{3?9;WnPuKvx8(f>SoI{3{q*ZpDZ{g*%g{hs@OyL9)5Z*4oibM^-ZZdVk2 zSK^5iKfCm=6Z3y?ZjAc(-`0-L+}XXO*mvf@?bls+=+<4cF8+y0ynFK>(|@_DW#0`K z7w-Pnr#G!z^GKfmnp2kzXrSA64+H&<_EK7Vi9 z+o2avY>r%+`QoyJ^m}K8%c{o~U|wqIV@(tCdM c+ZU-L!l_fAd^B;?ez~`6Rd;l3<;HFQ1yvsMg8%>k diff --git a/Resources/Textures/Structures/Machines/station_map.rsi/station_map_broken.png b/Resources/Textures/Structures/Machines/station_map.rsi/station_map_broken.png index 7297442f10813defdc0deaf445505decdb66008c..6228597a401255050e6cd7403deccba77ac7e0d2 100644 GIT binary patch delta 584 zcmV-O0=NCEe&Ga=B!2;OQb$4nuFf3k0006TNklb;z6n(8KRVor}T`(wz zV8{|SMo0%s%^kXC=pnLlhg9kUjEq@O#UY}KEFF`*+kVgA z{~H7U_+#9d9E1?oCed!U({gD$2_ek3?Kb(b*=)2TN*yx!`+wKD6>|D`ZxnH7nk2|S zmzS{*XL$cQ3lT*a1t{e4B?^|naAx%0*3ORsSaQdrU{yH&5srT>%rT>0KnZR}?rO=S z-~myvt`zxm0dcxGfNW=61Q3RA2*Wo)E=Xg&$Ret9KtdEe2oWg}04y-yPL7r4~Q;gxnaccr{a#awd3rG?ht79$`U`Y#Wppu*Bno*sE z!&&-|*kGZ`HGU(2KHjHqf|>=I!1NXXuJK7Gi)d4T=}}slguPy`WO>`RZ43qjVT=Bv zHK9^Kw?W%2S>8^P1pR(r*rLB^O{lDb{eG{t02J~hNlJd*936}~0JN6}rt|;DRp1-0 WBMgajKLF4G00006e7REJ?$|GZrHWcaIBJ`eVS-=Vs?Z{Sa#KyFzG z!v-8xJ}E253>b!CPkksBm&&CD&oI2?GqQrj0b|$~fW0xyIW`<%`I$i0bHFS5GYvQ1 zdDoy9g-pW~O95FB$N?2%Ze0)*)lDkq>t^x}!7$dPbA}n{zz1YjANE!HLrgf+5b?{v zYo(bm=p$X^nVE(xC7`~vpirM91%cjTwBkHzwdrjRqsd~knQa+*iZodWk|t;pr)b7Z zGG(nO9SO$88DBHozLvtv~;IZ~w*gu?}-rC$5IxYBWYl@I#|lVnIrWG10^`? z66o2W2v0V)GNF$$7Xi-2!P|J7;NfvVL$(%RW^tCYa=4AP({_rbS-_dvLnLw2B~-4c zlt69g6&WdkBJk_Zt??3woIwFL7y`-;n`vm@Vml74=&Fvb?Z{5eu)K15xp-v*1cH<3 z)EXaFhov*xLF}5&dqdF0y!#k66~M2yfks_LdUfw4Bzfc-HVCr3aBI1jy*=u+vl;3> zd6nFkM1{ohz%oTDw-F zQ@QGIi5LHEJ5SEb)u7 z3!X=jfg;TbR?0n6^Z+k{xAVYdwOD9)K%&j4MWGl5m8EVG9^fHmKcQiyhz+VpYFO5t zVS*xN7)@2ejdx@-jJCqtdialm==e*~WuNTW#qQ@td`9=vE8Gl1h`OlZQs;wcHCzY~by35m&Ii$IxDX)fqJ~SI52Dp@Awbkc4VO9}M62OK zfT)WaE_FVLR>Oq=Q5Q8_>UQHFszEiurJFoj9HCggQexa zdT#=T^*EpB&MFRH{OZ*+{)e+3UGVO;?6Qd$EAtP{$kF?@>F2I~{pLmYBSjm>J+iUM zb~EqL*UjJcNK0GdTVh@@wa45)ZhEc(Z`_uVAvc~LURIi(Uw_Gd!sGdu@Y(lm8{1B; zTbXf^TjhKC@dImm{ zg2Ujz;;-6R^V*-!o|WHt@YD?XaI0}rFHA4zumfu#mZkx!-m;z6yDkU z)EeD04VjOdPfazTd}xSD4VbfumeZyV4tudr`4Rdx#8U2hqrIv^N_Aj`FUN| zAI_BHdk$x(yKkoVZmM&pRzRu#t!r)Rd+S8YNwzw* z=R|VR_U+BJ&SgK_?H{@TV^4eu@Rr>3dPe0v3H%yyzYGK>4%|i&|&cd@3GmJYIN&9BZ zrZAYlFaPqw%L8ki-dnf77<~Nhj*8A}*rKf8 W=I^(!U9UXOo;QAy`_1g~dH(_XKN64t diff --git a/Resources/Textures/Structures/Machines/station_map.rsi/station_map_frame0.png b/Resources/Textures/Structures/Machines/station_map.rsi/station_map_frame0.png index 460c86b896a6a470270efa82d8a4f4c609bb0359..1b6241a5754a7771d06b4c2fd5d5e6f21d3cee56 100644 GIT binary patch delta 397 zcmV;80doGhd#3}CB!2;OQb$4nuFf3k0004DNklb!4|u^iV*dSYxAe_Wh9w|00BOD7!(^q2mk)3JD)z>F(%7h z5&)z-`^-u3-mCr(H{o5_tw5XsGiS5XxVHoxx$TH(em{<^i}CmtTow>Q_@A3_PsF1F zu0R!#Y96i2Q-9pvrIbAdP18U`vJN!IF{e#esfh>xZW+niwxzD?R`z5Cn3+VR=nKTm zGz`PWz7gP@n;)OLu1^K=-h-J@Rn^Mg_x;SrP{(rZ(K#y&nXz2Gicj|-g literal 15800 zcmeI3e{37&8ON`T4H^n6>NZB(iL2Xa1A4ySw(oG zzH#0~tkV8@t;F{8KJW8=-upc7kMkdQV0g#PSN5#!VHoDhp~3V{^vMSQmwyhud)4Yk z=woGZaF@q0SDgy}R~)+Ws&x!=(;Ien%pc3#svB-03QRW#qm@Dt^=6plmP!#AQ_yE~ zaKd)_A`377GQ!$sUu0Cx2$|vloU{k4B{)*uku|DQhGs^#qtqEm<-xeP?=mJsq<8B9p#f)Oo&KE=S99)GbZ$qNZuQAn}sKp&pz! z8)kzU?|}pbK*DwBHwr1c{oj`gIkG%|wn@XNM^A6;R~GsK9p% zGL2?Tak`YR4b3!on1==E_#TQAyT%nKUElR4-6c{s-Ag7$HOXX}xx0?HQ0SW4^SA9q z2DBs;&dnlo+ZZ)EA|p$fhP>BO@**RNp!9H zKnVihEoEIdp9*K$a04MbFi@LS>{mx^$8^iy^+_HNY1O->2GhWYDM^rIPEgTbR*dOr zN{Ygbf~X5Zn@HFb)5y4{ZOwFONK#f*bxG4zwOymFC$53kj|qIRES2`YZ91l*TW+ZU z{FGe)6Ob=D6G^_+*w(W-tMmak@0QT8U`kH%-I}{brCnn>nAZJ{0X z6-;!tHXM076>b}*YuKjVN(u!fZYoBOQ#4WLL=l=?0sxsaRcOj$TodA|n&gAUizHg( zs?Uvjdv|F|fpJ+z#Z_`jB9zVKXWi3=j98j8tjf}9B6R7KWerU((gMd7U?)ukKR zk#zS$2?;?pRYTyc1TgD`0+Pz*1R2I+8j!S{(n!=MwkXkUB^#Y=Am7#}xE2##ix@Xl zO^$0Euw=+VOR+djGej;2fTaOVfC2!G6kTK%r5dz@B{0)DBWp`w1m4xz+FAm&GpGnk z9t?KazDQ$>Z5~?Ttgg@P+D@$lBRIWMMz8@wGs$B^Zs%btrm8YJ zAn|5AV%V<0{8-vX2e=pPCo;-Zi@_aT19vSI*ygAQhNWt|@vd!#VJo_=N53fe=1+=6 z`($$$yO>{ES9CE|F)f+|141?_E;1j?OL1X9$R@=_=7V`DE({3Sq`1g@FfYZ00U?_d z7nu*{rMNI4WRv0|^TE6n7Y2lEQe0#{n3v+hfRIg!i_8b}Qd}4ivPp4~`Cwj(3j;zn zDK0V}%u8`$K*%P=MdpKfDJ~2M*`&D0d@wJ?g#jU(6c?Ef=B2nWAY_x`BJ;t#6c+}B zY*JigKA4x{!hn!Xii^w#^HN+G5VA>ek@;X=iVFimHYqMLAIwW}VL-?x#YN_Wc_}Uo z2-&2#$b2v_#f1SOn?zhat%r1>gPzPSqepP>``7w2=?7N3yKDmHC z-(#3*fnnYsXBhoahPlRl_|Dh1Gt3HeDBYi}yfZ&4K5{R+YW+WF?tT0BulBz5?C6un zFC72q-0J+s3qSey;lF=4m&?q4e0tMCFf4BW^EL}qHyx${WA-H z{nmzGt?<;$$e+IaCF9uUTYmh^XGgw$-Y)l?oB57^_PQ%>&pi0+yH5RdGqd_k#qf@Q=Jcva_0L!Q z?QZr9NA~bf`CqIS`d@$Kx|vt^9C}N=dwllYXATd)7=38X`5)epncwi;n^#`A;pAn^ YfP4Pz$Gp7{)rJ|`wj+IX>-hKn1L(9;e*gdg diff --git a/Resources/Textures/Structures/Machines/station_map.rsi/station_map_frame1.png b/Resources/Textures/Structures/Machines/station_map.rsi/station_map_frame1.png index 4b6fd1babf7739947ea84136e81474ec89f19d00..83dfe28b291ef58fff374c32de3c2afbc0167e99 100644 GIT binary patch delta 618 zcmV-w0+s#ffB}L9kR*Qrb5ch_0Itp)=>Px%JV``BR9J=Wm$7TxKorJ*3d+#U9?o5A z@D+?fL!m{*#S|ha8A8Yu3Wjd^YdUo3Ur?N(kfl@T$(7%@B3;2jYcCPpB-8naeuz=Cph)ILvwP^^P&Us&l0z*)})l7>$>E<=$cA-ngl=y zk-LA=9+mP@T0k7tuC5HqNqa=|>Qz~HiwUT9^>BP}n|qULR}U*c>I;*X7VsxgD4^)} z%OW=mU>d;{>Y0BG!XVM-auEd?Sr365B)MwgeS0zH{wo6JBL2@xm=!##yv|xHDoVLoV45bb>*jwtP&rPosk*DIjtJmhE!q2{ zqiB3_bHi|JE1J8mi)C3_uh%OUFe^3-HKlt&pe#H>2o1n-oP_<(C-6KEDJ1}gVc@j- z=ug*pdHfE5H-iDK^>y|;9h_F5*B6@roB$#S5JFI^)e=5!+Xk{@MA??de{`;QhdlfC zA{u}G_=I9l&1T~4_3khl&-ccNGuv`yDUJ*9fBr%UF}?NiCi@-O84Nht*Z{z3_1QlE z5bgi|_AA@t>3seISx~(Iz)Jp{SeB*PwoTRxJmSIe8<)E9y(&-bD*ylh07*qoM6N<$ Ef`-d0O#lD@ literal 16488 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 M07*qoM6N<$f;PaB9RL6T literal 16277 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 From 0aa46f6a2a22ae2e37b66b8fd82432b47e5c1c27 Mon Sep 17 00:00:00 2001 From: Alzore <140123969+Blackern5000@users.noreply.github.com> Date: Wed, 30 Oct 2024 02:38:19 -0500 Subject: [PATCH 04/97] Give proto-kinetic crushers, glaives, and daggers better inhands. Update the crusher and glaive icons. (#32212) * inhands * better inhands * indent --- .../Entities/Objects/Weapons/Melee/mining.yml | 4 +++ .../Melee/crusher-inhands.rsi/inhand-left.png | Bin 0 -> 596 bytes .../crusher-inhands.rsi/inhand-right.png | Bin 0 -> 598 bytes .../Melee/crusher-inhands.rsi/meta.json | 27 ++++++++++++++++++ .../wielded-inhand-left.png | Bin 0 -> 599 bytes .../wielded-inhand-right.png | Bin 0 -> 601 bytes .../Weapons/Melee/crusher.rsi/icon.png | Bin 716 -> 431 bytes .../Weapons/Melee/crusher.rsi/inhand-left.png | Bin 655 -> 0 bytes .../Melee/crusher.rsi/inhand-right.png | Bin 637 -> 0 bytes .../Weapons/Melee/crusher.rsi/meta.json | 20 ++----------- .../Melee/crusher.rsi/wielded-inhand-left.png | Bin 823 -> 0 bytes .../crusher.rsi/wielded-inhand-right.png | Bin 851 -> 0 bytes .../Melee/crusher_dagger.rsi/inhand-left.png | Bin 503 -> 362 bytes .../Melee/crusher_dagger.rsi/inhand-right.png | Bin 495 -> 361 bytes .../Melee/crusher_dagger.rsi/meta.json | 4 +-- .../inhand-left.png | Bin 0 -> 611 bytes .../inhand-right.png | Bin 0 -> 620 bytes .../crusher_glaive-inhands.rsi/meta.json | 27 ++++++++++++++++++ .../wielded-inhand-left.png | Bin 0 -> 536 bytes .../wielded-inhand-right.png | Bin 0 -> 535 bytes .../Weapons/Melee/crusher_glaive.rsi/icon.png | Bin 618 -> 405 bytes .../Melee/crusher_glaive.rsi/inhand-left.png | Bin 576 -> 0 bytes .../Melee/crusher_glaive.rsi/inhand-right.png | Bin 568 -> 0 bytes .../Melee/crusher_glaive.rsi/meta.json | 20 ++----------- .../wielded-inhand-left.png | Bin 567 -> 0 bytes .../wielded-inhand-right.png | Bin 520 -> 0 bytes 26 files changed, 64 insertions(+), 38 deletions(-) create mode 100644 Resources/Textures/Objects/Weapons/Melee/crusher-inhands.rsi/inhand-left.png create mode 100644 Resources/Textures/Objects/Weapons/Melee/crusher-inhands.rsi/inhand-right.png create mode 100644 Resources/Textures/Objects/Weapons/Melee/crusher-inhands.rsi/meta.json create mode 100644 Resources/Textures/Objects/Weapons/Melee/crusher-inhands.rsi/wielded-inhand-left.png create mode 100644 Resources/Textures/Objects/Weapons/Melee/crusher-inhands.rsi/wielded-inhand-right.png delete mode 100644 Resources/Textures/Objects/Weapons/Melee/crusher.rsi/inhand-left.png delete mode 100644 Resources/Textures/Objects/Weapons/Melee/crusher.rsi/inhand-right.png delete mode 100644 Resources/Textures/Objects/Weapons/Melee/crusher.rsi/wielded-inhand-left.png delete mode 100644 Resources/Textures/Objects/Weapons/Melee/crusher.rsi/wielded-inhand-right.png create mode 100644 Resources/Textures/Objects/Weapons/Melee/crusher_glaive-inhands.rsi/inhand-left.png create mode 100644 Resources/Textures/Objects/Weapons/Melee/crusher_glaive-inhands.rsi/inhand-right.png create mode 100644 Resources/Textures/Objects/Weapons/Melee/crusher_glaive-inhands.rsi/meta.json create mode 100644 Resources/Textures/Objects/Weapons/Melee/crusher_glaive-inhands.rsi/wielded-inhand-left.png create mode 100644 Resources/Textures/Objects/Weapons/Melee/crusher_glaive-inhands.rsi/wielded-inhand-right.png delete mode 100644 Resources/Textures/Objects/Weapons/Melee/crusher_glaive.rsi/inhand-left.png delete mode 100644 Resources/Textures/Objects/Weapons/Melee/crusher_glaive.rsi/inhand-right.png delete mode 100644 Resources/Textures/Objects/Weapons/Melee/crusher_glaive.rsi/wielded-inhand-left.png delete mode 100644 Resources/Textures/Objects/Weapons/Melee/crusher_glaive.rsi/wielded-inhand-right.png diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/mining.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/mining.yml index 337c7f07f7..5b565127a2 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/mining.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/mining.yml @@ -149,6 +149,7 @@ - type: GunRequiresWield - type: Item size: Ginormous + sprite: Objects/Weapons/Melee/crusher-inhands.rsi - type: DisarmMalus - type: Prying @@ -191,3 +192,6 @@ - type: Tag tags: - Pickaxe + - type: Item + size: Ginormous + sprite: Objects/Weapons/Melee/crusher_glaive-inhands.rsi diff --git a/Resources/Textures/Objects/Weapons/Melee/crusher-inhands.rsi/inhand-left.png b/Resources/Textures/Objects/Weapons/Melee/crusher-inhands.rsi/inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..1c1093a702e40a1a8086be972805dcb8ac611d63 GIT binary patch literal 596 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H3?#oinD`S&F%}28J29*~C-V}>VM%xNb!1@J z*w6hZkrl|-3h)VWRaI5Bx3@1XWe5!oHINawdGltj=zqrl_jTDAW*Qr>U%!4wziol9 zDp0xZ6VVJH#a9yK7yKU?Ft{GLa{?&CS>O>_3{-Fggc+x5^GO38Fw@h;F{C2y?X81F zhYWaF0yGUDO!)P`emmFIgYCznmQLV1{BG&Dgg4?sJ4%-RE#^>YU|@m~4cnPIwwe8` z(Eqk;nV#0hh>~lXQTmhDdc{ut&#DyFrMv&fm+d#QgHEkxSR0e?TEY>axjp-%wX0Rt8R2L?tc@!@5| bwSA0zXH3)Ixu}-|V~)Yo)z4*}Q$iB}1E=jS literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Weapons/Melee/crusher-inhands.rsi/inhand-right.png b/Resources/Textures/Objects/Weapons/Melee/crusher-inhands.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..75934554bfae3c552bf228829cc2f6e6018c4ef8 GIT binary patch literal 598 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H3?#oinD`S&F%}28J29*~C-V}>VM%xNb!1@J z*w6hZkrl|-3h)VWEiGlRx3^bSRSgXdy?OJdfs6p-|NFV3|JScyKhxM)myMyoS9M3f zEl_!McA5u};wuUA3;vG`7+eqBIRTX6Ebxdd1}ZoL!i-b3`J{mknC@@dvo=`7-K!|`<3H+ zAXe{S@=5ReI{Z6X%B44OR#>_!gjUx76H;JWw8dQi@1!iRx1au4JM8gz^yt6yf~S$Y z&hTw$JsG<|bPe+*=fjZ;rUo-id|p#fX3~(o?^;bjCu79Z{fAYzNcEdBAK2V~VBg#| z-UsZyFN}Sr`n^FE;bctKgLsBjwe`xIw(oy^J#fdp@8(7(%@tz4{ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Weapons/Melee/crusher-inhands.rsi/meta.json b/Resources/Textures/Objects/Weapons/Melee/crusher-inhands.rsi/meta.json new file mode 100644 index 0000000000..c634ba82a3 --- /dev/null +++ b/Resources/Textures/Objects/Weapons/Melee/crusher-inhands.rsi/meta.json @@ -0,0 +1,27 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "by alzore_ (discord) based on the proto-kinetic crusher", + "size": { + "x": 64, + "y": 64 + }, + "states": [ + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "wielded-inhand-left", + "directions": 4 + }, + { + "name": "wielded-inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Objects/Weapons/Melee/crusher-inhands.rsi/wielded-inhand-left.png b/Resources/Textures/Objects/Weapons/Melee/crusher-inhands.rsi/wielded-inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..e8e9a267ff2eb9b55ab0083fedda98514671c026 GIT binary patch literal 599 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H3?#oinD`S&F%}28J29*~C-V}>VM%xNb!1@J z*w6hZkrl`{3-AeXwYRrdQ&S5K4OLZDHINY~D`O}vWnlb&KUeg>E*ry4W8tQ$9O ztY5$W=FOWs`fUq*Re@U7EZ4sUQbHv`e!>6I0mGyH`-OnAoCO|{#S9F5M?jcysy3fA z&_O+(E{-7;ac^&(oYt%$;u@%QM9nPp-~aPsGtwtB=xIcrd~!!n(dI^zap33aAdjE` z4u&hfQcH`uZP(skuC;V&q}i==I%l1o7?PJnnjKrh@UAp>*0mD7s@^~4nsaAwTlfA` zad-NqTU&Z7Z>y^DGWKreW)MDNyaQ)msJG=smIc6;3ej<$=- zzWnk_c)VV|id{`QbDB@eErti18ByGf#(BU}aCTahto-s-bNaWw_grVk7_-Z5LX0fy zmD0=W$~l&3D_3tVaS^`Hc-QQ-EK_;?1NE;i+jFkIJ04m3XaB#Qou~Q!r0wV5wyXNu ztvR9d-yHZ@UH|Ua%d3G0mQ20$|6j-4I9c|d@I1jK;m7+Ec9nE1?6l&WvHq@-$67na g8Z{)h)JPhfuNRXtcKKl&6ao_WboFyt=akR{0DdU&umAu6 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Weapons/Melee/crusher-inhands.rsi/wielded-inhand-right.png b/Resources/Textures/Objects/Weapons/Melee/crusher-inhands.rsi/wielded-inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..4ef9c388d62a58017b13116d133dc50fddcd07b8 GIT binary patch literal 601 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H3?#oinD`S&F%}28J29*~C-V}>VM%xNb!1@J z*w6hZkrl`{3-AeXRZ~;5x3^bSRSgXdHINa|Wn;({{m=OSerYK~SsBAjW8teZD) zu3x|Y#*G_0`fUq*Re@SBJviJAq=ZU>{DS|Z1BOTY_X`1KISV`@iy0XBj({-ZRBb+K zpo986T^vIy;@;jmTXe{Phb3W+MyDd@mG}QQ-8eR7%h6A}cn+t2cS>6Far*q|5)OGj zMiv1F1{C4~v&D|0gyW^LA?_P@FbW>g(rovzVpyf%uvJEBBSX>o8H+BjxhH?Reyhx0 z|JG#7+~<}KpO)^LlPGa4xaZttuiwwQmK+MUtX}dhW**a{%jfL3?^rX@wbW5AZ|R0_ zX(8_p?AtNt1k>Ai?KO98KB&f+7q0T#RvfwFX^no&X(w$31eRO`$)!e&{ z?9%gOZ?L{;i#rrLXL29^CHv&^Bp{Tp{V9{BBq f9F+2GEd{Ln(nh=Ut=>%nMi+yptDnm{r-UW|*iG%| literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Weapons/Melee/crusher.rsi/icon.png b/Resources/Textures/Objects/Weapons/Melee/crusher.rsi/icon.png index d9b6ca8157b74b5484b09fb1baecec7238373cd2..1df2bf438850dfc03a279ea0ce8dc98c3f672207 100644 GIT binary patch delta 396 zcmX@Zx}JH0WIZzj1B1(wu46!ou{g-xiDBJ2nU_EgOS+@4BLl<6e(pbstU$hHfKQ04 zs;a8Jy?uJRNoZ(jX(>ZiR@Tj%Hw|P2az+2|=(kKKNMNS1 zae=QYQ1@vY88#p#ToU9L{2v)`fjJDDYVUANR1~jgc;M;c7-Hc+chXzFCIcSVX!R)z z!*2ezU$b4dTVC7v^RB>r}xHnqnbOpT%4Y2-v$iL~h=KUjbXc zbGJ8rt^c5Zu>7~7@0|QS!h7VkeP3_+%-^_2{`2RMe|iZgj`2pOJg!Y3}>% z$FaBMmTr9TKk!I-ho%L0Rf=xw`Tc!U|J&yLpwo5&Z8A*DZ64??VQg;@l&f99 i%Jcubf^&qIrhm_UE4e`K>l1;&!QkoY=d#Wzp$Pz#hOkQj delta 703 zcmV;w0zmz*1Iz`G8Gi-<0047(dh`GQ010qNS#tmY4#WTe4#WYKD-Ig~00MqVL_t(| zoW+;FOB-Pr$Dcr|OpdWg37%T$jy;A;B;$8+FA2>AHr8NGWu;R@Ka zw{=9NlXETn&40}M-UTenir_Gy3urswFJBOCt?baZjamAU|AV(VEFr^@Kso>kd@uh?T$t2?<24oZ)DHCX)$f1^_RWN&=2;EICNDs+{4= zALhCfkgHeW2rs$2;1KOtzz}c zg$zb?aDU$de&HNQ;76?)qFy z0d?9Tp$?r+f;x;=fNv)G9?uWF+h_%*;^bb}hiSdo*bWP>7065*4&Z~vGqSP;aV`%F z-XtKyuWzM7h2IiT;kcT0GgMs(;D^ND0Sw$}UpV2O0B5~8OxFHE-{4IGSZ?BMc4GF6 leF zuUPAy97`kTtg-ka8sz`M%R{yP%-)Fw=lETGOzym&E}ehK(mkP%gQ3`kVTLl(0U1Gt zXB`X%?ko+KN(^TN8Ljw&bj0S)HZu6blym!>qO*#SfdtPSx5W?H>|*Pfp9)o(8M!`^ zypXkZ&dr>*XUApMr)P7XxWaOwm@{G;>*~9%OFwhpQ3_TO3s`^s?)Q%sJw{C`i#WxM zsMW^%wfA^#xyQ*iccHIF_=Oiw??~>|zgWGw*uUKM`L9aVRiB zbl$eydv~opx9a)^)r;K_{UmTu^pgP#N@!pP)bS36%YT`y`tw~Fc>8{_wrT8~Um9BK z^F>)g(4jfI?p$GErPEg@cBzYZ`x9IomKOK7m(7!6_mPRqwr>(-yrP~E`7`%qjC$f< zjzUAFhI11-Kg2ct5)4}{y6Bszgx~}I^{Y2zE|OQA#t^!nKdS1FYSG=$*tvf>Tv8bC z{i?mvcu2tNm!QZ(rbXA@|84eeuKgwW=RUV+!HZwDLS)z4*}Q$iB}St=AX diff --git a/Resources/Textures/Objects/Weapons/Melee/crusher.rsi/inhand-right.png b/Resources/Textures/Objects/Weapons/Melee/crusher.rsi/inhand-right.png deleted file mode 100644 index dcf606531ba187e61220fa6fa327c4490e1d29fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 637 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fA0|S%3 zr;B4q#hkaZ_GcXm5IJUlP`zNnq}YjG2UkXCYjU)1b3SI*7@}G7<{Ep!ipdw27icso zOxaadB0YY8H!<`6Cg{cKsEk9*)uRpzT62FwmOrJ2bZ|(QLn;-aD^DZuHYt(`kRmLq7%}?w< zbJ2QVRek*7)!LIM9lTpUx5b|E-o)#z;f80w=vGf@w>$j8ul>*8(v$lv><`4|%SqYk z9&G;h*?jtMFA2N3Hx6HC-K8I<=O6xsrS`lZym}Cp|ZET;-V~XTo_vpMh2K z3^)TKM_1wHyv8N3^K}(g&STulch!Aq&$`wdH=`UT*)p#UJ3Y^DdB(o8A8OusIQ-dv z52)(pJjP${yKcR+_*}yr{_%Rh%7gvYY!eH1GyQjZ<5a+ zP%CEr%Fxn#k;|j_e8W0+g`NY!3uZr>*QoJZ59*&k3=L8i5*n{>UI(Tp22WQ%mvv4F FO#mFS8wLOX diff --git a/Resources/Textures/Objects/Weapons/Melee/crusher.rsi/meta.json b/Resources/Textures/Objects/Weapons/Melee/crusher.rsi/meta.json index 2d91fb460b..8a70dbd998 100644 --- a/Resources/Textures/Objects/Weapons/Melee/crusher.rsi/meta.json +++ b/Resources/Textures/Objects/Weapons/Melee/crusher.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "https://github.com/Citadel-Station-13/Citadel-Station-13-RP/blob/817e7c1f225876b45891e3f06908e6d032f0a8bc/icons/obj/mining.dmi", + "copyright": "https://github.com/Citadel-Station-13/Citadel-Station-13-RP/blob/817e7c1f225876b45891e3f06908e6d032f0a8bc/icons/obj/mining.dmi and modified by alzore_ (discord)", "size": { "x": 32, "y": 32 @@ -21,22 +21,6 @@ 0.3 ] ] - }, - { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", - "directions": 4 - }, - { - "name": "wielded-inhand-left", - "directions": 4 - }, - { - "name": "wielded-inhand-right", - "directions": 4 } ] -} \ No newline at end of file +} diff --git a/Resources/Textures/Objects/Weapons/Melee/crusher.rsi/wielded-inhand-left.png b/Resources/Textures/Objects/Weapons/Melee/crusher.rsi/wielded-inhand-left.png deleted file mode 100644 index 6b55e43f72e5bc32ecda58186c6fc39ada252bcc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 823 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fA0|V1b zPZ!6KiaBp*9qbkglsUfNDWK$Ln1_p%M7Ln)8qwX`gT#7TGY&RS`OUs%EvuyW1>J9A z5>Grc^jYUxRjydesyK?8%WK+zHjlq zpNG>;_3K_Rc+1(J=V zY|b#}-s<#Ms0Bx$B8T{aUjAMer8jQ^6aGGapEpUoL+Wtc znU#3%&)enie!E<+6v^S1_;#j2&YJgP-~;PlX{9gr6n?VW$N8hRU`dl)?~&%696Nuq zyJRlea3Rj7BH)B#KwuN2XI_)XVpXNc7CEn|Ac2ohT#waCr&-U=n|-$|ywh0z#+yGk z=9<5^HlCe&zeUl~i@~E$h+)!VmWC%9j0)&nGe)6wzfC)D2B+=%PZ@hjGW}&*8@n ziZ-sfnRCl!wQg+UQFZCxQ|x)9HqPGJy<^XZPdAu9 zq}E9B=LM`{&Jxy^*G%qA;BuI`aph+n(?ElKso7fJ-`~r+CH1;&_qNT!cNMmlTPqau zO0To_4c=O~p3OeuzvSEb{%06fyAf5e#%^RAvrpIa%dzNK})dqMc&bZtBPw+&g{*GCU&2t6kUvMlE*&R21 z?rT*8ofbI}$J<~3sQp;)^uqCG==wtwWKNS%G}%0G|-o z^mLP(H*cz{s)mM!W@TmV=(jEKRkgRb2g)n2bz2FfI7@>3g8xGSL$H5^&_qS?dWOTE zE{-7)?r*1^=4(~panaoO>wmn?RV9vKp`^Sbaa-xE6EX!yS^jl!$0+Q0u)XO($yyVe zqxZNA0}l$dAD3A2XH`>a%7!wpe`YUkBy+C%lX_w0ae}0f zJ&=CzC-;J3Gi#c>Lf2X2epcp3>zbKZ|2~fMs9wL{p(${mHrM6-7alQ*8yL@DrBFMs UYqR46pf?#jUHx3vIVCg!0Ey3o(*OVf delta 488 zcmaFG^qqNvWIY=L1H-D!!h1l9v%n*=n1O-s2naJy)#j6CU|?M7>EaktG3V_qdoSid zf#V;kwT0MT#u!3m)?SwPSM%V37Ow|KfdK@9V2py?VP@fy>FDVcWx`gqSD zbqZjAVPqrD>?pe6{D&A}MVBlFe*ewCo@aO2oVVsbZ^*RQH)}cDhPd2@m&?9?i1}Rh z`KYh$?D)rTQ+4bA=_~R%l$U+|XT4DVWO4Zdu1;nT{&l5l&*j?^Y}gw<$}k)&W{^0~ zh|b~oc|2+Tq1#-$q@PUvG2wRBLDsvxe7>KpS=6^mzbTq#a_Hn+w%eCtX02lMu=_Mc ztck1P%ZE8^O%@Eft^4htv_D@Wc!V*db7!KCU1;0$SsW~OY1wNw$<)^EmHxWzx~kib z`aQCxeW$V;j>+v`tNZ1}*^iO+VmI2Ky;u8U`FIWEH|b9~J2V;;;o%4h)W3{x_r1F( U@P}zHFftiDUHx3vIVCg!0EK1OLI3~& diff --git a/Resources/Textures/Objects/Weapons/Melee/crusher_dagger.rsi/inhand-right.png b/Resources/Textures/Objects/Weapons/Melee/crusher_dagger.rsi/inhand-right.png index cce061bab2933eef43d0399aa85e5c6a4a3fe57d..ae6e01f4a50fd3ab86113959a90076dd0f11a240 100644 GIT binary patch delta 325 zcmaFQ{E}&cWFj*I1H;_yjcNS%G}%0G|-o zn>TN!r<;U^hN`NnW@TmV=(jEKRkgRb2g+~UdUPF-;w%aB3;quU48i^tLK79m>lqGt zx;TbJxWAotTB=2X!_9E_hkyPyD}Gq6m~u-e?chz9Q}t^^nf4uFQRA5Lz?{k9xPI}D ziYkGex}y*NOk@4s)%eMp`x?)j{-z9$^O6?xSvVf_NAxgjo@Dy9XmYpWKEKmV-7+zD z&dUSqmAErfodQ0&Zs_9l5in@vWK#PP>=-%gx6og{i{C!onf{`@W10E++Ri%W71h6g zN;}_O^JHy`=KLT!h*-T9r|oTjDj*k_w7_kQ(NF9~jao_Q=!7jN#Kyi9AO z)|2+or`D&QZ`b=0QIYsXBgab6#cluI5S2eNYWG>M3B=8?_S?&Y=}sg^H?#`w5_{-- zpuV|9?|QZ1h4uSye-U(QDrRi|`h91M-dRi058;YMT8gR`!Vk3eC{AHfXNqYzZ<&yw zdmy~RIligiYwJ`7$qWCE##b~?EGR90wVM%xNb!1@J z*w6hZkrl|-4e$wZy?OIyX(>ZiR+hcJy{f9JfsDZV_3Lv*|1UP)GBJwBn_&*9@xN>L4LZB39fk$L90|Va?5N4dJ%_j|X#1c;z$B>G+ zx3|vb9aa!vNsykV@=x>q{~brQ+TSXk?g?GqWmL==#!z3jBX!xY^MVcxj4T2WqM@9{ zCcfxd<_*(gUq*$k?@vx>uzV^oL0J0%L-8iY0}+hO8_NDq%42*m%}Y39e~S~tnkhg2 z#a>wU)mz2lz^T86JO1}SC`@PJS@70o$A3kOInx=YZJm;7Q#;Ema(W#j3!BdCCcEid zch*|)ac$TWA`vkCPW$5qhSN7W8vdFd*p|~aUnfoP2b)=qyU_>5C7bKNI?Aw2_-?l# zsO*ITLqpA{zuTKHy9Y8b6fUY`kE*yU$)Mc8z{H_|oyccD@Jx7jP{RhB2hJj#5)LtP z9~8S-SP}xjv_V1ynATv>;Q#T!m8rmeh0OzIan1yWAh{2Y-7F90B~%_@*AYsXE%cO8 zeu)PITUo4 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Weapons/Melee/crusher_glaive-inhands.rsi/inhand-right.png b/Resources/Textures/Objects/Weapons/Melee/crusher_glaive-inhands.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..6949718a597117c697fe0311b2475cd2fa75e5f9 GIT binary patch literal 620 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H3?#oinD`S&F%}28J29*~C-V}>VM%xNb!1@J z*w6hZkrl|-4e$wZy?OIyR#sMNDTBSey{f9}`t|D#WCR%h-_I5OKhxM)myIDbG_=51 zbw|G~P)A$j^7lZBza+>n_&*9@xN>L4LZB39fk$L90|Va?5N4dJ%_j|X#9B`m$B>G+ zx3^9g9ai9B4M-N5bi?%j|D6+q&G;rYu-z%Cdha!}@W{txb>ENEL9T~``K%W1#Wqhl z3JU$6t~hgXCd2z=CMJP#>HNLUHFX8z%pY_)5_=Nz=gj@jRKc}w zyCM_U_UyWU+6}C~OOqLD(r^BhRPYPt_^$f*#muL2ho;C*XSUeFBT(S~ac5V3TN55b3?N`pb^-D|H7Ya={|99(_cM4ZZ zMW6kPiYgb#+SOHDue;WoLp1j3&i%8F$+i?lr@mXiJePeTo5H!jy(VuJrbufS*K6xq za~wT)>(2fOuVh<<8n*1LSG;P?!Fr&0;)8UCf7z?f-e8E@YxZ3~^}eIW(wT>ZE3$hR z9@mzT=YG(;w>i&{;qG;hBN7dMubEqGzL*zyAv^WKe&(ba24AI;*2fFyDu84>UHx3v IIVCg!00hGL3IG5A literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Weapons/Melee/crusher_glaive-inhands.rsi/meta.json b/Resources/Textures/Objects/Weapons/Melee/crusher_glaive-inhands.rsi/meta.json new file mode 100644 index 0000000000..c6fb3d12d8 --- /dev/null +++ b/Resources/Textures/Objects/Weapons/Melee/crusher_glaive-inhands.rsi/meta.json @@ -0,0 +1,27 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "by alzore_ (discord) based on the proto-kinetic crusher glaive", + "size": { + "x": 64, + "y": 64 + }, + "states": [ + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "wielded-inhand-left", + "directions": 4 + }, + { + "name": "wielded-inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Objects/Weapons/Melee/crusher_glaive-inhands.rsi/wielded-inhand-left.png b/Resources/Textures/Objects/Weapons/Melee/crusher_glaive-inhands.rsi/wielded-inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..330b936fb254e39bad9b220d6dd9c291e9aecaca GIT binary patch literal 536 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H3?#oinD`S&F%}28J29*~C-V}>VM%xNb!1@J z*w6hZkrl|-3h)VWRaI3jEoCr}5n%j(KUeg>E*rzmn>W|5UvF=3KhxMaG&FQaziol9 zDp2{&g6ai8imxQdFZe$)U~oNf=LArOv%n*=7^vU~2s2LA=930GAlB2xF{C2y?X9zA z%?bi-4+VLZ)_$+wotkhdOUfeXt*6-g?VdkoKJ3(MUZc+kGz0}aux0!tzsBqG-!~JK z&&BFrShjSpZ-ktmP_MLlx%WxtUfp?Jv)#V0xmot+xuu2gt=&4Ob&p9Dl^A|8P?`Q_ z(S9%CXE$$$oLjfnpT+mqbT=U|LWJSHn(-I z-ER9Ha%uM zE?-DeeYbOhvF*=w+X_v$^449;W;s1+y}%mz{qLDgHm|&v=p7jQxvE#8_L=$zN$dGe zEBDzqUc1`-Yts4a965V0KCI*mH@Eiwe{ib&=s#s3bzDt3<%K(=|0#D;b8_p?l2 Tq-;pM2a@n~^>bP0l+XkK8o$z0 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Weapons/Melee/crusher_glaive-inhands.rsi/wielded-inhand-right.png b/Resources/Textures/Objects/Weapons/Melee/crusher_glaive-inhands.rsi/wielded-inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..2d1a481266dd20b91a96205758635bf8bde856e9 GIT binary patch literal 535 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H3?#oinD`S&F%}28J29*~C-V}>VM%xNb!1@J z*w6hZkrl|-3h)VWRaI3rkP#>?Wzc0~$QAw1`2W7Wy?tnC=uBhd_3PK)ym@m+ziol9 zDp2`B(*+qoimxQdFZe$)U~oNf=LArOv%n*=7^vU~2s2LA=930GAjZ?hF{C2y?X8PN zO$Gw34}Du%GAjRH&n@d*>gTy>h3xT}|6^8k?mn#^Clnbk12hE%9FS&w67Thwfz#1W zC-t#LbmO#Xy>(Gji_WU5^CWL@{rSlvOz@cElv4ZSpH*IEZ&@-$@3P6u5Z^h^k7oT# zoB2G$^k&qyZ%4ZR6htR&+OB)ir1D)(WY+cbO+FW%+}gBRJ(OkY-TSvw6;F#rUkS?M zTXyZ=?o;1#x7-ZZeRJX-R0`bOnj@#7F6XdnDk>MyTGoyya&p<9P1CSN@w?ri@!Ae zZsVVgH}CFc{=lvituRc8-OqSsx|s=! Rxzl-&jHj!g%Q~loCIDCo)Z_pF literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Weapons/Melee/crusher_glaive.rsi/icon.png b/Resources/Textures/Objects/Weapons/Melee/crusher_glaive.rsi/icon.png index 980af14aa86c025fc1be958d55d6902884cca2ab..e22b636f3da9e25706672b73b822daca1573690b 100644 GIT binary patch delta 370 zcmaFGGL?CPWIZzj1B1(wu46!ou{g-xiDBJ2nU_EgOS+@4BLl<6e(pbstU$hHfKQ0) z&6_vV(@pH{?bokgUs}qbs;Zimm1Q6!5E>eqEBb#&zb(VOt&IQgAKwz8%f>KKNMNS1 zae=QYQ1_BG9ic!0&^HP)!yNls3=~~aLm)iF~q{Zc7nH9vjPu;=xntG z%clO8-}W%rF?mL>{<($|BJ3)eY{fl!g4wK}x$iAjsFYy2xmZ>tzm{picPj>`H+#5_ z{BAh=n&I!Rw`c8H5~FK>Hui8al=q*08G7K&lL^7qwcIo8c>>zcm?r!)ivMHk@!Ikh zwoa#KLi+Rb)^D);+bu?uAJa- z5orN}MY@#I<14%_AhMAkfPP-|4gN@gUN`!4 qflJLV{)0f{wDVO!(=^{&-kATOhZR63qbJA!0000O*Na%yE`C^QR2~SwcEO%BNIOqM^1B{ct9&bqU~?)#)yjc zjSqLPYnIr+RiJk0?~@7-rhR!!kIr&gJclPy!p7}Ke#Gs1yR-_GTQ?s_WZ4T{%m1GC z_b0D~kszSo5;iszrfRoV4GY_9^-p+H6j z8BqpIYK{ieieDTSzXWfvCS09SRXZg#BaHFN!@FODJQIW)rXMVfylxtKcEVzj^GXc$ zcZznZ@a8XE=d_vQ0at#Z>Khi8wcV}^=@s2mH_Ya4x^`GeA#6Uw(eE!B1vs8RVtF8^ zalZIN?wT2@2d=#j&S?0Qd*XxGgKO{4OGdYSf9qwb@!-nW-^o8#izmL?%g#DyS6#hM x@LrDKid-g5*7A=(?}~31pV1ABoDT61%&+gsBy#kg{Rd1E44$rjF6*2UngEgz_AdYc diff --git a/Resources/Textures/Objects/Weapons/Melee/crusher_glaive.rsi/inhand-right.png b/Resources/Textures/Objects/Weapons/Melee/crusher_glaive.rsi/inhand-right.png deleted file mode 100644 index e2d24c9ee8af39cd2379d386af1a2122da0879fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 568 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fA0|VnL zPZ!6KiaBp*`DZmdh#cGRAa2_z@_mwCaifw*i_=S2Ce^*3kJI!n`G&FPKQP;|?u(e2 zztO>EStjQ^((nCle8NAo^M1aJddfZC8OlrtWCR(WbubvXvou&LF`N-(47R@U{`=LU zoiPUj)i@*8Ul)~mp2cX_qP|XO!Qp%}=^Zscg%`8B1U~VtNSeaHHD9IE{9)%orWzi9 z9wtN0ib?D#2|8RDISk%#5%bax^ z^2+@C%PT^cmOnH-?(=o(hU)qiW%KVZkgm~vP_cady!Za+_qM29NO=9>%e_plA2NGR zR{H&PW&wICp^t;1*o6VjzsFc-tP-EG`rUyQ440#yU6~(rY86W|Q_fZH8`Bb88hUk$ zU$rlDoVBd<|F(ZC=jj}Hwr=CJf|^X%Ln(~gwx5|Tlu>@mWHRfSK>Y=(H*UOBl%(# zl-kb&mX&SsV(jUMX3?q`=_m>gTe~DWM4f Dl|1t* diff --git a/Resources/Textures/Objects/Weapons/Melee/crusher_glaive.rsi/meta.json b/Resources/Textures/Objects/Weapons/Melee/crusher_glaive.rsi/meta.json index 2d91fb460b..8a70dbd998 100644 --- a/Resources/Textures/Objects/Weapons/Melee/crusher_glaive.rsi/meta.json +++ b/Resources/Textures/Objects/Weapons/Melee/crusher_glaive.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "https://github.com/Citadel-Station-13/Citadel-Station-13-RP/blob/817e7c1f225876b45891e3f06908e6d032f0a8bc/icons/obj/mining.dmi", + "copyright": "https://github.com/Citadel-Station-13/Citadel-Station-13-RP/blob/817e7c1f225876b45891e3f06908e6d032f0a8bc/icons/obj/mining.dmi and modified by alzore_ (discord)", "size": { "x": 32, "y": 32 @@ -21,22 +21,6 @@ 0.3 ] ] - }, - { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", - "directions": 4 - }, - { - "name": "wielded-inhand-left", - "directions": 4 - }, - { - "name": "wielded-inhand-right", - "directions": 4 } ] -} \ No newline at end of file +} diff --git a/Resources/Textures/Objects/Weapons/Melee/crusher_glaive.rsi/wielded-inhand-left.png b/Resources/Textures/Objects/Weapons/Melee/crusher_glaive.rsi/wielded-inhand-left.png deleted file mode 100644 index ce6c530f30cbc37d39d8a17ab069a3a9c60f73a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 567 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fA0|Vnr zPZ!6KiaBp*?e{wrAacxJnB6=!MImolqJr92MxH*sJ{xu^aruKsHMp7AA9!&n#l)_` zmxnpgHR;tO=@?5D@!M6=JEz$nF0bQ$yZ1uz`SsJwEYhW)tYDb1n8~4!i@{Qh0gclT z%AR2&b<8ww{q>7kTLV^K-L}DT4%4A#+v4KVmd&T9UwM>cG}SA$Oz!x{nsa?$tM*>W zSGlOvc6edt_S+IXY%4#WOli895fbJ1|J{+8`}-87>Mhql6)C9N)Bo@B@%4p~Q~s_A zTmAX-lL!HpV|p=tPxYQFmdCT4C=8ntqhG!DKgUEHmH8_fp6>}h@VD7IposBu@^zax zNpHU|_Y~7J&{XtXetD+)yxzCYaeC9H+A!CMM}LutICg&lM=f`Qj3`4<2*Zg$Mg@0P zJe)aOrybvY_g&QKhuufwW;LX3&Ri0cxBAGm{ihzEcHvsNZ=*N2!0AiU0C?=X7Mh$H&4g%w5-3G@sqDCQ*Qq9UqAnbZBMYZcUkl{ zcgGLCZ`BW6G?}OyuYXDS!Ra--lmE=Iet)@t!cp%7@n_j)FY@7U+{fmK2!Ch&2hyK+ W9#3a}tRDhQ2@IaDelF{r5}E*3Z1E!i diff --git a/Resources/Textures/Objects/Weapons/Melee/crusher_glaive.rsi/wielded-inhand-right.png b/Resources/Textures/Objects/Weapons/Melee/crusher_glaive.rsi/wielded-inhand-right.png deleted file mode 100644 index 84abf8014872d68e3dda5c27c3762dd628caffae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 520 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fA0|VnO zPZ!6KiaBp*?e#hwAklW;N$zN=eHG@SM@tXy0keB`Kif#BOq(wXgkP9NErE-hp+ z*9;PO-=4hRDQnjJ$xB`+y#MXsd2agW&re?}p8m-+L77p(oynn(r9p<1!BU8!NQL2v z2g8Yp3?K>h2)*ffCQ^wTBc8~ed;U3Wm#qX(%su&i@W5{ zuP&5-_;TXz-Ij;1el31$m>O};^<&-s{)YuWHZ$u?NZlH>)1q&?XUXo^?V0Ky7wv21 zJTvcJVP#zoQAt7!d*SuhsBPR`a(%}iPxDRsesam|>~-;hIu8ql z%>Rk=OHMwOs{j0D$*WVpZtZ42*_-e5$M}-v?|Wx2xCTX5U-3~h|LUzWmisSDv|bCo$=Lhu)>7*QZ(?ktjT1N{mCAfKl>PbD z==^cb-rrL%Zds?Gejr>wAtjrwW-Fub%FSh0WqiwHAM&lR3jTk3R^zIz_0qL0j)+iw c!CJ#?%5Yd}k#M&xFlre*UHx3vIVCg!0Kwwl6#xJL From d4db338ec6dd33d45b23abc022362cf6f8a5796e Mon Sep 17 00:00:00 2001 From: PJBot Date: Wed, 30 Oct 2024 07:39:27 +0000 Subject: [PATCH 05/97] Automatic changelog update --- Resources/Changelog/Changelog.yml | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 6131e0e6f4..7089711f43 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,14 +1,4 @@ Entries: -- author: Plykiya - changes: - - message: You can drop food or drinks from your hands to interrupt eating it, again. - type: Fix - - message: Barber scissors are now interrupted if the item is dropped or if the - user changes hands. - type: Tweak - id: 7061 - time: '2024-08-08T11:39:47.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30361 - author: TheShuEd changes: - message: Add "thieving beacon" to Thief antag - a device that counts objects within @@ -3955,3 +3945,11 @@ id: 7560 time: '2024-10-29T05:07:57.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/33046 +- author: Blackern5000 + changes: + - message: Proto-kitentic crushers, glaives, and daggers now have more accurate + inhand sprites. + type: Tweak + id: 7561 + time: '2024-10-30T07:38:19.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32212 From 010638d0e98856b371359422d25dc31b726be87e Mon Sep 17 00:00:00 2001 From: Alzore <140123969+Blackern5000@users.noreply.github.com> Date: Wed, 30 Oct 2024 02:40:33 -0500 Subject: [PATCH 06/97] Make the security belt contain more useful items by default (#32291) * replace tear gas and flashbang with holobarrier and sec radio * holobarrier-belt-fix --- Resources/Prototypes/Catalog/Fills/Items/belt.yml | 4 ++-- Resources/Prototypes/Entities/Clothing/Belt/belts.yml | 1 - .../Prototypes/Entities/Objects/Devices/holoprojectors.yml | 1 + 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Resources/Prototypes/Catalog/Fills/Items/belt.yml b/Resources/Prototypes/Catalog/Fills/Items/belt.yml index d905350cde..4a798b1a13 100644 --- a/Resources/Prototypes/Catalog/Fills/Items/belt.yml +++ b/Resources/Prototypes/Catalog/Fills/Items/belt.yml @@ -46,10 +46,10 @@ table: !type:AllSelector children: - id: Stunbaton - - id: GrenadeFlashBang - - id: TearGasGrenade - id: Handcuffs - id: Handcuffs + - id: HoloprojectorSecurity + - id: RadioHandheldSecurity - type: entity id: ClothingBeltSecurityFilled diff --git a/Resources/Prototypes/Entities/Clothing/Belt/belts.yml b/Resources/Prototypes/Entities/Clothing/Belt/belts.yml index 845944302f..c163153702 100644 --- a/Resources/Prototypes/Entities/Clothing/Belt/belts.yml +++ b/Resources/Prototypes/Entities/Clothing/Belt/belts.yml @@ -487,7 +487,6 @@ - CartridgeAmmo - DoorRemote - Whistle - - HolosignProjector - BalloonPopper - type: ItemMapper mapLayers: diff --git a/Resources/Prototypes/Entities/Objects/Devices/holoprojectors.yml b/Resources/Prototypes/Entities/Objects/Devices/holoprojectors.yml index 0c8b539c59..0df74d80d6 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/holoprojectors.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/holoprojectors.yml @@ -121,6 +121,7 @@ - type: Tag tags: - HolofanProjector + - SecBeltEquip - type: StaticPrice price: 50 From 0f1e11c356cb62dc727501b318e773b26b3c05f7 Mon Sep 17 00:00:00 2001 From: PJBot Date: Wed, 30 Oct 2024 07:41:40 +0000 Subject: [PATCH 07/97] Automatic changelog update --- Resources/Changelog/Changelog.yml | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 7089711f43..c594f6fc4f 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,17 +1,4 @@ Entries: -- author: TheShuEd - changes: - - message: Add "thieving beacon" to Thief antag - a device that counts objects within - a radius of itself as stolen. - type: Add - - message: Return thief structures stealing objectives. - type: Add - - message: Animal theft objectives can no longer appear if the animals are not on - the station. - type: Fix - id: 7062 - time: '2024-08-08T13:17:50.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29997 - author: lzk228 changes: - message: RD labcoat added in RD's dresser. @@ -3953,3 +3940,11 @@ id: 7561 time: '2024-10-30T07:38:19.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/32212 +- author: Blackern5000 + changes: + - message: Security belts now contain a holobarrier projector and a handheld security + radio by default rather than tear gas and a flashbang. + type: Tweak + id: 7562 + time: '2024-10-30T07:40:33.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32291 From 6834bc1fbdb2a71050ba7e21b77af11afa2b9265 Mon Sep 17 00:00:00 2001 From: Alzore <140123969+Blackern5000@users.noreply.github.com> Date: Wed, 30 Oct 2024 02:41:51 -0500 Subject: [PATCH 08/97] Add 3 bottle boxes to nanomed plus (#33018) three bottle boxes in nanomed plus --- .../Prototypes/Catalog/VendingMachines/Inventories/medical.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/medical.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/medical.yml index 466749120b..72b6b7617a 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/medical.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/medical.yml @@ -7,6 +7,7 @@ Bloodpack: 5 EpinephrineChemistryBottle: 3 Syringe: 5 + BoxBottle: 3 ClothingEyesHudMedical: 2 ClothingEyesEyepatchHudMedical: 2 From 827d00eb18e040fa5c43403738491dbc744b3957 Mon Sep 17 00:00:00 2001 From: PJBot Date: Wed, 30 Oct 2024 07:42:56 +0000 Subject: [PATCH 09/97] Automatic changelog update --- Resources/Changelog/Changelog.yml | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index c594f6fc4f..60e14a48fa 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: lzk228 - changes: - - message: RD labcoat added in RD's dresser. - type: Add - id: 7063 - time: '2024-08-08T22:50:57.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30671 - author: SlamBamActionman changes: - message: Animal DNA now shows up as "unknown DNA" in the Forensic Scanner. @@ -3948,3 +3941,11 @@ id: 7562 time: '2024-10-30T07:40:33.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/32291 +- author: Blackern5000 + changes: + - message: Added three bottle boxes to the nanomed plus inventory for doctors to + carry small amounts of chemicals on their person + type: Add + id: 7563 + time: '2024-10-30T07:41:51.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/33018 From 4b467685b2929833ac1460940f14ae10e6be49dc Mon Sep 17 00:00:00 2001 From: Alzore <140123969+Blackern5000@users.noreply.github.com> Date: Wed, 30 Oct 2024 04:15:30 -0500 Subject: [PATCH 10/97] Nukie med bundle now costs 24 tc and contains a unique defibrillator (#32720) * a-few-injectors * comment * defib-ops-when --- .../Locale/en-US/store/uplink-catalog.ftl | 4 +- .../Catalog/Fills/Backpacks/duffelbag.yml | 16 ++- .../Prototypes/Catalog/uplink_catalog.yml | 4 +- .../Objects/Specific/Medical/defib.yml | 66 ++++++++++++ .../Objects/Specific/Medical/hypospray.yml | 97 +++++++++++++++++- .../Specific/Medical/defibsmall.rsi/icon.png | Bin 0 -> 300 bytes .../Medical/defibsmall.rsi/inhand-left.png | Bin 0 -> 294 bytes .../Medical/defibsmall.rsi/inhand-right.png | Bin 0 -> 300 bytes .../Specific/Medical/defibsmall.rsi/meta.json | 28 +++++ .../Specific/Medical/defibsmall.rsi/ready.png | Bin 0 -> 178 bytes .../Medical/defibsmall.rsi/screen.png | Bin 0 -> 198 bytes .../Specific/Medical/defibsyndi.rsi/icon.png | Bin 0 -> 300 bytes .../Medical/defibsyndi.rsi/inhand-left.png | Bin 0 -> 290 bytes .../Medical/defibsyndi.rsi/inhand-right.png | Bin 0 -> 295 bytes .../Specific/Medical/defibsyndi.rsi/meta.json | 28 +++++ .../Specific/Medical/defibsyndi.rsi/ready.png | Bin 0 -> 158 bytes .../Medical/defibsyndi.rsi/screen.png | Bin 0 -> 191 bytes .../Specific/Medical/medipen.rsi/dexpen.png | Bin 0 -> 286 bytes .../Medical/medipen.rsi/dexpen_empty.png | Bin 0 -> 311 bytes .../Specific/Medical/medipen.rsi/meta.json | 18 ++++ .../Specific/Medical/medipen.rsi/punctpen.png | Bin 0 -> 286 bytes .../Medical/medipen.rsi/punctpen_empty.png | Bin 0 -> 311 bytes .../Specific/Medical/medipen.rsi/pyrapen.png | Bin 0 -> 286 bytes .../Medical/medipen.rsi/pyrapen_empty.png | Bin 0 -> 311 bytes 24 files changed, 251 insertions(+), 10 deletions(-) create mode 100644 Resources/Textures/Objects/Specific/Medical/defibsmall.rsi/icon.png create mode 100644 Resources/Textures/Objects/Specific/Medical/defibsmall.rsi/inhand-left.png create mode 100644 Resources/Textures/Objects/Specific/Medical/defibsmall.rsi/inhand-right.png create mode 100644 Resources/Textures/Objects/Specific/Medical/defibsmall.rsi/meta.json create mode 100644 Resources/Textures/Objects/Specific/Medical/defibsmall.rsi/ready.png create mode 100644 Resources/Textures/Objects/Specific/Medical/defibsmall.rsi/screen.png create mode 100644 Resources/Textures/Objects/Specific/Medical/defibsyndi.rsi/icon.png create mode 100644 Resources/Textures/Objects/Specific/Medical/defibsyndi.rsi/inhand-left.png create mode 100644 Resources/Textures/Objects/Specific/Medical/defibsyndi.rsi/inhand-right.png create mode 100644 Resources/Textures/Objects/Specific/Medical/defibsyndi.rsi/meta.json create mode 100644 Resources/Textures/Objects/Specific/Medical/defibsyndi.rsi/ready.png create mode 100644 Resources/Textures/Objects/Specific/Medical/defibsyndi.rsi/screen.png create mode 100644 Resources/Textures/Objects/Specific/Medical/medipen.rsi/dexpen.png create mode 100644 Resources/Textures/Objects/Specific/Medical/medipen.rsi/dexpen_empty.png create mode 100644 Resources/Textures/Objects/Specific/Medical/medipen.rsi/punctpen.png create mode 100644 Resources/Textures/Objects/Specific/Medical/medipen.rsi/punctpen_empty.png create mode 100644 Resources/Textures/Objects/Specific/Medical/medipen.rsi/pyrapen.png create mode 100644 Resources/Textures/Objects/Specific/Medical/medipen.rsi/pyrapen_empty.png diff --git a/Resources/Locale/en-US/store/uplink-catalog.ftl b/Resources/Locale/en-US/store/uplink-catalog.ftl index b3ea4b7251..a78f39d569 100644 --- a/Resources/Locale/en-US/store/uplink-catalog.ftl +++ b/Resources/Locale/en-US/store/uplink-catalog.ftl @@ -216,8 +216,8 @@ uplink-chemistry-kit-desc = A starter kit for the aspiring chemist, includes tox uplink-knives-kit-name = Throwing Knives Kit uplink-knives-kit-desc = A set of 4 syndicate branded throwing knives, perfect for embedding into the body of your victims. -uplink-meds-bundle-name = Medical Bundle -uplink-meds-bundle-desc = All you need to get your comrades back in the fight: mainly a combat medkit, a defibrillator and three combat medipens. +uplink-meds-bundle-name = Interdyne Medical Bundle +uplink-meds-bundle-desc = An assortment of autoinjectors and premium medical equipment to cover for every possible situation. Contains an elite compact defibrillator that can be used as a weapon. uplink-ammo-bundle-name = Ammo Bundle uplink-ammo-bundle-desc = Reloading! Contains 4 magazines for the C-20r, 4 drums for the Bulldog, and 2 ammo boxes for the L6 SAW. diff --git a/Resources/Prototypes/Catalog/Fills/Backpacks/duffelbag.yml b/Resources/Prototypes/Catalog/Fills/Backpacks/duffelbag.yml index c059f095e1..75b3a29065 100644 --- a/Resources/Prototypes/Catalog/Fills/Backpacks/duffelbag.yml +++ b/Resources/Prototypes/Catalog/Fills/Backpacks/duffelbag.yml @@ -302,13 +302,19 @@ components: - type: StorageFill contents: + - id: DefibrillatorSyndicate - id: MedkitCombatFilled - - id: Defibrillator + amount: 4 + - id: Tourniquet + amount: 4 - id: CombatMedipen - amount: 3 - - id: ClothingHandsGlovesNitrile - - id: SyringeTranexamicAcid - - id: SyringeHyronalin + amount: 4 + - id: PunctAutoInjector + amount: 4 + - id: PyraAutoInjector + amount: 4 + - id: AirlossAutoInjector + amount: 4 - type: entity parent: ClothingBackpackDuffelSyndicateBundle diff --git a/Resources/Prototypes/Catalog/uplink_catalog.yml b/Resources/Prototypes/Catalog/uplink_catalog.yml index 748a65b761..f31d85414d 100644 --- a/Resources/Prototypes/Catalog/uplink_catalog.yml +++ b/Resources/Prototypes/Catalog/uplink_catalog.yml @@ -699,9 +699,9 @@ productEntity: ClothingBackpackDuffelSyndicateMedicalBundleFilled discountCategory: rareDiscounts discountDownTo: - Telecrystal: 12 + Telecrystal: 16 cost: - Telecrystal: 20 + Telecrystal: 24 categories: - UplinkChemicals conditions: diff --git a/Resources/Prototypes/Entities/Objects/Specific/Medical/defib.yml b/Resources/Prototypes/Entities/Objects/Specific/Medical/defib.yml index 69c106efab..fb0f3d52c6 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Medical/defib.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Medical/defib.yml @@ -71,3 +71,69 @@ id: DefibrillatorOneHandedUnpowered parent: BaseDefibrillator suffix: One-Handed, Unpowered + +- type: entity + id: DefibrillatorCompact # This should be a research item at some point + parent: [ BaseDefibrillator, PowerCellSlotMediumItem ] + name: compact defibrillator + description: Now in fun size! + components: + - type: Sprite + sprite: Objects/Specific/Medical/defibsmall.rsi + layers: + - state: icon + - state: screen + map: [ "enum.ToggleVisuals.Layer" ] + visible: false + shader: unshaded + - state: ready + map: ["enum.PowerDeviceVisualLayers.Powered"] + shader: unshaded + - type: Item + size: Normal + - type: ToggleCellDraw + - type: PowerCellDraw + useRate: 100 + - type: Defibrillator + zapHeal: + types: + Asphyxiation: -40 + doAfterDuration: 6 + - type: DoAfter + - type: UseDelay + +- type: entity + id: DefibrillatorSyndicate + parent: DefibrillatorCompact + name: interdyne defibrillator + description: Doubles as a self-defense weapon against war-crime inclined tiders. + components: + - type: Sprite + sprite: Objects/Specific/Medical/defibsyndi.rsi + layers: + - state: icon + - state: screen + map: [ "enum.ToggleVisuals.Layer" ] + visible: false + shader: unshaded + - state: ready + map: ["enum.PowerDeviceVisualLayers.Powered"] + shader: unshaded + - type: MeleeWeapon + damage: + types: + Blunt: 8 + - type: ItemToggleMeleeWeapon + activatedSoundOnHit: + path: /Audio/Items/Defib/defib_zap.ogg + params: + variation: 0.250 + activatedSoundOnHitNoDamage: + path: /Audio/Items/Defib/defib_zap.ogg + params: + variation: 0.250 + volume: -10 + activatedDamage: + types: + Blunt: 8 + Shock: 16 diff --git a/Resources/Prototypes/Entities/Objects/Specific/Medical/hypospray.yml b/Resources/Prototypes/Entities/Objects/Specific/Medical/hypospray.yml index c81af6e128..93eeef2073 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Medical/hypospray.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Medical/hypospray.yml @@ -271,7 +271,6 @@ transferAmount: 20 onlyAffectsMobs: false injectOnly: true - - type: SolutionContainerManager solutions: pen: @@ -284,6 +283,102 @@ - type: Tag tags: [] +- type: entity + name: puncturase auto-injector + parent: ChemicalMedipen + id: PunctAutoInjector + description: A rapid dose of puncturase and tranexamic acid, intended for combat applications. + components: + - type: Sprite + sprite: Objects/Specific/Medical/medipen.rsi + layers: + - state: punctpen + map: ["enum.SolutionContainerLayers.Fill"] + - type: SolutionContainerVisuals + maxFillLevels: 1 + changeColor: false + emptySpriteName: punctpen_empty + - type: Hypospray + solutionName: pen + transferAmount: 15 + onlyAffectsMobs: false + injectOnly: true + - type: SolutionContainerManager + solutions: + pen: + maxVol: 15 + reagents: + - ReagentId: Puncturase + Quantity: 10 + - ReagentId: TranexamicAcid + Quantity: 5 + - type: Tag + tags: [] + +- type: entity + name: pyrazine auto-injector + parent: ChemicalMedipen + id: PyraAutoInjector + description: A rapid dose of pyrazine and dermaline, intended for combat applications. + components: + - type: Sprite + sprite: Objects/Specific/Medical/medipen.rsi + layers: + - state: pyrapen + map: ["enum.SolutionContainerLayers.Fill"] + - type: SolutionContainerVisuals + maxFillLevels: 1 + changeColor: false + emptySpriteName: pyrapen_empty + - type: Hypospray + solutionName: pen + transferAmount: 20 + onlyAffectsMobs: false + injectOnly: true + - type: SolutionContainerManager + solutions: + pen: + maxVol: 20 + reagents: + - ReagentId: Pyrazine + Quantity: 10 + - ReagentId: Dermaline + Quantity: 10 + - type: Tag + tags: [] + +- type: entity + name: airloss auto-injector + parent: ChemicalMedipen + id: AirlossAutoInjector + description: A rapid dose of saline and dexalin plus, intended to get someone up quickly. + components: + - type: Sprite + sprite: Objects/Specific/Medical/medipen.rsi + layers: + - state: dexpen + map: ["enum.SolutionContainerLayers.Fill"] + - type: SolutionContainerVisuals + maxFillLevels: 1 + changeColor: false + emptySpriteName: dexpen_empty + - type: Hypospray + solutionName: pen + transferAmount: 40 + onlyAffectsMobs: false + injectOnly: true + - type: SolutionContainerManager + solutions: + pen: + maxVol: 40 + reagents: + - ReagentId: Saline + Quantity: 20 + - ReagentId: DexalinPlus + Quantity: 20 + - type: Tag + tags: [] + - type: entity name: space medipen parent: ChemicalMedipen diff --git a/Resources/Textures/Objects/Specific/Medical/defibsmall.rsi/icon.png b/Resources/Textures/Objects/Specific/Medical/defibsmall.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..99a15087e7bca64d9ed9048f179bc3c73bae4282 GIT binary patch literal 300 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCiji0(?ST<>loa931-l`;Qzs^5Vsd;^N|{X}f`vPL&ejK#HRz$S?Rm1Tfrd z-Wv%N<1FxqEM{QfI|Ravq8eTeK*3H=7sn6_|ECuZ^0g@NxCYAQzWo3Hqs;~lwN#%w zzRxyYIN*6T;?Kf*=2YkBX6so^yY^mWQVV(I0=1*kOVc2*)ui<~wM?vX=sZ8>p j`;(S$Z`dQx@J@bTnZ&`w+k0eyj$-h1^>bP0l+XkKXb*57 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Medical/defibsmall.rsi/inhand-left.png b/Resources/Textures/Objects/Specific/Medical/defibsmall.rsi/inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..42d319843d99564a585539451cff12800025cf70 GIT binary patch literal 294 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O_~O1^9%x9yxO4#fulk#l_PXZ^*Cj2MQNeOKbpAY$ZW{!T&*kVe|ea`+*{y z1s;*b3=DjSK$uZf!>a)(*zM`!7!u+B_L?JKg94As#chZFuFsjZ%zK)>jWPdTrno`*JZ|Rep$&$73=)fGe>69! z7GPvDVq!^Q;W%M%VRI^b|E)Lc*yFhV=;Xg+53HZSQBo_!@#43Fz=jv$jSZpu-+U6_ fS9-vHV2-(;f#2(u9ZM2{&SLO%^>bP0l+XkK5Uy%& literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Medical/defibsmall.rsi/inhand-right.png b/Resources/Textures/Objects/Specific/Medical/defibsmall.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..a2317f7facec9ebb7460963a2fae389595bfbf02 GIT binary patch literal 300 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O_~O1^9%x9yxO4#fulk#l_PXZ^*Cj2MQNeOKbpAY$ZW{!T&*kVe|ea`+*{y z1s;*b3=DjSK$uZf!>a)(IMLI^F(ktM?KN+{0}3200SObM~ZKLOQ zMg|9Fh6XkUhO!lvI6;>1s;*b3=DjSL74G){)!Z!pu4AwV@QO1vIOhm1d*PmKm#tfgAUAY8oojw zW_|ej|8n$u$t71=Bon@DW6IlfCaLL?3S-G>$1fTP^=%pn2@DLuPlPtbiW}?z8p+`4 L>gTe~DWM4f3t%-Y literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Medical/defibsmall.rsi/screen.png b/Resources/Textures/Objects/Specific/Medical/defibsmall.rsi/screen.png new file mode 100644 index 0000000000000000000000000000000000000000..1a2ac1cdec93e592dcf259277ebf800e1bcc406f GIT binary patch literal 198 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCikh0(?ST#hiWh;xij|9svqmD75+tQdbh>7ySSKe+CDwm0y5-&H|6fVg?4j z!ywFfJby(BP|(=Z#WBRfKRH2-!A;cRzzQag1>2d}I2t}FFti>&!NSxNAjdLcSwo{B j%ZG?Y-X0FtGiMlT`?*hL74ez^wKI6S`njxgN@xNAS7bM8 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Medical/defibsyndi.rsi/icon.png b/Resources/Textures/Objects/Specific/Medical/defibsyndi.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..69c4e441de03015ad7ab1cd7fda81e35e63e1fa6 GIT binary patch literal 300 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCiji0(?ST1q1|ygoM=9)wQ&=jE#*I6&33l8G({Z-)qFT3xUThWz(_XSP z8PDB(gLg$^cm7VsRexpfAJAc6s~A>o=_uk}o$z?h{E19D3>%Nk44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`212l#}zYH4X18ygD=2`MTn0>zlCg=&EmYe|q_@P8m+_`QuU7%0G5;1OBO zz`%D9gc)~C%zg_L?DlkV42f`md(Dxr#em28qQ#eg>2j_~)8#Xc=B2FH+FIveW^(Pg zgh7B|!h%B%Z+2G%&D=G8y`zHir?`D-(icAX?RN065ocS%7IU4E!8wGbo_RAnP-)Tu zhocRRT+GI|%RXeRd0Dj}>_K|w4*8V-j!Fh!Jrxq(H9H(|-p|cq^YykK|3?M3e+&_? Z*@bu6>)e|8%oXS?22WQ%mvv4FO#nAuVsroi literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Medical/defibsyndi.rsi/inhand-right.png b/Resources/Textures/Objects/Specific/Medical/defibsyndi.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..c30877c534e5fb585fd2ac7319483ebd6d4297bd GIT binary patch literal 295 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`212l#}zYH4X18ygD=2`MTn0>zlCg=&EmYe|q_@P8m+_`QuU7%0G5;1OBO zz`%D9gc)~C%zg_LoZ#u=7!u+B_L?`>0Rs+}faA~prRzCm&FW{o96K|zb7lX8-l?Aq zSvVp%1U6VGv|ll13%z1AojpKsZK_^6!>!zY2F5=}Wf+7Gl=?cn5>$L7zq>?=iA4vZ z!N);oo&T|QQ!)-G>iYPyL`U7WdSk?Nu||W(!A73bcEfD*g<|h{_Wt!h_Nt_HnbQMy b2TgPSpY}S3`(ri$-NxYQ>gTe~DWM4fD1Bat literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Medical/defibsyndi.rsi/meta.json b/Resources/Textures/Objects/Specific/Medical/defibsyndi.rsi/meta.json new file mode 100644 index 0000000000..441fd4f5fe --- /dev/null +++ b/Resources/Textures/Objects/Specific/Medical/defibsyndi.rsi/meta.json @@ -0,0 +1,28 @@ +{ + "version": 1, + "license": "CC0-1.0", + "copyright": "Created by EmoGarbage404 (github) for Space Staiton 14 and modified by alzore_(Discord)", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "ready" + }, + { + "name": "screen" + } + ] +} diff --git a/Resources/Textures/Objects/Specific/Medical/defibsyndi.rsi/ready.png b/Resources/Textures/Objects/Specific/Medical/defibsyndi.rsi/ready.png new file mode 100644 index 0000000000000000000000000000000000000000..e5a8065eadc06d555fc09d7e309e6b57a08342e0 GIT binary patch literal 158 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSK$uZf!>a)(Xzc0Y7!u+B_Uvv>1_cr318??EPLBND7~a9m yaY(jBL{o_2fw!$>?$bB3?(H~Vew~HkkJ`)+eL{tDJOv^^?F^o-elF{r5}E+i0WDep literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Medical/defibsyndi.rsi/screen.png b/Resources/Textures/Objects/Specific/Medical/defibsyndi.rsi/screen.png new file mode 100644 index 0000000000000000000000000000000000000000..0c7a26a2a5eda1c3b5cd730138d9d6fdcc07eef0 GIT binary patch literal 191 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSK$uZf!>a)(7~<*T7!u*0EWx@sL8PZC(16SBpoRpivYdfa z=AuS@=ELn-)2+opNLIZ?x;Ff{&p zEl{QY9K$W?giABqW)yI4nrD=7QU8>HcP!IM-?g=OexX#nb2rPSjFr1(pM{DS|Z0ER1fW-J6saTa()7Bet#3xY6XeMwPPjwzXhKo6MDkV9f(>wLuyM>xy}Kvd8^NxEKhqD%m;J>gQu&X%Q~loCIFxseuDr2 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Medical/medipen.rsi/meta.json b/Resources/Textures/Objects/Specific/Medical/medipen.rsi/meta.json index 8e9f54f1d0..8872f25f52 100644 --- a/Resources/Textures/Objects/Specific/Medical/medipen.rsi/meta.json +++ b/Resources/Textures/Objects/Specific/Medical/medipen.rsi/meta.json @@ -96,6 +96,24 @@ }, { "name": "medipen-inhand-right" + }, + { + "name": "punctpen" + }, + { + "name": "punctpen_empty" + }, + { + "name": "pyrapen" + }, + { + "name": "pyrapen_empty" + }, + { + "name": "dexpen" + }, + { + "name": "dexpen_empty" } ] } diff --git a/Resources/Textures/Objects/Specific/Medical/medipen.rsi/punctpen.png b/Resources/Textures/Objects/Specific/Medical/medipen.rsi/punctpen.png new file mode 100644 index 0000000000000000000000000000000000000000..fa529e8d189535e042a31cca590cddc3ada837e8 GIT binary patch literal 286 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCikd1AIbUkME0JvSi7wUAvaewfgX40uX%o@ZsLIDy82tSLzimU%uQ>p|)ek zj>g7DppNtTZ+-$P{*oZS;QuIq;mVyE3xQIc1s;*b3=G_YAk0{w5%bXG_!3+0q3T9MhO@7PYHO(GM)5YTYKkM8q4{zgnj%jdfOdM_AnS!S^%wL N@O1TaS?83{1OUM_a?1b! literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Medical/medipen.rsi/punctpen_empty.png b/Resources/Textures/Objects/Specific/Medical/medipen.rsi/punctpen_empty.png new file mode 100644 index 0000000000000000000000000000000000000000..4bd9cd4858379faae8933ea2fd38884f95a7428a GIT binary patch literal 311 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCikd1AIbUkME29@M6NUxmHV-EZMPR$F5zwCQO*{;lqb}*Q&g|z5gpJUcP*} zv9YnCLJg>+bM;MLAjMx2Gh-o8inG8YvY3H^TM&d9>r>(<0tG8PT^vI! z{NMJS7CIon!@xPU;>iE{Jl{RHoR2L%{_fz6tsN`b|1J0&na~qCZkkfe9T3Tr)0oPFt{BqG+}$e-NLwz%A}iM-_f5Rh@T;;VO<6dz8-LVzVvZ q?ZB;{ToIP_JS#u2&vg!X&0BrmWO>@NU_PK57(8A5T-G@yGywnxT!1A2 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Medical/medipen.rsi/pyrapen.png b/Resources/Textures/Objects/Specific/Medical/medipen.rsi/pyrapen.png new file mode 100644 index 0000000000000000000000000000000000000000..fee075cc3bef3ea8eea9fc2f5fd7e1d7f39c7e2a GIT binary patch literal 286 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCikd1AIbUk1vT`vSi7wUAvYwS$()L0SG>P_;7D;mC|pSEAFVdQ&MBb@0F)$g8vpKsU_yrh*Nh9D(-!QOD4K1`AH-)ZaEtrXQH7sMRp%XIxQe629;Gw5*lf#p pJ8 Date: Wed, 30 Oct 2024 09:16:36 +0000 Subject: [PATCH 11/97] Automatic changelog update --- Resources/Changelog/Changelog.yml | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 60e14a48fa..b9b8422096 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,20 +1,4 @@ Entries: -- author: SlamBamActionman - changes: - - message: Animal DNA now shows up as "unknown DNA" in the Forensic Scanner. - type: Tweak - - message: Forensic Scanner can now scan fluid containers for DNA in reagents. - type: Tweak - - message: Fluids keep their DNA data when moved. - type: Fix - - message: Fluids now stain containers they're in with DNA. Make sure to scrub your - blood bucket after use! - type: Add - - message: Vomit now includes DNA! - type: Add - id: 7064 - time: '2024-08-08T23:27:28.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/26699 - author: themias changes: - message: Butter can be sliced, cookie and toast recipes now use butter slices. @@ -3949,3 +3933,15 @@ id: 7563 time: '2024-10-30T07:41:51.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/33018 +- author: Blackern5000 + changes: + - message: Added the interdyne defibrillator, a black-and-red defibrillator that + can be used as a melee weapon. + type: Add + - message: The syndicate medical bundle now contains an interdyne defibrillator, + a collection of various instant injectors, tourniquets, and several combat kits. + The price has been raised to 24 tc. + type: Tweak + id: 7564 + time: '2024-10-30T09:15:30.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32720 From a3dc0eb75a2d0cdcdedd149384c23422b74e8ea8 Mon Sep 17 00:00:00 2001 From: Boaz1111 <149967078+Boaz1111@users.noreply.github.com> Date: Thu, 31 Oct 2024 11:56:07 +0100 Subject: [PATCH 12/97] Pill Bottles can only store pills now (#33074) * no longer absurd * Update Resources/Prototypes/Entities/Objects/Specific/chemistry.yml --------- Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> --- Resources/Prototypes/Entities/Objects/Specific/chemistry.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Resources/Prototypes/Entities/Objects/Specific/chemistry.yml b/Resources/Prototypes/Entities/Objects/Specific/chemistry.yml index 3f2ac403ac..b717255d8f 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/chemistry.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/chemistry.yml @@ -586,4 +586,7 @@ areaInsertRadius: 1 storageInsertSound: /Audio/Effects/pill_insert.ogg storageRemoveSound: /Audio/Effects/pill_remove.ogg + whitelist: + tags: + - Pill - type: Dumpable From 826bd1ab45c0e4958785eb9dc653fb7d3527a5b3 Mon Sep 17 00:00:00 2001 From: PJBot Date: Thu, 31 Oct 2024 10:57:15 +0000 Subject: [PATCH 13/97] Automatic changelog update --- Resources/Changelog/Changelog.yml | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index b9b8422096..3645a63f1e 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,13 +1,4 @@ Entries: -- author: themias - changes: - - message: Butter can be sliced, cookie and toast recipes now use butter slices. - type: Tweak - - message: Chefvend butter reduced from 4 to 3. - type: Tweak - id: 7065 - time: '2024-08-08T23:32:42.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30789 - author: EmoGarbage404 changes: - message: You should have significantly less friction when moving in space. @@ -3945,3 +3936,10 @@ id: 7564 time: '2024-10-30T09:15:30.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/32720 +- author: Boaz1111 + changes: + - message: Pill bottles can now only store pills. + type: Tweak + id: 7565 + time: '2024-10-31T10:56:07.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/33074 From f5e564640077097f719f7d242277f965577c901c Mon Sep 17 00:00:00 2001 From: AJCM-git <60196617+AJCM-git@users.noreply.github.com> Date: Thu, 31 Oct 2024 07:22:13 -0400 Subject: [PATCH 14/97] New workflow to apply the pr approved label (#28358) * New workflow to apply the pr approved label * Maybe fix permissions --- .github/workflows/labeler-approved.yml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 .github/workflows/labeler-approved.yml diff --git a/.github/workflows/labeler-approved.yml b/.github/workflows/labeler-approved.yml new file mode 100644 index 0000000000..f583500c87 --- /dev/null +++ b/.github/workflows/labeler-approved.yml @@ -0,0 +1,17 @@ +name: "Labels: Approved" + +on: + pull_request_review: + types: [submitted] + +jobs: + add_label: + if: github.event.review.state == 'APPROVED' + permissions: + contents: read + pull-requests: write + runs-on: ubuntu-latest + steps: + - uses: actions-ecosystem/action-add-labels@v1 + with: + labels: "PR: Approved" From 426169837100eaa1e0fccc62dbd7aedc0b0d5dd5 Mon Sep 17 00:00:00 2001 From: Jarmer123 <148848017+Jarmer123@users.noreply.github.com> Date: Thu, 31 Oct 2024 14:26:45 +0100 Subject: [PATCH 15/97] Add a spare bible to PietyVend (#32363) Update chapel.yml --- .../Prototypes/Catalog/VendingMachines/Inventories/chapel.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/chapel.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/chapel.yml index 33a13dab0a..cb9e06932f 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/chapel.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/chapel.yml @@ -20,6 +20,7 @@ BoxCandle: 2 BoxCandleSmall: 2 Urn: 5 + Bible: 1 emaggedInventory: ClothingOuterArmorCult: 1 ClothingHeadHelmetCult: 1 From a875bf3c64f0c9021382764714229e852c449be7 Mon Sep 17 00:00:00 2001 From: PJBot Date: Thu, 31 Oct 2024 13:27:53 +0000 Subject: [PATCH 16/97] Automatic changelog update --- Resources/Changelog/Changelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 3645a63f1e..7c22ba77f9 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: EmoGarbage404 - changes: - - message: You should have significantly less friction when moving in space. - type: Tweak - id: 7066 - time: '2024-08-09T04:52:25.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29383 - author: Plykiya changes: - message: Hardsuits and EVA suits now count as protection for unscrewing lightbulbs. @@ -3943,3 +3936,10 @@ id: 7565 time: '2024-10-31T10:56:07.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/33074 +- author: Jarmer123 + changes: + - message: You can now find a spare bible in the PietyVend + type: Add + id: 7566 + time: '2024-10-31T13:26:46.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32363 From 55861b4fcfb525113d4c194fd1eac0486ac9fc1a Mon Sep 17 00:00:00 2001 From: SlamBamActionman <83650252+SlamBamActionman@users.noreply.github.com> Date: Thu, 31 Oct 2024 15:12:26 +0100 Subject: [PATCH 17/97] [#28722 fix] Add notification for dependent wearables being dropped (#33078) * add notification for dependent wearables being dropped * fix dropped item popup redundancy - did a check to see if any item was dropped, instead of making a notification for each item being dropped. * change popup to client-only variant * fix redundant messages, add plural locale string * fix conventions, fix locale input to be more intuitive --------- Co-authored-by: Justin --- .../Inventory/InventorySystem.Equip.cs | 45 +++++++++++++++---- .../components/inventory-component.ftl | 6 +++ 2 files changed, 43 insertions(+), 8 deletions(-) diff --git a/Content.Shared/Inventory/InventorySystem.Equip.cs b/Content.Shared/Inventory/InventorySystem.Equip.cs index 1d5d91a9e3..f089dfaf23 100644 --- a/Content.Shared/Inventory/InventorySystem.Equip.cs +++ b/Content.Shared/Inventory/InventorySystem.Equip.cs @@ -47,7 +47,7 @@ public abstract partial class InventorySystem private void OnEntRemoved(EntityUid uid, InventoryComponent component, EntRemovedFromContainerMessage args) { - if(!TryGetSlot(uid, args.Container.ID, out var slotDef, inventory: component)) + if (!TryGetSlot(uid, args.Container.ID, out var slotDef, inventory: component)) return; var unequippedEvent = new DidUnequipEvent(uid, args.Entity, slotDef); @@ -59,8 +59,8 @@ public abstract partial class InventorySystem private void OnEntInserted(EntityUid uid, InventoryComponent component, EntInsertedIntoContainerMessage args) { - if(!TryGetSlot(uid, args.Container.ID, out var slotDef, inventory: component)) - return; + if (!TryGetSlot(uid, args.Container.ID, out var slotDef, inventory: component)) + return; var equippedEvent = new DidEquipEvent(uid, args.Entity, slotDef); RaiseLocalEvent(uid, equippedEvent, true); @@ -118,7 +118,7 @@ public abstract partial class InventorySystem RaiseLocalEvent(held.Value, new HandDeselectedEvent(actor)); - TryEquip(actor, actor, held.Value, ev.Slot, predicted: true, inventory: inventory, force: true, checkDoafter:true); + TryEquip(actor, actor, held.Value, ev.Slot, predicted: true, inventory: inventory, force: true, checkDoafter: true); } public bool TryEquip(EntityUid uid, EntityUid itemUid, string slot, bool silent = false, bool force = false, bool predicted = false, @@ -365,6 +365,25 @@ public abstract partial class InventorySystem ClothingComponent? clothing = null, bool reparent = true, bool checkDoafter = false) + { + var itemsDropped = 0; + return TryUnequip(actor, target, slot, out removedItem, ref itemsDropped, + silent, force, predicted, inventory, clothing, reparent, checkDoafter); + } + + private bool TryUnequip( + EntityUid actor, + EntityUid target, + string slot, + [NotNullWhen(true)] out EntityUid? removedItem, + ref int itemsDropped, + bool silent = false, + bool force = false, + bool predicted = false, + InventoryComponent? inventory = null, + ClothingComponent? clothing = null, + bool reparent = true, + bool checkDoafter = false) { removedItem = null; @@ -423,17 +442,27 @@ public abstract partial class InventorySystem return false; } + if (!_containerSystem.Remove(removedItem.Value, slotContainer, force: force, reparent: reparent)) + return false; + + // this is in order to keep track of whether this is the first instance of a recursion call + var firstRun = itemsDropped == 0; + ++itemsDropped; + foreach (var slotDef in inventory.Slots) { if (slotDef != slotDefinition && slotDef.DependsOn == slotDefinition.Name) { //this recursive call might be risky - TryUnequip(actor, target, slotDef.Name, true, true, predicted, inventory, reparent: reparent); + TryUnequip(actor, target, slotDef.Name, out _, ref itemsDropped, true, true, predicted, inventory, reparent: reparent); } } - if (!_containerSystem.Remove(removedItem.Value, slotContainer, force: force, reparent: reparent)) - return false; + // we check if any items were dropped, and make a popup if they were. + // the reason we check for > 1 is because the first item is always the one we are trying to unequip, + // whereas we only want to notify for extra dropped items. + if (!silent && _gameTiming.IsFirstTimePredicted && firstRun && itemsDropped > 1) + _popup.PopupClient(Loc.GetString("inventory-component-dropped-from-unequip", ("items", itemsDropped - 1)), target, target); // TODO: Inventory needs a hot cleanup hoo boy // Check if something else (AKA toggleable) dumped it into a container. @@ -466,7 +495,7 @@ public abstract partial class InventorySystem if ((containerSlot == null || slotDefinition == null) && !TryGetSlotContainer(target, slot, out containerSlot, out slotDefinition, inventory)) return false; - if (containerSlot.ContainedEntity is not {} itemUid) + if (containerSlot.ContainedEntity is not { } itemUid) return false; if (!_containerSystem.CanRemove(itemUid, containerSlot)) diff --git a/Resources/Locale/en-US/inventory/components/inventory-component.ftl b/Resources/Locale/en-US/inventory/components/inventory-component.ftl index 79943d914e..1cde6b5943 100644 --- a/Resources/Locale/en-US/inventory/components/inventory-component.ftl +++ b/Resources/Locale/en-US/inventory/components/inventory-component.ftl @@ -2,3 +2,9 @@ inventory-component-can-equip-cannot = You can't equip this! inventory-component-can-equip-does-not-fit = This doesn't fit! inventory-component-can-unequip-cannot = You can't unequip this! + +inventory-component-dropped-from-unequip = + You dropped {$items -> + [1] an item! + *[other] some items! +} From 872adb5c93fc4272ed668ba8599781e353425316 Mon Sep 17 00:00:00 2001 From: PJBot Date: Thu, 31 Oct 2024 14:13:33 +0000 Subject: [PATCH 18/97] Automatic changelog update --- Resources/Changelog/Changelog.yml | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 7c22ba77f9..ad3d938200 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,16 +1,4 @@ Entries: -- author: Plykiya - changes: - - message: Hardsuits and EVA suits now count as protection for unscrewing lightbulbs. - type: Add - - message: More gloves were given the ability to unscrew light bulbs. - type: Add - - message: Behonkers no longer hurt you when melee attacking them or interacting - with them. - type: Remove - id: 7067 - time: '2024-08-09T05:32:41.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30244 - author: Ian321 changes: - message: The warden is now an important job. @@ -3943,3 +3931,11 @@ id: 7566 time: '2024-10-31T13:26:46.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/32363 +- author: justinbrick + changes: + - message: Added a pop-up notification when extra items are dropped while unequipping + something. + type: Tweak + id: 7567 + time: '2024-10-31T14:12:26.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/33078 From a08da9d31f1f1c63f5124edff5a23d5443659bfc Mon Sep 17 00:00:00 2001 From: BramvanZijp <56019239+BramvanZijp@users.noreply.github.com> Date: Thu, 31 Oct 2024 15:53:38 +0100 Subject: [PATCH 19/97] More pda space (#32601) * Rebalance the max programs that a PDA can hold * Give Caps PDA more programs too. * Make the max programs a static 8 * I forgor sec and med * CaseCase * Empty commit to re-run checks * The final change, I hope. --- .../CartridgeLoaderComponent.cs | 2 +- .../Entities/Objects/Devices/pda.yml | 67 ++++++++++++------- 2 files changed, 44 insertions(+), 25 deletions(-) diff --git a/Content.Shared/CartridgeLoader/CartridgeLoaderComponent.cs b/Content.Shared/CartridgeLoader/CartridgeLoaderComponent.cs index c9cd710c52..f47112c794 100644 --- a/Content.Shared/CartridgeLoader/CartridgeLoaderComponent.cs +++ b/Content.Shared/CartridgeLoader/CartridgeLoaderComponent.cs @@ -33,7 +33,7 @@ public sealed partial class CartridgeLoaderComponent : Component /// The maximum amount of programs that can be installed on the cartridge loader entity /// [DataField] - public int DiskSpace = 5; + public int DiskSpace = 8; /// /// Controls whether the cartridge loader will play notifications if it supports it at all diff --git a/Resources/Prototypes/Entities/Objects/Devices/pda.yml b/Resources/Prototypes/Entities/Objects/Devices/pda.yml index dfc1c6fa5b..673b0ba52f 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/pda.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/pda.yml @@ -684,6 +684,13 @@ accentHColor: "#447987" - type: Icon state: pda-hos + - type: CartridgeLoader + preinstalled: + - CrewManifestCartridge + - NotekeeperCartridge + - NewsReaderCartridge + - WantedListCartridge + - LogProbeCartridge - type: entity parent: BaseSecurityPDA @@ -732,6 +739,16 @@ borderColor: "#00842e" - type: Icon state: pda-centcom + - type: CartridgeLoader + uiKey: enum.PdaUiKey.Key + preinstalled: + - CrewManifestCartridge + - NotekeeperCartridge + - NewsReaderCartridge + - MedTekCartridge + - WantedListCartridge + - LogProbeCartridge + - AstroNavCartridge - type: entity parent: CentcomPDA @@ -754,6 +771,8 @@ - NewsReaderCartridge - LogProbeCartridge - WantedListCartridge + - MedTekCartridge + - AstroNavCartridge - type: entity parent: CentcomPDA @@ -845,14 +864,6 @@ uiKey: enum.PdaUiKey.Key preinstalled: - NotekeeperCartridge - cartridgeSlot: - priority: -1 - name: Cartridge - ejectSound: /Audio/Machines/id_swipe.ogg - insertSound: /Audio/Machines/id_insert.ogg - whitelist: - components: - - Cartridge - type: entity parent: BaseSecurityPDA @@ -870,6 +881,16 @@ accentVColor: "#447987" - type: Icon state: pda-ert + - type: CartridgeLoader + uiKey: enum.PdaUiKey.Key + preinstalled: + - CrewManifestCartridge + - NotekeeperCartridge + - NewsReaderCartridge + - MedTekCartridge + - WantedListCartridge + - LogProbeCartridge + - AstroNavCartridge - type: entity parent: ERTLeaderPDA @@ -910,14 +931,6 @@ components: - type: Pda id: ERTMedicIDCard - - type: CartridgeLoader - uiKey: enum.PdaUiKey.Key - preinstalled: - - CrewManifestCartridge - - NotekeeperCartridge - - NewsReaderCartridge - - MedTekCartridge - - WantedListCartridge - type: entity parent: ERTLeaderPDA @@ -1019,6 +1032,13 @@ borderColor: "#774705" - type: Icon state: pda-detective + - type: CartridgeLoader + preinstalled: + - CrewManifestCartridge + - NotekeeperCartridge + - NewsReaderCartridge + - WantedListCartridge + - LogProbeCartridge - type: entity parent: BaseMedicalPDA @@ -1035,6 +1055,13 @@ accentVColor: "#d7d7d0" - type: Icon state: pda-brigmedic + - type: CartridgeLoader + preinstalled: + - CrewManifestCartridge + - NotekeeperCartridge + - NewsReaderCartridge + - WantedListCartridge + - MedTekCartridge - type: entity parent: ClownPDA @@ -1151,11 +1178,3 @@ preinstalled: - NotekeeperCartridge - MedTekCartridge - cartridgeSlot: - priority: -1 - name: Cartridge - ejectSound: /Audio/Machines/id_swipe.ogg - insertSound: /Audio/Machines/id_insert.ogg - whitelist: - components: - - Cartridge From bca8d95191cb09e97fad50f0b35e0f1730c81644 Mon Sep 17 00:00:00 2001 From: PJBot Date: Thu, 31 Oct 2024 14:54:44 +0000 Subject: [PATCH 20/97] Automatic changelog update --- Resources/Changelog/Admin.yml | 8 ++++++++ Resources/Changelog/Changelog.yml | 18 +++++++++++------- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Admin.yml b/Resources/Changelog/Admin.yml index 2c4db6e82b..4bb373ca1d 100644 --- a/Resources/Changelog/Admin.yml +++ b/Resources/Changelog/Admin.yml @@ -567,5 +567,13 @@ Entries: id: 70 time: '2024-10-16T22:24:31.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/32844 +- author: BramvanZijp + changes: + - message: CC, ERT, Admin, and Deathsquad PDA's now have all departmental programs + pre-installed. + type: Tweak + id: 71 + time: '2024-10-31T14:53:38.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32601 Name: Admin Order: 1 diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index ad3d938200..c3121dc7d0 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Ian321 - changes: - - message: The warden is now an important job. - type: Tweak - id: 7068 - time: '2024-08-09T05:45:51.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30745 - author: slarticodefast changes: - message: Added tooltips to the agent ID job icons @@ -3939,3 +3932,14 @@ id: 7567 time: '2024-10-31T14:12:26.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/33078 +- author: BramvanZijp + changes: + - message: The maximum amount of programs that can be installed on a PDA has been + increased from 5 to 8 + type: Tweak + - message: The Detective and Head of Security now get the logprobe program pre-installed + on their PDA. + type: Tweak + id: 7568 + time: '2024-10-31T14:53:38.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32601 From d446a3e8e90f41c3d0a6413116148edef5274513 Mon Sep 17 00:00:00 2001 From: Vasilis Date: Thu, 31 Oct 2024 16:05:42 +0100 Subject: [PATCH 21/97] Potencially fix approved labeler (#33083) --- .github/workflows/labeler-approved.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/labeler-approved.yml b/.github/workflows/labeler-approved.yml index f583500c87..e05893ed8f 100644 --- a/.github/workflows/labeler-approved.yml +++ b/.github/workflows/labeler-approved.yml @@ -7,9 +7,6 @@ on: jobs: add_label: if: github.event.review.state == 'APPROVED' - permissions: - contents: read - pull-requests: write runs-on: ubuntu-latest steps: - uses: actions-ecosystem/action-add-labels@v1 From 1c2a96590bd12608937395329c7370cdfca00537 Mon Sep 17 00:00:00 2001 From: SpaceLizard Date: Thu, 31 Oct 2024 14:07:29 -0400 Subject: [PATCH 22/97] Fixed spelling mistake in water blaster description. (#33087) Fixed minor spelling mistake --- .../Entities/Objects/Weapons/Guns/Basic/watergun.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Basic/watergun.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Basic/watergun.yml index c96a1522d2..55adfb7ba6 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Basic/watergun.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Basic/watergun.yml @@ -1,4 +1,4 @@ -- type: entity +- type: entity id: WeaponWaterGunBase abstract: true parent: BaseItem @@ -71,7 +71,7 @@ id: WeaponWaterBlaster parent: WeaponWaterGunBase name: water blaster - description: With this bad boy, you'll be the cooleste kid at the summer barbecue. + description: With this bad boy, you'll be the coolest kid at the summer barbecue. components: - type: Gun cameraRecoilScalar: 0 #no recoil From 4626904fa8e5915a4faddd74a4d917d8442bfb99 Mon Sep 17 00:00:00 2001 From: SlamBamActionman <83650252+SlamBamActionman@users.noreply.github.com> Date: Thu, 31 Oct 2024 19:46:19 +0100 Subject: [PATCH 23/97] [#20285 fix] Carp Plush and Rehydratables can now be put into mop bucket (#33079) * Make shark plush janitor-bucketable * fix bucketed grey shark texture * Make sprites less shiny and adapt copyright notice * Made shark way way less shiny * Allow carp plush and rehydratables in mop bucket. * Remove old mop bucket shark sprites * Fix post-merge bugs * Fix errors * Move ReactiveContainer stuff to shared That should mean it is now predicted. * Custom eject verb for the mop bucket * Fixes OnSolutionChange, removes pop-up as there already is one. * .ftl is not necessary as the custom pop-up was removed * Review fixes * Update Content.Shared/Chemistry/Components/ReactiveContainerComponent.cs * Update Content.Shared/Chemistry/EntitySystems/ReactiveContainerSystem.cs --------- Co-authored-by: Psychpsyo Co-authored-by: Psychpsyo <60073468+Psychpsyo@users.noreply.github.com> Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> --- .../Components/ReactiveContainerComponent.cs | 21 +++++++ .../EntitySystems/ReactiveContainerSystem.cs | 53 ++++++++++++++++++ .../janitorial/janitorial-slot-component.ftl | 3 +- .../Prototypes/Entities/Objects/Fun/toys.yml | 5 ++ .../Structures/Specific/Janitor/janicart.yml | 19 +++++-- Resources/Prototypes/tags.yml | 3 + .../Objects/Fun/sharkplush.rsi/meta.json | 9 --- .../Janitorial/janitorial.rsi/meta.json | 14 ++++- .../janitorial.rsi/mopbucket_carpplush.png | Bin 0 -> 587 bytes .../janitorial.rsi}/mopbucket_shark_blue.png | Bin .../janitorial.rsi}/mopbucket_shark_grey.png | Bin .../janitorial.rsi}/mopbucket_shark_pink.png | Bin 12 files changed, 112 insertions(+), 15 deletions(-) create mode 100644 Content.Shared/Chemistry/Components/ReactiveContainerComponent.cs create mode 100644 Content.Shared/Chemistry/EntitySystems/ReactiveContainerSystem.cs create mode 100644 Resources/Textures/Objects/Specific/Janitorial/janitorial.rsi/mopbucket_carpplush.png rename Resources/Textures/Objects/{Fun/sharkplush.rsi => Specific/Janitorial/janitorial.rsi}/mopbucket_shark_blue.png (100%) rename Resources/Textures/Objects/{Fun/sharkplush.rsi => Specific/Janitorial/janitorial.rsi}/mopbucket_shark_grey.png (100%) rename Resources/Textures/Objects/{Fun/sharkplush.rsi => Specific/Janitorial/janitorial.rsi}/mopbucket_shark_pink.png (100%) diff --git a/Content.Shared/Chemistry/Components/ReactiveContainerComponent.cs b/Content.Shared/Chemistry/Components/ReactiveContainerComponent.cs new file mode 100644 index 0000000000..6aefd8f462 --- /dev/null +++ b/Content.Shared/Chemistry/Components/ReactiveContainerComponent.cs @@ -0,0 +1,21 @@ +namespace Content.Shared.Chemistry.Components; + +/// +/// Represents a container that also contains a solution. +/// This means that reactive entities react when inserted into the container. +/// +[RegisterComponent] +public sealed partial class ReactiveContainerComponent : Component +{ + /// + /// The container that holds the solution. + /// + [DataField(required: true)] + public string Container = default!; + + /// + /// The solution in the container. + /// + [DataField(required: true)] + public string Solution = default!; +} diff --git a/Content.Shared/Chemistry/EntitySystems/ReactiveContainerSystem.cs b/Content.Shared/Chemistry/EntitySystems/ReactiveContainerSystem.cs new file mode 100644 index 0000000000..aa217c60ba --- /dev/null +++ b/Content.Shared/Chemistry/EntitySystems/ReactiveContainerSystem.cs @@ -0,0 +1,53 @@ +using Content.Shared.Chemistry.Components; +using Content.Shared.Chemistry.Reaction; +using Robust.Shared.Containers; + +namespace Content.Shared.Chemistry.EntitySystems; + +public sealed class ReactiveContainerSystem : EntitySystem +{ + [Dependency] private readonly SharedContainerSystem _containerSystem = default!; + [Dependency] private readonly ReactiveSystem _reactiveSystem = default!; + [Dependency] private readonly SharedSolutionContainerSystem _solutionContainerSystem = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnInserted); + SubscribeLocalEvent(OnSolutionChange); + } + + private void OnInserted(EntityUid uid, ReactiveContainerComponent comp, EntInsertedIntoContainerMessage args) + { + // Only reactive entities can react with the solution + if (!HasComp(args.Entity)) + return; + + if (!_solutionContainerSystem.TryGetSolution(uid, comp.Solution, out _, out var solution)) + return; + if (solution.Volume == 0) + return; + + _reactiveSystem.DoEntityReaction(args.Entity, solution, ReactionMethod.Touch); + } + + private void OnSolutionChange(EntityUid uid, ReactiveContainerComponent comp, SolutionContainerChangedEvent args) + { + if (!_solutionContainerSystem.TryGetSolution(uid, comp.Solution, out _, out var solution)) + return; + if (solution.Volume == 0) + return; + if (!TryComp(uid, out var manager)) + return; + if (!_containerSystem.TryGetContainer(uid, comp.Container, out var container)) + return; + + foreach (var entity in container.ContainedEntities) + { + if (!HasComp(entity)) + continue; + _reactiveSystem.DoEntityReaction(entity, solution, ReactionMethod.Touch); + } + } +} diff --git a/Resources/Locale/en-US/janitorial/janitorial-slot-component.ftl b/Resources/Locale/en-US/janitorial/janitorial-slot-component.ftl index b722116587..bc03943a01 100644 --- a/Resources/Locale/en-US/janitorial/janitorial-slot-component.ftl +++ b/Resources/Locale/en-US/janitorial/janitorial-slot-component.ftl @@ -1,5 +1,6 @@ # mop bucket -mop-bucket-slot-component-slot-name-shark = Shark +mop-bucket-slot-component-slot-name-item = Item +mop-bucket-slot-component-eject-verb = Take out # janitorial trolley janitorial-trolley-slot-component-slot-name-plunger = Plunger janitorial-trolley-slot-component-slot-name-sign = Sign diff --git a/Resources/Prototypes/Entities/Objects/Fun/toys.yml b/Resources/Prototypes/Entities/Objects/Fun/toys.yml index c3ef0d0329..d774c4469c 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/toys.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/toys.yml @@ -599,6 +599,11 @@ path: /Audio/Effects/bite.ogg angle: 0 animation: WeaponArcBite # Rrrr! + - type: Tag + tags: + - Payload + - ClothMade + - PlushieCarp - type: entity parent: PlushieCarp diff --git a/Resources/Prototypes/Entities/Structures/Specific/Janitor/janicart.yml b/Resources/Prototypes/Entities/Structures/Specific/Janitor/janicart.yml index 6ed06addcd..d74fe8b0f1 100644 --- a/Resources/Prototypes/Entities/Structures/Specific/Janitor/janicart.yml +++ b/Resources/Prototypes/Entities/Structures/Specific/Janitor/janicart.yml @@ -47,19 +47,30 @@ whitelist: tags: - PlushieSharkGrey - sprite: Objects/Fun/sharkplush.rsi + mopbucket_carpplush: + whitelist: + tags: + - PlushieCarp + sprite: Objects/Specific/Janitorial/janitorial.rsi - type: Transform noRot: true - type: ItemSlots slots: - shark_slot: - name: mop-bucket-slot-component-slot-name-shark + item_slot: + name: mop-bucket-slot-component-slot-name-item + ejectVerbText: mop-bucket-slot-component-eject-verb whitelist: tags: - PlushieSharkBlue - PlushieSharkPink - PlushieSharkGrey + - PlushieCarp + components: + - Rehydratable priority: 3 # Higher than drinking priority + - type: ReactiveContainer + solution: bucket + container: item_slot - type: Drink solution: bucket - type: Appearance @@ -70,7 +81,7 @@ containers: storagebase: !type:Container ents: [] - shark_slot: !type:ContainerSlot {} + item_slot: !type:ContainerSlot {} - type: GuideHelp guides: - Janitorial diff --git a/Resources/Prototypes/tags.yml b/Resources/Prototypes/tags.yml index 8962da5790..48bce7ddab 100644 --- a/Resources/Prototypes/tags.yml +++ b/Resources/Prototypes/tags.yml @@ -1071,6 +1071,9 @@ - type: Tag id: Plunger +- type: Tag + id: PlushieCarp + - type: Tag id: PlushieGhost diff --git a/Resources/Textures/Objects/Fun/sharkplush.rsi/meta.json b/Resources/Textures/Objects/Fun/sharkplush.rsi/meta.json index eca1964c4d..12144d3559 100644 --- a/Resources/Textures/Objects/Fun/sharkplush.rsi/meta.json +++ b/Resources/Textures/Objects/Fun/sharkplush.rsi/meta.json @@ -39,15 +39,6 @@ { "name": "grey-inhand-right", "directions": 4 - }, - { - "name": "mopbucket_shark_blue" - }, - { - "name": "mopbucket_shark_pink" - }, - { - "name": "mopbucket_shark_grey" } ] } \ No newline at end of file diff --git a/Resources/Textures/Objects/Specific/Janitorial/janitorial.rsi/meta.json b/Resources/Textures/Objects/Specific/Janitorial/janitorial.rsi/meta.json index ae3103e2be..4f7a1e7772 100644 --- a/Resources/Textures/Objects/Specific/Janitorial/janitorial.rsi/meta.json +++ b/Resources/Textures/Objects/Specific/Janitorial/janitorial.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/f8f4aeda930fcd0805ca4cc76d9bc9412a5b3428", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/f8f4aeda930fcd0805ca4cc76d9bc9412a5b3428, mopbucket_shark_* by Psychpsyo, mopbucket_carpplush adapted by Psychpsyo from tgstation carpplush at commit https://github.com/tgstation/tgstation/commit/e1142f20f5e4661cb6845cfcf2dd69f864d67432", "size": { "x": 32, "y": 32 @@ -25,6 +25,18 @@ { "name": "mopbucket_water-3" }, + { + "name": "mopbucket_shark_blue" + }, + { + "name": "mopbucket_shark_pink" + }, + { + "name": "mopbucket_shark_grey" + }, + { + "name": "mopbucket_carpplush" + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Objects/Specific/Janitorial/janitorial.rsi/mopbucket_carpplush.png b/Resources/Textures/Objects/Specific/Janitorial/janitorial.rsi/mopbucket_carpplush.png new file mode 100644 index 0000000000000000000000000000000000000000..07ef0a77d006ba591efd80af039c800a90660f37 GIT binary patch literal 587 zcmV-R0<`^!P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0pLkQK~z{r?UhYS z+)xyT-+}v>9_k56`q@<+ezenU(WA;D%RXe+Vgs8x`QZ!_O z>T`*wo1Rh3dmCU@aiV6hfSMSjE*xvo9iT#Hf|nM&d8?3_e=@*)#F<)>Rn(~hQ$pb) zC2=xQmnod4fHNoHw=MndZHDe`fQ6^20k8c&Wvwt&*>fk47_LY}+ljt^)0@SY$|+{v z*?K)`#Mr>sEmv*4KfqhJiH4n^mkRtzq^>|p`&~%PFDpcQ3L#ZtEY4i26t6l!5Cqq{ zS#1h37JngI=#nUB%>g)1E&v-?m>%JGEO9(^XoYKW=B7AfWPrtOOyPT?a7Mj88n{|q z_n+DjlPM-r0>5Z~=hDY{V$oa(?DajY1rg#n&YP7{xCK1%`K>m=xODIwwC#~zGhP+w z&06?&n3?f(Z8AFep|9(BVm Date: Thu, 31 Oct 2024 18:47:26 +0000 Subject: [PATCH 24/97] Automatic changelog update --- Resources/Changelog/Changelog.yml | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index c3121dc7d0..370970d8dd 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: slarticodefast - changes: - - message: Added tooltips to the agent ID job icons - type: Add - id: 7069 - time: '2024-08-09T06:14:07.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28575 - author: stalengd changes: - message: Head bandana no longer blocks food eating. @@ -3943,3 +3936,11 @@ id: 7568 time: '2024-10-31T14:53:38.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/32601 +- author: Psychpsyo + changes: + - message: Carp plushies can now be placed in mop buckets, along with other rehydratable + things like monkey cubes. + type: Add + id: 7569 + time: '2024-10-31T18:46:19.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/33079 From 2282e3c352827d1638cfdda62d1a5b6683679b33 Mon Sep 17 00:00:00 2001 From: Vasilis Date: Thu, 31 Oct 2024 19:51:44 +0100 Subject: [PATCH 25/97] Revert #28358 (#33090) --- .github/workflows/labeler-approved.yml | 14 -------------- 1 file changed, 14 deletions(-) delete mode 100644 .github/workflows/labeler-approved.yml diff --git a/.github/workflows/labeler-approved.yml b/.github/workflows/labeler-approved.yml deleted file mode 100644 index e05893ed8f..0000000000 --- a/.github/workflows/labeler-approved.yml +++ /dev/null @@ -1,14 +0,0 @@ -name: "Labels: Approved" - -on: - pull_request_review: - types: [submitted] - -jobs: - add_label: - if: github.event.review.state == 'APPROVED' - runs-on: ubuntu-latest - steps: - - uses: actions-ecosystem/action-add-labels@v1 - with: - labels: "PR: Approved" From 56d62311b1a16c2471b4f5a07a87f70532a3feb8 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Thu, 31 Oct 2024 17:30:58 -0400 Subject: [PATCH 26/97] Fixes tailthump breaking positional audio by making it mono (#33092) --- .../Voice/Reptilian/reptilian_tailthump.ogg | Bin 31956 -> 9215 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Resources/Audio/Voice/Reptilian/reptilian_tailthump.ogg b/Resources/Audio/Voice/Reptilian/reptilian_tailthump.ogg index e4bf25f7b8d1e743e34826b343f33e41e9298e16..fff0a8728a7d7123dc4d9b89f23603f677396a34 100644 GIT binary patch delta 8227 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 Hm4W{O+Q|*_ literal 31956 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 Date: Thu, 31 Oct 2024 21:32:04 +0000 Subject: [PATCH 27/97] Automatic changelog update --- Resources/Changelog/Changelog.yml | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 370970d8dd..c8301b9807 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: stalengd - changes: - - message: Head bandana no longer blocks food eating. - type: Fix - id: 7070 - time: '2024-08-09T06:17:51.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28910 - author: Ubaser changes: - message: Oxygen and nitrogen canisters now have new sprites when worn. @@ -3944,3 +3937,13 @@ id: 7569 time: '2024-10-31T18:46:19.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/33079 +- author: Bhijn and Myr + changes: + - message: Tail thumping has been downmixed to mono to fix the sound lacking any + sort of positioning. They're now capable of having a presence in the actual + soundspace, in turn meaning lizards are no longer occupying your headset at + all times of day. + type: Fix + id: 7570 + time: '2024-10-31T21:30:58.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/33092 From cf0d6c482e667802b7ecfb3754616103b759b976 Mon Sep 17 00:00:00 2001 From: Moomoobeef <62638182+Moomoobeef@users.noreply.github.com> Date: Thu, 31 Oct 2024 17:21:05 -0700 Subject: [PATCH 28/97] ExaminableDamage now puts its message at the bottom and in color (#32820) * the examineableDamage component now puts its messages at the bottom, and in color * god help us if something is priority -100 :godo: --- Content.Server/Damage/Systems/ExaminableDamageSystem.cs | 2 +- Resources/Locale/en-US/window/window-component.ftl | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/Content.Server/Damage/Systems/ExaminableDamageSystem.cs b/Content.Server/Damage/Systems/ExaminableDamageSystem.cs index dd7c4b12e8..c80e19a53d 100644 --- a/Content.Server/Damage/Systems/ExaminableDamageSystem.cs +++ b/Content.Server/Damage/Systems/ExaminableDamageSystem.cs @@ -39,7 +39,7 @@ public sealed class ExaminableDamageSystem : EntitySystem var level = GetDamageLevel(uid, component); var msg = Loc.GetString(messages[level]); - args.PushMarkup(msg); + args.PushMarkup(msg,-99); } private int GetDamageLevel(EntityUid uid, ExaminableDamageComponent? component = null, diff --git a/Resources/Locale/en-US/window/window-component.ftl b/Resources/Locale/en-US/window/window-component.ftl index 3ecceb8a94..62e9c46f1b 100644 --- a/Resources/Locale/en-US/window/window-component.ftl +++ b/Resources/Locale/en-US/window/window-component.ftl @@ -2,13 +2,14 @@ # Shown when examining the window. Each entry represents the window's health condition comp-window-damaged-1 = It looks fully intact. -comp-window-damaged-2 = It has a few scratches +comp-window-damaged-2 = It has a few scratches. comp-window-damaged-3 = It has a few small cracks. -comp-window-damaged-4 = It has several big cracks running along its surface. -comp-window-damaged-5 = It has deep cracks across multiple layers. -comp-window-damaged-6 = It's extremely cracked and on the verge of shattering. +comp-window-damaged-4 = [color=yellow]It has several big cracks running along its surface.[/color] +comp-window-damaged-5 = [color=orange]It has deep cracks across multiple layers.[/color] +comp-window-damaged-6 = [color=red]It's extremely cracked and on the verge of shattering.[/color] ### Interaction Messages # Shown when knocking on a window comp-window-knock = *knock knock* + From 835d0b4d4a861c4697c473841c0e00ae7115e4d0 Mon Sep 17 00:00:00 2001 From: Khoa Nguyen Date: Thu, 31 Oct 2024 21:43:11 -0400 Subject: [PATCH 29/97] Fixed trash not being spawned when throwing pies (#33013) * Fixed trash not being spawned when throwing pies * Completely removed trash component flag check prior to the spawn loop --- Content.Server/Nutrition/EntitySystems/CreamPieSystem.cs | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/Content.Server/Nutrition/EntitySystems/CreamPieSystem.cs b/Content.Server/Nutrition/EntitySystems/CreamPieSystem.cs index 2ff94760f6..b107e47c79 100644 --- a/Content.Server/Nutrition/EntitySystems/CreamPieSystem.cs +++ b/Content.Server/Nutrition/EntitySystems/CreamPieSystem.cs @@ -51,12 +51,9 @@ namespace Content.Server.Nutrition.EntitySystems { _puddle.TrySpillAt(uid, solution, out _, false); } - if (foodComp.Trash.Count == 0) + foreach (var trash in foodComp.Trash) { - foreach (var trash in foodComp.Trash) - { - EntityManager.SpawnEntity(trash, Transform(uid).Coordinates); - } + EntityManager.SpawnEntity(trash, Transform(uid).Coordinates); } } ActivatePayload(uid); From 59f1287aa3fa7848d815926d64c15c276f79bc56 Mon Sep 17 00:00:00 2001 From: PJBot Date: Fri, 1 Nov 2024 01:44:18 +0000 Subject: [PATCH 30/97] Automatic changelog update --- Resources/Changelog/Changelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index c8301b9807..f5a8a7fb96 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Ubaser - changes: - - message: Oxygen and nitrogen canisters now have new sprites when worn. - type: Add - id: 7071 - time: '2024-08-09T10:32:55.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30809 - author: Plykiya changes: - message: Buckling someone now triggers a short do-after. @@ -3947,3 +3940,10 @@ id: 7570 time: '2024-10-31T21:30:58.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/33092 +- author: reesque + changes: + - message: pie not dropping tin on thrown + type: Fix + id: 7571 + time: '2024-11-01T01:43:11.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/33013 From b3190b89359ffe6e4e1d58e1c1ef69b8d7f70476 Mon Sep 17 00:00:00 2001 From: SlamBamActionman <83650252+SlamBamActionman@users.noreply.github.com> Date: Fri, 1 Nov 2024 02:47:59 +0100 Subject: [PATCH 31/97] Lower in-round votekick requirements (#32953) Initial commit --- Content.Client/Voting/UI/VoteCallMenu.xaml.cs | 2 +- Content.Shared/CCVar/CCVars.cs | 4 ++-- Resources/Locale/en-US/voting/ui/vote-call-menu.ftl | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Content.Client/Voting/UI/VoteCallMenu.xaml.cs b/Content.Client/Voting/UI/VoteCallMenu.xaml.cs index c5746c24d7..c682a93712 100644 --- a/Content.Client/Voting/UI/VoteCallMenu.xaml.cs +++ b/Content.Client/Voting/UI/VoteCallMenu.xaml.cs @@ -62,7 +62,7 @@ namespace Content.Client.Voting.UI Stylesheet = IoCManager.Resolve().SheetSpace; CloseButton.OnPressed += _ => Close(); - VoteNotTrustedLabel.Text = Loc.GetString("ui-vote-trusted-users-notice", ("timeReq", _cfg.GetCVar(CCVars.VotekickEligibleVoterDeathtime) / 60)); + VoteNotTrustedLabel.Text = Loc.GetString("ui-vote-trusted-users-notice", ("timeReq", _cfg.GetCVar(CCVars.VotekickEligibleVoterDeathtime))); foreach (StandardVoteType voteType in Enum.GetValues()) { diff --git a/Content.Shared/CCVar/CCVars.cs b/Content.Shared/CCVar/CCVars.cs index 339c0f895f..f333f6536d 100644 --- a/Content.Shared/CCVar/CCVars.cs +++ b/Content.Shared/CCVar/CCVars.cs @@ -1469,7 +1469,7 @@ namespace Content.Shared.CCVar /// Config for when the votekick should be allowed to be called based on number of eligible voters. /// public static readonly CVarDef VotekickEligibleNumberRequirement = - CVarDef.Create("votekick.eligible_number", 10, CVar.SERVERONLY); + CVarDef.Create("votekick.eligible_number", 5, CVar.SERVERONLY); /// /// Whether a votekick initiator must be a ghost or not. @@ -1493,7 +1493,7 @@ namespace Content.Shared.CCVar /// Config for how many seconds a player must have been dead to initiate a votekick / be able to vote on a votekick. /// public static readonly CVarDef VotekickEligibleVoterDeathtime = - CVarDef.Create("votekick.voter_deathtime", 180, CVar.REPLICATED | CVar.SERVER); + CVarDef.Create("votekick.voter_deathtime", 30, CVar.REPLICATED | CVar.SERVER); /// /// The required ratio of eligible voters that must agree for a votekick to go through. diff --git a/Resources/Locale/en-US/voting/ui/vote-call-menu.ftl b/Resources/Locale/en-US/voting/ui/vote-call-menu.ftl index 7ac9c344fd..fbae3598ed 100644 --- a/Resources/Locale/en-US/voting/ui/vote-call-menu.ftl +++ b/Resources/Locale/en-US/voting/ui/vote-call-menu.ftl @@ -26,7 +26,7 @@ ui-vote-type-not-available = This vote type has been disabled # Vote option only available for specific users. ui-vote-trusted-users-notice = This vote option is only available to whitelisted players. - In addition, you must have been a ghost for { $timeReq } minutes. + In addition, you must have been a ghost for { $timeReq } seconds. # Warning to not abuse a specific vote option. ui-vote-abuse-warning = From 06da4fcc6020c41d8dcac6612724bf5309518501 Mon Sep 17 00:00:00 2001 From: SlamBamActionman <83650252+SlamBamActionman@users.noreply.github.com> Date: Fri, 1 Nov 2024 02:52:55 +0100 Subject: [PATCH 32/97] Allow votekicks to be initiated in the lobby (#32528) Initial commit --- Content.Client/Voting/UI/VoteCallMenu.xaml.cs | 12 ++++++ Content.Client/Voting/VotingSystem.cs | 5 --- .../Managers/VoteManager.DefaultVotes.cs | 15 +++++-- Content.Server/Voting/VotingSystem.cs | 43 ++++++++++++------- Content.Shared/CCVar/CCVars.cs | 6 +++ 5 files changed, 56 insertions(+), 25 deletions(-) diff --git a/Content.Client/Voting/UI/VoteCallMenu.xaml.cs b/Content.Client/Voting/UI/VoteCallMenu.xaml.cs index c682a93712..b9dd11f7a7 100644 --- a/Content.Client/Voting/UI/VoteCallMenu.xaml.cs +++ b/Content.Client/Voting/UI/VoteCallMenu.xaml.cs @@ -1,5 +1,6 @@ using System.Linq; using System.Numerics; +using Content.Client.Gameplay; using Content.Client.Stylesheets; using Content.Shared.Administration; using Content.Shared.CCVar; @@ -8,6 +9,7 @@ using Content.Shared.Voting; using JetBrains.Annotations; using Robust.Client.AutoGenerated; using Robust.Client.Console; +using Robust.Client.State; using Robust.Client.UserInterface.Controls; using Robust.Client.UserInterface.CustomControls; using Robust.Client.UserInterface.XAML; @@ -28,6 +30,7 @@ namespace Content.Client.Voting.UI [Dependency] private readonly IEntityManager _entityManager = default!; [Dependency] private readonly IEntityNetworkManager _entNetManager = default!; [Dependency] private readonly IConfigurationManager _cfg = default!; + [Dependency] private readonly IStateManager _state = default!; private VotingSystem _votingSystem; @@ -70,6 +73,7 @@ namespace Content.Client.Voting.UI VoteTypeButton.AddItem(Loc.GetString(option.Name), (int)voteType); } + _state.OnStateChanged += OnStateChanged; VoteTypeButton.OnItemSelected += VoteTypeSelected; CreateButton.OnPressed += CreatePressed; FollowButton.OnPressed += FollowSelected; @@ -101,6 +105,14 @@ namespace Content.Client.Voting.UI UpdateVoteTimeout(); } + private void OnStateChanged(StateChangedEventArgs obj) + { + if (obj.NewState is not GameplayState) + return; + + Close(); + } + private void CanCallVoteChanged(bool obj) { if (!obj) diff --git a/Content.Client/Voting/VotingSystem.cs b/Content.Client/Voting/VotingSystem.cs index d204917460..dd74e1ccb1 100644 --- a/Content.Client/Voting/VotingSystem.cs +++ b/Content.Client/Voting/VotingSystem.cs @@ -19,11 +19,6 @@ public sealed class VotingSystem : EntitySystem private void OnVotePlayerListResponseEvent(VotePlayerListResponseEvent msg) { - if (!_ghostSystem.IsGhost) - { - return; - } - VotePlayerListResponse?.Invoke(msg); } diff --git a/Content.Server/Voting/Managers/VoteManager.DefaultVotes.cs b/Content.Server/Voting/Managers/VoteManager.DefaultVotes.cs index 736ff48817..fb99b3cfad 100644 --- a/Content.Server/Voting/Managers/VoteManager.DefaultVotes.cs +++ b/Content.Server/Voting/Managers/VoteManager.DefaultVotes.cs @@ -32,6 +32,7 @@ namespace Content.Server.Voting.Managers private VotingSystem? _votingSystem; private RoleSystem? _roleSystem; + private GameTicker? _gameTicker; private static readonly Dictionary> _voteTypesToEnableCVars = new() { @@ -70,8 +71,8 @@ namespace Content.Server.Voting.Managers default: throw new ArgumentOutOfRangeException(nameof(voteType), voteType, null); } - var ticker = _entityManager.EntitySysManager.GetEntitySystem(); - ticker.UpdateInfoText(); + _gameTicker = _entityManager.EntitySysManager.GetEntitySystem(); + _gameTicker.UpdateInfoText(); if (timeoutVote) TimeoutStandardVote(voteType); } @@ -346,8 +347,14 @@ namespace Content.Server.Voting.Managers return; } + + + var voterEligibility = _cfg.GetCVar(CCVars.VotekickVoterGhostRequirement) ? VoterEligibility.GhostMinimumPlaytime : VoterEligibility.MinimumPlaytime; + if (_cfg.GetCVar(CCVars.VotekickIgnoreGhostReqInLobby) && _gameTicker!.RunLevel == GameRunLevel.PreRoundLobby) + voterEligibility = VoterEligibility.MinimumPlaytime; + var eligibleVoterNumberRequirement = _cfg.GetCVar(CCVars.VotekickEligibleNumberRequirement); - var eligibleVoterNumber = _cfg.GetCVar(CCVars.VotekickVoterGhostRequirement) ? CalculateEligibleVoterNumber(VoterEligibility.GhostMinimumPlaytime) : CalculateEligibleVoterNumber(VoterEligibility.MinimumPlaytime); + var eligibleVoterNumber = CalculateEligibleVoterNumber(voterEligibility); string target = args[0]; string reason = args[1]; @@ -441,7 +448,7 @@ namespace Content.Server.Voting.Managers }, Duration = TimeSpan.FromSeconds(_cfg.GetCVar(CCVars.VotekickTimer)), InitiatorTimeout = TimeSpan.FromMinutes(_cfg.GetCVar(CCVars.VotekickTimeout)), - VoterEligibility = _cfg.GetCVar(CCVars.VotekickVoterGhostRequirement) ? VoterEligibility.GhostMinimumPlaytime : VoterEligibility.MinimumPlaytime, + VoterEligibility = voterEligibility, DisplayVotes = false, TargetEntity = targetNetEntity }; diff --git a/Content.Server/Voting/VotingSystem.cs b/Content.Server/Voting/VotingSystem.cs index 25475c2157..3d3aeb4859 100644 --- a/Content.Server/Voting/VotingSystem.cs +++ b/Content.Server/Voting/VotingSystem.cs @@ -1,5 +1,6 @@ using Content.Server.Administration.Managers; using Content.Server.Database; +using Content.Server.GameTicking; using Content.Server.Ghost; using Content.Server.Roles.Jobs; using Content.Shared.CCVar; @@ -24,6 +25,7 @@ public sealed class VotingSystem : EntitySystem [Dependency] private readonly IGameTiming _gameTiming = default!; [Dependency] private readonly IConfigurationManager _cfg = default!; [Dependency] private readonly JobSystem _jobs = default!; + [Dependency] private readonly GameTicker _gameTicker = default!; public override void Initialize() { @@ -34,8 +36,7 @@ public sealed class VotingSystem : EntitySystem private async void OnVotePlayerListRequestEvent(VotePlayerListRequestEvent msg, EntitySessionEventArgs args) { - if (args.SenderSession.AttachedEntity is not { Valid: true } entity - || !await CheckVotekickInitEligibility(args.SenderSession)) + if (!await CheckVotekickInitEligibility(args.SenderSession)) { var deniedResponse = new VotePlayerListResponseEvent(new (NetUserId, NetEntity, string)[0], true); RaiseNetworkEvent(deniedResponse, args.SenderSession.Channel); @@ -46,17 +47,23 @@ public sealed class VotingSystem : EntitySystem foreach (var player in _playerManager.Sessions) { - if (player.AttachedEntity is not { Valid: true } attached) - continue; - - if (attached == entity) continue; + if (args.SenderSession == player) continue; if (_adminManager.IsAdmin(player, false)) continue; - var playerName = GetPlayerVoteListName(attached); - var netEntity = GetNetEntity(attached); + if (player.AttachedEntity is not { Valid: true } attached) + { + var playerName = player.Name; + var netEntity = NetEntity.Invalid; + players.Add((player.UserId, netEntity, playerName)); + } + else + { + var playerName = GetPlayerVoteListName(attached); + var netEntity = GetNetEntity(attached); - players.Add((player.UserId, netEntity, playerName)); + players.Add((player.UserId, netEntity, playerName)); + } } var response = new VotePlayerListResponseEvent(players.ToArray(), false); @@ -86,15 +93,19 @@ public sealed class VotingSystem : EntitySystem if (initiator.AttachedEntity != null && _adminManager.IsAdmin(initiator.AttachedEntity.Value, false)) return true; - if (_cfg.GetCVar(CCVars.VotekickInitiatorGhostRequirement)) + // If cvar enabled, skip the ghost requirement in the preround lobby + if (!_cfg.GetCVar(CCVars.VotekickIgnoreGhostReqInLobby) || (_cfg.GetCVar(CCVars.VotekickIgnoreGhostReqInLobby) && _gameTicker.RunLevel != GameRunLevel.PreRoundLobby)) { - // Must be ghost - if (!TryComp(initiator.AttachedEntity, out GhostComponent? ghostComp)) - return false; + if (_cfg.GetCVar(CCVars.VotekickInitiatorGhostRequirement)) + { + // Must be ghost + if (!TryComp(initiator.AttachedEntity, out GhostComponent? ghostComp)) + return false; - // Must have been dead for x seconds - if ((int)_gameTiming.RealTime.Subtract(ghostComp.TimeOfDeath).TotalSeconds < _cfg.GetCVar(CCVars.VotekickEligibleVoterDeathtime)) - return false; + // Must have been dead for x seconds + if ((int)_gameTiming.RealTime.Subtract(ghostComp.TimeOfDeath).TotalSeconds < _cfg.GetCVar(CCVars.VotekickEligibleVoterDeathtime)) + return false; + } } // Must be whitelisted diff --git a/Content.Shared/CCVar/CCVars.cs b/Content.Shared/CCVar/CCVars.cs index f333f6536d..d1dc9d9ade 100644 --- a/Content.Shared/CCVar/CCVars.cs +++ b/Content.Shared/CCVar/CCVars.cs @@ -1537,6 +1537,12 @@ namespace Content.Shared.CCVar public static readonly CVarDef VotekickBanDuration = CVarDef.Create("votekick.ban_duration", 180, CVar.SERVERONLY); + /// + /// Whether the ghost requirement settings for votekicks should be ignored for the lobby. + /// + public static readonly CVarDef VotekickIgnoreGhostReqInLobby = + CVarDef.Create("votekick.ignore_ghost_req_in_lobby", true, CVar.SERVERONLY); + /* * BAN */ From 973aeb1aaa596e0237bed80a701607c5ccdafcf0 Mon Sep 17 00:00:00 2001 From: PJBot Date: Fri, 1 Nov 2024 01:54:01 +0000 Subject: [PATCH 33/97] Automatic changelog update --- Resources/Changelog/Changelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index f5a8a7fb96..fc04aaad0e 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Plykiya - changes: - - message: Buckling someone now triggers a short do-after. - type: Tweak - id: 7072 - time: '2024-08-09T15:43:02.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29621 - author: Ubaser changes: - message: Normal crowbars cannot be placed in pockets, but can now fit in belts. @@ -3947,3 +3940,10 @@ id: 7571 time: '2024-11-01T01:43:11.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/33013 +- author: SlamBamActionman + changes: + - message: Votekicks can now be initiated during the pregame lobby. + type: Fix + id: 7572 + time: '2024-11-01T01:52:55.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32528 From d708a150e16b79312bc156ab35b38f37887b828a Mon Sep 17 00:00:00 2001 From: PopGamer46 Date: Fri, 1 Nov 2024 03:04:08 +0100 Subject: [PATCH 34/97] Fixes bolt lights of previously unpowered bolted doors (#33063) fix --- Content.Server/Doors/Systems/DoorSystem.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Content.Server/Doors/Systems/DoorSystem.cs b/Content.Server/Doors/Systems/DoorSystem.cs index 292f8ec8e9..754818619a 100644 --- a/Content.Server/Doors/Systems/DoorSystem.cs +++ b/Content.Server/Doors/Systems/DoorSystem.cs @@ -46,8 +46,8 @@ public sealed class DoorSystem : SharedDoorSystem SetBoltsDown(ent, true); } - UpdateBoltLightStatus(ent); ent.Comp.Powered = args.Powered; Dirty(ent, ent.Comp); + UpdateBoltLightStatus(ent); } } From 25b3898b287bcfbb3cc44ef62a4e8a3de3c0d1dd Mon Sep 17 00:00:00 2001 From: PJBot Date: Fri, 1 Nov 2024 02:05:15 +0000 Subject: [PATCH 35/97] Automatic changelog update --- Resources/Changelog/Changelog.yml | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index fc04aaad0e..47744c0432 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,14 +1,4 @@ Entries: -- author: Ubaser - changes: - - message: Normal crowbars cannot be placed in pockets, but can now fit in belts. - type: Tweak - - message: Depending on where you obtained the crowbars, they will now have different - colours. - type: Tweak - id: 7073 - time: '2024-08-09T19:29:00.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28988 - author: lzk228 changes: - message: Hotplate works again. @@ -3947,3 +3937,10 @@ id: 7572 time: '2024-11-01T01:52:55.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/32528 +- author: PopGamer46 + changes: + - message: Fixed bolt lights of recently unpowered bolted doors + type: Fix + id: 7573 + time: '2024-11-01T02:04:09.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/33063 From 6ce80d914d34807683fcf0118a2c86024ade7eef Mon Sep 17 00:00:00 2001 From: RumiTiger <154005209+RumiTiger@users.noreply.github.com> Date: Fri, 1 Nov 2024 05:06:46 +0300 Subject: [PATCH 36/97] Muffins (#29318) * Update meta.json * Add files via upload * Update misc.yml * Update meal_recipes.yml * Update meta.json * Add files via upload * Update plate.yml * Update food_baked_single.yml * Update dinnerware.yml * Update cooking.yml * Update misc.yml * Add files via upload * Delete Resources/Textures/Objects/Consumable/Food/Baked/misc.rsi/muffin-cherry.png * Add files via upload * Update meta.json * Update misc.yml * Update meal_recipes.yml * Update meta.json * Fix meta.json * Fix meta.json again * Update misc.yml * Update misc.yml * Update misc.yml * Update misc.yml * Update meta.json * Update meta.json * Update misc.yml * Update meal_recipes.yml * Update Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/misc.yml Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> * Update dinnerware.yml * Delete cherry * Add files via upload * Delete banana * Add banana * Delete chocolate * Add chocolate * lathe recipe fix --------- Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> --- .../Inventories/dinnerware.yml | 1 + .../Random/Food_Drinks/food_baked_single.yml | 2 + .../Objects/Consumable/Food/Baked/misc.yml | 97 ++++++++++++++++-- .../Consumable/Food/Containers/plate.yml | 24 +++++ .../Entities/Structures/Machines/lathe.yml | 1 + .../Recipes/Cooking/meal_recipes.yml | 61 +++++++++++ .../Prototypes/Recipes/Lathes/cooking.yml | 7 ++ .../Consumable/Food/Baked/misc.rsi/meta.json | 9 +- .../Food/Baked/misc.rsi/muffin-banana.png | Bin 0 -> 373 bytes .../Food/Baked/misc.rsi/muffin-berry.png | Bin 611 -> 3389 bytes .../Food/Baked/misc.rsi/muffin-cherry.png | Bin 285 -> 299 bytes .../Food/Baked/misc.rsi/muffin-chocolate.png | Bin 0 -> 425 bytes .../Consumable/Food/plates.rsi/meta.json | 5 +- .../Consumable/Food/plates.rsi/muffin-tin.png | Bin 0 -> 3023 bytes 14 files changed, 198 insertions(+), 9 deletions(-) create mode 100644 Resources/Textures/Objects/Consumable/Food/Baked/misc.rsi/muffin-banana.png create mode 100644 Resources/Textures/Objects/Consumable/Food/Baked/misc.rsi/muffin-chocolate.png create mode 100644 Resources/Textures/Objects/Consumable/Food/plates.rsi/muffin-tin.png diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/dinnerware.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/dinnerware.yml index d7108ab995..046607f21a 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/dinnerware.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/dinnerware.yml @@ -11,6 +11,7 @@ FoodPlate: 10 FoodPlateSmall: 10 FoodPlateTin: 5 + FoodPlateMuffinTin: 5 FoodKebabSkewer: 5 DrinkGlass: 5 Beaker: 5 diff --git a/Resources/Prototypes/Entities/Markers/Spawners/Random/Food_Drinks/food_baked_single.yml b/Resources/Prototypes/Entities/Markers/Spawners/Random/Food_Drinks/food_baked_single.yml index 68d9394ea1..fa28567639 100644 --- a/Resources/Prototypes/Entities/Markers/Spawners/Random/Food_Drinks/food_baked_single.yml +++ b/Resources/Prototypes/Entities/Markers/Spawners/Random/Food_Drinks/food_baked_single.yml @@ -46,6 +46,8 @@ - FoodBakedMuffinBerry - FoodBakedMuffinCherry - FoodBakedMuffinBluecherry + - FoodBakedMuffinChocolate + - FoodBakedMuffinBanana - FoodBakedBunHoney - FoodBakedBunHotX - FoodBakedBunMeat diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/misc.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/misc.yml index 8b455fe872..b4be6a8dfd 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/misc.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/misc.yml @@ -19,44 +19,84 @@ - type: Item size: Tiny -# Muffins/Buns +# Muffins - type: entity name: muffin - parent: FoodBakedBase + parent: FoodInjectableBase id: FoodBakedMuffin description: A delicious and spongy little cake. components: + - type: Food + trash: + - FoodPlateMuffinTin - type: Sprite + sprite: Objects/Consumable/Food/Baked/misc.rsi state: muffin + - type: SolutionContainerManager + solutions: + food: + maxVol: 10 + reagents: + - ReagentId: Nutriment + Quantity: 6 + - ReagentId: Vitamin + Quantity: 2 + - type: FlavorProfile + flavors: + - sweet + - type: Item + size: Tiny - type: entity name: berry muffin - parent: FoodBakedBase + parent: FoodBakedMuffin id: FoodBakedMuffinBerry description: A delicious and spongy little cake, with berries. components: - type: Sprite state: muffin-berry + - type: SolutionContainerManager + solutions: + food: + maxVol: 12 + reagents: + - ReagentId: Nutriment + Quantity: 6 + - ReagentId: Vitamin + Quantity: 2 + - ReagentId: JuiceBerry + Quantity: 2 - type: Tag tags: - Fruit - type: entity name: cherry muffin - parent: FoodBakedBase + parent: FoodBakedMuffin id: FoodBakedMuffinCherry description: A sweet muffin with cherry bits. components: - type: Sprite state: muffin-cherry + - type: SolutionContainerManager + solutions: + food: + maxVol: 12 + reagents: + - ReagentId: Nutriment + Quantity: 6 + - ReagentId: Vitamin + Quantity: 2 + - ReagentId: JuiceCherry + Quantity: 2 - type: Tag tags: - Fruit - type: entity name: bluecherry muffin - parent: FoodBakedBase + parent: FoodBakedMuffin id: FoodBakedMuffinBluecherry description: Blue cherries inside a delicious muffin. components: @@ -66,6 +106,51 @@ tags: - Fruit +- type: entity + name: chocolate muffin + parent: FoodBakedMuffin + id: FoodBakedMuffinChocolate + description: A delicious and spongy chocolate muffin. + components: + - type: Sprite + state: muffin-chocolate + - type: SolutionContainerManager + solutions: + food: + maxVol: 12 + reagents: + - ReagentId: Nutriment + Quantity: 6 + - ReagentId: Vitamin + Quantity: 2 + - ReagentId: CocoaPowder + Quantity: 2 + +- type: entity + name: banana muffin + parent: FoodBakedMuffin + id: FoodBakedMuffinBanana + description: A delicious and spongy banana muffin. + components: + - type: Sprite + state: muffin-banana + - type: SolutionContainerManager + solutions: + food: + maxVol: 12 + reagents: + - ReagentId: Nutriment + Quantity: 6 + - ReagentId: Vitamin + Quantity: 2 + - ReagentId: JuiceBanana + Quantity: 2 + - type: Tag + tags: + - Fruit + +# Buns + - type: entity name: honey bun #TODO honey parent: FoodBakedBase @@ -685,4 +770,4 @@ - type: DamageOtherOnHit damage: types: - Blunt: 0 # so the damage stats icon doesn't immediately give away the syndie ones \ No newline at end of file + Blunt: 0 # so the damage stats icon doesn't immediately give away the syndie ones diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/plate.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/plate.yml index 63c47df67e..2e2f2979bc 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/plate.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/plate.yml @@ -178,3 +178,27 @@ materialComposition: Steel: 60 - type: SpaceGarbage + +# Muffin Tin + +- type: entity + name: muffin tin + parent: BaseItem + id: FoodPlateMuffinTin + description: A cheap foil tin for muffins. + components: + - type: Sprite + sprite: Objects/Consumable/Food/plates.rsi + state: muffin-tin + - type: Item + size: Small + shape: + - 0,0,1,0 + storedOffset: 0,-3 + - type: Tag + tags: + - Trash + - type: PhysicalComposition + materialComposition: + Steel: 30 + - type: SpaceGarbage diff --git a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml index a8e4d0f43e..b27f2cc1b9 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml @@ -163,6 +163,7 @@ - FoodPlateSmallPlastic - FoodBowlBig - FoodPlateTin + - FoodPlateMuffinTin - FoodKebabSkewer - SprayBottle - MopItem diff --git a/Resources/Prototypes/Recipes/Cooking/meal_recipes.yml b/Resources/Prototypes/Recipes/Cooking/meal_recipes.yml index fa2b657391..173cf9e9db 100644 --- a/Resources/Prototypes/Recipes/Cooking/meal_recipes.yml +++ b/Resources/Prototypes/Recipes/Cooking/meal_recipes.yml @@ -1779,6 +1779,67 @@ FoodOrange: 1 FoodAmbrosiaVulgaris: 1 +# Muffins + +- type: microwaveMealRecipe + id: RecipeMuffin + name: muffin recipe + result: FoodBakedMuffin + time: 15 + solids: + FoodPlateMuffinTin: 1 + FoodDoughSlice: 1 + reagents: + Sugar: 10 + +- type: microwaveMealRecipe + id: RecipeMuffinChocolate + name: chocolate muffin recipe + result: FoodBakedMuffinChocolate + time: 15 + solids: + FoodPlateMuffinTin: 1 + FoodDoughSlice: 1 + FoodSnackChocolateBar: 1 + reagents: + Sugar: 10 + +- type: microwaveMealRecipe + id: RecipeMuffinBerry + name: berry muffin recipe + result: FoodBakedMuffinBerry + time: 15 + solids: + FoodPlateMuffinTin: 1 + FoodDoughSlice: 1 + FoodBerries: 1 + reagents: + Sugar: 10 + +- type: microwaveMealRecipe + id: RecipeMuffinBanana + name: banana muffin recipe + result: FoodBakedMuffinBanana + time: 15 + solids: + FoodPlateMuffinTin: 1 + FoodDoughSlice: 1 + FoodBanana: 1 + reagents: + Sugar: 10 + +- type: microwaveMealRecipe + id: RecipeMuffinCherry + name: cherry muffin recipe + result: FoodBakedMuffinCherry + time: 15 + solids: + FoodPlateMuffinTin: 1 + FoodDoughSlice: 1 + FoodCherry: 3 + reagents: + Sugar: 10 + # NOT ACTUAL FOOD - type: microwaveMealRecipe diff --git a/Resources/Prototypes/Recipes/Lathes/cooking.yml b/Resources/Prototypes/Recipes/Lathes/cooking.yml index 577d8299da..c28a937015 100644 --- a/Resources/Prototypes/Recipes/Lathes/cooking.yml +++ b/Resources/Prototypes/Recipes/Lathes/cooking.yml @@ -98,6 +98,13 @@ materials: Steel: 100 +- type: latheRecipe + id: FoodPlateMuffinTin + result: FoodPlateMuffinTin + completetime: 0.4 + materials: + Steel: 50 + - type: latheRecipe id: FoodKebabSkewer result: FoodKebabSkewer diff --git a/Resources/Textures/Objects/Consumable/Food/Baked/misc.rsi/meta.json b/Resources/Textures/Objects/Consumable/Food/Baked/misc.rsi/meta.json index c6c435a5c9..ea2e3dc6ea 100644 --- a/Resources/Textures/Objects/Consumable/Food/Baked/misc.rsi/meta.json +++ b/Resources/Textures/Objects/Consumable/Food/Baked/misc.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation and modified by Swept at https://github.com/tgstation/tgstation/commit/40d75cc340c63582fb66ce15bf75a36115f6bdaa. Chevrechaud created by Github user deathride58, croissant taken from tgstation at commit https://github.com/tgstation/tgstation/commit/7ffd61b6fa6a6183daa8900f9a490f46f7a81955", + "copyright": "Taken from tgstation and modified by Swept at https://github.com/tgstation/tgstation/commit/40d75cc340c63582fb66ce15bf75a36115f6bdaa. Chevrechaud created by Github user deathride58, croissant taken from tgstation at commit https://github.com/tgstation/tgstation/commit/7ffd61b6fa6a6183daa8900f9a490f46f7a81955. Muffin-chocolate, muffin-banana and muffin-cherry sprites modified from the original muffin sprite by RumiTiger", "size": { "x": 32, "y": 32 @@ -162,7 +162,12 @@ }, { "name": "croissant" + }, + { + "name": "muffin-chocolate" + }, + { + "name": "muffin-banana" } ] } - diff --git a/Resources/Textures/Objects/Consumable/Food/Baked/misc.rsi/muffin-banana.png b/Resources/Textures/Objects/Consumable/Food/Baked/misc.rsi/muffin-banana.png new file mode 100644 index 0000000000000000000000000000000000000000..51ab05eea1ed98117c1a6c92d1f188e163af63cd GIT binary patch literal 373 zcmV-*0gC>KP)Px$FG)l}R9J=Wl&@06Fc6177(`7gIgxW9;0dt2055PS&hii^c?cYX!D4uTvuA3H z0M`hRiD+FAX?nS#%xnt`f_yWb{MpU!FWV%LNF);for5Whni7ZceFI=&b~P>5s73A# z*AHxDFwhz>8fMFJF%PAVO^Ks`{>%66SpkKDavh2MDFIE1%TzRB2AsM%HHXaz5#kE; zNkVcP&4I6q-F2lLNt`kRsDY%Bu(q>V1KJ`+B;Z}calEZgKpVyujM=qj=ofuQKvfBx zEa+OEI3T_<;b6_9N`#Gu9owz~%R6~oQ3U|BhQ$gV?!Wd~tl;TU8qqWA(RjJ_RX90= z*XPeI!0GibJwyO?4cqQKocqKohs&F3u@Z?y;?Ma26SH9r T#ZNbK00000NkvXXu0mjfI!B%? literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Food/Baked/misc.rsi/muffin-berry.png b/Resources/Textures/Objects/Consumable/Food/Baked/misc.rsi/muffin-berry.png index 9e0165e8121f4ef42b231cfa6169f6b531d76893..161da9acb430d928b6ef97426bd06b288562ea4f 100644 GIT binary patch delta 3387 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 R5pVzi002ovPDHLkV1h)-a*F@} delta 587 zcmV-R0<`_T8sh|zBYy%aNklQ`QPz0GcAPjp9#>7DbXR`3S3N;*qpt1CB0`oc8l&%4Tajj8D}8*tpVSAW@+` z;76E(Vntzetc|F@lZaw1t$`DLZwOT*Oe9+veHCK1=zrt%Awd*@FzXa6UT#mc@xxH4 zv@RzcEIT&f_{)q8#iUtLd6|y#y`Ui_9PFKBU9iN=oXW&Zl#puB(Ng35&7@;pM;8Fd zW;GJKBjj><)+hp_s#2Zvk}@?Uu->1ie_x2#X$B!2;OQb$4nuFf3k0002xNklE9XC4n8J3lmf)0-V)&0Vi-yS9u&kk6z|)AVny4JeAD{5y-7O$Br^Zj3!d<_g+W z4IC`v*4R)XOW#2I)&Of~Ju$wE6E};10=lhd!W75@M0i)A8Go6(et56W6f2(~DX)E~ zJ%|1ch^^-qAPHR&trcVYhpO_CfTts5jF6iP-d{!@*2eO=??ArdIUuiB1)#rO2HYlM zGT`o;&=Ax#uBHk*;4xqUj^AoT02NT0apKt0tcMcSzjNqnU~djifm38IMNyQW^8(~K WH~&GnHNF4<00{s|MNUMnLSTYjcX%}b delta 257 zcmV+c0sj800-XYoB!A>dL_t(|oMT`Z1*2dTjDk@x3I-T3lA~#NyV-wqG1tmdWSK>h zCYZ(g&L$Xg7x$ha%OON7-ra8YADhM4972jCm`Jt!V$K5JiJ(ox_ljsnD zfoE@jFh~h=z%7M|kqgKwJQkMdVWe_WeLf0C!6+C7g9ZQqWqwXX&J1V_00000NkvXX Hu0mjfYaVJ* diff --git a/Resources/Textures/Objects/Consumable/Food/Baked/misc.rsi/muffin-chocolate.png b/Resources/Textures/Objects/Consumable/Food/Baked/misc.rsi/muffin-chocolate.png new file mode 100644 index 0000000000000000000000000000000000000000..7ca1a22cb0651c2a615a77172ea78ea4f54c2b67 GIT binary patch literal 425 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 Rw=)0$002ovPDHLkV1idoz03dr literal 0 HcmV?d00001 From b1a8eee52fe34afcbf866d093a1465615ac9e24e Mon Sep 17 00:00:00 2001 From: PJBot Date: Fri, 1 Nov 2024 02:07:53 +0000 Subject: [PATCH 37/97] Automatic changelog update --- Resources/Changelog/Changelog.yml | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 47744c0432..93619da001 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: lzk228 - changes: - - message: Hotplate works again. - type: Fix - id: 7074 - time: '2024-08-10T01:10:39.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30830 - author: EmoGarbage404 changes: - message: Maintenance closets have more variety in what they can contain. @@ -3944,3 +3937,15 @@ id: 7573 time: '2024-11-01T02:04:09.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/33063 +- author: RumiTiger + changes: + - message: A chocolate and banana muffin has been added to the game. The berry and + cherry muffins have also been resprited! + type: Add + - message: Now you can make a regular, chocolate, banana, and berry muffin! + type: Tweak + - message: Muffin tins have been added to the game. They are needed for making muffins! + type: Add + id: 7574 + time: '2024-11-01T02:06:46.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/29318 From e17d152838a4c34625c52ca51b8a343be5f22b36 Mon Sep 17 00:00:00 2001 From: ScarKy0 <106310278+ScarKy0@users.noreply.github.com> Date: Fri, 1 Nov 2024 03:32:28 +0100 Subject: [PATCH 38/97] Borgs can no longer see mindshield + AI can no longer toggle off seeing job icons (#33069) * :( * Removed the sprite + updated RSI --- Resources/Prototypes/Actions/station_ai.yml | 19 ++---------------- .../Mobs/Cyborgs/base_borg_chassis.yml | 1 - .../Entities/Mobs/Player/admin_ghost.yml | 6 +++--- .../Entities/Mobs/Player/silicon.yml | 2 +- .../Actions/actions_ai.rsi/job_view.png | Bin 508 -> 0 bytes .../Actions/actions_ai.rsi/meta.json | 3 --- 6 files changed, 6 insertions(+), 25 deletions(-) delete mode 100644 Resources/Textures/Interface/Actions/actions_ai.rsi/job_view.png diff --git a/Resources/Prototypes/Actions/station_ai.yml b/Resources/Prototypes/Actions/station_ai.yml index 58513d7db1..dc70603810 100644 --- a/Resources/Prototypes/Actions/station_ai.yml +++ b/Resources/Prototypes/Actions/station_ai.yml @@ -5,35 +5,20 @@ description: Sends your eye back to the core. components: - type: InstantAction - priority: -10 + priority: -9 itemIconStyle: BigAction icon: sprite: Interface/Actions/actions_ai.rsi state: ai_core event: !type:JumpToCoreEvent -- type: entity - id: ActionShowJobIcons - name: Show job icons - description: Shows job icons for crew members. - components: - - type: InstantAction - priority: -5 - itemIconStyle: BigAction - icon: - sprite: Interface/Actions/actions_ai.rsi - state: job_view - event: !type:ActionComponentChangeEvent - components: - - type: ShowJobIcons - - type: entity id: ActionSurvCameraLights name: Toggle camera lights description: Enable surveillance camera lights near wherever you're viewing. components: - type: InstantAction - priority: -6 + priority: -5 itemIconStyle: BigAction icon: sprite: Interface/Actions/actions_ai.rsi diff --git a/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml b/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml index c65db8fe19..0db92ac941 100644 --- a/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml +++ b/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml @@ -285,7 +285,6 @@ - type: AccessReader access: [["Command"], ["Research"]] - type: ShowJobIcons - - type: ShowMindShieldIcons - type: entity id: BaseBorgChassisSyndicate diff --git a/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml b/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml index 1c3862e99a..0a40e64fd7 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml @@ -127,7 +127,7 @@ icon: { sprite: Interface/Actions/actions_ai.rsi, state: mass_scanner } iconOn: Interface/Actions/actions_ai.rsi/mass_scanner.png keywords: [ "AI", "console", "interface" ] - priority: -7 + priority: -6 event: !type:ToggleIntrinsicUIEvent { key: enum.RadarConsoleUiKey.Key } - type: entity @@ -151,7 +151,7 @@ icon: { sprite: Interface/Actions/actions_ai.rsi, state: crew_monitor } iconOn: Interface/Actions/actions_ai.rsi/crew_monitor.png keywords: [ "AI", "console", "interface" ] - priority: -9 + priority: -8 event: !type:ToggleIntrinsicUIEvent { key: enum.CrewMonitoringUIKey.Key } - type: entity @@ -163,5 +163,5 @@ icon: { sprite: Interface/Actions/actions_ai.rsi, state: station_records } iconOn: Interface/Actions/actions_ai.rsi/station_records.png keywords: [ "AI", "console", "interface" ] - priority: -8 + priority: -7 event: !type:ToggleIntrinsicUIEvent { key: enum.GeneralStationRecordConsoleKey.Key } diff --git a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml index 7391e5709f..be2b5a44f9 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml @@ -33,7 +33,6 @@ - type: ActionGrant actions: - ActionJumpToCore - - ActionShowJobIcons - ActionSurvCameraLights - ActionAIViewLaws - type: UserInterface @@ -72,6 +71,7 @@ color: "#2ed2fd" - type: Speech speechVerb: Robotic + - type: ShowJobIcons - type: entity id: AiHeldIntellicard diff --git a/Resources/Textures/Interface/Actions/actions_ai.rsi/job_view.png b/Resources/Textures/Interface/Actions/actions_ai.rsi/job_view.png deleted file mode 100644 index b407c4755e13c72eaefa36aeab453a72b1903d0f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 508 zcmVNCu5t(CbZ2X@dmYzL(7H%(`0ka$^NmI*#_MkX| z1z;x^a>NNEGbT#`aS z$sJYh-cD3L8?b~s^B2KC^98#*K_wwcAs_~=E|pv%^tV^2YF^C{l1SDz+Oj9RMnPfI Date: Fri, 1 Nov 2024 02:33:34 +0000 Subject: [PATCH 39/97] Automatic changelog update --- Resources/Changelog/Changelog.yml | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 93619da001..a55c40f374 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: EmoGarbage404 - changes: - - message: Maintenance closets have more variety in what they can contain. - type: Tweak - id: 7075 - time: '2024-08-10T02:12:40.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30579 - author: Ko4erga changes: - message: Changed chemistry airlock color. @@ -3949,3 +3942,12 @@ id: 7574 time: '2024-11-01T02:06:46.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/29318 +- author: ScarKy0 + changes: + - message: AI can no longer toggle seeing jobs off. + type: Tweak + - message: Borgs can no longer see mindshield status. + type: Fix + id: 7575 + time: '2024-11-01T02:32:28.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/33069 From c9cd778133852af316db97da107214be33ec7a5d Mon Sep 17 00:00:00 2001 From: deltanedas <39013340+deltanedas@users.noreply.github.com> Date: Fri, 1 Nov 2024 02:34:27 +0000 Subject: [PATCH 40/97] add IsMemberOfAny to faction system (#32975) * add IsMemberOfAny to faction system * pro --------- Co-authored-by: deltanedas <@deltanedas:kde.org> --- Content.Shared/NPC/Systems/NpcFactionSystem.cs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/Content.Shared/NPC/Systems/NpcFactionSystem.cs b/Content.Shared/NPC/Systems/NpcFactionSystem.cs index 98f14afe2a..0d684de80b 100644 --- a/Content.Shared/NPC/Systems/NpcFactionSystem.cs +++ b/Content.Shared/NPC/Systems/NpcFactionSystem.cs @@ -81,6 +81,24 @@ public sealed partial class NpcFactionSystem : EntitySystem return ent.Comp.Factions.Contains(faction); } + /// + /// Returns whether an entity is a member of any listed faction. + /// If the list is empty this returns false. + /// + public bool IsMemberOfAny(Entity ent, IEnumerable> factions) + { + if (!Resolve(ent, ref ent.Comp, false)) + return false; + + foreach (var faction in factions) + { + if (ent.Comp.Factions.Contains(faction)) + return true; + } + + return false; + } + /// /// Adds this entity to the particular faction. /// From d7a1753c7dcd2606f9345c072456781736b3061f Mon Sep 17 00:00:00 2001 From: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Date: Fri, 1 Nov 2024 14:18:06 +1100 Subject: [PATCH 41/97] Add CanLoad for biomes (#33050) CPUJob to come later. --- Content.Server/Parallax/BiomeSystem.cs | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/Content.Server/Parallax/BiomeSystem.cs b/Content.Server/Parallax/BiomeSystem.cs index 22b531eb7c..109aa0f6e4 100644 --- a/Content.Server/Parallax/BiomeSystem.cs +++ b/Content.Server/Parallax/BiomeSystem.cs @@ -10,6 +10,7 @@ using Content.Server.Shuttles.Events; using Content.Server.Shuttles.Systems; using Content.Shared.Atmos; using Content.Shared.Decals; +using Content.Shared.Ghost; using Content.Shared.Gravity; using Content.Shared.Parallax.Biomes; using Content.Shared.Parallax.Biomes.Layers; @@ -51,6 +52,7 @@ public sealed partial class BiomeSystem : SharedBiomeSystem private EntityQuery _biomeQuery; private EntityQuery _fixturesQuery; + private EntityQuery _ghostQuery; private EntityQuery _xformQuery; private readonly HashSet _handledEntities = new(); @@ -81,6 +83,7 @@ public sealed partial class BiomeSystem : SharedBiomeSystem Log.Level = LogLevel.Debug; _biomeQuery = GetEntityQuery(); _fixturesQuery = GetEntityQuery(); + _ghostQuery = GetEntityQuery(); _xformQuery = GetEntityQuery(); SubscribeLocalEvent(OnBiomeMapInit); SubscribeLocalEvent(OnFTLStarted); @@ -315,6 +318,11 @@ public sealed partial class BiomeSystem : SharedBiomeSystem } } + private bool CanLoad(EntityUid uid) + { + return !_ghostQuery.HasComp(uid); + } + public override void Update(float frameTime) { base.Update(frameTime); @@ -332,7 +340,8 @@ public sealed partial class BiomeSystem : SharedBiomeSystem if (_xformQuery.TryGetComponent(pSession.AttachedEntity, out var xform) && _handledEntities.Add(pSession.AttachedEntity.Value) && _biomeQuery.TryGetComponent(xform.MapUid, out var biome) && - biome.Enabled) + biome.Enabled && + CanLoad(pSession.AttachedEntity.Value)) { var worldPos = _transform.GetWorldPosition(xform); AddChunksInRange(biome, worldPos); @@ -349,7 +358,8 @@ public sealed partial class BiomeSystem : SharedBiomeSystem if (!_handledEntities.Add(viewer) || !_xformQuery.TryGetComponent(viewer, out xform) || !_biomeQuery.TryGetComponent(xform.MapUid, out biome) || - !biome.Enabled) + !biome.Enabled || + !CanLoad(viewer)) { continue; } From b8a98de784029d173c97e43ea27cd3570c8c5f6f Mon Sep 17 00:00:00 2001 From: Minemoder5000 Date: Fri, 1 Nov 2024 00:22:38 -0600 Subject: [PATCH 42/97] Remove CargoPallet component from the cargo pallet (#33022) * Change cargo shuttle pallets to catwalks. * Remove CargoPallet component from the cargo pallet. * Undo cargo shuttle changes. --- .../Prototypes/Entities/Objects/Specific/Cargo/cargo_pallet.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/Resources/Prototypes/Entities/Objects/Specific/Cargo/cargo_pallet.yml b/Resources/Prototypes/Entities/Objects/Specific/Cargo/cargo_pallet.yml index e95e663a79..518e63edea 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Cargo/cargo_pallet.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Cargo/cargo_pallet.yml @@ -20,8 +20,6 @@ density: 15 mask: - MachineMask - - type: CargoPallet - palletType: All - type: StaticPrice price: 100 - type: Sprite From 844a92026f462cbae7cf433ddfc32e7b6911df2c Mon Sep 17 00:00:00 2001 From: PJBot Date: Fri, 1 Nov 2024 06:23:45 +0000 Subject: [PATCH 43/97] Automatic changelog update --- Resources/Changelog/Changelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index a55c40f374..7bcfcc7e0a 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Ko4erga - changes: - - message: Changed chemistry airlock color. - type: Tweak - id: 7076 - time: '2024-08-10T03:23:47.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30666 - author: Blackern5000 changes: - message: Bent pipes now deal 8 thrown damage instead of 3. @@ -3951,3 +3944,10 @@ id: 7575 time: '2024-11-01T02:32:28.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/33069 +- author: Minemoder5000 + changes: + - message: The cargo shuttle's cargo pallets can no longer sell or buy. + type: Fix + id: 7576 + time: '2024-11-01T06:22:39.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/33022 From 3382743086304d4dcddc1598caa3895adbaea685 Mon Sep 17 00:00:00 2001 From: UBlueberry <161545003+UBlueberry@users.noreply.github.com> Date: Fri, 1 Nov 2024 20:42:20 -0400 Subject: [PATCH 44/97] Minor antagonist guidebook changes (#32824) * took a two month nap. accidentally pushed too many buttons. let's try this again. added thieves to antagonists.xml * even after that nap, i don't feel well-rested at all. * please don't kill me for using webedit * capitalization, typo * Apply suggestions from code review (more period moving) Thanks Evan, very cool Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> * guess you could say im not pro-proper noun * typo * Update Resources/ServerInfo/Guidebook/Antagonist/Nuclear Operatives.xml * ok Co-authored-by: SlamBamActionman <83650252+SlamBamActionman@users.noreply.github.com> --------- Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> Co-authored-by: SlamBamActionman <83650252+SlamBamActionman@users.noreply.github.com> --- .../Guidebook/Antagonist/Antagonists.xml | 7 ++-- .../Guidebook/Antagonist/MinorAntagonists.xml | 32 +++++++++---------- .../Antagonist/Nuclear Operatives.xml | 16 +++++----- .../Guidebook/Antagonist/Revolutionaries.xml | 16 +++++----- .../Guidebook/Antagonist/SpaceNinja.xml | 18 +++++------ .../Guidebook/Antagonist/Thieves.xml | 5 ++- 6 files changed, 48 insertions(+), 46 deletions(-) diff --git a/Resources/ServerInfo/Guidebook/Antagonist/Antagonists.xml b/Resources/ServerInfo/Guidebook/Antagonist/Antagonists.xml index 2592c10762..7f47f1e490 100644 --- a/Resources/ServerInfo/Guidebook/Antagonist/Antagonists.xml +++ b/Resources/ServerInfo/Guidebook/Antagonist/Antagonists.xml @@ -7,13 +7,12 @@ These bad actors are more often than not employed or backed by the [color=#ff0000]Syndicate[/color], a rival organization to Nanotrasen that wants nothing more than to see it burn. ## Various Antagonists - Antagonist roles come with their own special sets of abilities, tools and risks to the station. - Antagonists can take many forms, like: - [textlink="Nuclear operatives" link="Nuclear Operatives"], with the goal of infiltrating and destroying the station. - [textlink="Traitors" link="Traitors"] amongst the crew who must assassinate, steal and decieve. - - [textlink="Space Ninjas" link="SpaceNinja"], masters of espionage and sabotage with special gear. - [textlink="Revolutionaries" link="Revolutionaries"] who are intent on taking control of the station from the inside. - [textlink="Zombies" link="Zombies"] that crave the flesh of every crew member and creature on board. - - [textlink="Several non-humanoid creatures" link="MinorAntagonists"] that usually just try to kill anything that moves. + - [textlink="Space Ninjas" link="SpaceNinja"], masters of espionage and sabotage with special gear. + - [textlink="Thieves" link="Thieves"] driven by kleptomania, determined to get their fix using their special gloves. + - [textlink="Various non-humanoid creatures" link="MinorAntagonists"] that generally attack anything that moves. diff --git a/Resources/ServerInfo/Guidebook/Antagonist/MinorAntagonists.xml b/Resources/ServerInfo/Guidebook/Antagonist/MinorAntagonists.xml index 6704ed28e0..97574c4021 100644 --- a/Resources/ServerInfo/Guidebook/Antagonist/MinorAntagonists.xml +++ b/Resources/ServerInfo/Guidebook/Antagonist/MinorAntagonists.xml @@ -9,12 +9,12 @@ - Revenants are ethereal beings made of ectoplasm that haunt the crew and steal [color=cyan]life essence[/color] from them. + Revenants are ethereal beings made of ectoplasm that haunt the crew and steal [color=#8f63e6]life essence[/color] from them. - Your essence is your very own [bold]life force[/bold]. Taking damage reduces your essence. - Essence is also spent to use [bold]abilities[/bold]. - - To gain essence you first [bold]inspect[/bold] various souls for their worth. More worthy souls grant more essence. Then you must [bold]siphon[/bold] it either when the victim is crit, dead or asleep. + - To gain essence you first [bold]inspect[/bold] various souls for their worth. More worthy souls grant more essence. Then you must [bold]siphon[/bold] it either when the victim is crit, dead or asleep. All of this is done with [color=yellow][bold][keybind="Use"][/bold][/color]. - [bold]Stolen essence[/bold] is used to purchase new abilities to incapacitate the crew easier. - - You are [bold]vulnerable[/bold] to attacks when you siphon a soul or use an ability. You can tell when you are vulnerable when you have a [italic]"Corporeal"[/italic] status effect. + - You are [bold]vulnerable[/bold] to attacks when you siphon a soul or use an ability. You can tell when you are vulnerable when you have a [color=#8f63e6][italic]Corporeal[/italic][/color] status effect. # Rat King @@ -26,12 +26,12 @@ - Rat Kings are abnormally large rodents capable of [color=cyan]raising huge rat armies[/color] by eating equally huge amounts of food. - - You have several abilities that come at the cost of your [bold]hunger[/bold]. - - One ability is summoning [color=cyan]Rat Servants[/color] who you can [bold]command[/bold] to stay in place, follow you, attack a target of your choice or attack indiscriminately. - - You can conjure a cloud of [color=#77b58e]ammonia[/color], which is mildly poisonous to humans but heals rats. - - You can also [italic]"Rummage"[/italic] through any disposal unit by using the context menu. Use this to find [bold]scraps of food[/bold] to grow your army. - - Besides your abilities, you are [bold]stronger[/bold] than most other animals. You and your servants are capable of speech and you're both small enough to fit under airlocks and tables. + Rat kings are abnormally large rodents capable of [color=yellow]raising huge rat armies[/color] by eating equally huge amounts of food. + - You have several abilities that come at the cost of your [bold]hunger.[/bold] + - One such ability is [color=yellow][italic]Raise Army[/italic][/color], which summons a [bold]Rat Servant[/bold]. You can [bold]command[/bold] your servants to stay in place, follow you, attack a target of your choice or attack indiscriminately. + - You can conjure a cloud of [color=#77b58e]ammonia[/color] using [color=purple][italic]Rat King's Domain[/italic][/color]. This purple gas is mildly poisonous to humans but heals rats. + - [color=#9daa98][italic]Rummage[/italic][/color] through a disposal unit by using the context menu. Use this to find [bold]scraps of food[/bold] to grow your army. + - Besides your abilities, [bold]you are stronger than most other animals.[/bold] You and your servants are capable of speech and you're both small enough to fit under airlocks and tables. - [bold]Your underlings are still very fragile![/bold] Beware of spacings, explosions and the buisness end of a melee weapon. # Space Dragon @@ -44,11 +44,11 @@ - Space Dragons is are giant extradimensional fish that [color=cyan]create rifts and eat crew.[/color] - - Dragons have powerful jaws to [bold]devour[/bold] infrastructure such as doors, windows, and walls. - - Your [color=orange]dragon's breath[/color] is a flaming projectile which travels a straight flight path, exploding multiple times and igniting things along the way. Be careful, your carps are not immune to this! - - You have the ability to summon [bold]carp rifts[/bold] that periodically spawn [bold]space carp[/bold]. There can be 3 rifts active at any given time. - - Rifts charge up energy over a period of 5 minutes and are [bold]vulnerable[/bold] during this time. After 5 minutes, it becomes invulnerable and will continue summoning carp as long as the dragon lives. + Space dragons are giant extradimensional fish that can [color=red]eat crew[/color] and create [color=#4b7fcc]carp rifts.[/color] + - Dragons have powerful jaws that allow them to [color=red][italic]Devour[/italic][/color] infrastructure such as doors, windows, and walls. + - They can also heal themselves by using [color=red][italic]Devour[/italic][/color] on crew members that have gone unconscious or have died. + - Your [color=orange][italic]Dragon's Breath[/italic][/color] is a [bold]flaming projectile[/bold] which travels a straight flight path, exploding multiple times and igniting things along the way. Try not to hit your carps with this! + - You have the ability to [color=#4b7fcc][italic]Summon a Carp Rift[/italic][/color]. Rifts periodically spawn [bold]space carp[/bold] and charge up energy over a period of 5 minutes, [bold]which is when it's vulnerable.[/bold] After 5 minutes, it becomes invulnerable and will continue summoning carp as long as the dragon lives. - You'll suffer a [bold]temporary debilitating feedback effect[/bold] if one of your rifts are destroyed before it's done charging. - If a period of five minutes passes since your spawn or since the last time a rift was charging, [bold]you'll disappear.[/bold] - Dragons who have the maximum of 3 fully charged rifts will [bold]never disappear[/bold], but they are still mortal. @@ -61,6 +61,6 @@ Slimes and spiders have no remarkable features, but will [color=cyan]infest the station[/color] from time to time regardless. Both will give chase and attack anything they see. - - Slimes may deal extra [bold]cellular or posion damage[/bold], based upon their color. Water hurts them just as it would hurt a slime person. - - Spiders can lay [bold]webs[/bold], which non-spiders have a hard time moving through. They can easily be destroyed with a blade. + - Slimes may [bold]deal extra cellular or poison damage[/bold], based upon their color. Water hurts them just as it would hurt a slime person. + - Spiders have a venomous bite and can [bold]create webs[/bold] that are hard to move though. Webs are easily destroyed with a blade. They can also pry open airlocks. diff --git a/Resources/ServerInfo/Guidebook/Antagonist/Nuclear Operatives.xml b/Resources/ServerInfo/Guidebook/Antagonist/Nuclear Operatives.xml index ee58663374..11149bab66 100644 --- a/Resources/ServerInfo/Guidebook/Antagonist/Nuclear Operatives.xml +++ b/Resources/ServerInfo/Guidebook/Antagonist/Nuclear Operatives.xml @@ -1,6 +1,6 @@ # Nuclear Operatives - + [color=#999999][italic]"OPERATIVES STANDBY. YOUR OBJECTIVES ARE SIMPLE.[/italic][/color] @@ -38,13 +38,13 @@ ## Preparation - Each member in your squad has been given an [color=cyan]uplink[/color] to purchase everything you will need for the mission, similar to [textlink="Traitors." link="Traitors"] + Each member in your squad has been given an [color=cyan]uplink[/color] to purchase everything you will need for the mission, similar to [textlink="traitors." link="Traitors"] - You can purchase the same kinds of gear Traitors can, but you have higher quality gear available to you and more telecrystals to spend. + You can purchase the same kinds of gear traitors can, but you have higher quality gear available to you and more telecrystals to spend. @@ -71,8 +71,8 @@ ## Getting to the Station You've got the plan, you've got the gear. Now, execute. - Grab a [bold]jetpack[/bold] from your armory and go with your other operatives to the [color=cyan]Syndicate Shuttle[/color]. - Among other things you may need, you'll find an [bold]IFF Console[/bold] on the shuttle. It allows you to hide from other ships and mass scanners when [italic]"Show IFF"[/italic] and [italic]"Show Vessel"[/italic] are toggled off. + Grab a [bold]jetpack[/bold] from your armory and go with your other operatives to your [color=cyan]shuttle[/color]. + Among other things you may need, you'll find an [bold]IFF Computer[/bold] on the shuttle. It allows you to hide from other ships and mass scanners when [italic]Show IFF[/italic] and [italic]Show Vessel[/italic] are toggled off. When everyone is ready, FTL to the station and fly to it with a jetpack. Don't forget the code, your pinpointers and the nuke if you're taking it. @@ -82,12 +82,12 @@ ## The Nuke & Arming Procedure - You have a paper with the [color=cyan]nuclear authentication codes[/color] on your shuttle. [bold]Check to see if the nuke ID matches the one on your shuttle.[/bold] If it doesn't, you'll have to use explosive in the station's vault. + You have a paper with the [color=cyan]nuclear authentication codes[/color] on your shuttle. [bold]Check to see if the nuke ID matches the one on your shuttle.[/bold] If it doesn't, you'll be arming the station's nuke instead. - Obtain the [bold]nuclear authentication disk[/bold] and insert it into the nuke. - Type in the [bold]nuclear authentication code[/bold] and press "[bold]E[/bold]" on the keypad to Enter. - - To begin [bold]self-destruct process[/bold], press "[color=red]ARM[/color]". After 300 seconds, the nuke will explode. - - [bold]Defend the nuke[/bold], even if it's at the cost of your lives! The mission requirements do not include your return. + - [bold]To begin the self-destruct sequence, press [color=#EB2D3A]ARM[/color][/bold]. After 300 seconds, the nuke will explode. + - [bold]Defend the nuke[/bold], even if it's at the cost of your lives! The mission requirements do not include your return. - It takes 30 seconds for someone to [bold]disarm[/bold] the nuke. Re-arming it is possible, but the chance of mission success drops if you let it happen. - Should the nuke be re-armed, the timer will start from where it left off. diff --git a/Resources/ServerInfo/Guidebook/Antagonist/Revolutionaries.xml b/Resources/ServerInfo/Guidebook/Antagonist/Revolutionaries.xml index 4a1887a392..9bc0b28068 100644 --- a/Resources/ServerInfo/Guidebook/Antagonist/Revolutionaries.xml +++ b/Resources/ServerInfo/Guidebook/Antagonist/Revolutionaries.xml @@ -1,6 +1,6 @@ # Revolutionaries - + [color=#999999][italic]"Viva la revolución!!"[/italic][/color] @@ -13,20 +13,20 @@ ## Objectives You must cuff, kill, or exile all of the [textlink="Command staff" link="Command"] on station in no particular order. - Your objective is not to destroy the station, but [italic]take it over[/italic], so try to minimize damage where possible. + Your objective is [bold]not to destroy the station[/bold], but [italic]to take it over[/italic], so try to minimize damage where possible. [bold]The revolution will fail[/bold] if all of the [bold][color=#5e9cff]Head Revolutionaries[/color][/bold] die, and all [color=red]Revolutionaries[/color] will de-convert if this happens. ## Headrevs & Conversion [bold][color=#5e9cff]Head Revolutionaries[/color][/bold] are chosen at the start of the shift and begin with a [color=cyan]flash[/color] and a pair of [color=cyan]sunglasses[/color]. - + - + You can convert crew members to your side by taking any [bold]flash[/bold] and attacking someone with it using [color=#ff0000]harm mode[/color]. - However, you can't convert your target if they're wearing [color=cyan]flash protection[/color] such as [bold]sunglasses[/bold] or a [bold]welding mask[/bold]. + However, [bold]you can't convert your target if they're wearing [color=cyan]flash protection[/color][/bold] such as sunglasses or a welding mask. @@ -34,10 +34,10 @@ - Another hurdle in your way are pesky [color=cyan]mindshield implanters[/color]. These will: + Another obstacle in your way are those pesky [color=cyan]mindshield implanters[/color]. These will: - Prevent the implanted person from being converted into a [color=red]Revolutionary[/color] - De-convert Revolutionaries, and will make them no longer loyal to your cause - - Visibly be destroyed upon being implanted into a [bold][color=#5e9cff]Head Revolutionary[/color][/bold], giving away your cover + - [bold]Visibly be destroyed upon being implanted into a [color=#5e9cff]Head Revolutionary[/color][/bold], giving you away - NOT protect against flash disorientation Assume all of [color=#cb0000]Security[/color] and [color=#1b67a5]Command[/color] are implanted with mindshields already. @@ -47,7 +47,7 @@ ## Revolutionary - A [bold][color=red]Revolutionary[/color][/bold] is a crew member that has been converted by a [bold][color=#5e9cff]Head Revolutionary[/color][/bold]. + A [color=red]Revolutionary[/color] is a crew member that has been converted by a [bold][color=#5e9cff]Head Revolutionary[/color][/bold]. [bold][color=red]Revolutionaries[/color] can't convert people themselves,[/bold] but they're more than capable of doing dirty work and carrying out orders. diff --git a/Resources/ServerInfo/Guidebook/Antagonist/SpaceNinja.xml b/Resources/ServerInfo/Guidebook/Antagonist/SpaceNinja.xml index 9998d4b38a..c001b97937 100644 --- a/Resources/ServerInfo/Guidebook/Antagonist/SpaceNinja.xml +++ b/Resources/ServerInfo/Guidebook/Antagonist/SpaceNinja.xml @@ -7,7 +7,7 @@ You are an elite mercenary that [color=#66FF00]The Spider Clan[/color] has sent to wreak all kinds of havoc on the station. You are equipped to keep it silent-but-deadly. - Whether you decide to mercilessly pick off the station's crew one by one or stay out of trouble, your discipline has taught you that [italic]your objectives must be at least attempted[/italic]. For honor! + Whether you get bloody or stay out of trouble, your discipline has taught you that [italic]your objectives must be at least attempted[/italic]. For honor! ## Standard Equipment You begin implanted with a [color=cyan]death acidifier[/color], so if you are captured or KIA all your precious equipment is kept out of enemy hands. @@ -19,7 +19,7 @@ - ## Ninja Suit & Boots + ## Your Suit @@ -27,12 +27,12 @@ - Your single most important item is [color=#66FF00]your suit[/color], without it none of your abilities would work. + Your single most important item is [color=cyan]your suit[/color], without it none of your abilities would work. Your suit requires power to function, which is supplied by its [bold]internal battery[/bold]. It can be replaced, and [italic]high capacity batteries[/italic] mean a [italic]highly effective ninja[/italic]. - [bold]You can recharge your internal battery directly[/bold] by using [color=#66FF00]your gloves[/color]. You can see the current charge by examining the suit or checking the nifty battery alert on your screen. + [bold]You can recharge your internal battery directly[/bold] by using [color=cyan]your gloves[/color]. You can see the current charge by examining the suit or checking the nifty battery alert on your screen. - Your outfit also includes [color=#66FF00]special boots[/color] that keep you agile, upright and grounded without using energy. You've also got flash protection thanks to your [color=#66FF00]visor[/color]. + Your outfit also includes [color=cyan]special boots[/color] that keep you agile, upright and grounded without using energy. You've also got flash protection thanks to your [color=cyan]visor[/color]. ## Ninja Gloves @@ -58,9 +58,9 @@ [bold]You have sworn yourself to the sword and refuse to use firearms.[/bold] Luckily, you've got a pretty cool sword. - Your [color=#66FF00]energy katana[/color] hurts plenty and can be [bold]recalled at will[/bold] at the cost of suit power. The farther away it is from you, the more energy required to recall it. + Your [color=cyan]energy katana[/color] hurts plenty and can be [bold]recalled at will[/bold] at the cost of suit power. The farther away it is from you, the more energy required to recall it. - While in hand you may also [color=#66FF00]teleport[/color] to anywhere that you can see, [bold]including through windows[/bold]. The charges required to do this regenerate slowly, so keep a charge or two spare in case you need a quick getaway. + While in hand you may also [color=cyan]teleport[/color] to anywhere that you can see, [bold]including through windows[/bold]. The charges required to do this regenerate slowly, so keep a charge or two spare in case you need a quick getaway. ## Spider Clan Charge @@ -68,9 +68,9 @@ - [color=#66FF00]A modified C-4 explosive[/color], which can be found in your pocket. Creates a large explosion but [bold]must be armed in your target area[/bold] as it is one of your [color=#66FF00]objectives[/color]. + This is a [color=cyan]modified C-4 explosive[/color] which can be found in your pocket. Creates a large explosion but [bold]must be armed in your target area[/bold] as it is one of your objectives. - It can't be activated manually, so simply plant it on a wall or a particularly ugly piece of furniture. Can't be unstuck once planted. + It can't be activated manually, so simply plant it on a wall or some furniture that does not spark joy. Choose wisely, it can't be unstuck once planted. ## Objectives diff --git a/Resources/ServerInfo/Guidebook/Antagonist/Thieves.xml b/Resources/ServerInfo/Guidebook/Antagonist/Thieves.xml index 7ed5aa9839..4c11fc0d99 100644 --- a/Resources/ServerInfo/Guidebook/Antagonist/Thieves.xml +++ b/Resources/ServerInfo/Guidebook/Antagonist/Thieves.xml @@ -11,7 +11,7 @@ Thieves are petty yet crafty [color=green]criminals[/color] who can't keep their hands to themselves. You were forcefully given a [bold]pacifism implant[/bold] after your last arrest, but you won't let that stop you from trying to add to your collection. ## Art of the Steal - Unlike other antagonists, [italic]staying out of trouble is almost a requirement for you[/italic] because of your implant. + Unlike other antagonists, [bold]staying out of trouble is almost a requirement for you[/bold] because of your implant. You can only run if [color=#cb0000]Security[/color] picks a fight with you, and because you work alone you don't have any friends to pull you out of danger. But against all odds, you'll sucessfully swipe what you want using determination, sleight of hand, a few tools and your [color=cyan]thieving gloves.[/color] @@ -39,6 +39,9 @@ Your [color=cyan]toolbox[/color] contains... well, whatever you remembered to pack. [bold]You can select two pre-made kits[/bold] to help you complete grander heists. Approve your choices in a safe place, as the toolbox will dissolve and the gear will drop at your feet. + + + From 146ae8a6a6f5d80cedbf76373bb1887e6f5d9218 Mon Sep 17 00:00:00 2001 From: Preston Smith <92108534+thetolbean@users.noreply.github.com> Date: Fri, 1 Nov 2024 19:44:15 -0500 Subject: [PATCH 45/97] Give Nukies a Hand Labeler (#33053) * Add hand-labeler to nukie planet * Rearrange nukie chem table --- Resources/Maps/Nonstations/nukieplanet.yml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/Resources/Maps/Nonstations/nukieplanet.yml b/Resources/Maps/Nonstations/nukieplanet.yml index 665657f7dd..6c0a209dec 100644 --- a/Resources/Maps/Nonstations/nukieplanet.yml +++ b/Resources/Maps/Nonstations/nukieplanet.yml @@ -6576,7 +6576,7 @@ entities: - uid: 2031 components: - type: Transform - pos: 3.6114278,-10.732791 + pos: 4.0109396,-12.223828 parent: 104 - uid: 2095 components: @@ -10993,6 +10993,13 @@ entities: - type: Transform pos: 11.5,-6.5 parent: 104 +- proto: HandLabeler + entities: + - uid: 1826 + components: + - type: Transform + pos: 3.4542694,-10.616036 + parent: 104 - proto: KitchenKnife entities: - uid: 1061 From 26194e2f416b9496d7ae25a4302bedfab22e9574 Mon Sep 17 00:00:00 2001 From: Brandon Li <48413902+aspiringLich@users.noreply.github.com> Date: Fri, 1 Nov 2024 21:33:26 -0400 Subject: [PATCH 46/97] Fix `ItemSlotSystem` popup Logic (#28856) * move popup call out of `CanInsert` into `OnInteractUsing` * im stupid and `reason` is completely unnecessary Signed-off-by: Brandon Li * return early when `itemSlots.Slots.Count == 0` * tweak logic for triggering popups * change popup logic again * Consolidate whitelist check * Get any popup message not just last failed slot * Apply suggestions from code review Co-authored-by: chromiumboy <50505512+chromiumboy@users.noreply.github.com> * yoink Co-authored-by: ShadowCommander <10494922+ShadowCommander@users.noreply.github.com> --------- Signed-off-by: Brandon Li Co-authored-by: ShadowCommander <10494922+ShadowCommander@users.noreply.github.com> Co-authored-by: chromiumboy <50505512+chromiumboy@users.noreply.github.com> --- .../Containers/ItemSlot/ItemSlotsSystem.cs | 155 +++++++++++++----- 1 file changed, 118 insertions(+), 37 deletions(-) diff --git a/Content.Shared/Containers/ItemSlot/ItemSlotsSystem.cs b/Content.Shared/Containers/ItemSlot/ItemSlotsSystem.cs index f25273f403..479690847c 100644 --- a/Content.Shared/Containers/ItemSlot/ItemSlotsSystem.cs +++ b/Content.Shared/Containers/ItemSlot/ItemSlotsSystem.cs @@ -60,6 +60,7 @@ namespace Content.Shared.Containers.ItemSlots } #region ComponentManagement + /// /// Spawn in starting items for any item slots that should have one. /// @@ -70,7 +71,8 @@ namespace Content.Shared.Containers.ItemSlots if (slot.HasItem || string.IsNullOrEmpty(slot.StartingItem)) continue; - var item = EntityManager.SpawnEntity(slot.StartingItem, EntityManager.GetComponent(uid).Coordinates); + var item = Spawn(slot.StartingItem, Transform(uid).Coordinates); + if (slot.ContainerSlot != null) _containers.Insert(item, slot.ContainerSlot); } @@ -99,7 +101,8 @@ namespace Content.Shared.Containers.ItemSlots if (itemSlots.Slots.TryGetValue(id, out var existing)) { if (existing.Local) - Log.Error($"Duplicate item slot key. Entity: {EntityManager.GetComponent(uid).EntityName} ({uid}), key: {id}"); + Log.Error( + $"Duplicate item slot key. Entity: {EntityManager.GetComponent(uid).EntityName} ({uid}), key: {id}"); else // server state takes priority slot.CopyFrom(existing); @@ -134,7 +137,10 @@ namespace Content.Shared.Containers.ItemSlots Dirty(uid, itemSlots); } - public bool TryGetSlot(EntityUid uid, string slotId, [NotNullWhen(true)] out ItemSlot? itemSlot, ItemSlotsComponent? component = null) + public bool TryGetSlot(EntityUid uid, + string slotId, + [NotNullWhen(true)] out ItemSlot? itemSlot, + ItemSlotsComponent? component = null) { itemSlot = null; @@ -143,9 +149,11 @@ namespace Content.Shared.Containers.ItemSlots return component.Slots.TryGetValue(slotId, out itemSlot); } + #endregion #region Interactions + /// /// Attempt to take an item from a slot, if any are set to EjectOnInteract. /// @@ -201,20 +209,50 @@ namespace Content.Shared.Containers.ItemSlots if (!EntityManager.TryGetComponent(args.User, out HandsComponent? hands)) return; + if (itemSlots.Slots.Count == 0) + return; + + // If any slot can be inserted into don't show popup. + // If any whitelist passes, but slot is locked, then show locked. + // If whitelist fails all, show whitelist fail. + + // valid, insertable slots (if any) var slots = new List(); + + string? whitelistFailPopup = null; + string? lockedFailPopup = null; foreach (var slot in itemSlots.Slots.Values) { if (!slot.InsertOnInteract) continue; - if (!CanInsert(uid, args.Used, args.User, slot, swap: slot.Swap, popup: args.User)) - continue; + if (CanInsert(uid, args.Used, args.User, slot, slot.Swap)) + { + slots.Add(slot); + } + else + { + var allowed = CanInsertWhitelist(args.Used, slot); + if (lockedFailPopup == null && slot.LockedFailPopup != null && allowed && slot.Locked) + lockedFailPopup = slot.LockedFailPopup; - slots.Add(slot); + if (whitelistFailPopup == null && slot.WhitelistFailPopup != null) + whitelistFailPopup = slot.WhitelistFailPopup; + } } if (slots.Count == 0) + { + // it's a bit weird that the popupMessage is stored with the item slots themselves, but in practice + // the popup messages will just all be the same, so it's probably fine. + // + // doing a check to make sure that they're all the same or something is probably frivolous + if (lockedFailPopup != null) + _popupSystem.PopupClient(Loc.GetString(lockedFailPopup), uid, args.User); + else if (whitelistFailPopup != null) + _popupSystem.PopupClient(Loc.GetString(whitelistFailPopup), uid, args.User); return; + } // Drop the held item onto the floor. Return if the user cannot drop. if (!_handsSystem.TryDrop(args.User, args.Used, handsComp: hands)) @@ -236,23 +274,31 @@ namespace Content.Shared.Containers.ItemSlots return; } } + #endregion #region Insert + /// /// Insert an item into a slot. This does not perform checks, so make sure to also use or just use instead. /// /// If true, will exclude the user when playing sound. Does nothing client-side. /// Useful for predicted interactions - private void Insert(EntityUid uid, ItemSlot slot, EntityUid item, EntityUid? user, bool excludeUserAudio = false) + private void Insert(EntityUid uid, + ItemSlot slot, + EntityUid item, + EntityUid? user, + bool excludeUserAudio = false) { bool? inserted = slot.ContainerSlot != null ? _containers.Insert(item, slot.ContainerSlot) : null; // ContainerSlot automatically raises a directed EntInsertedIntoContainerMessage // Logging if (inserted != null && inserted.Value && user != null) - _adminLogger.Add(LogType.Action, LogImpact.Low, $"{ToPrettyString(user.Value)} inserted {ToPrettyString(item)} into {slot.ContainerSlot?.ID + " slot of "}{ToPrettyString(uid)}"); + _adminLogger.Add(LogType.Action, + LogImpact.Low, + $"{ToPrettyString(user.Value)} inserted {ToPrettyString(item)} into {slot.ContainerSlot?.ID + " slot of "}{ToPrettyString(uid)}"); _audioSystem.PlayPredicted(slot.InsertSound, uid, excludeUserAudio ? user : null); } @@ -261,46 +307,53 @@ namespace Content.Shared.Containers.ItemSlots /// Check whether a given item can be inserted into a slot. Unless otherwise specified, this will return /// false if the slot is already filled. /// - /// - /// If a popup entity is given, and if the item slot is set to generate a popup message when it fails to - /// pass the whitelist or due to slot being locked, then this will generate an appropriate popup. - /// - public bool CanInsert(EntityUid uid, EntityUid usedUid, EntityUid? user, ItemSlot slot, bool swap = false, EntityUid? popup = null) + public bool CanInsert(EntityUid uid, + EntityUid usedUid, + EntityUid? user, + ItemSlot slot, + bool swap = false) { if (slot.ContainerSlot == null) return false; - if (_whitelistSystem.IsWhitelistFail(slot.Whitelist, usedUid) || _whitelistSystem.IsBlacklistPass(slot.Blacklist, usedUid)) - { - if (popup.HasValue && slot.WhitelistFailPopup.HasValue) - _popupSystem.PopupClient(Loc.GetString(slot.WhitelistFailPopup), uid, popup.Value); + if (slot.HasItem && (!swap || swap && !CanEject(uid, user, slot))) + return false; + + if (!CanInsertWhitelist(usedUid, slot)) return false; - } if (slot.Locked) - { - if (popup.HasValue && slot.LockedFailPopup.HasValue) - _popupSystem.PopupClient(Loc.GetString(slot.LockedFailPopup), uid, popup.Value); - return false; - } - - if (slot.HasItem && (!swap || (swap && !CanEject(uid, user, slot)))) return false; var ev = new ItemSlotInsertAttemptEvent(uid, usedUid, user, slot); RaiseLocalEvent(uid, ref ev); RaiseLocalEvent(usedUid, ref ev); if (ev.Cancelled) + { return false; + } return _containers.CanInsert(usedUid, slot.ContainerSlot, assumeEmpty: swap); } + private bool CanInsertWhitelist(EntityUid usedUid, ItemSlot slot) + { + if (_whitelistSystem.IsWhitelistFail(slot.Whitelist, usedUid) + || _whitelistSystem.IsBlacklistPass(slot.Blacklist, usedUid)) + return false; + return true; + } + /// /// Tries to insert item into a specific slot. /// /// False if failed to insert item - public bool TryInsert(EntityUid uid, string id, EntityUid item, EntityUid? user, ItemSlotsComponent? itemSlots = null, bool excludeUserAudio = false) + public bool TryInsert(EntityUid uid, + string id, + EntityUid item, + EntityUid? user, + ItemSlotsComponent? itemSlots = null, + bool excludeUserAudio = false) { if (!Resolve(uid, ref itemSlots)) return false; @@ -315,7 +368,11 @@ namespace Content.Shared.Containers.ItemSlots /// Tries to insert item into a specific slot. /// /// False if failed to insert item - public bool TryInsert(EntityUid uid, ItemSlot slot, EntityUid item, EntityUid? user, bool excludeUserAudio = false) + public bool TryInsert(EntityUid uid, + ItemSlot slot, + EntityUid item, + EntityUid? user, + bool excludeUserAudio = false) { if (!CanInsert(uid, item, user, slot)) return false; @@ -329,7 +386,11 @@ namespace Content.Shared.Containers.ItemSlots /// Does not check action blockers. /// /// False if failed to insert item - public bool TryInsertFromHand(EntityUid uid, ItemSlot slot, EntityUid user, HandsComponent? hands = null, bool excludeUserAudio = false) + public bool TryInsertFromHand(EntityUid uid, + ItemSlot slot, + EntityUid user, + HandsComponent? hands = null, + bool excludeUserAudio = false) { if (!Resolve(user, ref hands, false)) return false; @@ -443,6 +504,7 @@ namespace Content.Shared.Containers.ItemSlots return 1; } + #endregion #region Eject @@ -462,7 +524,7 @@ namespace Content.Shared.Containers.ItemSlots return false; } - if (slot.ContainerSlot?.ContainedEntity is not {} item) + if (slot.ContainerSlot?.ContainedEntity is not { } item) return false; var ev = new ItemSlotEjectAttemptEvent(uid, item, user, slot); @@ -487,7 +549,9 @@ namespace Content.Shared.Containers.ItemSlots // Logging if (ejected != null && ejected.Value && user != null) - _adminLogger.Add(LogType.Action, LogImpact.Low, $"{ToPrettyString(user.Value)} ejected {ToPrettyString(item)} from {slot.ContainerSlot?.ID + " slot of "}{ToPrettyString(uid)}"); + _adminLogger.Add(LogType.Action, + LogImpact.Low, + $"{ToPrettyString(user.Value)} ejected {ToPrettyString(item)} from {slot.ContainerSlot?.ID + " slot of "}{ToPrettyString(uid)}"); _audioSystem.PlayPredicted(slot.EjectSound, uid, excludeUserAudio ? user : null); } @@ -496,7 +560,11 @@ namespace Content.Shared.Containers.ItemSlots /// Try to eject an item from a slot. /// /// False if item slot is locked or has no item inserted - public bool TryEject(EntityUid uid, ItemSlot slot, EntityUid? user, [NotNullWhen(true)] out EntityUid? item, bool excludeUserAudio = false) + public bool TryEject(EntityUid uid, + ItemSlot slot, + EntityUid? user, + [NotNullWhen(true)] out EntityUid? item, + bool excludeUserAudio = false) { item = null; @@ -518,8 +586,12 @@ namespace Content.Shared.Containers.ItemSlots /// Try to eject item from a slot. /// /// False if the id is not valid, the item slot is locked, or it has no item inserted - public bool TryEject(EntityUid uid, string id, EntityUid? user, - [NotNullWhen(true)] out EntityUid? item, ItemSlotsComponent? itemSlots = null, bool excludeUserAudio = false) + public bool TryEject(EntityUid uid, + string id, + EntityUid? user, + [NotNullWhen(true)] out EntityUid? item, + ItemSlotsComponent? itemSlots = null, + bool excludeUserAudio = false) { item = null; @@ -550,12 +622,16 @@ namespace Content.Shared.Containers.ItemSlots return true; } + #endregion #region Verbs - private void AddAlternativeVerbs(EntityUid uid, ItemSlotsComponent itemSlots, GetVerbsEvent args) + + private void AddAlternativeVerbs(EntityUid uid, + ItemSlotsComponent itemSlots, + GetVerbsEvent args) { - if (args.Hands == null || !args.CanAccess ||!args.CanInteract) + if (args.Hands == null || !args.CanAccess || !args.CanInteract) { return; } @@ -649,7 +725,9 @@ namespace Content.Shared.Containers.ItemSlots } } - private void AddInteractionVerbsVerbs(EntityUid uid, ItemSlotsComponent itemSlots, GetVerbsEvent args) + private void AddInteractionVerbsVerbs(EntityUid uid, + ItemSlotsComponent itemSlots, + GetVerbsEvent args) { if (args.Hands == null || !args.CanAccess || !args.CanInteract) return; @@ -708,7 +786,7 @@ namespace Content.Shared.Containers.ItemSlots new SpriteSpecifier.Texture( new ResPath("/Textures/Interface/VerbIcons/insert.svg.192dpi.png")); } - else if(slot.EjectOnInteract) + else if (slot.EjectOnInteract) { // Inserting/ejecting is a primary interaction for this entity. Instead of using the insert // category, we will use a single "Place " verb. @@ -727,9 +805,11 @@ namespace Content.Shared.Containers.ItemSlots args.Verbs.Add(insertVerb); } } + #endregion #region BUIs + private void HandleButtonPressed(EntityUid uid, ItemSlotsComponent component, ItemSlotButtonPressedEvent args) { if (!component.Slots.TryGetValue(args.SlotId, out var slot)) @@ -740,6 +820,7 @@ namespace Content.Shared.Containers.ItemSlots else if (args.TryInsert && !slot.HasItem) TryInsertFromHand(uid, slot, args.Actor); } + #endregion /// From 957b8de89b0026d67efadac475763ea910339e2f Mon Sep 17 00:00:00 2001 From: Vasilis Date: Sat, 2 Nov 2024 02:34:23 +0100 Subject: [PATCH 47/97] Add cvars to votekick to customize requirements for the initiator. (#32490) --- Content.Server/Voting/VotingSystem.cs | 9 +++++++-- Content.Shared/CCVar/CCVars.cs | 12 ++++++++++++ Resources/Locale/en-US/voting/ui/vote-call-menu.ftl | 2 +- 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/Content.Server/Voting/VotingSystem.cs b/Content.Server/Voting/VotingSystem.cs index 3d3aeb4859..5df1ce7c1f 100644 --- a/Content.Server/Voting/VotingSystem.cs +++ b/Content.Server/Voting/VotingSystem.cs @@ -13,6 +13,7 @@ using Robust.Shared.Network; using Robust.Shared.Player; using Robust.Shared.Timing; using System.Threading.Tasks; +using Content.Shared.Players.PlayTimeTracking; namespace Content.Server.Voting; @@ -26,6 +27,7 @@ public sealed class VotingSystem : EntitySystem [Dependency] private readonly IConfigurationManager _cfg = default!; [Dependency] private readonly JobSystem _jobs = default!; [Dependency] private readonly GameTicker _gameTicker = default!; + [Dependency] private readonly ISharedPlaytimeManager _playtimeManager = default!; public override void Initialize() { @@ -109,10 +111,13 @@ public sealed class VotingSystem : EntitySystem } // Must be whitelisted - if (!await _dbManager.GetWhitelistStatusAsync(initiator.UserId)) + if (!await _dbManager.GetWhitelistStatusAsync(initiator.UserId) && _cfg.GetCVar(CCVars.VotekickInitiatorWhitelistedRequirement)) return false; - return true; + // Must be eligible to vote + var playtime = _playtimeManager.GetPlayTimes(initiator); + return playtime.TryGetValue(PlayTimeTrackingShared.TrackerOverall, out TimeSpan overallTime) && (overallTime >= TimeSpan.FromHours(_cfg.GetCVar(CCVars.VotekickEligibleVoterPlaytime)) + || !_cfg.GetCVar(CCVars.VotekickInitiatorTimeRequirement)); } /// diff --git a/Content.Shared/CCVar/CCVars.cs b/Content.Shared/CCVar/CCVars.cs index d1dc9d9ade..81a0668bdb 100644 --- a/Content.Shared/CCVar/CCVars.cs +++ b/Content.Shared/CCVar/CCVars.cs @@ -1477,6 +1477,18 @@ namespace Content.Shared.CCVar public static readonly CVarDef VotekickInitiatorGhostRequirement = CVarDef.Create("votekick.initiator_ghost_requirement", true, CVar.SERVERONLY); + /// + /// Should the initiator be whitelisted to initiate a votekick? + /// + public static readonly CVarDef VotekickInitiatorWhitelistedRequirement = + CVarDef.Create("votekick.initiator_whitelist_requirement", true, CVar.SERVERONLY); + + /// + /// Should the initiator be able to start a votekick if they are bellow the votekick.voter_playtime requirement? + /// + public static readonly CVarDef VotekickInitiatorTimeRequirement = + CVarDef.Create("votekick.initiator_time_requirement", false, CVar.SERVERONLY); + /// /// Whether a votekick voter must be a ghost or not. /// diff --git a/Resources/Locale/en-US/voting/ui/vote-call-menu.ftl b/Resources/Locale/en-US/voting/ui/vote-call-menu.ftl index fbae3598ed..82e3a5d1f8 100644 --- a/Resources/Locale/en-US/voting/ui/vote-call-menu.ftl +++ b/Resources/Locale/en-US/voting/ui/vote-call-menu.ftl @@ -25,7 +25,7 @@ ui-vote-type-not-available = This vote type has been disabled # Vote option only available for specific users. ui-vote-trusted-users-notice = - This vote option is only available to whitelisted players. + This vote option is only available to players who have enough playtime or are whitelisted. In addition, you must have been a ghost for { $timeReq } seconds. # Warning to not abuse a specific vote option. From 2537bff7ba1134e903a90fa7972286bfd8abb9b9 Mon Sep 17 00:00:00 2001 From: PJBot Date: Sat, 2 Nov 2024 01:34:34 +0000 Subject: [PATCH 48/97] Automatic changelog update --- Resources/Changelog/Changelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 7bcfcc7e0a..f4a320dcb5 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Blackern5000 - changes: - - message: Bent pipes now deal 8 thrown damage instead of 3. - type: Tweak - id: 7077 - time: '2024-08-10T03:30:43.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30634 - author: shampunj changes: - message: Rat king can now wideswing @@ -3951,3 +3944,10 @@ id: 7576 time: '2024-11-01T06:22:39.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/33022 +- author: aspiringLich + changes: + - message: Fixed the logic triggering popups when inserting items into machines. + type: Fix + id: 7577 + time: '2024-11-02T01:33:26.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/28856 From 1c8eed8b4531f081d8a0178f9ea60b108d439bf6 Mon Sep 17 00:00:00 2001 From: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Date: Sat, 2 Nov 2024 20:29:16 +1100 Subject: [PATCH 49/97] Add on-call functionality for adminning (#30443) * Add on-call functionality for adminning The first time an ahelp gets SOS it gets relayed to the specified channel with the specified ping. Every time after that it doesn't until it gets a non-SOS response received. * Remove redundant name Pretty sure this already gets chucked on the name of the msg itself I think it just didn't show in screenshot because they were subsequent. * Update Content.Server/Administration/Systems/BwoinkSystem.cs Co-authored-by: Chief-Engineer <119664036+Chief-Engineer@users.noreply.github.com> --------- Co-authored-by: Chief-Engineer <119664036+Chief-Engineer@users.noreply.github.com> Co-authored-by: deathride58 --- .../Administration/Systems/BwoinkSystem.cs | 207 ++++++++++++++---- Content.Shared/CCVar/CCVars.cs | 12 + 2 files changed, 182 insertions(+), 37 deletions(-) diff --git a/Content.Server/Administration/Systems/BwoinkSystem.cs b/Content.Server/Administration/Systems/BwoinkSystem.cs index 1efc0a9d56..7a47755db9 100644 --- a/Content.Server/Administration/Systems/BwoinkSystem.cs +++ b/Content.Server/Administration/Systems/BwoinkSystem.cs @@ -47,20 +47,23 @@ namespace Content.Server.Administration.Systems [GeneratedRegex(@"^https://discord\.com/api/webhooks/(\d+)/((?!.*/).*)$")] private static partial Regex DiscordRegex(); - private ISawmill _sawmill = default!; - private readonly HttpClient _httpClient = new(); private string _webhookUrl = string.Empty; private WebhookData? _webhookData; + + private string _onCallUrl = string.Empty; + private WebhookData? _onCallData; + + private ISawmill _sawmill = default!; + private readonly HttpClient _httpClient = new(); + private string _footerIconUrl = string.Empty; private string _avatarUrl = string.Empty; private string _serverName = string.Empty; - private readonly - Dictionary _relayMessages = new(); + private readonly Dictionary _relayMessages = new(); private Dictionary _oldMessageIds = new(); - private readonly Dictionary> _messageQueues = new(); + private readonly Dictionary> _messageQueues = new(); private readonly HashSet _processingChannels = new(); private readonly Dictionary _typingUpdateTimestamps = new(); private string _overrideClientName = string.Empty; @@ -82,12 +85,16 @@ namespace Content.Server.Administration.Systems public override void Initialize() { base.Initialize(); + + Subs.CVar(_config, CCVars.DiscordOnCallWebhook, OnCallChanged, true); + Subs.CVar(_config, CCVars.DiscordAHelpWebhook, OnWebhookChanged, true); Subs.CVar(_config, CCVars.DiscordAHelpFooterIcon, OnFooterIconChanged, true); Subs.CVar(_config, CCVars.DiscordAHelpAvatar, OnAvatarChanged, true); Subs.CVar(_config, CVars.GameHostName, OnServerNameChanged, true); Subs.CVar(_config, CCVars.AdminAhelpOverrideClientName, OnOverrideChanged, true); _sawmill = IoCManager.Resolve().GetSawmill("AHELP"); + var defaultParams = new AHelpMessageParams( string.Empty, string.Empty, @@ -96,7 +103,7 @@ namespace Content.Server.Administration.Systems _gameTicker.RunLevel, playedSound: false ); - _maxAdditionalChars = GenerateAHelpMessage(defaultParams).Length; + _maxAdditionalChars = GenerateAHelpMessage(defaultParams).Message.Length; _playerManager.PlayerStatusChanged += OnPlayerStatusChanged; SubscribeLocalEvent(OnGameRunLevelChanged); @@ -111,6 +118,33 @@ namespace Content.Server.Administration.Systems ); } + private async void OnCallChanged(string url) + { + _onCallUrl = url; + + if (url == string.Empty) + return; + + var match = DiscordRegex().Match(url); + + if (!match.Success) + { + Log.Error("On call URL does not appear to be valid."); + return; + } + + if (match.Groups.Count <= 2) + { + Log.Error("Could not get webhook ID or token for on call URL."); + return; + } + + var webhookId = match.Groups[1].Value; + var webhookToken = match.Groups[2].Value; + + _onCallData = await GetWebhookData(webhookId, webhookToken); + } + private void PlayerRateLimitedAction(ICommonSession obj) { RaiseNetworkEvent( @@ -259,13 +293,13 @@ namespace Content.Server.Administration.Systems // Store the Discord message IDs of the previous round _oldMessageIds = new Dictionary(); - foreach (var message in _relayMessages) + foreach (var (user, interaction) in _relayMessages) { - var id = message.Value.id; + var id = interaction.Id; if (id == null) return; - _oldMessageIds[message.Key] = id; + _oldMessageIds[user] = id; } _relayMessages.Clear(); @@ -330,10 +364,10 @@ namespace Content.Server.Administration.Systems var webhookToken = match.Groups[2].Value; // Fire and forget - await SetWebhookData(webhookId, webhookToken); + _webhookData = await GetWebhookData(webhookId, webhookToken); } - private async Task SetWebhookData(string id, string token) + private async Task GetWebhookData(string id, string token) { var response = await _httpClient.GetAsync($"https://discord.com/api/v10/webhooks/{id}/{token}"); @@ -342,10 +376,10 @@ namespace Content.Server.Administration.Systems { _sawmill.Log(LogLevel.Error, $"Discord returned bad status code when trying to get webhook data (perhaps the webhook URL is invalid?): {response.StatusCode}\nResponse: {content}"); - return; + return null; } - _webhookData = JsonSerializer.Deserialize(content); + return JsonSerializer.Deserialize(content); } private void OnFooterIconChanged(string url) @@ -358,14 +392,14 @@ namespace Content.Server.Administration.Systems _avatarUrl = url; } - private async void ProcessQueue(NetUserId userId, Queue messages) + private async void ProcessQueue(NetUserId userId, Queue messages) { // Whether an embed already exists for this player var exists = _relayMessages.TryGetValue(userId, out var existingEmbed); // Whether the message will become too long after adding these new messages - var tooLong = exists && messages.Sum(msg => Math.Min(msg.Length, MessageLengthCap) + "\n".Length) - + existingEmbed.description.Length > DescriptionMax; + var tooLong = exists && messages.Sum(msg => Math.Min(msg.Message.Length, MessageLengthCap) + "\n".Length) + + existingEmbed?.Description.Length > DescriptionMax; // If there is no existing embed, or it is getting too long, we create a new embed if (!exists || tooLong) @@ -385,10 +419,10 @@ namespace Content.Server.Administration.Systems // If we have all the data required, we can link to the embed of the previous round or embed that was too long if (_webhookData is { GuildId: { } guildId, ChannelId: { } channelId }) { - if (tooLong && existingEmbed.id != null) + if (tooLong && existingEmbed?.Id != null) { linkToPrevious = - $"**[Go to previous embed of this round](https://discord.com/channels/{guildId}/{channelId}/{existingEmbed.id})**\n"; + $"**[Go to previous embed of this round](https://discord.com/channels/{guildId}/{channelId}/{existingEmbed.Id})**\n"; } else if (_oldMessageIds.TryGetValue(userId, out var id) && !string.IsNullOrEmpty(id)) { @@ -398,13 +432,22 @@ namespace Content.Server.Administration.Systems } var characterName = _minds.GetCharacterName(userId); - existingEmbed = (null, lookup.Username, linkToPrevious, characterName, _gameTicker.RunLevel); + existingEmbed = new DiscordRelayInteraction() + { + Id = null, + CharacterName = characterName, + Description = linkToPrevious, + Username = lookup.Username, + LastRunLevel = _gameTicker.RunLevel, + }; + + _relayMessages[userId] = existingEmbed; } // Previous message was in another RunLevel, so show that in the embed - if (existingEmbed.lastRunLevel != _gameTicker.RunLevel) + if (existingEmbed!.LastRunLevel != _gameTicker.RunLevel) { - existingEmbed.description += _gameTicker.RunLevel switch + existingEmbed.Description += _gameTicker.RunLevel switch { GameRunLevel.PreRoundLobby => "\n\n:arrow_forward: _**Pre-round lobby started**_\n", GameRunLevel.InRound => "\n\n:arrow_forward: _**Round started**_\n", @@ -413,26 +456,35 @@ namespace Content.Server.Administration.Systems $"{_gameTicker.RunLevel} was not matched."), }; - existingEmbed.lastRunLevel = _gameTicker.RunLevel; + existingEmbed.LastRunLevel = _gameTicker.RunLevel; } + // If last message of the new batch is SOS then relay it to on-call. + // ... as long as it hasn't been relayed already. + var discordMention = messages.Last(); + var onCallRelay = !discordMention.Receivers && !existingEmbed.OnCall; + // Add available messages to the embed description while (messages.TryDequeue(out var message)) { - // In case someone thinks they're funny - if (message.Length > MessageLengthCap) - message = message[..(MessageLengthCap - TooLongText.Length)] + TooLongText; + string text; - existingEmbed.description += $"\n{message}"; + // In case someone thinks they're funny + if (message.Message.Length > MessageLengthCap) + text = message.Message[..(MessageLengthCap - TooLongText.Length)] + TooLongText; + else + text = message.Message; + + existingEmbed.Description += $"\n{text}"; } - var payload = GeneratePayload(existingEmbed.description, - existingEmbed.username, - existingEmbed.characterName); + var payload = GeneratePayload(existingEmbed.Description, + existingEmbed.Username, + existingEmbed.CharacterName); // If there is no existing embed, create a new one // Otherwise patch (edit) it - if (existingEmbed.id == null) + if (existingEmbed.Id == null) { var request = await _httpClient.PostAsync($"{_webhookUrl}?wait=true", new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json")); @@ -455,11 +507,11 @@ namespace Content.Server.Administration.Systems return; } - existingEmbed.id = id.ToString(); + existingEmbed.Id = id.ToString(); } else { - var request = await _httpClient.PatchAsync($"{_webhookUrl}/messages/{existingEmbed.id}", + var request = await _httpClient.PatchAsync($"{_webhookUrl}/messages/{existingEmbed.Id}", new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json")); if (!request.IsSuccessStatusCode) @@ -474,6 +526,43 @@ namespace Content.Server.Administration.Systems _relayMessages[userId] = existingEmbed; + // Actually do the on call relay last, we just need to grab it before we dequeue every message above. + if (onCallRelay && + _onCallData != null) + { + existingEmbed.OnCall = true; + var roleMention = _config.GetCVar(CCVars.DiscordAhelpMention); + + if (!string.IsNullOrEmpty(roleMention)) + { + var message = new StringBuilder(); + message.AppendLine($"<@&{roleMention}>"); + message.AppendLine("Unanswered SOS"); + + // Need webhook data to get the correct link for that channel rather than on-call data. + if (_webhookData is { GuildId: { } guildId, ChannelId: { } channelId }) + { + message.AppendLine( + $"**[Go to ahelp](https://discord.com/channels/{guildId}/{channelId}/{existingEmbed.Id})**"); + } + + payload = GeneratePayload(message.ToString(), existingEmbed.Username, existingEmbed.CharacterName); + + var request = await _httpClient.PostAsync($"{_onCallUrl}?wait=true", + new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json")); + + var content = await request.Content.ReadAsStringAsync(); + if (!request.IsSuccessStatusCode) + { + _sawmill.Log(LogLevel.Error, $"Discord returned bad status code when posting relay message (perhaps the message is too long?): {request.StatusCode}\nResponse: {content}"); + } + } + } + else + { + existingEmbed.OnCall = false; + } + _processingChannels.Remove(userId); } @@ -652,7 +741,7 @@ namespace Content.Server.Administration.Systems if (sendsWebhook) { if (!_messageQueues.ContainsKey(msg.UserId)) - _messageQueues[msg.UserId] = new Queue(); + _messageQueues[msg.UserId] = new Queue(); var str = message.Text; var unameLength = senderSession.Name.Length; @@ -701,7 +790,7 @@ namespace Content.Server.Administration.Systems .ToList(); } - private static string GenerateAHelpMessage(AHelpMessageParams parameters) + private static DiscordRelayedData GenerateAHelpMessage(AHelpMessageParams parameters) { var stringbuilder = new StringBuilder(); @@ -718,13 +807,57 @@ namespace Content.Server.Administration.Systems stringbuilder.Append($" **{parameters.RoundTime}**"); if (!parameters.PlayedSound) stringbuilder.Append(" **(S)**"); - if (parameters.Icon == null) stringbuilder.Append($" **{parameters.Username}:** "); else stringbuilder.Append($" **{parameters.Username}** "); stringbuilder.Append(parameters.Message); - return stringbuilder.ToString(); + + return new DiscordRelayedData() + { + Receivers = !parameters.NoReceivers, + Message = stringbuilder.ToString(), + }; + } + + private record struct DiscordRelayedData + { + /// + /// Was anyone online to receive it. + /// + public bool Receivers; + + /// + /// What's the payload to send to discord. + /// + public string Message; + } + + /// + /// Class specifically for holding information regarding existing Discord embeds + /// + private sealed class DiscordRelayInteraction + { + public string? Id; + + public string Username = String.Empty; + + public string? CharacterName; + + /// + /// Contents for the discord message. + /// + public string Description = string.Empty; + + /// + /// Run level of the last interaction. If different we'll link to the last Id. + /// + public GameRunLevel LastRunLevel; + + /// + /// Did we relay this interaction to OnCall previously. + /// + public bool OnCall; } } diff --git a/Content.Shared/CCVar/CCVars.cs b/Content.Shared/CCVar/CCVars.cs index 81a0668bdb..83068b5262 100644 --- a/Content.Shared/CCVar/CCVars.cs +++ b/Content.Shared/CCVar/CCVars.cs @@ -461,6 +461,18 @@ namespace Content.Shared.CCVar * Discord */ + /// + /// The role that will get mentioned if a new SOS ahelp comes in. + /// + public static readonly CVarDef DiscordAhelpMention = + CVarDef.Create("discord.on_call_ping", string.Empty, CVar.SERVERONLY | CVar.CONFIDENTIAL); + + /// + /// URL of the discord webhook to relay unanswered ahelp messages. + /// + public static readonly CVarDef DiscordOnCallWebhook = + CVarDef.Create("discord.on_call_webhook", string.Empty, CVar.SERVERONLY | CVar.CONFIDENTIAL); + /// /// URL of the Discord webhook which will relay all ahelp messages. /// From 51b8101dc214e042e489a0dae89d39944d73560b Mon Sep 17 00:00:00 2001 From: PJBot Date: Sat, 2 Nov 2024 09:30:23 +0000 Subject: [PATCH 50/97] Automatic changelog update --- Resources/Changelog/Admin.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Resources/Changelog/Admin.yml b/Resources/Changelog/Admin.yml index 4bb373ca1d..fabaee2c2c 100644 --- a/Resources/Changelog/Admin.yml +++ b/Resources/Changelog/Admin.yml @@ -575,5 +575,13 @@ Entries: id: 71 time: '2024-10-31T14:53:38.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/32601 +- author: metalgearsloth + changes: + - message: Added on-call functionality for discord relay to get notified on unanswered + ahelps. + type: Add + id: 72 + time: '2024-11-02T09:29:16.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30443 Name: Admin Order: 1 From 05ae40400c134f3e871a8af398b9f1be06dbbe31 Mon Sep 17 00:00:00 2001 From: K-Dynamic <20566341+K-Dynamic@users.noreply.github.com> Date: Sat, 2 Nov 2024 21:51:44 +1200 Subject: [PATCH 51/97] Pills are explosion resistant (partially reverts #15851) (#32458) * idk how to revert a pr so I just deleted some lines * pill destructible with explosion resistance * comment for explosion resist * "and" to "but" --------- Co-authored-by: SlamBamActionman <83650252+SlamBamActionman@users.noreply.github.com> --- .../Entities/Objects/Specific/chemistry.yml | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/Resources/Prototypes/Entities/Objects/Specific/chemistry.yml b/Resources/Prototypes/Entities/Objects/Specific/chemistry.yml index b717255d8f..527b0ba5e6 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/chemistry.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/chemistry.yml @@ -541,12 +541,8 @@ solutions: food: maxVol: 20 - - type: SolutionSpiker - sourceSolution: food - - type: Extractable - grindableSolutionName: food - - type: StaticPrice - price: 0 + - type: ExplosionResistance + damageCoefficient: 0.025 # survives conventional explosives but not minibombs and nukes - type: Damageable damageContainer: Inorganic - type: Destructible @@ -559,6 +555,12 @@ solution: food - !type:DoActsBehavior acts: [ "Destruction" ] + - type: SolutionSpiker + sourceSolution: food + - type: Extractable + grindableSolutionName: food + - type: StaticPrice + price: 0 - type: Tag tags: - Pill From 7276fff9c10d3a83d8a807aa1f27fe14620e8929 Mon Sep 17 00:00:00 2001 From: PJBot Date: Sat, 2 Nov 2024 09:52:51 +0000 Subject: [PATCH 52/97] Automatic changelog update --- Resources/Changelog/Changelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index f4a320dcb5..b0b452a5ec 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: shampunj - changes: - - message: Rat king can now wideswing - type: Tweak - id: 7078 - time: '2024-08-10T12:47:55.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30808 - author: BackeTako changes: - message: Added a suitskirt for the psychologist @@ -3951,3 +3944,10 @@ id: 7577 time: '2024-11-02T01:33:26.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/28856 +- author: K-Dynamic + changes: + - message: Pills are explosion resistant. + type: Tweak + id: 7578 + time: '2024-11-02T09:51:45.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32458 From b000a3e3876f27b0e761ef36e06de622d4c790d2 Mon Sep 17 00:00:00 2001 From: K-Dynamic <20566341+K-Dynamic@users.noreply.github.com> Date: Sat, 2 Nov 2024 21:53:18 +1200 Subject: [PATCH 53/97] Hasten handcraft gauze recipe & decrease techfab gauze cost (#32744) * med lathe gauze price reduction * gauze craft doafter time * 3 second doafter craft --- .../Prototypes/Recipes/Crafting/Graphs/improvised/gauze.yml | 2 +- Resources/Prototypes/Recipes/Lathes/medical.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Resources/Prototypes/Recipes/Crafting/Graphs/improvised/gauze.yml b/Resources/Prototypes/Recipes/Crafting/Graphs/improvised/gauze.yml index ea21a56448..bb36f36d69 100644 --- a/Resources/Prototypes/Recipes/Crafting/Graphs/improvised/gauze.yml +++ b/Resources/Prototypes/Recipes/Crafting/Graphs/improvised/gauze.yml @@ -8,6 +8,6 @@ steps: - material: Cloth amount: 2 - doAfter: 10 + doAfter: 3 - node: gauze entity: Gauze1 diff --git a/Resources/Prototypes/Recipes/Lathes/medical.yml b/Resources/Prototypes/Recipes/Lathes/medical.yml index c414bfad52..b2c70b41ee 100644 --- a/Resources/Prototypes/Recipes/Lathes/medical.yml +++ b/Resources/Prototypes/Recipes/Lathes/medical.yml @@ -75,7 +75,7 @@ result: Gauze1 completetime: 1 materials: - Cloth: 200 + Cloth: 100 # lathe more efficient than handcrafting - type: latheRecipe id: HandheldHealthAnalyzer From fcbf5152035000e87284be9e1279f8626d0e9c30 Mon Sep 17 00:00:00 2001 From: PJBot Date: Sat, 2 Nov 2024 09:54:25 +0000 Subject: [PATCH 54/97] Automatic changelog update --- Resources/Changelog/Changelog.yml | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index b0b452a5ec..fb6ea528d5 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: BackeTako - changes: - - message: Added a suitskirt for the psychologist - type: Add - id: 7079 - time: '2024-08-10T12:51:54.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30709 - author: Unkn0wnGh0st333 changes: - message: ERT Chaplain starting gear was fixed and will no longer give the ERT @@ -3951,3 +3944,12 @@ id: 7578 time: '2024-11-02T09:51:45.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/32458 +- author: K-Dynamic + changes: + - message: Handcrafted gauze now takes 3 seconds instead of 10 seconds of crafting + type: Tweak + - message: Medical techfab gauze recipe now takes 1 cloth instead of 2 + type: Tweak + id: 7579 + time: '2024-11-02T09:53:19.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32744 From 1c2fd6a11b6de65549a2278468e6ab90859b982f Mon Sep 17 00:00:00 2001 From: Ubaser <134914314+UbaserB@users.noreply.github.com> Date: Sat, 2 Nov 2024 21:07:51 +1100 Subject: [PATCH 55/97] Service workers antagonist fix. (#31359) * add * Revert "add" This reverts commit 25da34b0fead5812fe5800c9bf5dd7b10ef48d7d. * antagonism allowed:tm: --- Resources/Prototypes/Roles/Jobs/Civilian/service_worker.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Resources/Prototypes/Roles/Jobs/Civilian/service_worker.yml b/Resources/Prototypes/Roles/Jobs/Civilian/service_worker.yml index e883f4cc66..427d9b8192 100644 --- a/Resources/Prototypes/Roles/Jobs/Civilian/service_worker.yml +++ b/Resources/Prototypes/Roles/Jobs/Civilian/service_worker.yml @@ -1,4 +1,4 @@ -- type: job +- type: job id: ServiceWorker name: job-name-serviceworker description: job-description-serviceworker @@ -6,7 +6,6 @@ startingGear: ServiceWorkerGear icon: "JobIconServiceWorker" supervisors: job-supervisors-service - canBeAntag: false access: - Service - Maintenance From 2a6314bf90ade6c6e9c5323d1696bf6e62ee431a Mon Sep 17 00:00:00 2001 From: PJBot Date: Sat, 2 Nov 2024 10:08:58 +0000 Subject: [PATCH 56/97] Automatic changelog update --- Resources/Changelog/Changelog.yml | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index fb6ea528d5..351ab9d62e 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,12 +1,4 @@ Entries: -- author: Unkn0wnGh0st333 - changes: - - message: ERT Chaplain starting gear was fixed and will no longer give the ERT - Engineer gear - type: Fix - id: 7080 - time: '2024-08-10T12:55:20.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30855 - author: Ubaser changes: - message: Light tube structures now have new sprites. @@ -3953,3 +3945,10 @@ id: 7579 time: '2024-11-02T09:53:19.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/32744 +- author: Ubaser + changes: + - message: Service workers can now be antagonists. + type: Fix + id: 7580 + time: '2024-11-02T10:07:52.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31359 From 4f683155843bff54c03d0e5154f38e0744548c59 Mon Sep 17 00:00:00 2001 From: AftrLite <61218133+AftrLite@users.noreply.github.com> Date: Sun, 3 Nov 2024 02:19:33 +1300 Subject: [PATCH 57/97] Adds a new AME sound effect! (#33097) * Changes the AME sound effect to not be the default MetalThud. * Was told on discord to make a minor change to autorerun the tests due to the Build & Test Debug failing! * Attribution and licensing, as requsted by deathride58 * Fixes the high-pitched squeak audible to some people! * Audio file tweaked by SlamBamActionMan to eliminate a weird squeak they were still able to hear. Thanks! --- .../Ame/Components/AmeControllerComponent.cs | 2 +- Resources/Audio/Machines/ame_fuelinjection.ogg | Bin 0 -> 29727 bytes Resources/Audio/Machines/attributions.yml | 5 +++++ 3 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 Resources/Audio/Machines/ame_fuelinjection.ogg diff --git a/Content.Server/Ame/Components/AmeControllerComponent.cs b/Content.Server/Ame/Components/AmeControllerComponent.cs index fae3d86633..2c5464dd8e 100644 --- a/Content.Server/Ame/Components/AmeControllerComponent.cs +++ b/Content.Server/Ame/Components/AmeControllerComponent.cs @@ -55,7 +55,7 @@ public sealed partial class AmeControllerComponent : SharedAmeControllerComponen /// [DataField("injectSound")] [ViewVariables(VVAccess.ReadWrite)] - public SoundSpecifier InjectSound = new SoundCollectionSpecifier("MetalThud"); + public SoundSpecifier InjectSound = new SoundPathSpecifier("/Audio/Machines/ame_fuelinjection.ogg"); /// /// The last time this could have injected fuel into the AME. diff --git a/Resources/Audio/Machines/ame_fuelinjection.ogg b/Resources/Audio/Machines/ame_fuelinjection.ogg new file mode 100644 index 0000000000000000000000000000000000000000..30c9175ee97733b81ce14e9ac55964c67b0dd3c3 GIT binary patch literal 29727 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 Date: Sat, 2 Nov 2024 13:20:40 +0000 Subject: [PATCH 58/97] Automatic changelog update --- Resources/Changelog/Changelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 351ab9d62e..728cdd9c03 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Ubaser - changes: - - message: Light tube structures now have new sprites. - type: Tweak - id: 7081 - time: '2024-08-10T15:00:22.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29091 - author: lzk228 changes: - message: Standartized some clothing recipes. @@ -3952,3 +3945,10 @@ id: 7580 time: '2024-11-02T10:07:52.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/31359 +- author: AftrLite + changes: + - message: The AME now has a new sound effect for fuel injection! + type: Add + id: 7581 + time: '2024-11-02T13:19:33.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/33097 From 9520e829de3511ebd0e3304fb8d03ab0440db7dd Mon Sep 17 00:00:00 2001 From: nikthechampiongr <32041239+nikthechampiongr@users.noreply.github.com> Date: Sat, 2 Nov 2024 15:21:10 +0200 Subject: [PATCH 59/97] Allow for the ai's laws to be changed from its core and eye (#32461) * Allow for the ai's laws to be changed from its core and eye * Address reviews --- .../Administration/Systems/AdminVerbSystem.cs | 29 +++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/Content.Server/Administration/Systems/AdminVerbSystem.cs b/Content.Server/Administration/Systems/AdminVerbSystem.cs index 2ab27e4388..0640537f57 100644 --- a/Content.Server/Administration/Systems/AdminVerbSystem.cs +++ b/Content.Server/Administration/Systems/AdminVerbSystem.cs @@ -35,8 +35,10 @@ using Robust.Shared.Toolshed; using Robust.Shared.Utility; using System.Linq; using Content.Server.Silicons.Laws; +using Content.Shared.Movement.Components; using Content.Shared.Silicons.Laws.Components; using Robust.Server.Player; +using Content.Shared.Silicons.StationAi; using Robust.Shared.Physics.Components; using static Content.Shared.Configurable.ConfigurationComponent; @@ -345,7 +347,30 @@ namespace Content.Server.Administration.Systems Impact = LogImpact.Low }); - if (TryComp(args.Target, out var lawBoundComponent)) + // This logic is needed to be able to modify the AI's laws through its core and eye. + EntityUid? target = null; + SiliconLawBoundComponent? lawBoundComponent = null; + + if (TryComp(args.Target, out lawBoundComponent)) + { + target = args.Target; + } + // When inspecting the core we can find the entity with its laws by looking at the AiHolderComponent. + else if (TryComp(args.Target, out var holder) && holder.Slot.Item != null + && TryComp(holder.Slot.Item, out lawBoundComponent)) + { + target = holder.Slot.Item.Value; + // For the eye we can find the entity with its laws as the source of the movement relay since the eye + // is just a proxy for it to move around and look around the station. + } + else if (TryComp(args.Target, out var relay) + && TryComp(relay.Source, out lawBoundComponent)) + { + target = relay.Source; + + } + + if (lawBoundComponent != null && target != null) { args.Verbs.Add(new Verb() { @@ -359,7 +384,7 @@ namespace Content.Server.Administration.Systems return; } _euiManager.OpenEui(ui, session); - ui.UpdateLaws(lawBoundComponent, args.Target); + ui.UpdateLaws(lawBoundComponent, target.Value); }, Icon = new SpriteSpecifier.Rsi(new ResPath("/Textures/Interface/Actions/actions_borg.rsi"), "state-laws"), }); From 131e492e6f99ab40f7c4b7c0502c039f93084e66 Mon Sep 17 00:00:00 2001 From: PJBot Date: Sat, 2 Nov 2024 13:22:16 +0000 Subject: [PATCH 60/97] Automatic changelog update --- Resources/Changelog/Admin.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Resources/Changelog/Admin.yml b/Resources/Changelog/Admin.yml index fabaee2c2c..56c82c23a4 100644 --- a/Resources/Changelog/Admin.yml +++ b/Resources/Changelog/Admin.yml @@ -583,5 +583,12 @@ Entries: id: 72 time: '2024-11-02T09:29:16.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/30443 +- author: nikthechampiongr + changes: + - message: It is now possible to edit the AI's laws through its core and eye. + type: Fix + id: 73 + time: '2024-11-02T13:21:10.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32461 Name: Admin Order: 1 From 11f0dc420f0a17e721dc29cd993132f13a24537f Mon Sep 17 00:00:00 2001 From: deltanedas <39013340+deltanedas@users.noreply.github.com> Date: Sat, 2 Nov 2024 13:24:08 +0000 Subject: [PATCH 61/97] clean up tools lathe recipes (#31521) * clean up tools lathe recipes * add medical and cooking tools * add result * add result to others * review * engine --------- Co-authored-by: deltanedas <@deltanedas:kde.org> --- .../Prototypes/Recipes/Lathes/botany.yml | 38 +++--- .../Prototypes/Recipes/Lathes/cooking.yml | 54 ++++---- .../Prototypes/Recipes/Lathes/medical.yml | 80 ++++-------- Resources/Prototypes/Recipes/Lathes/tools.yml | 120 +++++++----------- 4 files changed, 120 insertions(+), 172 deletions(-) diff --git a/Resources/Prototypes/Recipes/Lathes/botany.yml b/Resources/Prototypes/Recipes/Lathes/botany.yml index 010beb491a..ae5a444ed8 100644 --- a/Resources/Prototypes/Recipes/Lathes/botany.yml +++ b/Resources/Prototypes/Recipes/Lathes/botany.yml @@ -1,39 +1,39 @@ +# Base prototypes + - type: latheRecipe - id: MiniHoe - result: HydroponicsToolMiniHoe - completetime: 2 + abstract: true + parent: BaseToolRecipe + id: BaseHydroToolRecipe materials: Steel: 200 Plastic: 100 +# Recipes + - type: latheRecipe + parent: BaseHydroToolRecipe + id: HydroponicsToolMiniHoe + result: HydroponicsToolMiniHoe + +- type: latheRecipe + parent: BaseHydroToolRecipe id: HydroponicsToolScythe result: HydroponicsToolScythe - completetime: 2 materials: Steel: 300 Plastic: 200 - type: latheRecipe + parent: BaseHydroToolRecipe id: HydroponicsToolHatchet result: HydroponicsToolHatchet - completetime: 2 - materials: - Steel: 200 - Plastic: 100 - type: latheRecipe - id: Spade + parent: BaseHydroToolRecipe + id: HydroponicsToolSpade result: HydroponicsToolSpade - completetime: 2 - materials: - Steel: 200 - Plastic: 100 - + - type: latheRecipe - id: Clippers + parent: BaseHydroToolRecipe + id: HydroponicsToolClippers result: HydroponicsToolClippers - completetime: 2 - materials: - Steel: 200 - Plastic: 100 diff --git a/Resources/Prototypes/Recipes/Lathes/cooking.yml b/Resources/Prototypes/Recipes/Lathes/cooking.yml index c28a937015..333279a820 100644 --- a/Resources/Prototypes/Recipes/Lathes/cooking.yml +++ b/Resources/Prototypes/Recipes/Lathes/cooking.yml @@ -1,67 +1,65 @@ - type: latheRecipe + parent: BaseToolRecipe id: ButchCleaver result: ButchCleaver - completetime: 2 materials: Steel: 300 Plastic: 50 - type: latheRecipe + parent: BaseToolRecipe id: KitchenKnife result: KitchenKnife - completetime: 2 materials: Steel: 200 Plastic: 50 - type: latheRecipe - id: DrinkMug - result: DrinkMug + abstract: true + id: BaseGlasswareRecipe completetime: 0.8 materials: Glass: 100 - type: latheRecipe + parent: BaseGlasswareRecipe + id: DrinkMug + result: DrinkMug + +- type: latheRecipe + parent: DrinkMug id: DrinkMugMetal result: DrinkMugMetal - completetime: 0.8 materials: Steel: 100 - type: latheRecipe + parent: DrinkMug id: DrinkGlass result: DrinkGlass - completetime: 0.8 - materials: - Glass: 100 - type: latheRecipe + parent: DrinkMug id: DrinkShotGlass result: DrinkShotGlass completetime: 0.4 - materials: - Glass: 100 - type: latheRecipe + parent: DrinkMug id: DrinkGlassCoupeShaped result: DrinkGlassCoupeShaped - completetime: 0.8 - materials: - Glass: 100 -- type: latheRecipe - id: CustomDrinkJug - result: CustomDrinkJug - completetime: 2 - materials: - Plastic: 200 - - type: latheRecipe + id: CustomDrinkJug + result: CustomDrinkJug + completetime: 2 + materials: + Plastic: 200 + +- type: latheRecipe + parent: BaseGlasswareRecipe id: FoodPlate result: FoodPlate - completetime: 0.8 - materials: - Glass: 100 - type: latheRecipe id: FoodPlateSmall @@ -71,25 +69,23 @@ Glass: 50 - type: latheRecipe + parent: FoodPlate id: FoodPlatePlastic result: FoodPlatePlastic - completetime: 0.8 materials: Plastic: 100 - type: latheRecipe + parent: FoodPlateSmall id: FoodPlateSmallPlastic result: FoodPlateSmallPlastic - completetime: 0.4 materials: Plastic: 50 - type: latheRecipe + parent: FoodPlate id: FoodBowlBig result: FoodBowlBig - completetime: 0.8 - materials: - Glass: 100 - type: latheRecipe id: FoodPlateTin @@ -99,9 +95,9 @@ Steel: 100 - type: latheRecipe + parent: FoodPlateTin id: FoodPlateMuffinTin result: FoodPlateMuffinTin - completetime: 0.4 materials: Steel: 50 diff --git a/Resources/Prototypes/Recipes/Lathes/medical.yml b/Resources/Prototypes/Recipes/Lathes/medical.yml index b2c70b41ee..08250290ec 100644 --- a/Resources/Prototypes/Recipes/Lathes/medical.yml +++ b/Resources/Prototypes/Recipes/Lathes/medical.yml @@ -1,51 +1,46 @@ +# Base prototypes + - type: latheRecipe + abstract: true + parent: BaseToolRecipe + id: BaseSurgicalRecipe + materials: + Steel: 200 + +# Recipes + +- type: latheRecipe + parent: BaseSurgicalRecipe id: Scalpel result: Scalpel - category: Tools - completetime: 2 - materials: - Steel: 200 - type: latheRecipe + parent: BaseSurgicalRecipe id: Retractor result: Retractor - category: Tools - completetime: 2 - materials: - Steel: 200 - type: latheRecipe + parent: BaseSurgicalRecipe id: Cautery result: Cautery - category: Tools - completetime: 2 - materials: - Steel: 200 - type: latheRecipe + parent: BaseToolRecipe id: Drill result: Drill - category: Tools - completetime: 2 materials: Steel: 200 Plastic: 100 - type: latheRecipe + parent: BaseSurgicalRecipe id: Saw result: Saw - category: Tools - completetime: 2 - materials: - Steel: 200 - type: latheRecipe + parent: BaseSurgicalRecipe id: Hemostat result: Hemostat - category: Tools - completetime: 2 - materials: - Steel: 200 - type: latheRecipe id: BodyBag @@ -140,66 +135,51 @@ Plastic: 300 - type: latheRecipe + parent: Medkit id: MedkitBurn result: MedkitBurn name: lathe-recipe-MedkitBurn-name - completetime: 2 - materials: - Plastic: 300 - type: latheRecipe + parent: Medkit id: MedkitToxin result: MedkitToxin name: lathe-recipe-MedkitToxin-name - completetime: 2 - materials: - Plastic: 300 - type: latheRecipe + parent: Medkit id: MedkitO2 result: MedkitO2 name: lathe-recipe-MedkitO2-name - completetime: 2 - materials: - Plastic: 300 - type: latheRecipe + parent: Medkit id: MedkitBrute result: MedkitBrute name: lathe-recipe-MedkitBrute-name - completetime: 2 - materials: - Plastic: 300 - type: latheRecipe + parent: Medkit id: MedkitAdvanced result: MedkitAdvanced name: lathe-recipe-MedkitAdvanced-name - completetime: 2 - materials: - Plastic: 300 - type: latheRecipe + parent: Medkit id: MedkitRadiation result: MedkitRadiation name: lathe-recipe-MedkitRadiation-name - completetime: 2 - materials: - Plastic: 300 - type: latheRecipe + parent: Medkit id: MedkitCombat result: MedkitCombat name: lathe-recipe-MedkitCombat-name - completetime: 2 - materials: - Plastic: 300 - type: latheRecipe + parent: BaseToolRecipe id: HandLabeler result: HandLabeler - category: Tools - completetime: 2 materials: Plastic: 100 @@ -219,20 +199,14 @@ Plastic: 300 - type: latheRecipe + parent: RollerBedSpawnFolded id: CheapRollerBedSpawnFolded result: CheapRollerBedSpawnFolded - completetime: 1 - materials: - Steel: 600 - Plastic: 300 - type: latheRecipe + parent: RollerBedSpawnFolded id: EmergencyRollerBedSpawnFolded result: EmergencyRollerBedSpawnFolded - completetime: 1 - materials: - Steel: 600 - Plastic: 300 - type: latheRecipe id: WhiteCane diff --git a/Resources/Prototypes/Recipes/Lathes/tools.yml b/Resources/Prototypes/Recipes/Lathes/tools.yml index 3f5003d909..fc35153317 100644 --- a/Resources/Prototypes/Recipes/Lathes/tools.yml +++ b/Resources/Prototypes/Recipes/Lathes/tools.yml @@ -1,40 +1,51 @@ +# Base prototypes + - type: latheRecipe + abstract: true + id: BaseToolRecipe + category: Tools + completetime: 2 + materials: + Steel: 200 + Plastic: 50 + +- type: latheRecipe + abstract: true + parent: BaseToolRecipe + id: BaseBigToolRecipe + materials: + Steel: 800 + Glass: 300 + +# Recipes + +- type: latheRecipe + parent: BaseToolRecipe id: Wirecutter + result: Wirecutter icon: sprite: Objects/Tools/wirecutters.rsi state: cutters-map - result: Wirecutter - category: Tools - completetime: 2 - materials: - Steel: 200 - Plastic: 50 - type: latheRecipe + parent: BaseToolRecipe id: Screwdriver + result: Screwdriver icon: sprite: Objects/Tools/screwdriver.rsi state: screwdriver-map - result: Screwdriver - category: Tools - completetime: 2 - materials: - Steel: 200 - Plastic: 50 - type: latheRecipe + parent: BaseToolRecipe id: Welder result: Welder - category: Tools - completetime: 2 materials: Steel: 400 - type: latheRecipe + parent: BaseToolRecipe id: Wrench result: Wrench - category: Tools - completetime: 2 materials: Steel: 200 @@ -42,155 +53,122 @@ id: CableStack result: CableApcStack1 category: Parts - completetime: 2 + completetime: 0.1 materials: Steel: 30 - type: latheRecipe + parent: CableStack id: CableMVStack result: CableMVStack1 - category: Parts - completetime: 2 - materials: - Steel: 30 - type: latheRecipe + parent: CableStack id: CableHVStack result: CableHVStack1 - category: Parts - completetime: 2 - materials: - Steel: 30 - type: latheRecipe + parent: BaseToolRecipe id: CrowbarGreen result: CrowbarGreen - category: Tools - completetime: 2 materials: Steel: 200 - type: latheRecipe + parent: BaseToolRecipe id: Pickaxe result: Pickaxe - category: Tools completetime: 4 materials: Steel: 1000 Wood: 500 - type: latheRecipe + parent: BaseToolRecipe id: Shovel result: Shovel - category: Tools - completetime: 2 materials: Steel: 200 Wood: 100 - type: latheRecipe + parent: BaseToolRecipe id: Multitool result: Multitool - category: Tools - completetime: 2 materials: Steel: 200 Plastic: 200 - type: latheRecipe + parent: Multitool id: NetworkConfigurator result: NetworkConfigurator - category: Tools - completetime: 2 - materials: - Steel: 200 - Plastic: 200 - type: latheRecipe + parent: BaseToolRecipe id: PowerDrill result: PowerDrill - category: Tools - completetime: 2 materials: Steel: 600 Plastic: 200 - type: latheRecipe + parent: BaseToolRecipe id: RCD result: RCDEmpty - category: Tools completetime: 4 materials: Steel: 1000 Plastic: 300 - type: latheRecipe + parent: BaseToolRecipe id: RCDAmmo result: RCDAmmo - category: Tools - completetime: 2.4 materials: Steel: 500 Plastic: 250 - type: latheRecipe + parent: BaseBigToolRecipe id: HandHeldMassScanner result: HandHeldMassScannerEmpty - category: Tools - completetime: 2 - materials: - Steel: 800 - Glass: 300 - type: latheRecipe + parent: BaseBigToolRecipe id: HandheldGPSBasic result: HandheldGPSBasic - category: Tools - completetime: 2 - materials: - Steel: 800 - Glass: 300 - type: latheRecipe + parent: BaseBigToolRecipe id: TRayScanner result: trayScanner - category: Tools - completetime: 2 - materials: - Steel: 800 - Glass: 300 - type: latheRecipe + parent: BaseBigToolRecipe id: GasAnalyzer result: GasAnalyzer - category: Tools - completetime: 2 - materials: - Steel: 800 - Glass: 300 - type: latheRecipe + parent: BaseToolRecipe id: SprayPainter result: SprayPainter - category: Tools - completetime: 2 materials: Steel: 300 Plastic: 100 - type: latheRecipe + parent: BaseToolRecipe id: UtilityBelt result: ClothingBeltUtility - category: Tools - completetime: 2 materials: Cloth: 100 Steel: 50 - type: latheRecipe + parent: BaseToolRecipe id: HolofanProjector result: HolofanProjectorEmpty - category: Tools completetime: 8 materials: Steel: 300 @@ -198,18 +176,18 @@ Plastic: 50 - type: latheRecipe + parent: BaseToolRecipe id: WelderExperimental result: WelderExperimental - category: Tools completetime: 6 materials: Steel: 800 Plasma: 200 - type: latheRecipe + parent: BaseToolRecipe id: JawsOfLife result: JawsOfLife - category: Tools completetime: 6 materials: Steel: 1000 @@ -218,9 +196,9 @@ Gold: 50 - type: latheRecipe + parent: BaseToolRecipe id: HoloprojectorField result: HoloprojectorFieldEmpty - category: Tools completetime: 3 materials: Steel: 500 @@ -228,9 +206,9 @@ Glass: 100 - type: latheRecipe + parent: BaseToolRecipe id: WeaponParticleDecelerator result: WeaponParticleDecelerator - category: Tools completetime: 6 materials: Steel: 750 From 7614c2fba754e63989bb25564a265e84118170e3 Mon Sep 17 00:00:00 2001 From: PJBot Date: Sat, 2 Nov 2024 13:25:14 +0000 Subject: [PATCH 62/97] Automatic changelog update --- Resources/Changelog/Changelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 728cdd9c03..bbe3437142 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: lzk228 - changes: - - message: Standartized some clothing recipes. - type: Tweak - id: 7082 - time: '2024-08-10T18:16:56.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29315 - author: TheShuEd changes: - message: You cat cut burger bun into two halfs, and make custom burgers now! @@ -3952,3 +3945,10 @@ id: 7581 time: '2024-11-02T13:19:33.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/33097 +- author: deltanedas + changes: + - message: Printing cables in an autolathe is now 20 times faster. + type: Tweak + id: 7582 + time: '2024-11-02T13:24:08.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31521 From e7ca4b8f2f603ccabab547d6fa5c771373a7439d Mon Sep 17 00:00:00 2001 From: Centronias Date: Sat, 2 Nov 2024 08:04:22 -0700 Subject: [PATCH 63/97] Intercoms and Radios both pick up proximate speech (#32737) * Deduping of recent messages should consider the channel it's being sent to * rerun actions --- .../Radio/EntitySystems/RadioDeviceSystem.cs | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/Content.Server/Radio/EntitySystems/RadioDeviceSystem.cs b/Content.Server/Radio/EntitySystems/RadioDeviceSystem.cs index c8867744a4..3829fc34d2 100644 --- a/Content.Server/Radio/EntitySystems/RadioDeviceSystem.cs +++ b/Content.Server/Radio/EntitySystems/RadioDeviceSystem.cs @@ -30,7 +30,7 @@ public sealed class RadioDeviceSystem : EntitySystem [Dependency] private readonly SharedAppearanceSystem _appearance = default!; // Used to prevent a shitter from using a bunch of radios to spam chat. - private HashSet<(string, EntityUid)> _recentlySent = new(); + private HashSet<(string, EntityUid, RadioChannelPrototype)> _recentlySent = new(); public override void Initialize() { @@ -114,7 +114,7 @@ public sealed class RadioDeviceSystem : EntitySystem { if (args.Powered) return; - SetMicrophoneEnabled(uid, null, false, true, component); + SetMicrophoneEnabled(uid, null, false, true, component); } public void SetMicrophoneEnabled(EntityUid uid, EntityUid? user, bool enabled, bool quiet = false, RadioMicrophoneComponent? component = null) @@ -191,8 +191,9 @@ public sealed class RadioDeviceSystem : EntitySystem if (HasComp(args.Source)) return; // no feedback loops please. - if (_recentlySent.Add((args.Message, args.Source))) - _radio.SendRadioMessage(args.Source, args.Message, _protoMan.Index(component.BroadcastChannel), uid); + var channel = _protoMan.Index(component.BroadcastChannel)!; + if (_recentlySent.Add((args.Message, args.Source, channel))) + _radio.SendRadioMessage(args.Source, args.Message, channel, uid); } private void OnAttemptListen(EntityUid uid, RadioMicrophoneComponent component, ListenAttemptEvent args) @@ -279,7 +280,7 @@ public sealed class RadioDeviceSystem : EntitySystem if (TryComp(ent, out var mic)) mic.BroadcastChannel = channel; if (TryComp(ent, out var speaker)) - speaker.Channels = new(){ channel }; + speaker.Channels = new() { channel }; Dirty(ent); } } From db4b2e0a6f0c7c398d7f90d5e462224d2bcd6c79 Mon Sep 17 00:00:00 2001 From: PJBot Date: Sat, 2 Nov 2024 15:05:28 +0000 Subject: [PATCH 64/97] Automatic changelog update --- Resources/Changelog/Changelog.yml | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index bbe3437142..040c722818 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: TheShuEd - changes: - - message: You cat cut burger bun into two halfs, and make custom burgers now! - type: Add - id: 7083 - time: '2024-08-10T19:31:32.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30755 - author: thetolbean changes: - message: Updated Core's boxing ring beacon label to be correct @@ -3952,3 +3945,11 @@ id: 7582 time: '2024-11-02T13:24:08.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/31521 +- author: Centronias + changes: + - message: Fixed a bug where attempting to speak into a handheld radio and an intercom + simultaneously would lead to only one device transmitting the message. + type: Fix + id: 7583 + time: '2024-11-02T15:04:22.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32737 From 8c1281adf7cb42134635a3aa32cd4db23b03306d Mon Sep 17 00:00:00 2001 From: joshepvodka <86210200+joshepvodka@users.noreply.github.com> Date: Sat, 2 Nov 2024 12:12:25 -0300 Subject: [PATCH 65/97] Adds headphones to loadouts (#33067) added headphones to trinkets --- .../Loadouts/Miscellaneous/trinkets.yml | 45 +++++++++++-------- .../Prototypes/Loadouts/loadout_groups.yml | 1 + 2 files changed, 27 insertions(+), 19 deletions(-) diff --git a/Resources/Prototypes/Loadouts/Miscellaneous/trinkets.yml b/Resources/Prototypes/Loadouts/Miscellaneous/trinkets.yml index 78b5f0bc9e..79fee8bf0d 100644 --- a/Resources/Prototypes/Loadouts/Miscellaneous/trinkets.yml +++ b/Resources/Prototypes/Loadouts/Miscellaneous/trinkets.yml @@ -21,6 +21,13 @@ back: - ClothingHeadHatHairflower +# Headphones +- type: loadout + id: Headphones + storage: + back: + - ClothingNeckHeadphones + # Plushies - type: loadout id: PlushieLizard @@ -165,7 +172,7 @@ !type:OverallPlaytimeRequirement time: 36000 # 10hr storage: - back: + back: - TowelColorWhite - type: loadout @@ -176,9 +183,9 @@ !type:OverallPlaytimeRequirement time: 1800000 # 500hr storage: - back: + back: - TowelColorSilver - + - type: loadout id: TowelColorGold effects: @@ -187,7 +194,7 @@ !type:OverallPlaytimeRequirement time: 3600000 # 1000hr storage: - back: + back: - TowelColorGold - type: loadout @@ -199,7 +206,7 @@ department: Cargo time: 360000 # 100hr storage: - back: + back: - TowelColorLightBrown - type: loadout @@ -211,7 +218,7 @@ department: Civilian time: 360000 # 100hr storage: - back: + back: - TowelColorGreen - type: loadout @@ -223,7 +230,7 @@ department: Command time: 360000 # 100hr storage: - back: + back: - TowelColorDarkBlue - type: loadout @@ -235,9 +242,9 @@ department: Engineering time: 360000 # 100hr storage: - back: + back: - TowelColorOrange - + - type: loadout id: TowelColorLightBlue effects: @@ -247,7 +254,7 @@ department: Medical time: 360000 # 100hr storage: - back: + back: - TowelColorLightBlue - type: loadout @@ -259,7 +266,7 @@ department: Science time: 360000 # 100hr storage: - back: + back: - TowelColorPurple - type: loadout @@ -271,7 +278,7 @@ department: Security time: 360000 # 100hr storage: - back: + back: - TowelColorRed - type: loadout @@ -283,7 +290,7 @@ role: JobPassenger time: 360000 # 100hr storage: - back: + back: - TowelColorGray - type: loadout @@ -295,7 +302,7 @@ role: JobChaplain time: 360000 # 100hr storage: - back: + back: - TowelColorBlack - type: loadout @@ -307,7 +314,7 @@ role: JobLibrarian time: 360000 # 100hr storage: - back: + back: - TowelColorDarkGreen - type: loadout @@ -319,7 +326,7 @@ role: JobLawyer time: 360000 # 100hr storage: - back: + back: - TowelColorMaroon - type: loadout @@ -331,7 +338,7 @@ role: JobClown time: 360000 # 100hr storage: - back: + back: - TowelColorYellow - type: loadout @@ -343,5 +350,5 @@ role: JobMime time: 360000 # 100hr storage: - back: - - TowelColorMime \ No newline at end of file + back: + - TowelColorMime diff --git a/Resources/Prototypes/Loadouts/loadout_groups.yml b/Resources/Prototypes/Loadouts/loadout_groups.yml index 13c675000e..ce4866dca8 100644 --- a/Resources/Prototypes/Loadouts/loadout_groups.yml +++ b/Resources/Prototypes/Loadouts/loadout_groups.yml @@ -7,6 +7,7 @@ loadouts: - FlowerWreath - Hairflower + - Headphones - PlushieLizard - PlushieSpaceLizard - Lighter From a3ce9b0db47aa9d77624e63c424d1884261fcb15 Mon Sep 17 00:00:00 2001 From: PJBot Date: Sat, 2 Nov 2024 15:13:31 +0000 Subject: [PATCH 66/97] Automatic changelog update --- Resources/Changelog/Changelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 040c722818..d82950a286 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: thetolbean - changes: - - message: Updated Core's boxing ring beacon label to be correct - type: Tweak - id: 7084 - time: '2024-08-10T19:50:08.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30800 - author: Flareguy changes: - message: Added vox sprites for most of the remaining common mask items. @@ -3953,3 +3946,10 @@ id: 7583 time: '2024-11-02T15:04:22.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/32737 +- author: joshepvodka + changes: + - message: Headphones are now selectable in loadouts. + type: Add + id: 7584 + time: '2024-11-02T15:12:26.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/33067 From 65462d8ca590c97e24ae27d42b53ea2440519baa Mon Sep 17 00:00:00 2001 From: Scribbles0 <91828755+Scribbles0@users.noreply.github.com> Date: Sat, 2 Nov 2024 09:21:35 -0700 Subject: [PATCH 67/97] Cardboard Box Capacity 4 -> 5 (#32743) * capacity upgrade * comment update --- .../Entities/Structures/Storage/Closets/big_boxes.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Prototypes/Entities/Structures/Storage/Closets/big_boxes.yml b/Resources/Prototypes/Entities/Structures/Storage/Closets/big_boxes.yml index 17ccb5a41f..a6d5a49f67 100644 --- a/Resources/Prototypes/Entities/Structures/Storage/Closets/big_boxes.yml +++ b/Resources/Prototypes/Entities/Structures/Storage/Closets/big_boxes.yml @@ -29,7 +29,7 @@ isCollidableWhenOpen: false openOnMove: false airtight: false - capacity: 4 #4 Entities seems like a nice comfy fit for a cardboard box. + capacity: 5 #5 entity capacity to fit all of your friends (or teammates on your nuclear operation without reinforcements). - type: ContainerContainer containers: entity_storage: !type:Container From 6f1eeba1911dc3c7e96890fa2f0a3b4f07ee2d5d Mon Sep 17 00:00:00 2001 From: Milon Date: Sat, 2 Nov 2024 17:59:38 +0100 Subject: [PATCH 68/97] change ShowHealthBars and ShowHealthIcons to use protoId (#32355) use protoId --- Content.Client/Commands/ShowHealthBarsCommand.cs | 4 +++- Content.Shared/Overlays/ShowHealthBarsComponent.cs | 8 +++++--- Content.Shared/Overlays/ShowHealthIconsComponent.cs | 9 ++++++--- Resources/Prototypes/Entities/Clothing/Eyes/hud.yml | 6 ------ .../Prototypes/Entities/Mobs/Cyborgs/borg_chassis.yml | 2 -- 5 files changed, 14 insertions(+), 15 deletions(-) diff --git a/Content.Client/Commands/ShowHealthBarsCommand.cs b/Content.Client/Commands/ShowHealthBarsCommand.cs index 0811f96663..6ea9d06c8c 100644 --- a/Content.Client/Commands/ShowHealthBarsCommand.cs +++ b/Content.Client/Commands/ShowHealthBarsCommand.cs @@ -1,6 +1,8 @@ +using Content.Shared.Damage.Prototypes; using Content.Shared.Overlays; using Robust.Client.Player; using Robust.Shared.Console; +using Robust.Shared.Prototypes; using System.Linq; namespace Content.Client.Commands; @@ -34,7 +36,7 @@ public sealed class ShowHealthBarsCommand : LocalizedCommands { var showHealthBarsComponent = new ShowHealthBarsComponent { - DamageContainers = args.ToList(), + DamageContainers = args.Select(arg => new ProtoId(arg)).ToList(), HealthStatusIcon = null, NetSyncEnabled = false }; diff --git a/Content.Shared/Overlays/ShowHealthBarsComponent.cs b/Content.Shared/Overlays/ShowHealthBarsComponent.cs index 4642c5936a..cb4f0fe7dd 100644 --- a/Content.Shared/Overlays/ShowHealthBarsComponent.cs +++ b/Content.Shared/Overlays/ShowHealthBarsComponent.cs @@ -2,7 +2,6 @@ using Content.Shared.Damage.Prototypes; using Content.Shared.StatusIcon; using Robust.Shared.GameStates; using Robust.Shared.Prototypes; -using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.List; namespace Content.Shared.Overlays; @@ -15,8 +14,11 @@ public sealed partial class ShowHealthBarsComponent : Component /// /// Displays health bars of the damage containers. /// - [DataField("damageContainers", customTypeSerializer: typeof(PrototypeIdListSerializer))] - public List DamageContainers = new(); + [DataField] + public List> DamageContainers = new() + { + "Biological" + }; [DataField] public ProtoId? HealthStatusIcon = "HealthIconFine"; diff --git a/Content.Shared/Overlays/ShowHealthIconsComponent.cs b/Content.Shared/Overlays/ShowHealthIconsComponent.cs index c2526c2f40..aa12c9887a 100644 --- a/Content.Shared/Overlays/ShowHealthIconsComponent.cs +++ b/Content.Shared/Overlays/ShowHealthIconsComponent.cs @@ -1,6 +1,6 @@ using Content.Shared.Damage.Prototypes; using Robust.Shared.GameStates; -using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.List; +using Robust.Shared.Prototypes; namespace Content.Shared.Overlays; @@ -13,6 +13,9 @@ public sealed partial class ShowHealthIconsComponent : Component /// /// Displays health status icons of the damage containers. /// - [DataField("damageContainers", customTypeSerializer: typeof(PrototypeIdListSerializer))] - public List DamageContainers = new(); + [DataField] + public List> DamageContainers = new() + { + "Biological" + }; } diff --git a/Resources/Prototypes/Entities/Clothing/Eyes/hud.yml b/Resources/Prototypes/Entities/Clothing/Eyes/hud.yml index 9e881bf9c2..300c938bc9 100644 --- a/Resources/Prototypes/Entities/Clothing/Eyes/hud.yml +++ b/Resources/Prototypes/Entities/Clothing/Eyes/hud.yml @@ -13,11 +13,7 @@ categories: [ HideSpawnMenu ] components: - type: ShowHealthBars - damageContainers: - - Biological - type: ShowHealthIcons - damageContainers: - - Biological - type: entity parent: ClothingEyesBase @@ -223,8 +219,6 @@ sprite: Clothing/Eyes/Hud/syndagent.rsi - type: ShowSyndicateIcons - type: ShowHealthBars - damageContainers: - - Biological - type: entity parent: [ClothingEyesGlassesSunglasses, ShowSecurityIcons] diff --git a/Resources/Prototypes/Entities/Mobs/Cyborgs/borg_chassis.yml b/Resources/Prototypes/Entities/Mobs/Cyborgs/borg_chassis.yml index d1d530ae81..6a8f1e5abb 100644 --- a/Resources/Prototypes/Entities/Mobs/Cyborgs/borg_chassis.yml +++ b/Resources/Prototypes/Entities/Mobs/Cyborgs/borg_chassis.yml @@ -391,8 +391,6 @@ - type: Construction node: syndicatemedical - type: ShowHealthBars - damageContainers: - - Biological - type: InteractionPopup interactSuccessString: petting-success-syndicate-cyborg interactFailureString: petting-failure-syndicate-cyborg From 0ba3350c7eb5c9c16f84dfa2d5fa6c6ba0026041 Mon Sep 17 00:00:00 2001 From: RiceMar1244 <138547931+RiceMar1244@users.noreply.github.com> Date: Sat, 2 Nov 2024 15:55:15 -0400 Subject: [PATCH 69/97] Combat and survival knife storage/inhand sprites (#33111) * Adds storage sprites for combat knife and survival knife. Replaces inhand sprites. * Fixes meta.json copyright --- .../Entities/Objects/Weapons/Melee/knife.yml | 6 +++ .../Melee/combat_knife.rsi/inhand-left.png | Bin 291 -> 352 bytes .../Melee/combat_knife.rsi/inhand-right.png | Bin 275 -> 349 bytes .../Weapons/Melee/combat_knife.rsi/meta.json | 5 +- .../Melee/combat_knife.rsi/storage.png | Bin 0 -> 335 bytes .../Melee/survival_knife.rsi/inhand-left.png | Bin 308 -> 273 bytes .../Melee/survival_knife.rsi/inhand-right.png | Bin 306 -> 272 bytes .../Melee/survival_knife.rsi/meta.json | 49 ++++++++++-------- .../Melee/survival_knife.rsi/storage.png | Bin 0 -> 307 bytes 9 files changed, 36 insertions(+), 24 deletions(-) create mode 100644 Resources/Textures/Objects/Weapons/Melee/combat_knife.rsi/storage.png create mode 100644 Resources/Textures/Objects/Weapons/Melee/survival_knife.rsi/storage.png diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/knife.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/knife.yml index ae5b22f8e0..711b8c49fe 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/knife.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/knife.yml @@ -103,6 +103,9 @@ Slash: 10 - type: Item sprite: Objects/Weapons/Melee/combat_knife.rsi + storedSprite: + state: storage + sprite: Objects/Weapons/Melee/combat_knife.rsi - type: DisarmMalus malus: 0.225 @@ -117,6 +120,9 @@ state: icon - type: Item sprite: Objects/Weapons/Melee/survival_knife.rsi + storedSprite: + state: storage + sprite: Objects/Weapons/Melee/survival_knife.rsi - type: entity name: kukri knife diff --git a/Resources/Textures/Objects/Weapons/Melee/combat_knife.rsi/inhand-left.png b/Resources/Textures/Objects/Weapons/Melee/combat_knife.rsi/inhand-left.png index a7ea753940826be08aaafd478d1f94b930ed18e6..e014cf5110fd9502d664134f7008fff5ed1ed201 100644 GIT binary patch delta 326 zcmV-M0lEI80^kCWBYy!WNkl82kTV2Q2DiycW{bs;a@?7B;==z|J713<&7)EP00000K+4Dan~Ql}EKeyGS?0-^ zs`0wkRE=8ZDOm{O0W9<6$|B!2rY!PgAv{Y?J`TMri(HwiQGd0yna`No+U&BfPN{Fn zt^E>v0>+_tTI*eh-_+J-zOT$-b=}$B?qoP)OwtcykiVPlx^vLRxAAS;x`z$ni1Pse z00000001B)b=$j_XgRv474{W7P_Y2+X@z~nuFpjRxTh7~BW8UbJ%Er_*vHl!mqo6| zp$`rrdH|naKR@c_^eS@r%@%^zT55?fp{=m5%euN$YaPBG1 diff --git a/Resources/Textures/Objects/Weapons/Melee/combat_knife.rsi/inhand-right.png b/Resources/Textures/Objects/Weapons/Melee/combat_knife.rsi/inhand-right.png index 368c73da32797153fc605523aebb86ef07599351..20efe6dd87654762cd77570c3805cb3f8d0748d3 100644 GIT binary patch delta 323 zcmV-J0lfZ`0^I_TBYy!TNklPw?-vp3b8);TZnt#M{JnUB=LYl;)Ss}T# zQQvv*3%G<}j9GmMkCq>F>N;0dyVV7ts(xnvyS%qc15;I3mZcNSU;)h%KW0001t_X}=D VUchc<8SMZ7002ovPDHLkV1hV0mMQ=M delta 248 zcmcc1G?{6Fay9tphzg^gV%pqMg%5x0jCK|R6Grjx!;a> zn|sumqs#E!y>#wbkx|z}C%sqPGd+Hq>g~rH=6qMI3Ep?2@XRF(AHDyaj}26ft*773 z{^@)5Ph8tWRdtZ5Aka|1^&R)RUBNf*vj17VrTzca&~mO&yO>nbxrIl&{(W(eo_fEe uetAGDfBc2NbDdrn#7^6<9WwneNT;)YBU7SwXM}?g$RJNwKbLh*2~7aZy=cS$ diff --git a/Resources/Textures/Objects/Weapons/Melee/combat_knife.rsi/meta.json b/Resources/Textures/Objects/Weapons/Melee/combat_knife.rsi/meta.json index 08894a12a7..56602b6ea1 100644 --- a/Resources/Textures/Objects/Weapons/Melee/combat_knife.rsi/meta.json +++ b/Resources/Textures/Objects/Weapons/Melee/combat_knife.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken/modified from desertrose at https://github.com/DesertRose2/desertrose/pull/378/commits/9e081bd2a0d7614be5a9dabbca34886ce204105d", + "copyright": "Taken/modified from desertrose at https://github.com/DesertRose2/desertrose/pull/378/commits/9e081bd2a0d7614be5a9dabbca34886ce204105d, storage & inhand sprites by RiceMar1244", "size": { "x": 32, "y": 32 @@ -10,6 +10,9 @@ { "name": "icon" }, + { + "name": "storage" + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Objects/Weapons/Melee/combat_knife.rsi/storage.png b/Resources/Textures/Objects/Weapons/Melee/combat_knife.rsi/storage.png new file mode 100644 index 0000000000000000000000000000000000000000..6b88c9a3aa2885541458d1a5461aba93888ca350 GIT binary patch literal 335 zcmV-V0kHmwP)bY*_4N)F#w<}x910#FIURDfiMjH0nC>xRoAsYfZo8LGH~fq zTFj;l{9HzMS2zQxwuK~_9DVt+Y}0CHYXf(;H`vqR*ZSkrGqP->l4QbdA)KPM<~WYo z7{kUG22R`Q93V|o)>`}fl2uiOAPDen;OqcV6oH74=ehHq_XavKAUTL4fTn3Abs2!Q hRuK`1NDT46^94PVfvFJX;jRDx002ovPDHLkV1mvVjzs_f literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Weapons/Melee/survival_knife.rsi/inhand-left.png b/Resources/Textures/Objects/Weapons/Melee/survival_knife.rsi/inhand-left.png index b2f253c30b7a7bb447137fd5ce3b2a96983cd340..c352ccfab67d1bc0c97ebe9e383a1557cbb96dee 100644 GIT binary patch delta 257 zcmdnOG?8h7L_G%^0|UdV%))y>>V~I_V@SoEw>LNPwixiVK76sw!l7fDkRgL|3PY6F z5rz;S2k)aCJgr6@>mRweH?Xk2{GZi+Lu}=|AfRR-kelMFdU;QW?^_f7AhD^TYq{m` zi!bri^S!N^9JabDIqd3|xn7h1Y*ek7thUqVv(jIKc~Vu&B)uB>pRZBS3B&! z?T5_?)gN+o!f%9Pjy-bUvhHaf)7zuLzO0ruK%F1>?8T2|eJFA;%?Fv|>FVdQ&MBb@ E0N6NcqW}N^ delta 293 zcmbQpw1sJcL_HHT0|Uc#_L;swiYLG)#1%-_)zvLovc$;9=zQMwZ$Lg{NswPKgTu2M zX+Ta^RY*jMOKNd)QD#9&W_}(6L&conu!5q}?_YuoK7M_o<*loA?#%h%4WR}XjUPPH zIq#!+lA)-lcZY>>knv?>FNHaeCLNg+q7bZUt#7PbAKKY%th#xH#1bIAR>RO-^oZG$ zps<3k#f;M24Ca1P(pz#&0)f^hc)B=-So9_*NU-wo=ex;R0hkwL&%iMv6FeKB(rzZV~mkB4X5Rz?>kRY_xm nm3_DQ99o8wcvoJ7JPGYxSx^dMVpk)l6u6{1-oD!M>bj?kV@SoEw>S54Hakch`=}iKqwz*m7qdkZGl+_? zY+O54`A$Gl^PZI~o=yhshUL%xYqLJAou@6o6sVnn;lTabX}Yd)r`Er>2%0$E={i;>d z6u9-7=Ho-0002j2boO(000b7OjJex|Nnk|e&65UGBPqz(&=mf0004W zQchCV=-0C=2JR&a84_w-Y6@%7{?OD!tS%+FJ> zRWQ*r;NmRLOex6#a*U0*I5Sc+(=$pSoZ^zil2jm5DLXGSEq_&si!&v&s2HS)i!-e# zF*g;&Hsn%PaP@Nm8w&t8P8u7uY&1~-003S|L_t(IjbmUK;lKfz!ve$s$O0ljJOx=G z0*F2iag7W}EfVTmwH9QFB0jvr}!QcfB43MM&1B@U6RwMz|1|Y%dfDjM^5ll!) p=?0jbgWC>R0vtI&o)ZTO001>G2t9uSyI%kR002ovPDHLkV1hA4Xqf;2 diff --git a/Resources/Textures/Objects/Weapons/Melee/survival_knife.rsi/meta.json b/Resources/Textures/Objects/Weapons/Melee/survival_knife.rsi/meta.json index 455734e044..56602b6ea1 100644 --- a/Resources/Textures/Objects/Weapons/Melee/survival_knife.rsi/meta.json +++ b/Resources/Textures/Objects/Weapons/Melee/survival_knife.rsi/meta.json @@ -1,26 +1,29 @@ { - "version": 1, - "license": "CC-BY-SA-3.0", - "copyright": "Taken from /tg/station at commit https://github.com/tgstation/tgstation/commit/6cdc0503d32e249125151e369edf951e93bccd1a", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "icon" + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken/modified from desertrose at https://github.com/DesertRose2/desertrose/pull/378/commits/9e081bd2a0d7614be5a9dabbca34886ce204105d, storage & inhand sprites by RiceMar1244", + "size": { + "x": 32, + "y": 32 }, - { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", - "directions": 4 - }, - { - "name": "equipped-BELT", - "directions": 4 - } - ] + "states": [ + { + "name": "icon" + }, + { + "name": "storage" + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "equipped-BELT", + "directions": 4 + } + ] } diff --git a/Resources/Textures/Objects/Weapons/Melee/survival_knife.rsi/storage.png b/Resources/Textures/Objects/Weapons/Melee/survival_knife.rsi/storage.png new file mode 100644 index 0000000000000000000000000000000000000000..173f66035b357a4e97dd17ea50420238b05ec7c2 GIT binary patch literal 307 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJU!E?GArY-_r`dBiIY=CnSIy;i zeluLWaY5~0qr-%00qxlx(-clsvvR(R?En6;{QU2# z@&*yd%|DxhZ9}{^=JuZyP-#$8;d#&#voB8fq~@P|rnSr&v9dpP)tO6NxK}Sysh3gM zrqFZFE1MxIoITm@r@|!N2|y^owxUZYG%#uZ?MZq|ZV4JaD?b0(ZXNr>MxY6nE&rdmEcB32MhK%BVS>L3CB7EY=1gV zN}cJ`FvUSR-)XgdE_;KoM8mXyO$JulS Date: Sat, 2 Nov 2024 17:23:40 -0500 Subject: [PATCH 70/97] Delete conveyor_old.rsi (#33102) --- .../conveyor_old.rsi/conveyor_loose.png | Bin 286 -> 0 bytes .../conveyor_old.rsi/conveyor_started_ccw.png | Bin 4389 -> 0 bytes .../conveyor_started_ccw_r.png | Bin 4440 -> 0 bytes .../conveyor_old.rsi/conveyor_started_cw.png | Bin 4434 -> 0 bytes .../conveyor_started_cw_r.png | Bin 4464 -> 0 bytes .../conveyor_old.rsi/conveyor_stopped_ccw.png | Bin 1687 -> 0 bytes .../conveyor_old.rsi/conveyor_stopped_cw.png | Bin 1689 -> 0 bytes .../Structures/conveyor_old.rsi/meta.json | 238 ------------------ 8 files changed, 238 deletions(-) delete mode 100644 Resources/Textures/Structures/conveyor_old.rsi/conveyor_loose.png delete mode 100644 Resources/Textures/Structures/conveyor_old.rsi/conveyor_started_ccw.png delete mode 100644 Resources/Textures/Structures/conveyor_old.rsi/conveyor_started_ccw_r.png delete mode 100644 Resources/Textures/Structures/conveyor_old.rsi/conveyor_started_cw.png delete mode 100644 Resources/Textures/Structures/conveyor_old.rsi/conveyor_started_cw_r.png delete mode 100644 Resources/Textures/Structures/conveyor_old.rsi/conveyor_stopped_ccw.png delete mode 100644 Resources/Textures/Structures/conveyor_old.rsi/conveyor_stopped_cw.png delete mode 100644 Resources/Textures/Structures/conveyor_old.rsi/meta.json diff --git a/Resources/Textures/Structures/conveyor_old.rsi/conveyor_loose.png b/Resources/Textures/Structures/conveyor_old.rsi/conveyor_loose.png deleted file mode 100644 index 97b955cc6e000436a475b44e3c3da2374f5a1f3f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 286 zcmV+(0pb3MP)V#pRVNX9Kd%6Q$LnTv6#%sDVbBB0s>XJ|b0)f+&g^?%oYv5KU3V-L4b~2Qd?VzG z*OOQTWr~0?ux^^kM5&fBaPRxc3{Wk01#CqY0?kRa6f-uN2@b1)&`KX;n-IGTVvDy#8)62U=5^h$CTWT*&|u%cI-WprDmRoQYlOk k{!;a!-H^tMUrxpO0MJTUObOT2v;Y7A07*qoM6N<$f_a&A`~Uy| diff --git a/Resources/Textures/Structures/conveyor_old.rsi/conveyor_started_ccw.png b/Resources/Textures/Structures/conveyor_old.rsi/conveyor_started_ccw.png deleted file mode 100644 index 7ad5f8fc70dac364e96c4a47c75cdb6ef9c99d30..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4389 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 diff --git a/Resources/Textures/Structures/conveyor_old.rsi/conveyor_started_ccw_r.png b/Resources/Textures/Structures/conveyor_old.rsi/conveyor_started_ccw_r.png deleted file mode 100644 index 8bd276e82e4218a07a4be1d234c43800ccd5ffa2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4440 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 ejOiOj5B?A7jtB_(7S8kl0000 zJ&zYh5{HY`KOl18<8)e`yg*=W{^m@aW^!>(}7< zv&Zo1mCxYn^=p9PH@3`n_QFd+OAq4FHR%KSn>) zCxE?Xw)*dJGQ4{Inp$B;qEV+c-KW&}OTSwJXAZD`a9}2y)9TSbIewY_vC`+#($_Gi zI8ScuV<+gnSrYmjF#4JXu!Q<+HUP2yuAX#m)-Ht0mSvQsqz#<(0z~>;nEX|>;%DY$x z09dEt18i$6LJ9vKU}Dxj2N{ij4=_1vpMz|v0rc+yh^&1MvbN_{!oLS#utviVY^4F5 zauU3yE|`LU4_v*TrVNd! zy%%Su(0m+y>Rzm+*Ppu=i5(h|I|iM-1+omySNok7OV{TMS*B_(5*z*B6>%g(T_MFF=n`z$!*C?$6Q-*G}YhoQr z-rVag%0j(wQsoKPj=I-V2F7Z^J)^2eC;r#^dW*7*s#~cX*5zS2K=0vnjx!r%2S~@@ zj2n02iVdWe5MCIQ(2_)n!P+87|Yo-oBtj_a+|^o`A9yu zEtDra1X|J6ck}bJ-~Igk-_HJ)`;kr`mm^MF%TF?WTE6%iOntcN<9mXwk5u|8djRd&q_I{Q zFaG$;2e^0hbGUuu4|w?G699Ny9ZO25|L%*+aQnvTLwfk+eA#knqz^{&@X2NP;ivXk zS~C5^C!fI2-=F^b<1ZhY^^rUEfImW6lT-?Jui;sWd)v97%57xeHJK{htdhv6cOm^miT~ z-?8A)gZpsn&Ru|{CAPA^lK!r=;xZy$`$)}EG4gw^8+~2@^klAX7Iy%r%51H_v?IC$I8A0~{k0r%kDK|3 z7Q#Ae@!It?^N`fiaKt?~{%z~Eux$NH<<=Pb1VqB3Smm*HW1Q)pV)9wTITAhxaEjDg zT`NP?Z2bWk4lp8uu(jse^-Aem#;s}mad|A9Y|naM2$!`R{bJq=q}e^7UeB21S`)V0VzFf5!}cBzlM`17kU3DH+~~ZS9;i7~BDzGq^^@HT)Q> z3Aj6ebB+-o+N60|u0FW~H~>JO+y*4(EhF9ry8}39SdH-|${-5IsG1LhMucWzyo7#oH!VA92_|yJ+O9Hxw$Js~|<(%hiT*Va}2Mq-E?aYplNu1sD~dJ!WKl`qA_;oE$0NI&!@0FA7IM(@IgOb zkJcW8?jIan=snW)@R}2F$KV)!OASbt}AOlU4N^{L(*`T*yb1OfW?v-glY zrnRJ>)6TV~J>_fZYxh9d`Uh$s)KJP9>zkbqFl&7H+Pb%vBg8FGOFwAWoS?T%7=2AA zsOjgZ^@NxgU^V?+EujQ)MX~YWrEmVpaXUVJO;fW+2!@Q&PIV>kQOUu2z8R*JC)e6j zuTAs81Y#;lcuJh-3z4g z<~MG!Tk+wsP|FzW_nePFO#@JlP#s^7Iq!gy2BVKT?|_;HqmMbifSRVJpN-G1$!ziA z0dVp5rPAbZ{c-wTarT{cviSotax6J+zw7h$Ym~mB?ls)Q!=r4-dP!>UI1UewK4u-@ z@bKv4(YN2I6evBW^Tms&u0MhP{=oq{G(Gogx#!OwpDlk<^szdD^xaadf58F5&DVTg zUaP3Oxc%`tRjxlypW6ZlYH#qvo}jpH zHGNF0-a}6R%mH#YpR(to_qxypO6a%BmdnpdKUba@sy^kO$K-}!6tG)Y($6My`kLEd z;@zoNuU|Xe3@7#QsfD#NzEX=aqUDY2$Ep7en**gcD~5b5zVSeR6WjxLccDhbd-4o7 zf7DlCl=?4ad-~`v>(Y^cczE>DEs`W7ouCKnkAk=@{wN#CJZ2hRIS#Z^A)3N4**a%IBR2)TB4iT2>{CX6KfeE%At@?b4>b7*-FU)dJM=DlsBV zisZM+(pdMrz29$Zl_MoCS5A-R09p|wa*-jV$|K3FPB7v=aQ?0Vwx?sy0XS~}TU}-_ zupURCe9XaNRwn?Ejh<10y80qr4h-mJP-&yf{k?aui&S~E#-g)1K}pwoRcE%=AN3+E zHoBgb15CjvP5WOP7Eou%|CPDfq_r8;MS9(&(##$3zTz$oL8P4pGN1B z==O3tsT1TjLUCi_m-d*{)}F)PWBs1|xxH50L#Fz_{r=`GN_H^9M-T3k?@#Y_68hA# zif@LiIYNB%LtvtR{qr9rowNl`4J3Zx()!fx9a#OG)3$mUEG7M%5o(YI<{GWPi~k@= zZCDgyGo}T@f^C6ILn5v|mtOtWc7xs*a5;T|i$8n?�D9*pynpwaHwUOqb}_W##%oj3=Paw0C=EG8MLMbJ2P6F9r~m$W$j003 zby8{C`v1SSoOgek;t4T5%(Bc!<;9DqmqLiX5UWxuWMGbT;+yJgYUlJzU>sB`%_#k1 z4`9&(TEvI1FNwJfFN11tBy+=eBoTFhn(Tl^tAkz2I=uNmU8D7#ZF276r$(qjCO&-839a>=?Q!AZ z$3|#D+5(T(cecfaWzf_h;^0xG*zcS)E&VvIdkAk`i~Zi4#@RO6?a*<2_V2#947YED zxay~WPnRvF(&Y4i{N)4OyZJfXzVQbk diff --git a/Resources/Textures/Structures/conveyor_old.rsi/conveyor_started_cw_r.png b/Resources/Textures/Structures/conveyor_old.rsi/conveyor_started_cw_r.png deleted file mode 100644 index d2e18ca0caa0896cbe64be7665dd7a650c64b7a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4464 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 diff --git a/Resources/Textures/Structures/conveyor_old.rsi/conveyor_stopped_cw.png b/Resources/Textures/Structures/conveyor_old.rsi/conveyor_stopped_cw.png deleted file mode 100644 index 116b3aed504581c21d31a005133b94bc23a5e74c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1689 zcmV;K24?w*P)+T-Chru7kP~C_IkIR*v3AWc-KCawcG3A^Yt}$dp%a!O&}Yeude|(1ke{b;ImcA z{^iBlf1kMVsR`G{T1J4R{q3E-JVpax^#T6})HP>rB}r-aV)Ab_Wt4(Onc5(yrS>^7 z`GXNq(qXA1nx-->B1k}K2UvBOG`s|8jPLgc{Z>vbT>)~z+Xs|}Rt2yKlLXu)YzQcf z4FL>r`W4EXG!Y9Kw%X2Wf-_{Ejwfjm;4@gl`P1=)J-U$?9dXJ?Zh~BgmvX-E|8)ba z57-~{i#xyWyBJ7ZKc|efT#U2S*Kn?7f6(8If;iwhAJ_~-i(^ATVQlsT3S+Y$P#By2 zfWp}92SnsajmVh%Cg%Y;D*(w-ny{G9SoTBtO%jk3kDojRun}h6Sz*>{7^=;@3!kl0 z_DPua^2MXockf^Qvii;UCz(De0=WADmLh=K<~JXI;N^=)`0dy4c>CcVfG@S}zEt|8 zKET(Zm0T6&*#7$MQ|H0`hs(u$hS%?a*Y5z}%j!2@9?A5@_3;)^@_aQ+7JNfPWDnGi%Y~> z5Rh|oCdC$qh_xU9$g|YJwUI)Ec>+poO-l4Pu|$|B0LZ)0r`cKiu+^qO?gd#XH^xqr z?Y8^d!E?e^olj`0ks8on!RXl`tfEp-m1>Z5ryLHKwE2BEzIGi+i(@ zOX1vRwh5*PkQ`EKXiGJsz!U+1oy{K?no(ee0FHVY$kSm;MgfVq%n$&i%|LUl6LF(} zHslWuk8pZ&y!t*k5p%WesRlXuLuI;qvR2M0$K>%j9{{>B`gkpEybnI7YS#GJ^8qeW z{84p2$r!t(_3?zui?h{@Y3Xu&$aVid=K}_WS*{q0w3#lXCwWz2RPOt)3V63l>*Ial zOzpc?txq{0z)3^!si(W8_3ZKured%<486KK z2cY-|*kV4r(d^LUgMptUoSqyf zH%*dFnl@CnBmqAW*dgjUsQ*Xo4FFZ$I3_`&a*dzWMkAz-{8B(v(25J|AeW jgbV5OLnx`+&xL;ggbzO0e^hp<00000NkvXXu0mjfD^Ns3 diff --git a/Resources/Textures/Structures/conveyor_old.rsi/meta.json b/Resources/Textures/Structures/conveyor_old.rsi/meta.json deleted file mode 100644 index 71aefcdba1..0000000000 --- a/Resources/Textures/Structures/conveyor_old.rsi/meta.json +++ /dev/null @@ -1,238 +0,0 @@ -{ - "version": 1, - "license": "CC-BY-SA-3.0", - "copyright": "https://github.com/discordia-space/CEV-Eris/blob/a846799c53f8ee9dcec4b075d7645f591f3ec19d/icons/obj/machines/conveyor.dmi", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "conveyor_loose" - }, - { - "name": "conveyor_started_ccw", - "directions": 8, - "delays": [ - [ - 0.1, - 0.1, - 0.1, - 0.1 - ], - [ - 0.1, - 0.1, - 0.1, - 0.1 - ], - [ - 0.1, - 0.1, - 0.1, - 0.1 - ], - [ - 0.1, - 0.1, - 0.1, - 0.1 - ], - [ - 0.1, - 0.1, - 0.1, - 0.1 - ], - [ - 0.1, - 0.1, - 0.1, - 0.1 - ], - [ - 0.1, - 0.1, - 0.1, - 0.1 - ], - [ - 0.1, - 0.1, - 0.1, - 0.1 - ] - ] - }, - { - "name": "conveyor_started_ccw_r", - "directions": 8, - "delays": [ - [ - 0.1, - 0.1, - 0.1, - 0.1 - ], - [ - 0.1, - 0.1, - 0.1, - 0.1 - ], - [ - 0.1, - 0.1, - 0.1, - 0.1 - ], - [ - 0.1, - 0.1, - 0.1, - 0.1 - ], - [ - 0.1, - 0.1, - 0.1, - 0.1 - ], - [ - 0.1, - 0.1, - 0.1, - 0.1 - ], - [ - 0.1, - 0.1, - 0.1, - 0.1 - ], - [ - 0.1, - 0.1, - 0.1, - 0.1 - ] - ] - }, - { - "name": "conveyor_started_cw", - "directions": 8, - "delays": [ - [ - 0.1, - 0.1, - 0.1, - 0.1 - ], - [ - 0.1, - 0.1, - 0.1, - 0.1 - ], - [ - 0.1, - 0.1, - 0.1, - 0.1 - ], - [ - 0.1, - 0.1, - 0.1, - 0.1 - ], - [ - 0.1, - 0.1, - 0.1, - 0.1 - ], - [ - 0.1, - 0.1, - 0.1, - 0.1 - ], - [ - 0.1, - 0.1, - 0.1, - 0.1 - ], - [ - 0.1, - 0.1, - 0.1, - 0.1 - ] - ] - }, - { - "name": "conveyor_started_cw_r", - "directions": 8, - "delays": [ - [ - 0.1, - 0.1, - 0.1, - 0.1 - ], - [ - 0.1, - 0.1, - 0.1, - 0.1 - ], - [ - 0.1, - 0.1, - 0.1, - 0.1 - ], - [ - 0.1, - 0.1, - 0.1, - 0.1 - ], - [ - 0.1, - 0.1, - 0.1, - 0.1 - ], - [ - 0.1, - 0.1, - 0.1, - 0.1 - ], - [ - 0.1, - 0.1, - 0.1, - 0.1 - ], - [ - 0.1, - 0.1, - 0.1, - 0.1 - ] - ] - }, - { - "name": "conveyor_stopped_ccw", - "directions": 8 - }, - { - "name": "conveyor_stopped_cw", - "directions": 8 - } - ] -} From d993582d00f1550c4ae4ee982de3f24b10dc4ae9 Mon Sep 17 00:00:00 2001 From: Flareguy <78941145+Flareguy@users.noreply.github.com> Date: Sat, 2 Nov 2024 18:16:18 -0500 Subject: [PATCH 71/97] Fix broken computer white shadows (#33103) fix broken computer white shadows --- .../Machines/computers.rsi/broken.png | Bin 3576 -> 3542 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Resources/Textures/Structures/Machines/computers.rsi/broken.png b/Resources/Textures/Structures/Machines/computers.rsi/broken.png index 38d2fd88a37fe5f960b2e68434c01099e83fafd3..5adb4f73f2eb804a8e96da7845c7b321399e64e8 100644 GIT binary patch delta 3541 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 P00000NkvXXu0mjf;wYdQ delta 3575 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 From d2a487dc9e5d7ab5b9f8a4d66d72234b8039a549 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 3 Nov 2024 02:21:44 +0100 Subject: [PATCH 72/97] Update Credits (#33125) Co-authored-by: PJBot --- Resources/Credits/GitHub.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Credits/GitHub.txt b/Resources/Credits/GitHub.txt index ac39b6b7f5..8c2ad5f5b0 100644 --- a/Resources/Credits/GitHub.txt +++ b/Resources/Credits/GitHub.txt @@ -1 +1 @@ -0x6273, 12rabbits, 13spacemen, 2013HORSEMEATSCANDAL, 20kdc, 21Melkuu, 3nderall, 4310v343k, 4dplanner, 612git, 778b, Ablankmann, abregado, Absolute-Potato, achookh, Acruid, actioninja, actually-reb, ada-please, adamsong, Adeinitas, Admiral-Obvious-001, adrian, Adrian16199, Ady4ik, Aerocrux, Aeshus, Aexolott, Aexxie, africalimedrop, Afrokada, Agoichi, Ahion, aiden, AJCM-git, AjexRose, Alekshhh, alexkar598, AlexMorgan3817, alexumandxgabriel08x, Alithsko, ALMv1, Alpha-Two, AlphaQwerty, Altoids1, amylizzle, ancientpower, Andre19926, AndrewEyeke, AndreyCamper, Anzarot121, Appiah, ar4ill, ArchPigeon, ArchRBX, areitpog, Arendian, arimah, Arkanic, ArkiveDev, armoks, Arteben, ArthurMousatov, ArtisticRoomba, artur, AruMoon, ArZarLordOfMango, as334, AsikKEsel, AsnDen, asperger-sind, aspiringLich, astriloqua, august-sun, AutoOtter, avghdev, Awlod, AzzyIsNotHere, BackeTako, BananaFlambe, Baptr0b0t, BasedUser, beck-thompson, bellwetherlogic, benev0, benjamin-burges, BGare, bhenrich, bhespiritu, bibbly, BIGZi0348, bingojohnson, BismarckShuffle, Bixkitts, Blackern5000, Blazeror, BlitzTheSquishy, bloodrizer, Bloody2372, blueDev2, Boaz1111, BobdaBiscuit, BobTheSleder, boiled-water-tsar, BombasterDS, botanySupremist, brainfood1183, BramvanZijp, Brandon-Huu, BriBrooo, Bright0, brndd, bryce0110, BubblegumBlue, buletsponge, buntobaggins, bvelliquette, byondfuckery, c0rigin, c4llv07e, CaasGit, Caconym27, Calecute, Callmore, capnsockless, CaptainSqrBeard, Carbonhell, Carolyn3114, Carou02, carteblanche4me, Catofquestionableethics, CatTheSystem, Centronias, chairbender, Charlese2, charlie, ChaseFlorom, chavonadelal, Cheackraze, cheesePizza2, cheeseplated, Chief-Engineer, chillyconmor, christhirtle, chromiumboy, Chronophylos, Chubbicous, Chubbygummibear, Ciac32, civilCornball, Clement-O, clyf, Clyybber, CMDR-Piboy314, cohanna, Cohnway, Cojoke-dot, ColdAutumnRain, Colin-Tel, collinlunn, ComicIronic, CookieMasterT, coolboy911, coolmankid12345, Coolsurf6, corentt, CormosLemming, crazybrain23, creadth, CrigCrag, croilbird, Crotalus, CrudeWax, CrzyPotato, cutemoongod, Cyberboss, d34d10cc, d4kii, DadeKuma, Daemon, daerSeebaer, dahnte, dakamakat, DamianX, DangerRevolution, daniel-cr, DanSAussieITS, Daracke, Darkenson, DawBla, Daxxi3, dch-GH, de0rix, Deahaka, dean, DEATHB4DEFEAT, DeathCamel58, Deatherd, deathride58, DebugOk, Decappi, Decortex, Deeeeja, deepdarkdepths, degradka, Delete69, deltanedas, DenisShvalov, DerbyX, derek, dersheppard, Deserty0, Detintinto, DevilishMilk, dexlerxd, dffdff2423, DieselMohawk, digitalic, Dimastra, DinoWattz, DisposableCrewmember42, DjfjdfofdjfjD, doc-michael, docnite, Doctor-Cpu, DoctorBeard, DogZeroX, dolgovmi, dontbetank, Doomsdrayk, Doru991, DoubleRiceEddiedd, DoutorWhite, dragonryan06, drakewill-CRL, Drayff, dreamlyjack, DrEnzyme, dribblydrone, DrMelon, drongood12, DrSingh, DrSmugleaf, drteaspoon420, DTanxxx, DubiousDoggo, Duddino, dukevanity, duskyjay, Dutch-VanDerLinde, dvir001, Dynexust, Easypoller, echo, eclips_e, eden077, EEASAS, Efruit, efzapa, Ekkosangen, ElectroSR, elsie, elthundercloud, Elysium206, Emisse, emmafornash, EmoGarbage404, Endecc, eoineoineoin, eris, erohrs2, ERORR404V1, Errant-4, ertanic, esguard, estacaoespacialpirata, eugene, exincore, exp111, f0x-n3rd, FacePluslll, Fahasor, FairlySadPanda, FATFSAAM2, Feluk6174, ficcialfaint, Fiftyllama, Fildrance, FillerVK, FinnishPaladin, FirinMaLazors, Fishfish458, FL-OZ, Flareguy, flashgnash, FluffiestFloof, FluffMe, FluidRock, foboscheshir, FoLoKe, fooberticus, ForestNoises, forgotmyotheraccount, forkeyboards, forthbridge, Fortune117, Fouin, foxhorn, freeman2651, freeze2222, Froffy025, Fromoriss, froozigiusz, FrostMando, FungiFellow, FunTust, Futuristic-OK, GalacticChimp, gamer3107, Gaxeer, gbasood, Geekyhobo, genderGeometries, GeneralGaws, Genkail, geraeumig, Ghagliiarghii, Git-Nivrak, githubuser508, gituhabu, GlassEclipse, GNF54, godisdeadLOL, goet, Goldminermac, Golinth, GoodWheatley, Gorox221, gradientvera, graevy, GraniteSidewalk, GreaseMonk, greenrock64, GreyMario, GTRsound, gusxyz, Gyrandola, h3half, hamurlik, Hanzdegloker, HappyRoach, Hardly3D, harikattar, he1acdvv, Hebi, Henry, HerCoyote23, hitomishirichan, hiucko, Hmeister-fake, Hmeister-real, Hobbitmax, hobnob, HoidC, Holinka4ever, holyssss, HoofedEar, Hoolny, hord-brayden, Hreno, hubismal, Hugal31, Huxellberger, Hyenh, hyphenationc, i-justuser-i, iacore, IamVelcroboy, Ian321, icekot8, icesickleone, iczero, iglov, IgorAnt028, igorsaux, ike709, illersaver, Illiux, Ilushkins33, Ilya246, IlyaElDunaev, imrenq, imweax, indeano, Injazz, Insineer, IntegerTempest, Interrobang01, IProduceWidgets, ItsMeThom, Itzbenz, iztokbajcar, Jackal298, Jackrost, jacksonzck, Jackw2As, jacob, jamessimo, janekvap, Jark255, Jaskanbe, JasperJRoth, JerryImMouse, jerryimmouse, Jessetriesagain, jessicamaybe, Jezithyr, jicksaw, JiimBob, JimGamemaster, jimmy12or, JIPDawg, jjtParadox, jmcb, JoeHammad1844, JohnGinnane, johnku1, Jophire, joshepvodka, Jrpl, juliangiebel, JustArt1m, JustCone14, justdie12, justin, justintether, JustinTrotter, justtne, K-Dynamic, k3yw, Kadeo64, Kaga-404, KaiShibaa, kalane15, kalanosh, Kanashi-Panda, katzenminer, kbailey-git, Keelin, Keer-Sar, KEEYNy, keikiru, Kelrak, kerisargit, keronshb, KIBORG04, Killerqu00, Kimpes, KingFroozy, kira-er, Kirillcas, Kirus59, Kistras, Kit0vras, KittenColony, klaypexx, Kmc2000, Ko4ergaPunk, kognise, kokoc9n, komunre, KonstantinAngelov, kosticia, koteq, KrasnoshchekovPavel, Krunklehorn, Kupie, kxvvv, kyupolaris, kzhanik, lajolico, Lamrr, LankLTE, laok233, lapatison, larryrussian, lawdog4817, Lazzi0706, leander-0, leonardo-dabepis, leonsfriedrich, LeoSantich, lettern, LetterN, Level10Cybermancer, LEVELcat, lever1209, Lgibb18, lgruthes, LightVillet, liltenhead, LinkUyx, LittleBuilderJane, LittleNorthStar, LittleNyanCat, lizelive, localcc, lokachop, Lomcastar, LordCarve, LordEclipse, LucasTheDrgn, luckyshotpictures, LudwigVonChesterfield, luizwritescode, Lukasz825700516, luminight, lunarcomets, luringens, lvvova1, Lyndomen, lyroth001, lzimann, lzk228, M3739, mac6na6na, MACMAN2003, Macoron, Magicalus, magmodius, MagnusCrowe, malchanceux, MaloTV, ManelNavola, Mangohydra, marboww, Markek1, Matz05, max, MaxNox7, maylokana, MehimoNemo, MeltedPixel, MemeProof, MendaxxDev, Menshin, Mephisto72, MerrytheManokit, Mervill, metalgearsloth, MetalSage, MFMessage, mhamsterr, michaelcu, micheel665, MilenVolf, MilonPL, Minemoder5000, Minty642, Mirino97, mirrorcult, misandrie, MishaUnity, MissKay1994, MisterMecky, Mith-randalf, MjrLandWhale, mkanke-real, MLGTASTICa, moderatelyaware, modern-nm, mokiros, Moneyl, Moomoobeef, moony, Morb0, mr-bo-jangles, Mr0maks, MrFippik, mrrobdemo, muburu, MureixloI, musicmanvr, MWKane, Myakot, Myctai, N3X15, nails-n-tape, Nairodian, Naive817, NakataRin, namespace-Memory, Nannek, NazrinNya, neutrino-laser, NickPowers43, nikthechampiongr, Nimfar11, Nirnael, NIXC, NkoKirkto, nmajask, noctyrnal, noelkathegod, nok-ko, NonchalantNoob, NoobyLegion, Nopey, not-gavnaed, notafet, notquitehadouken, NotSoDana, noudoit, noverd, NuclearWinter, nukashimika, nuke-haus, NULL882, nullarmo, nyeogmi, Nylux, Nyranu, och-och, OctoRocket, OldDanceJacket, OliverOtter, onoira, OnyxTheBrave, OrangeMoronage9622, osjarw, Ostaf, othymer, OttoMaticode, Owai-Seek, packmore, paigemaeforrest, pali6, Pangogie, panzer-iv1, paolordls, partyaddict, patrikturi, PaulRitter, peccneck, Peptide90, peptron1, PeterFuto, PetMudstone, pewter-wiz, Pgriha, Phantom-Lily, pheenty, Phill101, phunnyguy, PilgrimViis, Pill-U, Pireax, Pissachu, pissdemon, PixeltheAertistContrib, PixelTheKermit, PJB3005, Plasmaguy, plinyvic, Plykiya, poeMota, pofitlo, pointer-to-null, pok27, PolterTzi, PoorMansDreams, PopGamer45, portfiend, potato1234x, PotentiallyTom, ProfanedBane, ProPandaBear, PrPleGoo, ps3moira, Pspritechologist, Psychpsyo, psykzz, PuceTint, PuroSlavKing, PursuitInAshes, Putnam3145, quatre, QueerNB, QuietlyWhisper, qwerltaz, RadioMull, Radosvik, Radrark, Rainbeon, Rainfey, Raitononai, Ramlik, RamZ, randy10122, Rane, Ranger6012, Rapidgame7, ravage123321, rbertoche, Redfire1331, Redict, RedlineTriad, redmushie, RednoWCirabrab, RemberBM, RemieRichards, RemTim, rene-descartes2021, Renlou, retequizzle, RiceMar1244, rich-dunne, RieBi, riggleprime, RIKELOLDABOSS, rinary1, Rinkashikachi, riolume, RobbyTheFish, Rockdtben, Rohesie, rok-povsic, rolfero, RomanNovo, rosieposieeee, Roudenn, router, RumiTiger, S1rFl0, S1ss3l, Saakra, Sadie-silly, saga3152, saintmuntzer, Salex08, sam, samgithubaccount, SaphireLattice, SapphicOverload, Sarahon, sativaleanne, SaveliyM360, sBasalto, ScalyChimp, ScarKy0, scrato, Scribbles0, scrivoy, scruq445, scuffedjays, ScumbagDog, Segonist, sephtasm, Serkket, sewerpig, sh18rw, ShadeAware, ShadowCommander, Shadowtheprotogen546, shaeone, shampunj, shariathotpatrol, SignalWalker, siigiil, Simyon264, sirdragooon, Sirionaut, Sk1tch, SkaldetSkaeg, Skarletto, Skrauz, Skyedra, SlamBamActionman, slarticodefast, Slava0135, Slyfox333, snebl, snicket, sniperchance, Snowni, snowsignal, SolidusSnek, SonicHDC, SoulFN, SoulSloth, Soundwavesghost, southbridge-fur, Soydium, SpaceLizardSky, SpaceManiac, SpaceyLady, Spanky, spanky-spanky, spartak, SpartanKadence, SpeltIncorrectyl, Spessmann, SphiraI, SplinterGP, spoogemonster, sporekto, sporkyz, ssdaniel24, stalengd, stanberytrask, Stanislav4ix, StanTheCarpenter, Stealthbomber16, stellar-novas, stomf, stopbreaking, stopka-html, StrawberryMoses, Stray-Pyramid, strO0pwafel, Strol20, StStevens, Subversionary, sunbear-dev, superjj18, Supernorn, SweptWasTaken, Sybil, SYNCHRONIC, Szunti, Tainakov, takemysoult, TaralGit, Taran, taurie, Tayrtahn, tday93, teamaki, TekuNut, telyonok, TemporalOroboros, tentekal, terezi4real, Terraspark4941, texcruize, TGODiamond, TGRCdev, tgrkzus, ThatOneGoblin25, thatrandomcanadianguy, TheArturZh, theashtronaut, thecopbennet, TheCze, TheDarkElites, thedraccx, TheEmber, TheIntoxicatedCat, thekilk, themias, theomund, theOperand, TherapyGoth, TheShuEd, thetolbean, thevinter, TheWaffleJesus, Thinbug0, ThunderBear2006, timothyteakettle, TimrodDX, timurjavid, tin-man-tim, Titian3, tk-a369, tkdrg, tmtmtl30, TokenStyle, Tollhouse, Toly65, tom-leys, tomasalves8, Tomeno, Tonydatguy, topy, Tornado-Technology, tosatur, TotallyLemon, tropicalhibi, truepaintgit, Truoizys, Tryded, TsjipTsjip, Tunguso4ka, TurboTrackerss14, TyAshley, Tyler-IN, Tyzemol, UbaserB, ubis1, UBlueberry, UKNOWH, UltimateJester, Unbelievable-Salmon, underscorex5, UnicornOnLSD, Unisol, Unkn0wnGh0st333, unusualcrow, Uriende, UristMcDorf, user424242420, Vaaankas, valentfingerov, Varen, VasilisThePikachu, veliebm, VelonacepsCalyxEggs, veprolet, veritable-calamity, Veritius, Vermidia, vero5123, Verslebas, VigersRay, violet754, Visne, VMSolidus, voidnull000, volotomite, volundr-, Voomra, Vordenburg, vorkathbruh, vulppine, wafehling, Warentan, WarMechanic, Watermelon914, waylon531, weaversam8, wertanchik, whateverusername0, Willhelm53, WilliamECrew, willicassi, Winkarst-cpu, wirdal, wixoaGit, WlarusFromDaSpace, wrexbe, wtcwr68, xkreksx, xprospero, xRiriq, YanehCheck, yathxyz, Ygg01, YotaXP, youarereadingthis, Yousifb26, youtissoum, YuriyKiss, zach-hill, Zadeon, zamp, Zandario, Zap527, Zealith-Gamer, ZelteHonor, zero, ZeroDiamond, zerorulez, ZeWaka, zionnBE, ZNixian, ZoldorfTheWizard, Zonespace27, Zylofan, Zymem, zzylex +0x6273, 12rabbits, 13spacemen, 2013HORSEMEATSCANDAL, 20kdc, 21Melkuu, 3nderall, 4310v343k, 4dplanner, 612git, 778b, Ablankmann, abregado, Absolute-Potato, achookh, Acruid, actioninja, actually-reb, ada-please, adamsong, Adeinitas, Admiral-Obvious-001, adrian, Adrian16199, Ady4ik, Aerocrux, Aeshus, Aexolott, Aexxie, africalimedrop, Afrokada, AftrLite, Agoichi, Ahion, aiden, AJCM-git, AjexRose, Alekshhh, alexkar598, AlexMorgan3817, alexumandxgabriel08x, Alithsko, ALMv1, Alpha-Two, AlphaQwerty, Altoids1, amylizzle, ancientpower, Andre19926, AndrewEyeke, AndreyCamper, Anzarot121, Appiah, ar4ill, ArchPigeon, ArchRBX, areitpog, Arendian, arimah, Arkanic, ArkiveDev, armoks, Arteben, ArthurMousatov, ArtisticRoomba, artur, AruMoon, ArZarLordOfMango, as334, AsikKEsel, AsnDen, asperger-sind, aspiringLich, astriloqua, august-sun, AutoOtter, avghdev, Awlod, AzzyIsNotHere, BackeTako, BananaFlambe, Baptr0b0t, BasedUser, beck-thompson, bellwetherlogic, benev0, benjamin-burges, BGare, bhenrich, bhespiritu, bibbly, BIGZi0348, bingojohnson, BismarckShuffle, Bixkitts, Blackern5000, Blazeror, BlitzTheSquishy, bloodrizer, Bloody2372, blueDev2, Boaz1111, BobdaBiscuit, BobTheSleder, boiled-water-tsar, BombasterDS, botanySupremist, brainfood1183, BramvanZijp, Brandon-Huu, BriBrooo, Bright0, brndd, bryce0110, BubblegumBlue, buletsponge, buntobaggins, bvelliquette, byondfuckery, c0rigin, c4llv07e, CaasGit, Caconym27, Calecute, Callmore, capnsockless, CaptainSqrBeard, Carbonhell, Carolyn3114, Carou02, carteblanche4me, Catofquestionableethics, CatTheSystem, Centronias, chairbender, Charlese2, charlie, ChaseFlorom, chavonadelal, Cheackraze, cheesePizza2, cheeseplated, Chief-Engineer, chillyconmor, christhirtle, chromiumboy, Chronophylos, Chubbicous, Chubbygummibear, Ciac32, civilCornball, Clement-O, clyf, Clyybber, CMDR-Piboy314, cohanna, Cohnway, Cojoke-dot, ColdAutumnRain, Colin-Tel, collinlunn, ComicIronic, CookieMasterT, coolboy911, coolmankid12345, Coolsurf6, corentt, CormosLemming, crazybrain23, creadth, CrigCrag, croilbird, Crotalus, CrudeWax, CrzyPotato, cutemoongod, Cyberboss, d34d10cc, d4kii, DadeKuma, Daemon, daerSeebaer, dahnte, dakamakat, DamianX, DangerRevolution, daniel-cr, DanSAussieITS, Daracke, Darkenson, DawBla, Daxxi3, dch-GH, de0rix, Deahaka, dean, DEATHB4DEFEAT, DeathCamel58, Deatherd, deathride58, DebugOk, Decappi, Decortex, Deeeeja, deepdarkdepths, degradka, Delete69, deltanedas, DenisShvalov, DerbyX, derek, dersheppard, Deserty0, Detintinto, DevilishMilk, dexlerxd, dffdff2423, DieselMohawk, digitalic, Dimastra, DinoWattz, DisposableCrewmember42, DjfjdfofdjfjD, doc-michael, docnite, Doctor-Cpu, DoctorBeard, DogZeroX, dolgovmi, dontbetank, Doomsdrayk, Doru991, DoubleRiceEddiedd, DoutorWhite, dragonryan06, drakewill-CRL, Drayff, dreamlyjack, DrEnzyme, dribblydrone, DrMelon, drongood12, DrSingh, DrSmugleaf, drteaspoon420, DTanxxx, DubiousDoggo, Duddino, dukevanity, duskyjay, Dutch-VanDerLinde, dvir001, Dynexust, Easypoller, echo, eclips_e, eden077, EEASAS, Efruit, efzapa, Ekkosangen, ElectroSR, elsie, elthundercloud, Elysium206, Emisse, emmafornash, EmoGarbage404, Endecc, eoineoineoin, eris, erohrs2, ERORR404V1, Errant-4, ertanic, esguard, estacaoespacialpirata, eugene, exincore, exp111, f0x-n3rd, FacePluslll, Fahasor, FairlySadPanda, FATFSAAM2, Feluk6174, ficcialfaint, Fiftyllama, Fildrance, FillerVK, FinnishPaladin, FirinMaLazors, Fishfish458, FL-OZ, Flareguy, flashgnash, FluffiestFloof, FluffMe, FluidRock, foboscheshir, FoLoKe, fooberticus, ForestNoises, forgotmyotheraccount, forkeyboards, forthbridge, Fortune117, Fouin, foxhorn, freeman2651, freeze2222, Froffy025, Fromoriss, froozigiusz, FrostMando, FungiFellow, FunTust, Futuristic-OK, GalacticChimp, gamer3107, Gaxeer, gbasood, Geekyhobo, genderGeometries, GeneralGaws, Genkail, geraeumig, Ghagliiarghii, Git-Nivrak, githubuser508, gituhabu, GlassEclipse, GNF54, godisdeadLOL, goet, Goldminermac, Golinth, GoodWheatley, Gorox221, gradientvera, graevy, GraniteSidewalk, GreaseMonk, greenrock64, GreyMario, GTRsound, gusxyz, Gyrandola, h3half, hamurlik, Hanzdegloker, HappyRoach, Hardly3D, harikattar, he1acdvv, Hebi, Henry, HerCoyote23, hitomishirichan, hiucko, Hmeister-fake, Hmeister-real, Hobbitmax, hobnob, HoidC, Holinka4ever, holyssss, HoofedEar, Hoolny, hord-brayden, Hreno, hubismal, Hugal31, Huxellberger, Hyenh, hyphenationc, i-justuser-i, iacore, IamVelcroboy, Ian321, icekot8, icesickleone, iczero, iglov, IgorAnt028, igorsaux, ike709, illersaver, Illiux, Ilushkins33, Ilya246, IlyaElDunaev, imrenq, imweax, indeano, Injazz, Insineer, IntegerTempest, Interrobang01, IProduceWidgets, ItsMeThom, Itzbenz, iztokbajcar, Jackal298, Jackrost, jacksonzck, Jackw2As, jacob, jamessimo, janekvap, Jark255, Jarmer123, Jaskanbe, JasperJRoth, JerryImMouse, jerryimmouse, Jessetriesagain, jessicamaybe, Jezithyr, jicksaw, JiimBob, JimGamemaster, jimmy12or, JIPDawg, jjtParadox, jmcb, JoeHammad1844, JohnGinnane, johnku1, Jophire, joshepvodka, Jrpl, juliangiebel, JustArt1m, JustCone14, justdie12, justin, justintether, JustinTrotter, justtne, K-Dynamic, k3yw, Kadeo64, Kaga-404, KaiShibaa, kalane15, kalanosh, Kanashi-Panda, katzenminer, kbailey-git, Keelin, Keer-Sar, KEEYNy, keikiru, Kelrak, kerisargit, keronshb, KIBORG04, Killerqu00, Kimpes, KingFroozy, kira-er, Kirillcas, Kirus59, Kistras, Kit0vras, KittenColony, klaypexx, Kmc2000, Ko4ergaPunk, kognise, kokoc9n, komunre, KonstantinAngelov, kosticia, koteq, KrasnoshchekovPavel, Krunklehorn, Kupie, kxvvv, kyupolaris, kzhanik, lajolico, Lamrr, LankLTE, laok233, lapatison, larryrussian, lawdog4817, Lazzi0706, leander-0, leonardo-dabepis, leonsfriedrich, LeoSantich, LetterN, lettern, Level10Cybermancer, LEVELcat, lever1209, Lgibb18, lgruthes, LightVillet, liltenhead, LinkUyx, LittleBuilderJane, LittleNorthStar, LittleNyanCat, lizelive, localcc, lokachop, Lomcastar, LordCarve, LordEclipse, LucasTheDrgn, luckyshotpictures, LudwigVonChesterfield, luizwritescode, Lukasz825700516, luminight, lunarcomets, luringens, lvvova1, Lyndomen, lyroth001, lzimann, lzk228, M3739, mac6na6na, MACMAN2003, Macoron, Magicalus, magmodius, MagnusCrowe, malchanceux, MaloTV, ManelNavola, Mangohydra, marboww, Markek1, Matz05, max, MaxNox7, maylokana, MehimoNemo, MeltedPixel, MemeProof, MendaxxDev, Menshin, Mephisto72, MerrytheManokit, Mervill, metalgearsloth, MetalSage, MFMessage, mhamsterr, michaelcu, micheel665, MilenVolf, MilonPL, Minemoder5000, Minty642, Mirino97, mirrorcult, misandrie, MishaUnity, MissKay1994, MisterMecky, Mith-randalf, MjrLandWhale, mkanke-real, MLGTASTICa, moderatelyaware, modern-nm, mokiros, Moneyl, Moomoobeef, moony, Morb0, mr-bo-jangles, Mr0maks, MrFippik, mrrobdemo, muburu, MureixloI, musicmanvr, MWKane, Myakot, Myctai, N3X15, nails-n-tape, Nairodian, Naive817, NakataRin, namespace-Memory, Nannek, NazrinNya, neutrino-laser, NickPowers43, nikthechampiongr, Nimfar11, Nirnael, NIXC, NkoKirkto, nmajask, noctyrnal, noelkathegod, nok-ko, NonchalantNoob, NoobyLegion, Nopey, not-gavnaed, notafet, notquitehadouken, NotSoDana, noudoit, noverd, NuclearWinter, nukashimika, nuke-haus, NULL882, nullarmo, nyeogmi, Nylux, Nyranu, och-och, OctoRocket, OldDanceJacket, OliverOtter, onoira, OnyxTheBrave, OrangeMoronage9622, osjarw, Ostaf, othymer, OttoMaticode, Owai-Seek, packmore, paigemaeforrest, pali6, Pangogie, panzer-iv1, paolordls, partyaddict, patrikturi, PaulRitter, peccneck, Peptide90, peptron1, PeterFuto, PetMudstone, pewter-wiz, Pgriha, Phantom-Lily, pheenty, Phill101, phunnyguy, PilgrimViis, Pill-U, Pireax, Pissachu, pissdemon, PixeltheAertistContrib, PixelTheKermit, PJB3005, Plasmaguy, plinyvic, Plykiya, poeMota, pofitlo, pointer-to-null, pok27, PolterTzi, PoorMansDreams, PopGamer45, portfiend, potato1234x, PotentiallyTom, ProfanedBane, ProPandaBear, PrPleGoo, ps3moira, Pspritechologist, Psychpsyo, psykzz, PuceTint, PuroSlavKing, PursuitInAshes, Putnam3145, qrtDaniil, quatre, QueerNB, QuietlyWhisper, qwerltaz, RadioMull, Radosvik, Radrark, Rainbeon, Rainfey, Raitononai, Ramlik, RamZ, randy10122, Rane, Ranger6012, Rapidgame7, ravage123321, rbertoche, Redfire1331, Redict, RedlineTriad, redmushie, RednoWCirabrab, RemberBM, RemieRichards, RemTim, rene-descartes2021, Renlou, retequizzle, RiceMar1244, rich-dunne, RieBi, riggleprime, RIKELOLDABOSS, rinary1, Rinkashikachi, riolume, RobbyTheFish, Rockdtben, Rohesie, rok-povsic, rolfero, RomanNovo, rosieposieeee, Roudenn, router, RumiTiger, S1rFl0, S1ss3l, Saakra, Sadie-silly, saga3152, saintmuntzer, Salex08, sam, samgithubaccount, SaphireLattice, SapphicOverload, Sarahon, sativaleanne, SaveliyM360, sBasalto, ScalyChimp, ScarKy0, scrato, Scribbles0, scrivoy, scruq445, scuffedjays, ScumbagDog, Segonist, sephtasm, Serkket, sewerpig, sh18rw, ShadeAware, ShadowCommander, Shadowtheprotogen546, shaeone, shampunj, shariathotpatrol, SignalWalker, siigiil, Simyon264, sirdragooon, Sirionaut, Sk1tch, SkaldetSkaeg, Skarletto, Skrauz, Skyedra, SlamBamActionman, slarticodefast, Slava0135, Slyfox333, snebl, snicket, sniperchance, Snowni, snowsignal, SolidusSnek, SonicHDC, SoulFN, SoulSloth, Soundwavesghost, southbridge-fur, Soydium, spacelizard, SpaceLizardSky, SpaceManiac, SpaceyLady, Spanky, spanky-spanky, spartak, SpartanKadence, SpeltIncorrectyl, Spessmann, SphiraI, SplinterGP, spoogemonster, sporekto, sporkyz, ssdaniel24, stalengd, stanberytrask, Stanislav4ix, StanTheCarpenter, Stealthbomber16, stellar-novas, stomf, stopbreaking, stopka-html, StrawberryMoses, Stray-Pyramid, strO0pwafel, Strol20, StStevens, Subversionary, sunbear-dev, superjj18, Supernorn, SweptWasTaken, Sybil, SYNCHRONIC, Szunti, Tainakov, takemysoult, TaralGit, Taran, taurie, Tayrtahn, tday93, teamaki, TekuNut, telyonok, TemporalOroboros, tentekal, terezi4real, Terraspark4941, texcruize, TGODiamond, TGRCdev, tgrkzus, ThatOneGoblin25, thatrandomcanadianguy, TheArturZh, theashtronaut, thecopbennet, TheCze, TheDarkElites, thedraccx, TheEmber, TheIntoxicatedCat, thekilk, themias, theomund, theOperand, TherapyGoth, TheShuEd, thetolbean, thevinter, TheWaffleJesus, Thinbug0, ThunderBear2006, timothyteakettle, TimrodDX, timurjavid, tin-man-tim, Titian3, tk-a369, tkdrg, tmtmtl30, TokenStyle, Tollhouse, Toly65, tom-leys, tomasalves8, Tomeno, Tonydatguy, topy, Tornado-Technology, tosatur, TotallyLemon, tropicalhibi, truepaintgit, Truoizys, Tryded, TsjipTsjip, Tunguso4ka, TurboTrackerss14, TyAshley, Tyler-IN, Tyzemol, UbaserB, ubis1, UBlueberry, UKNOWH, UltimateJester, Unbelievable-Salmon, underscorex5, UnicornOnLSD, Unisol, Unkn0wnGh0st333, unusualcrow, Uriende, UristMcDorf, user424242420, Vaaankas, valentfingerov, Varen, VasilisThePikachu, veliebm, VelonacepsCalyxEggs, veprolet, veritable-calamity, Veritius, Vermidia, vero5123, Verslebas, VigersRay, violet754, Visne, VMSolidus, voidnull000, volotomite, volundr-, Voomra, Vordenburg, vorkathbruh, vulppine, wafehling, Warentan, WarMechanic, Watermelon914, waylon531, weaversam8, wertanchik, whateverusername0, Willhelm53, WilliamECrew, willicassi, Winkarst-cpu, wirdal, wixoaGit, WlarusFromDaSpace, wrexbe, wtcwr68, xkreksx, xprospero, xRiriq, YanehCheck, yathxyz, Ygg01, YotaXP, youarereadingthis, Yousifb26, youtissoum, YuriyKiss, zach-hill, Zadeon, zamp, Zandario, Zap527, Zealith-Gamer, ZelteHonor, zero, ZeroDiamond, zerorulez, ZeWaka, zionnBE, ZNixian, ZoldorfTheWizard, Zonespace27, Zylofan, Zymem, zzylex From 912ac2c06980710bd5d96e7fb851922e2ff70c68 Mon Sep 17 00:00:00 2001 From: Plykiya <58439124+Plykiya@users.noreply.github.com> Date: Sun, 3 Nov 2024 03:25:30 -0800 Subject: [PATCH 73/97] Bugfix: Wielding now uses identity system. (#33134) Make wielding system use identity --- Content.Shared/Wieldable/WieldableSystem.cs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Content.Shared/Wieldable/WieldableSystem.cs b/Content.Shared/Wieldable/WieldableSystem.cs index d76876c0cf..0a193576bf 100644 --- a/Content.Shared/Wieldable/WieldableSystem.cs +++ b/Content.Shared/Wieldable/WieldableSystem.cs @@ -3,6 +3,7 @@ using Content.Shared.Examine; using Content.Shared.Hands; using Content.Shared.Hands.Components; using Content.Shared.Hands.EntitySystems; +using Content.Shared.IdentityManagement; using Content.Shared.Interaction.Events; using Content.Shared.Inventory.VirtualItem; using Content.Shared.Item; @@ -125,7 +126,7 @@ public sealed class WieldableSystem : EntitySystem private void OnExamine(EntityUid uid, GunWieldBonusComponent component, ref ExaminedEvent args) { - if (HasComp(uid)) + if (HasComp(uid)) return; if (component.WieldBonusExamineMessage != null) @@ -253,7 +254,7 @@ public sealed class WieldableSystem : EntitySystem return false; var selfMessage = Loc.GetString("wieldable-component-successful-wield", ("item", used)); - var othersMessage = Loc.GetString("wieldable-component-successful-wield-other", ("user", user), ("item", used)); + var othersMessage = Loc.GetString("wieldable-component-successful-wield-other", ("user", Identity.Entity(user, EntityManager)), ("item", used)); _popupSystem.PopupPredicted(selfMessage, othersMessage, user, user); var targEv = new ItemWieldedEvent(); @@ -298,7 +299,7 @@ public sealed class WieldableSystem : EntitySystem _audioSystem.PlayPredicted(component.UnwieldSound, uid, args.User); var selfMessage = Loc.GetString("wieldable-component-failed-wield", ("item", uid)); - var othersMessage = Loc.GetString("wieldable-component-failed-wield-other", ("user", args.User.Value), ("item", uid)); + var othersMessage = Loc.GetString("wieldable-component-failed-wield-other", ("user", Identity.Entity(args.User.Value, EntityManager)), ("item", uid)); _popupSystem.PopupPredicted(selfMessage, othersMessage, args.User.Value, args.User.Value); } From a0ef431255f122c360e4f1734e26e092ddce9705 Mon Sep 17 00:00:00 2001 From: PJBot Date: Sun, 3 Nov 2024 11:26:38 +0000 Subject: [PATCH 74/97] Automatic changelog update --- Resources/Changelog/Changelog.yml | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index d82950a286..b20b6726bf 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Flareguy - changes: - - message: Added vox sprites for most of the remaining common mask items. - type: Add - id: 7085 - time: '2024-08-10T21:06:50.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30838 - author: Scribbles0, Plykiya, nikthechampiongr changes: - message: You can now execute incapacitated/cuffed entities or yourself with certain @@ -3953,3 +3946,11 @@ id: 7584 time: '2024-11-02T15:12:26.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/33067 +- author: Plykiya + changes: + - message: Wielding weapons no longer displays your character's real identity when + your identity is hidden. + type: Fix + id: 7585 + time: '2024-11-03T11:25:30.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/33134 From cc3a19c212e96eda25236060c7809a66a69d7bdd Mon Sep 17 00:00:00 2001 From: MilenVolf <63782763+MilenVolf@users.noreply.github.com> Date: Mon, 4 Nov 2024 03:49:42 +0300 Subject: [PATCH 75/97] Collapsible ghost roles menu (#32717) * Make ghost roles collapsible * Save `BodyVisible` state of each `Collapsible` box * Make ghost role collapsible only when group has more than 1 role * Make it a little prettier * Make only ghost role buttons collapsible * Apply requested changes * Typo * Small cleanup * Store in list, instead of iterating * Make unique ids more unique * Move it out of the cycle * Make _collapsibleBoxes into dictionary and use key instead of Collapsible boxes names Added TODO. So after the problem will be fixed in `GhostRolesEui`, it should be mirrored and fixed here too. * Put TODO in GhostRolesEui. I guess Issue must be made for this * Use HashSet instead of Dictionary as suggested. Invert the HashSet, so being present means it uncollapsed I decided to invert HashSet to _uncollapsedStates, because players surely will have more collapsed buttons than opened, so we optimise memory usage a little bit. * Remove extra space from ghost roles window * Add buttons stretching. Size 3:1 --- .../Controls/Roles/GhostRoleButtonsBox.xaml | 9 +++ ...ry.xaml.cs => GhostRoleButtonsBox.xaml.cs} | 7 +- .../Controls/Roles/GhostRoleEntryButtons.xaml | 10 +-- .../Controls/Roles/GhostRoleInfoBox.xaml | 8 ++ .../Controls/Roles/GhostRoleInfoBox.xaml.cs | 18 +++++ .../Ghost/Controls/Roles/GhostRolesEntry.xaml | 16 ---- .../Ghost/Controls/Roles/GhostRolesEui.cs | 30 +++++--- .../Controls/Roles/GhostRolesWindow.xaml.cs | 77 ++++++++++++++++++- Resources/Locale/en-US/ghost/ghost-gui.ftl | 1 + 9 files changed, 136 insertions(+), 40 deletions(-) create mode 100644 Content.Client/UserInterface/Systems/Ghost/Controls/Roles/GhostRoleButtonsBox.xaml rename Content.Client/UserInterface/Systems/Ghost/Controls/Roles/{GhostRolesEntry.xaml.cs => GhostRoleButtonsBox.xaml.cs} (86%) create mode 100644 Content.Client/UserInterface/Systems/Ghost/Controls/Roles/GhostRoleInfoBox.xaml create mode 100644 Content.Client/UserInterface/Systems/Ghost/Controls/Roles/GhostRoleInfoBox.xaml.cs delete mode 100644 Content.Client/UserInterface/Systems/Ghost/Controls/Roles/GhostRolesEntry.xaml diff --git a/Content.Client/UserInterface/Systems/Ghost/Controls/Roles/GhostRoleButtonsBox.xaml b/Content.Client/UserInterface/Systems/Ghost/Controls/Roles/GhostRoleButtonsBox.xaml new file mode 100644 index 0000000000..32d611e771 --- /dev/null +++ b/Content.Client/UserInterface/Systems/Ghost/Controls/Roles/GhostRoleButtonsBox.xaml @@ -0,0 +1,9 @@ + + + + + diff --git a/Content.Client/UserInterface/Systems/Ghost/Controls/Roles/GhostRolesEntry.xaml.cs b/Content.Client/UserInterface/Systems/Ghost/Controls/Roles/GhostRoleButtonsBox.xaml.cs similarity index 86% rename from Content.Client/UserInterface/Systems/Ghost/Controls/Roles/GhostRolesEntry.xaml.cs rename to Content.Client/UserInterface/Systems/Ghost/Controls/Roles/GhostRoleButtonsBox.xaml.cs index fc53cc72ae..7df0243416 100644 --- a/Content.Client/UserInterface/Systems/Ghost/Controls/Roles/GhostRolesEntry.xaml.cs +++ b/Content.Client/UserInterface/Systems/Ghost/Controls/Roles/GhostRoleButtonsBox.xaml.cs @@ -10,20 +10,17 @@ using Robust.Shared.Utility; namespace Content.Client.UserInterface.Systems.Ghost.Controls.Roles { [GenerateTypedNameReferences] - public sealed partial class GhostRolesEntry : BoxContainer + public sealed partial class GhostRoleButtonsBox : BoxContainer { private SpriteSystem _spriteSystem; public event Action? OnRoleSelected; public event Action? OnRoleFollow; - public GhostRolesEntry(string name, string description, bool hasAccess, FormattedMessage? reason, IEnumerable roles, SpriteSystem spriteSystem) + public GhostRoleButtonsBox(bool hasAccess, FormattedMessage? reason, IEnumerable roles, SpriteSystem spriteSystem) { RobustXamlLoader.Load(this); _spriteSystem = spriteSystem; - Title.Text = name; - Description.SetMessage(description); - foreach (var role in roles) { var button = new GhostRoleEntryButtons(role); diff --git a/Content.Client/UserInterface/Systems/Ghost/Controls/Roles/GhostRoleEntryButtons.xaml b/Content.Client/UserInterface/Systems/Ghost/Controls/Roles/GhostRoleEntryButtons.xaml index ffde5d69f7..05c52deef1 100644 --- a/Content.Client/UserInterface/Systems/Ghost/Controls/Roles/GhostRoleEntryButtons.xaml +++ b/Content.Client/UserInterface/Systems/Ghost/Controls/Roles/GhostRoleEntryButtons.xaml @@ -1,15 +1,15 @@  + Orientation="Horizontal" + HorizontalAlignment="Stretch">