From ac3db208159eddf227ed1cc67c82674c11ee2e09 Mon Sep 17 00:00:00 2001 From: Swept Date: Sat, 22 Aug 2020 16:42:20 -0700 Subject: [PATCH 001/103] Mad? --- .../Misc/barsign.rsi/alohasnackbar.png | Bin 1355 -> 0 bytes .../Constructible/Misc/barsign.rsi/femboy.png | Bin 0 -> 937 bytes .../Misc/barsign.rsi/maltesefalcon.png | Bin 1047 -> 0 bytes .../Constructible/Misc/barsign.rsi/meta.json | 490 +++++++++++++++++- .../Misc/barsign.rsi/robustacafe.png | Bin 1334 -> 0 bytes .../Misc/barsign.rsi/scotchservinwill.png | Bin 1315 -> 0 bytes .../Misc/barsign.rsi/slipperyshots.png | Bin 584 -> 0 bytes .../Misc/barsign.rsi/syndibarsign.png | Bin 1671 -> 0 bytes .../Misc/barsign.rsi/theadminbus.png | Bin 723 -> 0 bytes .../Misc/barsign.rsi/thebark.png | Bin 1026 -> 0 bytes .../Misc/barsign.rsi/thecavern.png | Bin 2669 -> 0 bytes .../Misc/barsign.rsi/thenest.png | Bin 1708 -> 0 bytes .../Misc/barsign.rsi/theshaken.png | Bin 1165 -> 0 bytes .../Misc/barsign.rsi/vladssaladbar.png | Bin 766 -> 0 bytes 14 files changed, 489 insertions(+), 1 deletion(-) delete mode 100644 Resources/Textures/Constructible/Misc/barsign.rsi/alohasnackbar.png create mode 100644 Resources/Textures/Constructible/Misc/barsign.rsi/femboy.png delete mode 100644 Resources/Textures/Constructible/Misc/barsign.rsi/maltesefalcon.png delete mode 100644 Resources/Textures/Constructible/Misc/barsign.rsi/robustacafe.png delete mode 100644 Resources/Textures/Constructible/Misc/barsign.rsi/scotchservinwill.png delete mode 100644 Resources/Textures/Constructible/Misc/barsign.rsi/slipperyshots.png delete mode 100644 Resources/Textures/Constructible/Misc/barsign.rsi/syndibarsign.png delete mode 100644 Resources/Textures/Constructible/Misc/barsign.rsi/theadminbus.png delete mode 100644 Resources/Textures/Constructible/Misc/barsign.rsi/thebark.png delete mode 100644 Resources/Textures/Constructible/Misc/barsign.rsi/thecavern.png delete mode 100644 Resources/Textures/Constructible/Misc/barsign.rsi/thenest.png delete mode 100644 Resources/Textures/Constructible/Misc/barsign.rsi/theshaken.png delete mode 100644 Resources/Textures/Constructible/Misc/barsign.rsi/vladssaladbar.png diff --git a/Resources/Textures/Constructible/Misc/barsign.rsi/alohasnackbar.png b/Resources/Textures/Constructible/Misc/barsign.rsi/alohasnackbar.png deleted file mode 100644 index dc1ad65c6c46158829e164ff499f3ae844c8b7ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1355 zcmV-R1+@B!P)JCVfCDeL*RHLMwkmDu6>PgHA4kPBe&3 zGl@<#iB&X;O)`p3GmA|zi%l|&PBV;8GK^0(jZZU}z0kX$>KRWz1dG?rXD zmSQ`WVnLl;G@V>KonkwkX-J?+Fr#8SqiH*%X+f%KL9uT^v35wec1XT_NWOedzJpc7 zgHFqXRm+K0&M_I!G8xf{RneAW(Uxh{V?)?LCfJr@*p_M7ooU%ZC)`9S+(jzhmR#PQ zV&0u;-$*OtPc!9GH07gd<)d%qs&D10cIB#k>#A?-s&?zKcI&Zx>$ijMf?@81Veeo- z?|oeGU_bDGUh;ok@_=6Qs%i47Z}O^k^09C7v3ByYeDb$^^0$Ncds+CgZ}_ox__ucW zw|w}wgZRFK_`ZqwzL5EGQT%jL{c}9FyVKn9_8_Sf^#*>T;sy~o>c`#hhd(@Bb~lcTk@X8=yw zDOH>tqsd(5(ix?b>w?evR9iUI5me# zPP4^uu^JohMyu6qrt3na+cw{-U3}rs&wqGP zZQnYRK_4$Kr;-%hl$fBBEKTuDS!a(P=<4?mFJFFi{>#7qCiBj%(;~K|6T~FrIEEQ< z(y^rv_)7Rb(xat*<>9BFymbESf9n^N+1@=3&_MuHF1>09`Rx}sQItfgzPSC*xy8o| zR0Mg8!Yc#^2MJ?z6vv}6!x;a}#y{|V{pRAw+cclog*LT920hmard%iyPZ_feEKeA# zol&pWNo^AM!B+7a5g_5>QQol03c}KSulqXD+$pBkE8aqF5RwSP@Gv|+K4FC6$%*wK z8%68n6yf0>9eUe^0C=0e8j$E~3nalT`U7lCVuz@6RY z))V(_J*He1g-e`Fc)PSp#RjoQs$V;k0g8xn;hby(aUT(X0r3(smP@omri21?nMB4Z z6tR;QF_Gyvv!Y_E{;tU(xoSt`)uoG!lQY$S_H*tjtXax8H=_3zI2{ywD>L zec*~h2EIS^JTG8kyeI;TQfeQ=TM$TQ7z~48==)opJcA0v{hRxr?R(xG^CXPT5imZo zxZ`;+y}4hLs{obtuJiPBVcl^nrSwnv#!l(E^8d|+PBs^IEk5i?cG|hY5h~aDpS%fN zZMvY3%>@jBYj!g5T!4WK!>0ZFcdpwMDiutrr<@CTp^{UsIM2dp{tt9KUc)XZ0R8{~ N002ovPDHLkV1hXmkJkVI diff --git a/Resources/Textures/Constructible/Misc/barsign.rsi/femboy.png b/Resources/Textures/Constructible/Misc/barsign.rsi/femboy.png new file mode 100644 index 0000000000000000000000000000000000000000..1c44cc2317bfa496afed0a651a2188d46bcb6605 GIT binary patch literal 937 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5992B`&GO$wiq3C7Jno3=9=> zg2M`mO22;zF8KKMiI%sn*10q1gExd4Tr__0Nawtd=1GR4Gd?>kjDw6X8+$d#BrC6b zH0j8s5QSjR&TeDX%_}5Mm^^vpqwRIZmvv+BnTA6vEjy!q@W+lz0=X6#$5 zIsdb^(MJXbrahi6jv*Cu-bOe29ySork!G07VAc_F@EpswT@F)tSFP)xE7CGILA%m^ zde`obppyRLtWWayJ#FW5Sj>y#s<`&tfBk#bJug33Fh1{Rva0=8V#ZqXt48C)zC8_k z@?3YW&(B-yF#9}rj)fPu$@9nVPu7@U`}yHm#p5}W$1l#PlWG6$zT%WW*Wrgbe>nB8 zeQ~@c(Dz~4<>$+p-q(xqT-&{`|NFTMFF%*JKHGg@=E3Uw-_8D92l9g(=Zc=Yo{`Gv zTbCNZ^G}Rh@A_{h?texfxBvZ9`l!B!DYN+*lUPkz)7zTR1E)+w9zSQ2Uhg+UaN(t0 zQ&~lRW`>>r{``yfy`_=TFF$QQRNY=Bum1FuLg16hOycZclcv1-^wN}zYjS#e9k1vQ z}|+HKa#O%2TVSPQE8#2Mzd{77f~%=nD?4Eqdzohs$6=c|8s**(a=p7B3_ z|E-+4QDkjPE5Zy$%VDUWu zke{Ev3k%hS+XXy5ecyitcY+;0uA>>56=~JJiz##X@_k)cZ0vvpUoi0 zf&C!1cjMXnub(hW|FMO6DgZ2X^+tMzexYZ5dR`aKMmWxA|t2tB?f0;IBp{S#0db4ie2FoSX0sxzt0 zK;8sT7srr_TW_O#t6nMa%oV;6we8#A`DH4N|2$rEbsoFxowM}o?@5Olg}#*h{_(^9 zt;;v@j~8Em@hrRaqN?vb*P8G9`16$|T??L?P2ha^`|-E0wte^G>w307PG7kH`(cLs z&UThM&xQx@of$eVd{315vvSIT2W<9+5_4GoweObM`q?xg7+`JT8h z^4Imp!3?+WTG`}wFtX2By!*zoJNFe69{tRIdsF4Wf%!~#9&CsO%1G=vthz1Y&@#mv z3JDJ^toWr_vOYc+Y!GKz_^eIvrEo@}Shd%`d--P>_DoZyX^H&NE&R?>v0u;jAUCoo}sX7nm+H+I50a z>c>mFZ}*c0%gGFrn}V_gOcX>DtOP zO6#85!FHMB%N8m9YL+A=3t{8iIm^F`H5UE3!nh*gAiJK%&xLyB8+A%%i|#6suXqvP zYoDv~f{nFY?@-C>n5_983*_q89X5!ZSoI`V{(XP>?*kii6UsTSKGI+9u;$RUV^iJD zx9{bM#>~Is z&m2_$z54wlrnP&u!0w)FkJ4p5;*Y%b`&xU+Ev#4nUSs(0|J*FA&hBllpSnrxt?i%L zrrGDkw|uQ#xAOJxn3~ku`Q7W+y)XWF^=qx(zFqsy9}U0$edmu?zwE^0WA8tIv>K$S z6q};^E>ka5?^}RhZ~k(>{l9)XRoh*d$G_z{^VwOZwg375{%839^MLV}+Oq#!zy1{$ zs_5HyUTwkJ_n$d6UjH^?5&2px$TaKMJ`qOK+V~u{EnjK_nWTR0lVH@XjW_8u{Zbpr z#Pw_61-E6(-+Sk#Wc}KA!*0RS_uOHMvbFJfY*W6}o~(6ny)Ul27^q2wQM5Mx)Axq1 zefod9-#q>G?{r;|8I!*<&^GNqPxCH+pRM|var%zT8y|}bLxEY9!PC{xWt~$(696DZ B2|oY; diff --git a/Resources/Textures/Constructible/Misc/barsign.rsi/meta.json b/Resources/Textures/Constructible/Misc/barsign.rsi/meta.json index 3498d5eb1b..c53f83374b 100644 --- a/Resources/Textures/Constructible/Misc/barsign.rsi/meta.json +++ b/Resources/Textures/Constructible/Misc/barsign.rsi/meta.json @@ -1 +1,489 @@ -{"version":1,"size":{"x":64,"y":32},"states":[{"name":"alohasnackbar","directions":1,"delays":[[1.0]]},{"name":"combocafe","directions":1,"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]]},{"name":"emergencyrumparty","directions":1,"delays":[[1.0,1.0,1.0,5.0,1.0,1.0,1.0,1.0]]},{"name":"empbarsign","directions":1,"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,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":"empty","directions":1,"delays":[[1.0]]},{"name":"goose","directions":1,"delays":[[0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5]]},{"name":"honkednloaded","directions":1,"delays":[[0.4,1.0]]},{"name":"maidcafe","directions":1,"delays":[[1.0,0.03,0.03,0.03,0.03,0.6,0.03,0.03,2.0,0.03,0.03,0.03,0.03,2.0,0.03,0.03]]},{"name":"maltesefalcon","directions":1,"delays":[[3.8,0.4,1.6,0.1,5.6,0.1,0.4,0.1]]},{"name":"officerbeersky","directions":1,"delays":[[3.0,0.4,1.6,0.1,3.4,0.1,0.4,0.1,0.8]]},{"name":"oldcockinn","directions":1,"delays":[[1.8,0.1,0.1,0.6,0.8,0.6,0.8,0.6,2.4,0.1,0.1,0.1]]},{"name":"robustacafe","directions":1,"delays":[[1.8,0.1,0.1,0.1,0.1,1.6,0.1,0.1,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.1,0.1]]},{"name":"scotchservinwill","directions":1,"delays":[[3.0,0.4,1.6,0.1,3.4,0.1,0.4,0.1,0.8]]},{"name":"slipperyshots","directions":1,"delays":[[0.4,1.0]]},{"name":"syndibarsign","directions":1,"delays":[[0.1,0.9,2.5,1.0,2.5,0.1,0.05,0.2,0.1,0.05,2.5,1.0,2.5,0.1,0.05,0.2,0.1,0.05,2.5,1.0]]},{"name":"the_lightbulb","directions":1,"delays":[[0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,1.6,0.1,1.3,0.2,2.0,0.3]]},{"name":"theadminbus","directions":1,"delays":[[2.5,1.5]]},{"name":"thealenath","directions":1,"delays":[[1.8,0.1,0.1,0.1,0.1,1.6,0.1,0.1,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.1,0.1]]},{"name":"thebark","directions":1,"delays":[[3.0,0.4,1.6,0.1,3.4,0.1,0.4,0.1,0.8]]},{"name":"thecavern","directions":1,"delays":[[1.0,4.5,0.2,1.5]]},{"name":"thecoderbus","directions":1,"delays":[[2.5,1.5]]},{"name":"thedrunkcarp","directions":1,"delays":[[0.5,0.1,0.4,1.0,0.5,0.3,0.1,1.0]]},{"name":"thegreytide","directions":1,"delays":[[0.4,1.0]]},{"name":"theharmbaton","directions":1,"delays":[[3.0,0.4,1.6,0.1,3.4,0.1,0.4,0.1,0.8]]},{"name":"thenest","directions":1,"delays":[[0.6,0.6,0.6,0.6,0.6,0.2,0.2,0.6,0.6,0.4,0.1,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.1,0.4,0.1,0.4,0.4]]},{"name":"thenet","directions":1,"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,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":"theouterspess","directions":1,"delays":[[1.0,1.0]]},{"name":"theshaken","directions":1,"delays":[[1.8,0.1,0.1,0.1,0.1,1.6,0.1,0.1,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.1,0.1]]},{"name":"thesingulo","directions":1,"delays":[[0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1]]},{"name":"thewretchedhive","directions":1,"delays":[[0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.1,0.1,0.1,0.4]]},{"name":"vladssaladbar","directions":1,"delays":[[1.0]]},{"name":"enginechange","directions":1,"delays":[[0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2]]}]} \ No newline at end of file +{ + "version": 1, + "size": { + "x": 64, + "y": 32 + }, + "states": [ + { + "name": "combocafe", + "directions": 1, + "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 + ] + ] + }, + { + "name": "emergencyrumparty", + "directions": 1, + "delays": [ + [ + 1, + 1, + 1, + 5, + 1, + 1, + 1, + 1 + ] + ] + }, + { + "name": "empbarsign", + "directions": 1, + "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, + 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": "empty", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "goose", + "directions": 1, + "delays": [ + [ + 0.5, + 0.5, + 0.5, + 0.5, + 0.5, + 0.5, + 0.5, + 0.5, + 0.5, + 0.5, + 0.5, + 0.5 + ] + ] + }, + { + "name": "honkednloaded", + "directions": 1, + "delays": [ + [ + 0.4, + 1 + ] + ] + }, + { + "name": "maidcafe", + "directions": 1, + "delays": [ + [ + 1, + 0.03, + 0.03, + 0.03, + 0.03, + 0.6, + 0.03, + 0.03, + 2, + 0.03, + 0.03, + 0.03, + 0.03, + 2, + 0.03, + 0.03 + ] + ] + }, + { + "name": "officerbeersky", + "directions": 1, + "delays": [ + [ + 3, + 0.4, + 1.6, + 0.1, + 3.4, + 0.1, + 0.4, + 0.1, + 0.8 + ] + ] + }, + { + "name": "oldcockinn", + "directions": 1, + "delays": [ + [ + 1.8, + 0.1, + 0.1, + 0.6, + 0.8, + 0.6, + 0.8, + 0.6, + 2.4, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "the_lightbulb", + "directions": 1, + "delays": [ + [ + 0.3, + 0.3, + 0.3, + 0.3, + 0.3, + 0.3, + 0.3, + 0.3, + 1.6, + 0.1, + 1.3, + 0.2, + 2, + 0.3 + ] + ] + }, + { + "name": "thealenath", + "directions": 1, + "delays": [ + [ + 1.8, + 0.1, + 0.1, + 0.1, + 0.1, + 1.6, + 0.1, + 0.1, + 0.3, + 0.3, + 0.3, + 0.3, + 0.3, + 0.3, + 0.3, + 0.3, + 0.3, + 0.3, + 0.3, + 0.3, + 0.3, + 0.3, + 0.3, + 0.3, + 0.3, + 0.1, + 0.1 + ] + ] + }, + { + "name": "thecoderbus", + "directions": 1, + "delays": [ + [ + 2.5, + 1.5 + ] + ] + }, + { + "name": "thedrunkcarp", + "directions": 1, + "delays": [ + [ + 0.5, + 0.1, + 0.4, + 1, + 0.5, + 0.3, + 0.1, + 1 + ] + ] + }, + { + "name": "thegreytide", + "directions": 1, + "delays": [ + [ + 0.4, + 1 + ] + ] + }, + { + "name": "theharmbaton", + "directions": 1, + "delays": [ + [ + 3, + 0.4, + 1.6, + 0.1, + 3.4, + 0.1, + 0.4, + 0.1, + 0.8 + ] + ] + }, + { + "name": "thenet", + "directions": 1, + "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, + 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": "theouterspess", + "directions": 1, + "delays": [ + [ + 1, + 1 + ] + ] + }, + { + "name": "thesingulo", + "directions": 1, + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "femboy", + "directions": 1, + "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 + ] + ] + }, + { + "name": "thewretchedhive", + "directions": 1, + "delays": [ + [ + 0.4, + 0.4, + 0.4, + 0.4, + 0.4, + 0.4, + 0.4, + 0.4, + 0.4, + 0.4, + 0.4, + 0.4, + 0.1, + 0.1, + 0.1, + 0.4 + ] + ] + }, + { + "name": "enginechange", + "directions": 1, + "delays": [ + [ + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2 + ] + ] + } + ] +} diff --git a/Resources/Textures/Constructible/Misc/barsign.rsi/robustacafe.png b/Resources/Textures/Constructible/Misc/barsign.rsi/robustacafe.png deleted file mode 100644 index 2e140b29538715097e8cae2510915c2833e23f16..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1334 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 T-~3a+OvvEr>gTe~DWM4f-obix diff --git a/Resources/Textures/Constructible/Misc/barsign.rsi/slipperyshots.png b/Resources/Textures/Constructible/Misc/barsign.rsi/slipperyshots.png deleted file mode 100644 index da0e220066ebe1b99771d30baaf38e7afd5b8419..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 584 zcmV-O0=NB%P)d62A00DGTPE!Ct=GbNc00HDlL_t(Y$K91-j+`(Ig=tT) z9+LkZMmYc*`2a{AL@5{gB4`cz@pAhQ_*g zT^}23`~twujWu=e{}8OP76Mu|63{v?fO$HfByPR{ES<_+Sl$kB;@mL}uVmyzfR_-$ zpYcJ-uou8Z24Iv7{4Io|`aBNUH-PMb`B=pY7#4*pXlB{ugYJeJM-ej6) zYzGl7t9rxDOUmXY13-=q8-N-xmfI{9;L{4Y4GI8axmmL!qN{QH z!`_A41G0N0MClN?0z~?#dI4Y>)k_ti8^DslKj;CQd69t=ck)32j1XU<_QXmt!!F{h zd3IOgKFKR!HIVcGc=iA;&3^%u6riT_W}6S50P+1uKo2!l&CURJ1YV*i#mCY{8MbIv zZVCPHXmE~-^NV?~JHkyB@L(upCxnhj5Lojiz&!zY%*6+SX~4d*4g@JJg||zGoLT@> zVH-eR2El;Quq@odU>AV$N>YQ`1>EXHvW2nO!t$I*-=2xzoyzaNJU?6CjbH!3r}Z~h Wxa&IaaX*#-0000 z003fuzjqh_7!P#MnvO-+pcftmXmAJ(+~|Ww6AXq5fDHh404xK*9so}OegR-F0KWl{ z20$(VHvo79z*_(i07}RW9q2VoQdsZ?;4vs+0Dy-AygfIjbbdNd%;j6?A1mL_dqW%P zMv%@8Zp*2qtOEgqk8cSg2}6)^`nW#F?@rv?qvx*PKHO^fk|IV3u#)P|q6ddsf!QEv{Vm^c26EP+(v^5dy9C6UrPkQol@mtaYVG z?zEY{JU57B>No>g1ks5LhAMmUfxP+%cKA)t`sFi_P2j21_Ov?N`J*CPDAp#-K8BRs6zAzNf(RK$K|Ga#7d{NS25jLgH*yW53v%Nu$ASOp5L^R5w}9=yCr_ztY!RgE?FJ-k`!x`I(g@ z5+#b#i1}jc2^UPUICl<}BqBQhxiY*Iv#nLWds@j?PGVPL?xk`rqenWher*ZKY8q<} zYbSj}>gr?qinTaJ#9k-+GhzgXQHN|1ca#%T!gLjoy6pp5OncUlMgxjm$Tck3OtnuN zh!ZMu^jyWy%~Y_~4{B#Shc57W=1kw6dO_daOu+cM__HTgJgV`OM3Os>97tYS8l9CF zBfRouRX=_~{_rJA7v@No+6HecUq^;oI@6S+t1`R<4+tIdnWnz4gXjX5M3Sn?bdrRI=do~M*$*R=$u_niEZkuJiNBC0qG}yl)%~(}&%c9un zXxAfxv3yQDYp&ZFPb}UouI}U42NA5_YwTGMtUVI3x7F-NW08i>pUd`0LNrU1o>j^Z zvo2!uq--0eMfDMD3ss^3V&HDuEj6pkHni&C;A(;^PA<4kAk=jIUWTve!)6V~Pit>7 zvMQ$Fzk!7?sx4RZ7}eO-&QsW4hF8es=KfNGLv}zQ`WQ=LMa7m>QV3-Oo)?(A=>w&N6s zLdp`NEW5b0HYeGMlc8{%NEr(+Jrs{b6)(zxp9+fd<@PEK;(39enUG;!h9TGRMJ zR8e0^XiMX*{;=uCKK^AtjMCIa+tXB3%Lk^%A*AseZ#C0gn>MftmS~0Oun)>9T*J%n z>O)N6$MJ~U4yHx@QrnsQ6gN&`{OmT_`k~XkTGxGb v>s^cdo;jbC4V7wrQL#VlFzsJzf=OJg$RRHHcmx;y8bE+gu=n*f^z?rK3TQ1O diff --git a/Resources/Textures/Constructible/Misc/barsign.rsi/theadminbus.png b/Resources/Textures/Constructible/Misc/barsign.rsi/theadminbus.png deleted file mode 100644 index 08787919ba9212cbb1e5d8cf7d148b7c78b69628..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 723 zcmV;^0xbQBP)6ciL6A0I3%EH5uFKtMo2K|xGROi)lzR8&+|RaI72R$5wGTU%RPTwGmU zU0z;ZUteEfU|?cmVq;@tWo2b%W@cw+XJ}|>X=!O{YHDk1Yiw+6ZEbCDZ*OpLaB*>Q zgoK34%gg`&|7}&hjsO4v0d!JMQvg8b*k%9#0t`t+K~z}7?N^IdgD?zb1zcpf2Ls0* zY-7g$|0kNJEmUEOJdU2Dm$N>yrnybiP(1G+zW}pVh$cwp8|eOQ9Q|ywTGO*ytv4wn zBkc0S>3qJNkB2-z@Nbts=Y%r95oB*`{Ov;F>XJf4bEaVF*RMWHmf z7RB{;D_sO)41LdE_C_#b4U-g%uxhmv02_O# zR`|*tofM4Fwxo?!_?QXVLRD~WAE&rafPxQYgr5DL+Yfc1bnemE!ydlIOGLdSua zkbqrm(*uZ|JYcq4h}yIXv?FV1pax$69QtAz5XraSW-r^){Nfc(wu0QdRkLn{>}g&AMo^`1GtxYgs03`2YWQT8mKCW``VqTpM3K8`C`?0 zvF@X>JAQqu{hYkHj^psvRTb}^9lUPPvsi)enWKPfq0N`y4d2%tzCHVAj@j;+XT`sN z=YRb*`HMuZ+3e*%rcaq)sCho{%b!n5|AmhRh8$SUEAV*lLG6gP+5^>x!{s%i7)|#D zO~{z2ox|+Z9g|q0@!#{{K7o}9^AGUc5L4p4!8L=?;omOyZ>N~u8b7%&=g0|V>0#88 zo2$g|X#HGA-q5T`my|uH8?V{E?uHV-g9U^90gqegukEq z38MUu*;5ah_y^AXqWkeV*Q8T#mV9#B`OCC@$#JLVROUrRyH_j2m_STornd9CDy zCiV~JqCU%mzaBqps`+tu?5y~$5(ZMeSJGy$*7$zEkNv}K=L)a(<>kHmPks6`Lz`FE z{l%0%|M&mwA29w|CorpIh3H|ZahuWRg zq77F-E4W1TAEr(Tj&33OixUF_>bW``wsg9e;e(-u&;RaJEHE> zFS}{;_w4I`s=oex^3Rj6u?qeBzsBAn;QsMXldpf@_~*&jS{?h!TKUudaoB~5>l=PE r-;qy1SjRX|{=rYe1jKb8);-~8bG#^aKb*-El$AYQ{an^LB{Ts5MSSB@ diff --git a/Resources/Textures/Constructible/Misc/barsign.rsi/thecavern.png b/Resources/Textures/Constructible/Misc/barsign.rsi/thecavern.png deleted file mode 100644 index cf650a01bfb9c18256e5cd6d90ff2cf8fa5ad8d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2669 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 X_+1OcB-WDg<3J@0001ZP)t-s00000 z001=t0678xJOThf0su+^0De|AgHAAnPcVf~F@{huhEOqxQ89^9F^W<$j8igDnOr!UTR59tH=JEKonAPeUOAs%I-y`X zqG3CvVmqZ`JlxoX_)D!k00001bW%=J06^y0W&i*K!%0LzRCwC$oDF;0AQXjFbhr=e z>blfAJJ;Hc|Njq{kPl5ljD!n;aE@(hcs$&2C6a{q$!rEeP~ci9#o9{imWA@|1^k)+ z@$33?`dY8QeA`NW-|co!$^O^x)1TAfB}w-C?DuK=<7bj2=j1KPb+y6ty`BH1`g<<)emuT^e4MYfV(_P0iosgJpK2vONihxOj=X`` z{aFKd8#yojnP;t3I}o*BrvaY-a6adQc3_fzjRv@Mr)|vHpdFZ|U)cbc@8hz({s3fk zS$ks#(l1yhUuikSA5#3Zfv&+S-(9cF{}k2b4k-MBo zfQCPy_!^&pW(Qg$K(hmZ#76?HCXjQ*c~Dtox`DfNV+SJgBY`vtaA-@(R&Eh&MI2|Fym`AzzjRU z3_IXs{Gx%zyi+gKvrugZ8uMPgP|t!jf4K3r?#R~fYwO?9oua>56VPc!wWbiOAFFbv zt8%k!p*>%1Uv_IHm95BMRlyHI5ClQs1HlJ^4+I~GD-rO4)8_-L8=52WeKz8|XA za^vxRH1X48cP>WZ1M_8y@%TQX_#*Z9CD4?wQ~R^+VhC8~`|QRqYH#v^rhJ{!U#&md z=lkr&7yW35DPO1dmkT`h`98bx?@XWx9;Wu|b->^FNT9m}4(01Q{6aY5`>e(guUOy3E7q6d)uZ!1D$k)Z`C*jZkq_t8E-&`ttl!qbpIFA^9r z-$#_dc=bG$bW80suJz06H`)JOThf0suiC21QpnMOQjVH5y2Z z07*eON&)~%M>cXE+^bI2~zGN@}8CYfvd`Q7UUwDr-|KYgH?2SS@RyUu|G8ZDTTR zZc}Y@RBfwaZm(o-bvkc&J#dR#a*0K9k4STyU~`^fb*yH8lvaP2SAUpSf3IMFwPJw( zfPunvfx~rzOgDnWb%dk@g-92PcwLcKKb~4kpIugK~zY`-IZx`f-n$FvqmU%oj)8p@}T z?pR${fe@r4q<_3lS1QM|wvGUhsrUo{rTZ8c>dZ6*NQ2R_@stV0B%9NMq6*ONzK=yI z4Yd*4q*hxMN>UX%7l1|UOrzOkf$Yp^#VZz*Dg&lK>Qp+2rCg1GBL%pV66)pLXGiL} wDTaDt-(5MuHyW|qLsq`V$-L4;oj9hd^6Z#Q*>R07*qoM6N<$g6>W@$p8QV From babb5ec69d5ef9d5e9c8a87d8586f41fa432fb2c Mon Sep 17 00:00:00 2001 From: Swept Date: Sat, 22 Aug 2020 17:20:02 -0700 Subject: [PATCH 002/103] Removes old/cruddy bar signs --- .../Entities/Constructible/Walls/bar_sign.yml | 6 +- Resources/Prototypes/bar_signs.yml | 87 +----------------- .../Misc/barsign.rsi/honkednloaded.png | Bin 730 -> 0 bytes .../Constructible/Misc/barsign.rsi/meta.json | 67 ++++++-------- .../Misc/barsign.rsi/oldcockinn.png | Bin 1324 -> 0 bytes .../Misc/barsign.rsi/robustacafe.png | Bin 0 -> 1334 bytes .../Misc/barsign.rsi/thegreytide.png | Bin 568 -> 0 bytes 7 files changed, 34 insertions(+), 126 deletions(-) delete mode 100644 Resources/Textures/Constructible/Misc/barsign.rsi/honkednloaded.png delete mode 100644 Resources/Textures/Constructible/Misc/barsign.rsi/oldcockinn.png create mode 100644 Resources/Textures/Constructible/Misc/barsign.rsi/robustacafe.png delete mode 100644 Resources/Textures/Constructible/Misc/barsign.rsi/thegreytide.png diff --git a/Resources/Prototypes/Entities/Constructible/Walls/bar_sign.yml b/Resources/Prototypes/Entities/Constructible/Walls/bar_sign.yml index 0c3aeb82aa..46c4187b07 100644 --- a/Resources/Prototypes/Entities/Constructible/Walls/bar_sign.yml +++ b/Resources/Prototypes/Entities/Constructible/Walls/bar_sign.yml @@ -17,9 +17,9 @@ - type: entity - id: BarSignMalteseFalcon - name: Maltese Falcon + id: BarSignEngineChange + name: The Engine Change parent: BarSign components: - type: BarSign - current: MalteseFalcon + current: EngineChange diff --git a/Resources/Prototypes/bar_signs.yml b/Resources/Prototypes/bar_signs.yml index 61854e558f..b7986002b4 100644 --- a/Resources/Prototypes/bar_signs.yml +++ b/Resources/Prototypes/bar_signs.yml @@ -1,15 +1,3 @@ -- type: barSign - id: MalteseFalcon - name: "Maltese Falcon" - icon: "maltesefalcon" - description: "The Maltese Falcon, Space Bar and Grill." - -- type: barSign - id: TheBark - name: "The Bark" - icon: "thebark" - description: "Ian's bar of choice." - - type: barSign id: Harmbaton name: "The Harmbaton" @@ -28,72 +16,24 @@ icon: "thedrunkcarp" description: "Don't drink and swim." -- type: barSign - id: ScotchServinWill - name: "Scotch Servin Willy's" - icon: "scotchservinwill" - description: "Willy sure moved up in the world from clown to bartender." - - type: barSign id: OfficerBeersky name: "Officer Beersky's" icon: "officerbeersky" description: "Man eat a dong, these drinks are great." -- type: barSign - id: TheCavern - name: "The Cavern" - icon: "thecavern" - description: "Fine drinks while listening to some fine tunes." - - type: barSign id: TheOuterSpess name: "The Outer Spess" icon: "theouterspess" description: "This bar isn't actually located in outer space." -- type: barSign - id: SlipperyShots - name: "Slippery Shots" - icon: "slipperyshots" - description: "Slippery slope to drunkeness with our shots!" - -- type: barSign - id: TheGreyTide - name: "The Grey Tide" - icon: "thegreytide" - description: "Abandon your toolboxing ways and enjoy a lazy beer!" - -- type: barSign - id: HonkednLoaded - name: "Honked 'n' Loaded" - icon: "honkednloaded" - description: "Honk." - -- type: barSign - id: TheNest - name: "The Nest" - icon: "thenest" - description: "A good place to retire for a drink after a long night of crime fighting." - - type: barSign id: TheCoderbus name: "The Coderbus" icon: "thecoderbus" description: "A very controversial bar known for its wide variety of constantly-changing drinks." -- type: barSign - id: TheAdminbus - name: "The Adminbus" - icon: "theadminbus" - description: "An establishment visited mainly by space-judges. It isn't bombed nearly as much as court hearings." - -- type: barSign - id: OldCockInn - name: "The Old Cock Inn" - icon: "oldcockinn" - description: "Something about this sign fills you with despair." - - type: barSign id: TheWretchedHive name: "The Wretched Hive" @@ -118,18 +58,6 @@ icon: "combocafe" description: "Renowned system-wide for their utterly uncreative drink combinations." -- type: barSign - id: VladsSaladBar - name: "Vlad's Salad Bar" - icon: "vladssaladbar" - description: "Under new management. Vlad was always a bit too trigger happy with that shotgun." - -- type: barSign - id: TheShaken - name: "The Shaken" - icon: "theshaken" - description: "This establishment does not serve stirred drinks." - - type: barSign id: TheAleNath name: "The Ale' Nath" @@ -137,10 +65,10 @@ description: "All right, buddy. I think you've had EI NATH. Time to get a cab." - type: barSign - id: TheAlohaAnackbar - name: "The Aloha Snackbar" - icon: "alohasnackbar" - description: "A tasteful, inoffensive tiki bar sign." + id: TheFemboyBar + name: "Femboy Hooters" + icon: "femboy" + description: "There's something off about the waitresses, you just can't tell what..." - type: barSign id: TheNet @@ -181,13 +109,6 @@ rename_area: false hidden: true -- type: barSign - id: SyndiBarSign - name: "Syndi Cat" - icon: "syndibarsign" - description: "Syndicate or die." - hidden: true - - type: barSign id: SignOff name: "" diff --git a/Resources/Textures/Constructible/Misc/barsign.rsi/honkednloaded.png b/Resources/Textures/Constructible/Misc/barsign.rsi/honkednloaded.png deleted file mode 100644 index 15b94d57733d37002ff4106139c643d467ad51d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 730 zcmV<00ww*4P)R15u03ZJV0RLcM|Ahx_K|Kf`O|Nk=W zvQ_{900DGTPE!Ct=GbNc00L4;L_t(o!|j*bdZZu>fa@5+sG;)yFS|LR*s3$y*>Crv z5eL*lesd~*eEiCPAnk2=(|ousxH!`XMIxr;Q;_x^Ug2Jlji^dgEs8|1InH1$q@jNEjq){wgbQ*C-BI6)z5u%1VCh~ z&PX8;BFTw7qQJdALc6sOK%@looJ^zr3}8q56oBYc20|3OGAPlQ5%Bx#sUQR<$Kb!$nX~;C5hLU-jdun}p5#VnWBE7QsU#rm-fN7e( zjgA2JM1uS4=nBB3QV*^Hcz#ubYXGJ;i);us0FvHjWodc_u%g4cl@ia7JYPoBK0tE{ z(D!-fqwfy@f+d+0x)Op?b2Q}@x{s+#QKz2(G>yl(o{e2ILC^a0V}4{N=yzSP20E4` z^eV&;d*P3d^oa5XJsbjPQ^j8JO3_gOv48-yM*vF!F7*dX(P6c@V+(YdQQ#RsIhsw~ z%^63``6vx5fO2>pa&@`m`CUHQ51d&*BxcO9eF0#{0wOVDjBp0ftZ)4#2Am+q_6)#$ zUj7NyG2k}H8Q_H-(cL|vN4-|xDhpoO6aM2}@sGc3?tfSOewDKP0eGBBoh~YaasU7T M07*qoM6N<$f&j}tZU6uP diff --git a/Resources/Textures/Constructible/Misc/barsign.rsi/meta.json b/Resources/Textures/Constructible/Misc/barsign.rsi/meta.json index c53f83374b..c3febf76c0 100644 --- a/Resources/Textures/Constructible/Misc/barsign.rsi/meta.json +++ b/Resources/Textures/Constructible/Misc/barsign.rsi/meta.json @@ -134,16 +134,6 @@ ] ] }, - { - "name": "honkednloaded", - "directions": 1, - "delays": [ - [ - 0.4, - 1 - ] - ] - }, { "name": "maidcafe", "directions": 1, @@ -185,26 +175,6 @@ ] ] }, - { - "name": "oldcockinn", - "directions": 1, - "delays": [ - [ - 1.8, - 0.1, - 0.1, - 0.6, - 0.8, - 0.6, - 0.8, - 0.6, - 2.4, - 0.1, - 0.1, - 0.1 - ] - ] - }, { "name": "the_lightbulb", "directions": 1, @@ -288,16 +258,6 @@ ] ] }, - { - "name": "thegreytide", - "directions": 1, - "delays": [ - [ - 0.4, - 1 - ] - ] - }, { "name": "theharmbaton", "directions": 1, @@ -409,6 +369,33 @@ ] ] }, + { + "name": "robustacafe", + "directions": 1, + "delays": [ + [ + 1.8, + 0.1, + 0.1, + 0.1, + 0.1, + 1.6, + 0.1, + 0.1, + 0.6, + 0.6, + 0.6, + 0.6, + 0.6, + 0.6, + 0.6, + 0.6, + 0.6, + 0.1, + 0.1 + ] + ] + }, { "name": "femboy", "directions": 1, diff --git a/Resources/Textures/Constructible/Misc/barsign.rsi/oldcockinn.png b/Resources/Textures/Constructible/Misc/barsign.rsi/oldcockinn.png deleted file mode 100644 index 537d07a1e619f41ae4099d500caf47e394e715a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1324 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 Date: Sun, 23 Aug 2020 11:50:31 -0700 Subject: [PATCH 003/103] Adds the emprah bar sign --- .../Entities/Constructible/Walls/bar_sign.yml | 1 - .../Constructible/Misc/barsign.rsi/emprah.png | Bin 0 -> 2880 bytes .../Constructible/Misc/barsign.rsi/meta.json | 13 +++++++++++++ 3 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 Resources/Textures/Constructible/Misc/barsign.rsi/emprah.png diff --git a/Resources/Prototypes/Entities/Constructible/Walls/bar_sign.yml b/Resources/Prototypes/Entities/Constructible/Walls/bar_sign.yml index 46c4187b07..b9cc1cd9cc 100644 --- a/Resources/Prototypes/Entities/Constructible/Walls/bar_sign.yml +++ b/Resources/Prototypes/Entities/Constructible/Walls/bar_sign.yml @@ -15,7 +15,6 @@ - type: PowerReceiver - type: BarSign - - type: entity id: BarSignEngineChange name: The Engine Change diff --git a/Resources/Textures/Constructible/Misc/barsign.rsi/emprah.png b/Resources/Textures/Constructible/Misc/barsign.rsi/emprah.png new file mode 100644 index 0000000000000000000000000000000000000000..eff93f6a5fce8fa2dc9d61cf6d9eb3eda650d236 GIT binary patch literal 2880 zcmV-G3%~Si%iay{=Td8WPP^F0J`dGNl3wM!j;LROR}zteCbWX6?{W@bdfwHchP_j6`%mE6ol^r zNjFvPa1$1Tv7G;F-vtYLe&lT8x zEW(3-E;Qs&7}pMmkXxFEH6yAXM^m~lMP=+rnR^-&5Vt9sZT@H70RH)QfDeyGSluI8 zs9I|*%9>dh%0{3a8G-#n3a1Mi-?~1<{rUdm~)XC6Vz2hDH^Z zv`csnaJr}wMFt{IjB0#v_{p5P_9LM1uFok4iJYa%AsE9G?A8 z@jvSZaCk)VuNb(v{$iH}Pn0hK%N7e1${JZ;Ff*^iEjVYPz?Kc8l6-}HWnL&F*r z)Y59mq)2Fzl|!qj%LCIwZ7Ip`bsd3ns4-U3C4Yas?}$ z?v0g|F_0-*z-;qBsR8VGpa<(89c*~-iS1)}?B)E_xK0}DK*;b$aM;x*Pz-=Vpiv4m zy4oaeTyb24&- zVCe76O5D34gWK2m_|5hLHtjCqbkRKAnU=WaA|Kz`kioMbmGJoX0wS$>PHM^+FuVNE zIs(K*)_NkZaXhEl(h1()IT)e4O<*vmxa|`?lHs@$mH zAlnYK`GQy1(5Pl8Y{oxxHYbH$O=k6Uw@X~m<)E!#{$7-k+(wj1Nfvx5kSK?WS1LUp z2jv9mq!6VlF@h~2jK3@HTMU7b0^oaQ^}ll2MrD8imW!+A|Tq&c#66rxMI9V}~;CPJrZ+5y_F zucpY_w?A5OWHecOrTK+QBjBQ!vtU3``tBzWU%v#ev}+{Vw(#Z!P~# z836hEW+|yJ#SpczMErN7{zU)S5%7u|$|>wVZkWln34C}=p}$Yz$SI9O!wQEukOBry zC{Cxymy)t*rA2CL%Gb82Rt(L`C0fxTfsW+@Xgu?Fz;kaU|C1U(qW}(Eqd@yKAcyY={D~VQY z$|3+6Mr<(j+w^f6+Ybl0{bHXL{P5N>Zoi_}h`Fc3;Q(`ybsurM_xL*{oXABuo>Mq7 z5{}0N%)e?a|L4>NG(wWN{Y(Z!LZ`rog2L^4Lin!B7C%-7`Y&{_>u7|*+|0MlsNh5X zngsdG&LXz#Gr2V>o>n>ee~Jk%?{(P#f{>zr%~z6l5Q*`6L1c?Mj*SO?v@x6b&U^cP zzW(rqQ8o~fuuah_{?Dla)VhGA_C`d}@88~{?J?dW!{2uVEtw-%{gg(Y^LoL#HYuJI zLj|CYj6|*|javXX9V6dOE`vAPq)FX~2t{aPsA&KG$;)GmCfD@2xbeaY^v4Jg2a8FN z-75a)L=aeu49&WZR+6dyXf^ z@Y=zU_xGs|LaE%TF~zlir6dFtLc5jB#${uIumMU;hvsA&IGYp~XxesUH~{ zAqE)<9Tb^v#j%!}Dh1clRMNWYte}~8Ofr6}N!SA!9ch8D^r!Ll%hGjk{L2R=eECuz z4{gqK|ErgKxZ{&4Y}y~-mX#CJx}R(jvJ_XfCiwTB

NGi_Hg3!1lZMO1y5@b~|`rLk6!L zHfiSXcb3_ZF7B4Nrq|_y5>aob!vSQ69k(qlPzVe{oh_PDAt=d@CmF$H>E2A+TTL7T zI2G8w|0+}5dE~VM5Nb9Oq8A4O+_b{Ot4BgyyR0J0dp_Q6&PeMu0NIukpXz4g`4pP>8FS z8!-m<=-1C)Eg)Ak836rvU7taSpZ~jv{vL-BQR?-_+1I~}o-N4iW+ z;AB2xk?tP~F-j?*%^HTgjH34qh8Q>z;#5K5yX({V>#h>F4-AFu8dkQO!>A*6oTH~A zK8uj+G~?%sCRI3oa9bhs7*Pb4t4Ie5Z#l;_CH-CKBj3I3~S)h{7$B04@Pi|+tohpo~J`140 zFqlrAJAwat1PCh~{_iQ_w63;Aork})g0q2fpKHw|KEACrCY%wh8~`xYym;qNh{_ql z*dk)r5cf|UCw`Z%^o!9+>$Btr!UkUk_1skXGKRiNsr{lQ{!(SSU%IrK8qKekm%$g4 zzYOZV+1H%AQ+`h6U2oz64?+P}uv7WoqDr5}Pgjj6ssce^Vt-U2L8Ep|u@X2_{ugM0 e7HD1&fd2vzts5^<^Dkfk0000 Date: Sun, 23 Aug 2020 12:22:17 -0700 Subject: [PATCH 004/103] Removed femboy barsign --- Resources/Prototypes/bar_signs.yml | 6 ---- .../Constructible/Misc/barsign.rsi/femboy.png | Bin 937 -> 0 bytes .../Constructible/Misc/barsign.rsi/meta.json | 34 ------------------ 3 files changed, 40 deletions(-) delete mode 100644 Resources/Textures/Constructible/Misc/barsign.rsi/femboy.png diff --git a/Resources/Prototypes/bar_signs.yml b/Resources/Prototypes/bar_signs.yml index b7986002b4..ab681c9ff8 100644 --- a/Resources/Prototypes/bar_signs.yml +++ b/Resources/Prototypes/bar_signs.yml @@ -64,12 +64,6 @@ icon: "thealenath" description: "All right, buddy. I think you've had EI NATH. Time to get a cab." -- type: barSign - id: TheFemboyBar - name: "Femboy Hooters" - icon: "femboy" - description: "There's something off about the waitresses, you just can't tell what..." - - type: barSign id: TheNet name: "The Net" diff --git a/Resources/Textures/Constructible/Misc/barsign.rsi/femboy.png b/Resources/Textures/Constructible/Misc/barsign.rsi/femboy.png deleted file mode 100644 index 1c44cc2317bfa496afed0a651a2188d46bcb6605..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 937 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5992B`&GO$wiq3C7Jno3=9=> zg2M`mO22;zF8KKMiI%sn*10q1gExd4Tr__0Nawtd=1GR4Gd?>kjDw6X8+$d#BrC6b zH0j8s5QSjR&TeDX%_}5Mm^^vpqwRIZmvv+BnTA6vEjy!q@W+lz0=X6#$5 zIsdb^(MJXbrahi6jv*Cu-bOe29ySork!G07VAc_F@EpswT@F)tSFP)xE7CGILA%m^ zde`obppyRLtWWayJ#FW5Sj>y#s<`&tfBk#bJug33Fh1{Rva0=8V#ZqXt48C)zC8_k z@?3YW&(B-yF#9}rj)fPu$@9nVPu7@U`}yHm#p5}W$1l#PlWG6$zT%WW*Wrgbe>nB8 zeQ~@c(Dz~4<>$+p-q(xqT-&{`|NFTMFF%*JKHGg@=E3Uw-_8D92l9g(=Zc=Yo{`Gv zTbCNZ^G}Rh@A_{h?texfxBvZ9`l!B!DYN+*lUPkz)7zTR1E)+w9zSQ2Uhg+UaN(t0 zQ&~lRW`>>r{``yfy`_=TFF$QQRNY=Bum1FuLg16hOycZclcv1-^wN}zYjS#e9k1vQ z}|+HKa#O%2TVSPQE8#2Mzd{77f~%=nD?4Eqdzohs$6=c|8s**(a=p7B3_ z|E-+4QDkjPE5Zy$%VDUWu zke{Ev3k%hS+XXy5ecyitcY+;0uA>>56=~JJiz##X@_k)cZ0vvpUoi0 zf&C!1cjMXnub(hW|FMO6DgZ2X Date: Sun, 23 Aug 2020 12:23:46 -0700 Subject: [PATCH 005/103] Readded Maltese Falcon --- Resources/Prototypes/bar_signs.yml | 6 ++++++ .../Misc/barsign.rsi/maltesefalcon.png | Bin 0 -> 1047 bytes .../Constructible/Misc/barsign.rsi/meta.json | 16 ++++++++++++++++ 3 files changed, 22 insertions(+) create mode 100644 Resources/Textures/Constructible/Misc/barsign.rsi/maltesefalcon.png diff --git a/Resources/Prototypes/bar_signs.yml b/Resources/Prototypes/bar_signs.yml index ab681c9ff8..98d31ba18f 100644 --- a/Resources/Prototypes/bar_signs.yml +++ b/Resources/Prototypes/bar_signs.yml @@ -76,6 +76,12 @@ icon: "maidcafe" description: "Welcome back, master!" +- type: barSign + id: MalteseFalcon + name: "Maltese Falcon" + icon: "maltesefalcon" + description: "Welcome to the Maltese Falcon Bar & Grill!" + - type: barSign id: TheLightbulb name: "The Lightbulb" diff --git a/Resources/Textures/Constructible/Misc/barsign.rsi/maltesefalcon.png b/Resources/Textures/Constructible/Misc/barsign.rsi/maltesefalcon.png new file mode 100644 index 0000000000000000000000000000000000000000..a71587ec229b89d13338e42953381251eab92170 GIT binary patch literal 1047 zcmeAS@N?(olHy`uVBq!ia0vp^2Y@(%gBeKH$o1X^QpN#3A+A9B|IbrE#4xo$-pbp? zG|Pd3!KHLr@S>^+tMzexYZ5dR`aKMmWxA|t2tB?f0;IBp{S#0db4ie2FoSX0sxzt0 zK;8sT7srr_TW_O#t6nMa%oV;6we8#A`DH4N|2$rEbsoFxowM}o?@5Olg}#*h{_(^9 zt;;v@j~8Em@hrRaqN?vb*P8G9`16$|T??L?P2ha^`|-E0wte^G>w307PG7kH`(cLs z&UThM&xQx@of$eVd{315vvSIT2W<9+5_4GoweObM`q?xg7+`JT8h z^4Imp!3?+WTG`}wFtX2By!*zoJNFe69{tRIdsF4Wf%!~#9&CsO%1G=vthz1Y&@#mv z3JDJ^toWr_vOYc+Y!GKz_^eIvrEo@}Shd%`d--P>_DoZyX^H&NE&R?>v0u;jAUCoo}sX7nm+H+I50a z>c>mFZ}*c0%gGFrn}V_gOcX>DtOP zO6#85!FHMB%N8m9YL+A=3t{8iIm^F`H5UE3!nh*gAiJK%&xLyB8+A%%i|#6suXqvP zYoDv~f{nFY?@-C>n5_983*_q89X5!ZSoI`V{(XP>?*kii6UsTSKGI+9u;$RUV^iJD zx9{bM#>~Is z&m2_$z54wlrnP&u!0w)FkJ4p5;*Y%b`&xU+Ev#4nUSs(0|J*FA&hBllpSnrxt?i%L zrrGDkw|uQ#xAOJxn3~ku`Q7W+y)XWF^=qx(zFqsy9}U0$edmu?zwE^0WA8tIv>K$S z6q};^E>ka5?^}RhZ~k(>{l9)XRoh*d$G_z{^VwOZwg375{%839^MLV}+Oq#!zy1{$ zs_5HyUTwkJ_n$d6UjH^?5&2px$TaKMJ`qOK+V~u{EnjK_nWTR0lVH@XjW_8u{Zbpr z#Pw_61-E6(-+Sk#Wc}KA!*0RS_uOHMvbFJfY*W6}o~(6ny)Ul27^q2wQM5Mx)Axq1 zefod9-#q>G?{r;|8I!*<&^GNqPxCH+pRM|var%zT8y|}bLxEY9!PC{xWt~$(696DZ B2|oY; literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Misc/barsign.rsi/meta.json b/Resources/Textures/Constructible/Misc/barsign.rsi/meta.json index 3e20eec60a..a3250248d1 100644 --- a/Resources/Textures/Constructible/Misc/barsign.rsi/meta.json +++ b/Resources/Textures/Constructible/Misc/barsign.rsi/meta.json @@ -409,6 +409,22 @@ ] ] }, + { + "name": "maltesefalcon", + "directions": 1, + "delays": [ + [ + 3.8, + 0.4, + 1.6, + 0.1, + 5.6, + 0.1, + 0.4, + 0.1 + ] + ] + }, { "name": "thewretchedhive", "directions": 1, From 1f62047e413dea763196a566dec52c65a8c513c2 Mon Sep 17 00:00:00 2001 From: Swept Date: Sun, 23 Aug 2020 12:44:51 -0700 Subject: [PATCH 006/103] Adds The Wiggle Room --- Resources/Prototypes/bar_signs.yml | 8 +++++++- .../Misc/barsign.rsi/thewiggleroom.png | Bin 0 -> 5029 bytes 2 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 Resources/Textures/Constructible/Misc/barsign.rsi/thewiggleroom.png diff --git a/Resources/Prototypes/bar_signs.yml b/Resources/Prototypes/bar_signs.yml index 98d31ba18f..53b3b22eb5 100644 --- a/Resources/Prototypes/bar_signs.yml +++ b/Resources/Prototypes/bar_signs.yml @@ -80,7 +80,13 @@ id: MalteseFalcon name: "Maltese Falcon" icon: "maltesefalcon" - description: "Welcome to the Maltese Falcon Bar & Grill!" + description: "Play it again, sam." + +- type: barSign + id: WiggleRoom + name: "The Wiggle Roomm" + icon: "thewiggleroom" + description: "MoMMIs got moves." - type: barSign id: TheLightbulb diff --git a/Resources/Textures/Constructible/Misc/barsign.rsi/thewiggleroom.png b/Resources/Textures/Constructible/Misc/barsign.rsi/thewiggleroom.png new file mode 100644 index 0000000000000000000000000000000000000000..107c73d6d458fe662d901a796d4903647b1a897f GIT binary patch literal 5029 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 literal 0 HcmV?d00001 From 16f520f1b97ab7b6ffedc2dbd90ef4eb6b116432 Mon Sep 17 00:00:00 2001 From: Swept Date: Sun, 23 Aug 2020 12:58:03 -0700 Subject: [PATCH 007/103] Adds LV-426 and The Sun --- Resources/Prototypes/bar_signs.yml | 12 ++++++ .../Constructible/Misc/barsign.rsi/LV426.png | Bin 0 -> 1995 bytes .../Constructible/Misc/barsign.rsi/meta.json | 38 ++++++++++++++++++ .../Constructible/Misc/barsign.rsi/thesun.png | Bin 0 -> 8706 bytes 4 files changed, 50 insertions(+) create mode 100644 Resources/Textures/Constructible/Misc/barsign.rsi/LV426.png create mode 100644 Resources/Textures/Constructible/Misc/barsign.rsi/thesun.png diff --git a/Resources/Prototypes/bar_signs.yml b/Resources/Prototypes/bar_signs.yml index 53b3b22eb5..55921743e9 100644 --- a/Resources/Prototypes/bar_signs.yml +++ b/Resources/Prototypes/bar_signs.yml @@ -82,6 +82,18 @@ icon: "maltesefalcon" description: "Play it again, sam." +- type: barSign + id: TheSun + name: "The Sun" + icon: "thesun" + description: "Ironically bright for such a shady bar." + +- type: barSign + id: LV426 + name: "LV-426" + icon: "lv426" + description: "Drinking with fancy facemasks is clearly more important than going to medbay." + - type: barSign id: WiggleRoom name: "The Wiggle Roomm" diff --git a/Resources/Textures/Constructible/Misc/barsign.rsi/LV426.png b/Resources/Textures/Constructible/Misc/barsign.rsi/LV426.png new file mode 100644 index 0000000000000000000000000000000000000000..811a71320b3113da2b806dc615652d007ff2f38f GIT binary patch literal 1995 zcmV;+2Q>JJP)`ft+c!fgo2ugpowhp(E>lv;47%{l}KVVMEyZR3_pkoh$tFCf?^_x zkAD(1F`%MR6M_$dCdf}QTPys^+%pr_AH84%f^0Sv>1kP-Z1z})1*YC$c1yCxY_1Dj{N?;0qSg{WRw}s;hU=Ktf z#AG0CV$?w>0W_ro5f}jv&*_oLFlzJPaGe97AO>?#1ypIS1sP9xTomrb;ZJ{8* z&~-2x1!D%Rm0EkFdwd1r0X5f1?BBYg*!Nhx?Db~nrWDLzAVjcnUP0`G!ELi0e(d=Q zAd2X`?c==WQA-D;vc^uYf@M_bf24d1VEMHS+TJPT-$oD3SfM$1%NP5oKuXm#?yT)W zm7t?frTDpbEOaq;6|8LdDJ=F8?*eEhjfbacShBDYF-gYrOBUef^ce_h`YKr6@X}CV zAMpwxr+VWKkWMhk*HWAKW>xxy3jcO+9eh+ zCd-d_)_~-m=sYs{=x$*^KLE`sW*ZHUeZ(t3$GI*jRWhhi2SX5`$EtC*^8&PfR$x~L zK)ktjYd;B&Fo{pljLX6B=AZanKv18b3`fwW;8g-B@U)9L*yG`_k9Y+**d-v+kp`=a zTGx})XK{Da?b!0kZeYxWY=&;Yi3*dJLqT5cqz94I&Il|8{ zD?4c`qLbY-fP?J6ti(m|-~v46A4hCqxjbY*+B(l3Z|3!@6{w331F~nj#c$?_qP{Ql=DU$-~DtPQITTNf>}7DMKP<6;H72vVD)=H z0?BsNrn`}0_w_EM7PdH|I*_S-%5bA%aB$!+h&^C zJ1nhkb}R(}t5={t(~>pa;@6EJsaSR%Hb%+LA$~g-q)P&eC{UklvH7w5HHN`HCYBbjW$Q;#)6kH;~;=|=2K%*6X!zsIMCyC7d|2cr~f zY;0j>RwQo*S|q#K>I36bAc%72tBhEk*c+ti@n?5@w((c?NysuSLA)JhmTZKGCM@<*@n?`3<@Sxg z4)LC|NLNp?u6OP}f>=hyXU96xE7Snh(_uvHU?{2-NtH5qku`B5Io+4gVcaR?mBw&h z*U`B)%02SAL1oH~8(2PHK43SvM3AWnrV=PD#}b6aK5G8=G$NuE9SfRbX?b_U9Be!E zCwiyO&Kuh=*A!>wX5duE6==KyIImUl!snI2K(4ROX8V};c*#Hi2jy!B$Cu9r_U8)U zoj(lrQKJAv*O0EB2u321Qr%$YdvB$@hspa_#+~A9x|Zb%n707_c0M6Txj>S#+%zya z3lNl2W!z2+%sq94OY6dSGT~DI=DXkj z+u&;6?4y7c@ZTS#bWR-x`>1>M<>I&*R(+{h z?*erD8OVBRupCI&${Ks{r(rL@>Ulr&BL)9wP41^kVLo>nZYs1!AD&&Wy^{NBSQ%rl dP`MF+{{YqR4HS3!;uin_002ovPDHLkV1oVnxPAZt literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Misc/barsign.rsi/meta.json b/Resources/Textures/Constructible/Misc/barsign.rsi/meta.json index a3250248d1..5e331e7b45 100644 --- a/Resources/Textures/Constructible/Misc/barsign.rsi/meta.json +++ b/Resources/Textures/Constructible/Misc/barsign.rsi/meta.json @@ -32,6 +32,44 @@ ] ] }, + { + "name": "thewiggleroom", + "directions": 1, + "delays": [ + [ + 0.4, + 0.8, + 0.4, + 0.8 + ] + ] + }, + { + "name": "thesun", + "directions": 1, + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "lv426", + "directions": 1, + "delays": [ + [ + 1, + 1 + ] + ] + }, { "name": "emergencyrumparty", "directions": 1, diff --git a/Resources/Textures/Constructible/Misc/barsign.rsi/thesun.png b/Resources/Textures/Constructible/Misc/barsign.rsi/thesun.png new file mode 100644 index 0000000000000000000000000000000000000000..38519a7e236fd10d48463c4734045b21193466a3 GIT binary patch literal 8706 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 literal 0 HcmV?d00001 From c1b6bf5237da6a2e19db9a58337f77281228435b Mon Sep 17 00:00:00 2001 From: Swept Date: Sun, 23 Aug 2020 13:09:10 -0700 Subject: [PATCH 008/103] Adds Zolando and Bird Cage --- Resources/Prototypes/bar_signs.yml | 18 ++++++++++++++++ .../Constructible/Misc/barsign.rsi/meta.json | 20 ++++++++++++++++++ .../Misc/barsign.rsi/thebirdcage.png | Bin 0 -> 4239 bytes .../Constructible/Misc/barsign.rsi/zocalo.png | Bin 0 -> 3556 bytes 4 files changed, 38 insertions(+) create mode 100644 Resources/Textures/Constructible/Misc/barsign.rsi/thebirdcage.png create mode 100644 Resources/Textures/Constructible/Misc/barsign.rsi/zocalo.png diff --git a/Resources/Prototypes/bar_signs.yml b/Resources/Prototypes/bar_signs.yml index 55921743e9..56b280902d 100644 --- a/Resources/Prototypes/bar_signs.yml +++ b/Resources/Prototypes/bar_signs.yml @@ -88,6 +88,18 @@ icon: "thesun" description: "Ironically bright for such a shady bar." +- type: barSign + id: TheBirdCage + name: "The Birdcage" + icon: "thebirdcage" + description: "Caw caw!" + +- type: barSign + id: Zocalo + name: "Zocalo" + icon: "zocalo" + description: "Anteriormente ubicado en Spessmerica." + - type: barSign id: LV426 name: "LV-426" @@ -118,6 +130,12 @@ icon: "enginechange" description: "Still waiting." +- type: barSign + id: Emprah + name: "4 The Emprah" + icon: "emprah" + description: "Enjoyed by fanatics, heretics, and brain-damaged patrons alike." + # Hidden signs list below this point - type: barSign id: EmpBarSign diff --git a/Resources/Textures/Constructible/Misc/barsign.rsi/meta.json b/Resources/Textures/Constructible/Misc/barsign.rsi/meta.json index 5e331e7b45..764787ab0f 100644 --- a/Resources/Textures/Constructible/Misc/barsign.rsi/meta.json +++ b/Resources/Textures/Constructible/Misc/barsign.rsi/meta.json @@ -70,6 +70,26 @@ ] ] }, + { + "name": "birdcage", + "directions": 1, + "delays": [ + [ + 0.4, + 0.8 + ] + ] + }, + { + "name": "zocalo", + "directions": 1, + "delays": [ + [ + 1, + 1 + ] + ] + }, { "name": "emergencyrumparty", "directions": 1, diff --git a/Resources/Textures/Constructible/Misc/barsign.rsi/thebirdcage.png b/Resources/Textures/Constructible/Misc/barsign.rsi/thebirdcage.png new file mode 100644 index 0000000000000000000000000000000000000000..41cdaddbe4d7f5d4c9a9596387afe917cb3cd65b GIT binary patch literal 4239 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Misc/barsign.rsi/zocalo.png b/Resources/Textures/Constructible/Misc/barsign.rsi/zocalo.png new file mode 100644 index 0000000000000000000000000000000000000000..d4d8b9615947295ae05b593ea649fa955f9eb4cd GIT binary patch literal 3556 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

`E~iS z7^S7&5bCo45c4VLU%Fzl2*!GXcR$J!$1@M_$9=!3!q)9Uy!7`GXb#DC+S{9k+PG+&~?zJt>0J@CgV zLhBqi(zj%dKJG5m_kwO4m-2gx0W4Lsm!FME^Dnat83VXq^+sb{)c7gK7rxzTPYFG$ z*~C>hkm?Rp5>7P(K%xLRkao-M6#c)0i*KsWE z6CCC~M_Lj}a+sz{@R3m2fX7K5 z0}{?1ej0ZD<@d$c&`**&|D4JFnNnYW<}?t{(>r#?=f#cpb_tV`;m??@G~0-O5hRK> z@inR(oA?>G_=>1KzlZ93xF2vh2{ry6=c<%0@oVCECs94uR#ijGwxkQ-dIu}e9X{RB eU Date: Sun, 23 Aug 2020 14:48:20 -0700 Subject: [PATCH 009/103] Adds cyber sylph's --- .../Entities/Constructible/Walls/bar_sign.yml | 25 ++++++++++++++++ Resources/Prototypes/bar_signs.yml | 2 +- .../{thebirdcage.png => birdcage.png} | Bin .../Constructible/Misc/sylphs.rsi/meta.json | 27 ++++++++++++++++++ .../Constructible/Misc/sylphs.rsi/sylph.png | Bin 0 -> 20113 bytes .../Misc/sylphs.rsi/sylphicon.png | Bin 0 -> 1583 bytes 6 files changed, 53 insertions(+), 1 deletion(-) rename Resources/Textures/Constructible/Misc/barsign.rsi/{thebirdcage.png => birdcage.png} (100%) create mode 100644 Resources/Textures/Constructible/Misc/sylphs.rsi/meta.json create mode 100644 Resources/Textures/Constructible/Misc/sylphs.rsi/sylph.png create mode 100644 Resources/Textures/Constructible/Misc/sylphs.rsi/sylphicon.png diff --git a/Resources/Prototypes/Entities/Constructible/Walls/bar_sign.yml b/Resources/Prototypes/Entities/Constructible/Walls/bar_sign.yml index b9cc1cd9cc..a359afb625 100644 --- a/Resources/Prototypes/Entities/Constructible/Walls/bar_sign.yml +++ b/Resources/Prototypes/Entities/Constructible/Walls/bar_sign.yml @@ -15,6 +15,23 @@ - type: PowerReceiver - type: BarSign +- type: entity + id: LargeBarSign + name: large bar sign + components: + - type: Clickable + - type: InteractionOutline + - type: Collidable + - type: Sprite + drawdepth: WallTops + sprite: Constructible/Misc/sylphs.rsi + state: sylph + - type: Icon + sprite: Constructible/Misc/sylphs.rsi + state: sylph + - type: PowerReceiver + - type: BarSign + - type: entity id: BarSignEngineChange name: The Engine Change @@ -22,3 +39,11 @@ components: - type: BarSign current: EngineChange + +- type: entity + id: BarSignCyberSylph + name: Cyber Sylph + parent: LargeBarSign + components: + - type: BarSign + current: CyberSylph diff --git a/Resources/Prototypes/bar_signs.yml b/Resources/Prototypes/bar_signs.yml index 56b280902d..89474e7a91 100644 --- a/Resources/Prototypes/bar_signs.yml +++ b/Resources/Prototypes/bar_signs.yml @@ -91,7 +91,7 @@ - type: barSign id: TheBirdCage name: "The Birdcage" - icon: "thebirdcage" + icon: "birdcage" description: "Caw caw!" - type: barSign diff --git a/Resources/Textures/Constructible/Misc/barsign.rsi/thebirdcage.png b/Resources/Textures/Constructible/Misc/barsign.rsi/birdcage.png similarity index 100% rename from Resources/Textures/Constructible/Misc/barsign.rsi/thebirdcage.png rename to Resources/Textures/Constructible/Misc/barsign.rsi/birdcage.png diff --git a/Resources/Textures/Constructible/Misc/sylphs.rsi/meta.json b/Resources/Textures/Constructible/Misc/sylphs.rsi/meta.json new file mode 100644 index 0000000000..eeacdaf161 --- /dev/null +++ b/Resources/Textures/Constructible/Misc/sylphs.rsi/meta.json @@ -0,0 +1,27 @@ +{ + "version": 1, + "size": { + "x": 96, + "y": 96 + }, + "license": "CC-BY-SA 3", + "copyright": "https://github.com/vgstation-coders/vgstation13/commit/1fbb5e417d0200fe60c6b628656a371093d2d715", + "states": [ + { + "name": "sylph", + "directions": 1, + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + } + ] +} diff --git a/Resources/Textures/Constructible/Misc/sylphs.rsi/sylph.png b/Resources/Textures/Constructible/Misc/sylphs.rsi/sylph.png new file mode 100644 index 0000000000000000000000000000000000000000..bd0fe37acfa81fb6f990bc7100dec8920eeec4f6 GIT binary patch literal 20113 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

2B1;}4@r|C!o>m$G^r96^n7w)_m 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Misc/sylphs.rsi/sylphicon.png b/Resources/Textures/Constructible/Misc/sylphs.rsi/sylphicon.png new file mode 100644 index 0000000000000000000000000000000000000000..53773603a850d3d006e9d75c291eccecde3c1c02 GIT binary patch literal 1583 zcmV+~2GIG5P)Sl(8#4wkwgWJ!Du26_=G%Ah=~zXQAxZ+6QeQ3 zM0tXQl4wK}Q4^x2r8Xd>#2`j)jiA8@7M5%%$dt}FCBtJzlWVO|M~y# zznt65ECGOyjt-0kOB)-vGV^eK69}P*%t`_j2rZcc=sNVS%NYE&$MVq8*|}AAC+z)D z@yJ|D%J~?m@uPQL!r(VO4jp!%%a7%6=~Am*Hm1y7$o96Q?2ctfpN=DPXA=6MzmPr? zN9J75sCF#STt$!*s(5%VK!DJqNdO_d?baz4ffj%vbMByVW#siu$n>^*lJ&DIWLAh- z#0p`}h8)P{#|>)p`L!vFo3`|;6RFB7={p)o~u6F@JdjP*~cxfzZP)*kTT;*G&&Q|A>O3wdWn zDV)lTpFpDK5|~*9ZN`Ga`4?}*`WIGESlg#rfWOb5;WzQ8XN@gL7qV|GM|jJ3fpDdt zZ#EhcVBC9e^L>Er0YowOt;qYWc{!4woc7505~!JZS0F*U5mfRXurUmJ2{25UTpLh? zHvqdo$F+59Ij<5^fvW&wD#EPIPMAEgCoWy|mGc=OmOwG++c5j)6@$92MZleFK}*1$ zEW5AXcIt)}p|5#P?oRd)I9)A?*PUxYGk_)Qckh-5iR#v0^RQ8AFE1Up+;ac}d-!1| zKoGbk3m}l`ixzED(jM?{LDlx1uH?sl4wifh+-&HZ)|M23d$5Ch9S#v>D=VQ_RYH$d zK##>hE6Slqqo9fc8c_g6;i@!DK*M3)COQSlWDO2Y14(NjnugHuFv!pdLa7u&sX>IU z^&{Nh?{KMa%KrxHhI_C*1-PnR#z4k)q?T3UHf55pPDNEMD&{sKJ7qGm6DNR%@^2}_ z?fameIBMN1_smCm(__XBE0SvKIQn?8bfmxj6p=@t^6-k7{Nf!AWqu^_f$@^`Iuf{O zJtfkzG7JovIs*xe{P6|ID=oG<)y-%_&U=>p!Tmfj2Y>fT(C(8q2i0vI(YNI#ql*9| zXHP(R{hVc9zH$`?4-RcyYLV$etak z>J_|?jTjp#d34$6G03CMAo!WB*uqqk!>up)`#*Tq!72A862C#y5{|eT--V&GmM)tW z;*lZm65u5D%c1rjaL7o)c#49&Y&YM}71KzsxE6 zW#2+3^SWnoF8D9n8e`hBX_Qol4DyC1t2-syH9D7zK5KNjY?)oqh9;-1ChIMVq%ZRe zd)6<<;P%a+_B!7_eeGQEKLw_G1C(XdY_n^8Z>QnxiAJbbq2Y-j)+eXv`%s?0-Byd{KX?qFQ%?**gtTH@jl;6ae7oCp$va&4-a}o5x3y?bPu#$2ftI8DITbQL*(m zn`ha{#SsN|avwJAHrsZBU(5`kCug$f0Ov%8kX%Lt{3D!SDtDjkGK9~5vVOcVM*G)&hfBdHb;2!{5(wzJ}2oL}O002ovPDHLkV1m6R06+i$ literal 0 HcmV?d00001 From b9f6178b5b74cc48b3a8bb542d880582e655bd34 Mon Sep 17 00:00:00 2001 From: Swept Date: Sun, 23 Aug 2020 17:11:14 -0700 Subject: [PATCH 010/103] Touches up wiggle room sprite --- .../Misc/barsign.rsi/thewiggleroom.png | Bin 5029 -> 1438 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Resources/Textures/Constructible/Misc/barsign.rsi/thewiggleroom.png b/Resources/Textures/Constructible/Misc/barsign.rsi/thewiggleroom.png index 107c73d6d458fe662d901a796d4903647b1a897f..e11c464258790ed43f1cfd79c0b2759475467936 100644 GIT binary patch delta 1421 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 From d809968635375f2ddd0a5a3e69791ea1138dbaf3 Mon Sep 17 00:00:00 2001 From: 20kdc Date: Fri, 28 Aug 2020 00:04:44 +0100 Subject: [PATCH 011/103] GLES2: Content shader stuff (possibly unfinished) --- Resources/Textures/Shaders/circle_mask.swsl | 20 ++++++------- Resources/Textures/Shaders/cooldown.swsl | 26 ++++++++-------- .../Textures/Shaders/flashed_effect.swsl | 14 ++++----- .../Shaders/gradient_circle_mask.swsl | 24 +++++++-------- Resources/Textures/Shaders/outline.swsl | 30 +++++++++---------- Resources/Textures/Shaders/stencil_clear.swsl | 2 +- Resources/Textures/Shaders/stencil_mask.swsl | 4 +-- 7 files changed, 60 insertions(+), 60 deletions(-) diff --git a/Resources/Textures/Shaders/circle_mask.swsl b/Resources/Textures/Shaders/circle_mask.swsl index c8471ec2d0..dc38b360cc 100644 --- a/Resources/Textures/Shaders/circle_mask.swsl +++ b/Resources/Textures/Shaders/circle_mask.swsl @@ -1,17 +1,17 @@ -vec4 circle(in vec2 uv, in vec2 pos, float rad, in vec3 color) { - float d = length(pos - uv) - rad; - float t = clamp(d, 0.0, 1.0); +highp vec4 circle(in highp vec2 uv, in highp vec2 pos, highp float rad, in highp vec3 color) { + highp float d = length(pos - uv) - rad; + highp float t = clamp(d, 0.0, 1.0); return vec4(color, t); } void fragment(){ - vec2 uv = FRAGCOORD.xy; - vec2 res_xy = vec2(1.0/SCREEN_PIXEL_SIZE.x, 1.0/SCREEN_PIXEL_SIZE.y); - vec2 center = res_xy*0.5; - float radius = 0.05 * res_xy.y; + highp vec2 uv = FRAGCOORD.xy; + highp vec2 res_xy = vec2(1.0/SCREEN_PIXEL_SIZE.x, 1.0/SCREEN_PIXEL_SIZE.y); + highp vec2 center = res_xy*0.5; + highp float radius = 0.05 * res_xy.y; - vec4 layer1 = vec4(vec3(0), 0.0); + highp vec4 layer1 = vec4(vec3(0.0), 0.0); - vec4 layer2 = circle(uv, center, radius, vec3(0)); + highp vec4 layer2 = circle(uv, center, radius, vec3(0.0)); COLOR = mix(layer1, layer2, layer2.a); -} \ No newline at end of file +} diff --git a/Resources/Textures/Shaders/cooldown.swsl b/Resources/Textures/Shaders/cooldown.swsl index 90b215a1c3..9622b26968 100644 --- a/Resources/Textures/Shaders/cooldown.swsl +++ b/Resources/Textures/Shaders/cooldown.swsl @@ -1,25 +1,25 @@ light_mode unshaded; -const float PI = 3.14159265; +const highp float PI = 3.14159265; -uniform float progress = 0.0; +uniform highp float progress; void fragment() { - vec4 col = texture(TEXTURE, UV); - vec2 center = vec2(0.5,0.5); - vec2 delta = UV.xy - center; + highp vec4 col = texture2D(TEXTURE, UV); + highp vec2 center = vec2(0.5,0.5); + highp vec2 delta = UV.xy - center; - float angle = atan(delta.x, -delta.y) + PI; + highp float angle = atan(delta.x, -delta.y) + PI; - float dist = length(delta); - float dist_fwidth = fwidth(dist) * 0.67; + highp float dist = length(delta); + highp float dist_fwidth = fwidth(dist) * 0.67; - float dist_alpha = smoothstep(0.1-dist_fwidth, 0.1, abs(dist-0.35)); + highp float dist_alpha = smoothstep(0.1-dist_fwidth, 0.1, abs(dist-0.35)); - float angle_delta = (progress * PI * 2) - angle; - float arc_length = angle_delta * dist; + highp float angle_delta = (progress * PI * 2.0) - angle; + highp float arc_length = angle_delta * dist; - float angle_alpha = progress > 0 ? smoothstep(dist_fwidth, 0.0, arc_length) : 0.0; + highp float angle_alpha = progress > 0 ? smoothstep(dist_fwidth, 0.0, arc_length) : 0.0; COLOR = vec4(col.xyz, 1-max(dist_alpha, angle_alpha)); -} \ No newline at end of file +} diff --git a/Resources/Textures/Shaders/flashed_effect.swsl b/Resources/Textures/Shaders/flashed_effect.swsl index fdbe860cb7..ca57300aba 100644 --- a/Resources/Textures/Shaders/flashed_effect.swsl +++ b/Resources/Textures/Shaders/flashed_effect.swsl @@ -1,18 +1,18 @@ -uniform float percentComplete; -uniform float fadeFalloffExp = 8; +uniform highp float percentComplete; +uniform highp float fadeFalloffExp = 8.0; void fragment() { // Higher exponent -> stronger blinding effect - float remaining = -pow(percentComplete, fadeFalloffExp) + 1; + highp float remaining = -pow(percentComplete, fadeFalloffExp) + 1.0; // Two ghost textures that spin around the character - vec4 tex1 = texture(TEXTURE, vec2(UV.x + (0.02) * sin(TIME * 3), UV.y + (0.02) * cos(TIME * 3))); - vec4 tex2 = texture(TEXTURE, vec2(UV.x + (0.01) * sin(TIME * 2), UV.y + (0.01) * cos(TIME * 2))); + highp vec4 tex1 = texture2D(TEXTURE, vec2(UV.x + (0.02) * sin(TIME * 3.0), UV.y + (0.02) * cos(TIME * 3.0))); + highp vec4 tex2 = texture2D(TEXTURE, vec2(UV.x + (0.01) * sin(TIME * 2.0), UV.y + (0.01) * cos(TIME * 2.0))); - vec4 textureMix = mix(tex1, tex2, 0.5); + highp vec4 textureMix = mix(tex1, tex2, 0.5); // Gradually mixes between the texture mix and a full-white texture, causing the "blinding" effect - vec4 mixed = mix(vec4(1, 1, 1, 1), textureMix, percentComplete); + highp vec4 mixed = mix(vec4(1.0, 1.0, 1.0, 1.0), textureMix, percentComplete); COLOR = vec4(mixed.rgb, remaining); } diff --git a/Resources/Textures/Shaders/gradient_circle_mask.swsl b/Resources/Textures/Shaders/gradient_circle_mask.swsl index 8eee20fd4c..7772fec725 100644 --- a/Resources/Textures/Shaders/gradient_circle_mask.swsl +++ b/Resources/Textures/Shaders/gradient_circle_mask.swsl @@ -1,23 +1,23 @@ -uniform float percentagedistanceshow = 0.05; -uniform float gradientfalloffwidth = 3.0; +uniform highp float percentagedistanceshow = 0.05; +uniform highp float gradientfalloffwidth = 3.0; -vec4 circle(in vec2 uv, in vec2 pos, float rad, in vec3 color) { - float d = length(pos - uv) - rad; - float t = clamp(d, 0.0, 1.0); +highp vec4 circle(in highp vec2 uv, in highp vec2 pos, highp float rad, in highp vec3 color) { + highp float d = length(pos - uv) - rad; + highp float t = clamp(d, 0.0, 1.0); return vec4(color, t); } void fragment() { - vec2 uv = FRAGCOORD.xy; - vec2 res_xy = vec2(1.0/SCREEN_PIXEL_SIZE.x, 1.0/SCREEN_PIXEL_SIZE.y); - vec2 center = res_xy*0.5; - float radius = percentagedistanceshow * res_xy.y; + highp vec2 uv = FRAGCOORD.xy; + highp vec2 res_xy = vec2(1.0/SCREEN_PIXEL_SIZE.x, 1.0/SCREEN_PIXEL_SIZE.y); + highp vec2 center = res_xy*0.5; + highp float radius = percentagedistanceshow * res_xy.y; - vec4 grad = vec4(0.8 - length( uv - center )/res_xy.y * gradientfalloffwidth); + highp vec4 grad = vec4(0.8 - length( uv - center )/res_xy.y * gradientfalloffwidth); - vec4 layer1 = vec4(vec3(255.0),0.0); + highp vec4 layer1 = vec4(vec3(255.0),0.0); - vec4 layer2 = circle(uv, center, radius, grad.rgb); + highp vec4 layer2 = circle(uv, center, radius, grad.rgb); COLOR = mix(layer1, layer2, layer2.a); } diff --git a/Resources/Textures/Shaders/outline.swsl b/Resources/Textures/Shaders/outline.swsl index 0c3ffc701b..514669da88 100644 --- a/Resources/Textures/Shaders/outline.swsl +++ b/Resources/Textures/Shaders/outline.swsl @@ -29,47 +29,47 @@ light_mode unshaded; //shader_type canvas_item; -uniform float outline_width = 2.0; +uniform highp float outline_width = 2.0; // TODO: implement that hint_color thingy. //uniform vec4 outline_color: hint_color; -uniform vec4 outline_color=vec4(1,0,0,0.33); +uniform highp vec4 outline_color=vec4(1.0,0.0,0.0,0.33); void fragment() { - vec4 col = texture(TEXTURE, UV); - vec2 ps = TEXTURE_PIXEL_SIZE; - float a; - float maxa = col.a; - float mina = col.a; + highp vec4 col = texture2D(TEXTURE, UV); + highp vec2 ps = TEXTURE_PIXEL_SIZE; + highp float a; + highp float maxa = col.a; + highp float mina = col.a; - a = texture(TEXTURE, UV + vec2(0, -outline_width)*ps).a; + a = texture2D(TEXTURE, UV + vec2(0.0, -outline_width)*ps).a; maxa = max(a, maxa); mina = min(a, mina); - a = texture(TEXTURE, UV + vec2(-outline_width, -outline_width)*ps).a; + a = texture2D(TEXTURE, UV + vec2(-outline_width, -outline_width)*ps).a; maxa = max(a, maxa); mina = min(a, mina); - a = texture(TEXTURE, UV + vec2(0, outline_width)*ps).a; + a = texture2D(TEXTURE, UV + vec2(0.0, outline_width)*ps).a; maxa = max(a, maxa); mina = min(a, mina); - a = texture(TEXTURE, UV + vec2(outline_width, -outline_width)*ps).a; + a = texture2D(TEXTURE, UV + vec2(outline_width, -outline_width)*ps).a; maxa = max(a, maxa); mina = min(a, mina); - a = texture(TEXTURE, UV + vec2(-outline_width,0)*ps).a; + a = texture2D(TEXTURE, UV + vec2(-outline_width,0.0)*ps).a; maxa = max(a, maxa); mina = min(a, mina); - a = texture(TEXTURE, UV + vec2(-outline_width, outline_width)*ps).a; + a = texture2D(TEXTURE, UV + vec2(-outline_width, outline_width)*ps).a; maxa = max(a, maxa); mina = min(a, mina); - a = texture(TEXTURE, UV + vec2(outline_width, 0)*ps).a; + a = texture2D(TEXTURE, UV + vec2(outline_width, 0.0)*ps).a; maxa = max(a, maxa); mina = min(a, mina); - a = texture(TEXTURE, UV + vec2(outline_width, outline_width)*ps).a; + a = texture2D(TEXTURE, UV + vec2(outline_width, outline_width)*ps).a; maxa = max(a, maxa); mina = min(a, mina); diff --git a/Resources/Textures/Shaders/stencil_clear.swsl b/Resources/Textures/Shaders/stencil_clear.swsl index b0ec17e0f9..c1a28ab0aa 100644 --- a/Resources/Textures/Shaders/stencil_clear.swsl +++ b/Resources/Textures/Shaders/stencil_clear.swsl @@ -1,3 +1,3 @@ void fragment() { - COLOR = vec4(0); + COLOR = vec4(0.0); } diff --git a/Resources/Textures/Shaders/stencil_mask.swsl b/Resources/Textures/Shaders/stencil_mask.swsl index 0e50894995..8668d60c7d 100644 --- a/Resources/Textures/Shaders/stencil_mask.swsl +++ b/Resources/Textures/Shaders/stencil_mask.swsl @@ -1,7 +1,7 @@ void fragment() { - if (texture(TEXTURE, UV).a == 0) { + if (texture2D(TEXTURE, UV).a == 0.0) { discard; // Discard if no alpha so that there's a hole in the stencil buffer. } - COLOR = vec4(0); + COLOR = vec4(0.0); } From d1f0ea01129dc4856db160f8cc249e3a71c60de3 Mon Sep 17 00:00:00 2001 From: 20kdc Date: Fri, 28 Aug 2020 12:00:16 +0100 Subject: [PATCH 012/103] GLES2: More shader stuff to get things working --- Resources/Textures/Shaders/cooldown.swsl | 8 ++++++-- Resources/Textures/Shaders/flashed_effect.swsl | 2 +- Resources/Textures/Shaders/gradient_circle_mask.swsl | 4 ++-- Resources/Textures/Shaders/outline.swsl | 4 ++-- 4 files changed, 11 insertions(+), 7 deletions(-) diff --git a/Resources/Textures/Shaders/cooldown.swsl b/Resources/Textures/Shaders/cooldown.swsl index 9622b26968..990453ccd8 100644 --- a/Resources/Textures/Shaders/cooldown.swsl +++ b/Resources/Textures/Shaders/cooldown.swsl @@ -12,14 +12,18 @@ void fragment() { highp float angle = atan(delta.x, -delta.y) + PI; highp float dist = length(delta); +#ifdef HAS_DFDX highp float dist_fwidth = fwidth(dist) * 0.67; +#else + highp float dist_fwidth = 0.05; +#endif highp float dist_alpha = smoothstep(0.1-dist_fwidth, 0.1, abs(dist-0.35)); highp float angle_delta = (progress * PI * 2.0) - angle; highp float arc_length = angle_delta * dist; - highp float angle_alpha = progress > 0 ? smoothstep(dist_fwidth, 0.0, arc_length) : 0.0; + highp float angle_alpha = (progress > 0.0) ? smoothstep(dist_fwidth, 0.0, arc_length) : 0.0; - COLOR = vec4(col.xyz, 1-max(dist_alpha, angle_alpha)); + COLOR = vec4(col.xyz, 1.0 - max(dist_alpha, angle_alpha)); } diff --git a/Resources/Textures/Shaders/flashed_effect.swsl b/Resources/Textures/Shaders/flashed_effect.swsl index ca57300aba..0b15474b15 100644 --- a/Resources/Textures/Shaders/flashed_effect.swsl +++ b/Resources/Textures/Shaders/flashed_effect.swsl @@ -1,5 +1,5 @@ uniform highp float percentComplete; -uniform highp float fadeFalloffExp = 8.0; +const highp float fadeFalloffExp = 8.0; void fragment() { // Higher exponent -> stronger blinding effect diff --git a/Resources/Textures/Shaders/gradient_circle_mask.swsl b/Resources/Textures/Shaders/gradient_circle_mask.swsl index 7772fec725..800e19ef84 100644 --- a/Resources/Textures/Shaders/gradient_circle_mask.swsl +++ b/Resources/Textures/Shaders/gradient_circle_mask.swsl @@ -1,5 +1,5 @@ -uniform highp float percentagedistanceshow = 0.05; -uniform highp float gradientfalloffwidth = 3.0; +const highp float percentagedistanceshow = 0.05; +const highp float gradientfalloffwidth = 3.0; highp vec4 circle(in highp vec2 uv, in highp vec2 pos, highp float rad, in highp vec3 color) { highp float d = length(pos - uv) - rad; diff --git a/Resources/Textures/Shaders/outline.swsl b/Resources/Textures/Shaders/outline.swsl index 514669da88..945ac4bdb6 100644 --- a/Resources/Textures/Shaders/outline.swsl +++ b/Resources/Textures/Shaders/outline.swsl @@ -29,10 +29,10 @@ light_mode unshaded; //shader_type canvas_item; -uniform highp float outline_width = 2.0; +uniform highp float outline_width; // = 2.0; // TODO: implement that hint_color thingy. //uniform vec4 outline_color: hint_color; -uniform highp vec4 outline_color=vec4(1.0,0.0,0.0,0.33); +uniform highp vec4 outline_color; // =vec4(1.0,0.0,0.0,0.33); void fragment() { highp vec4 col = texture2D(TEXTURE, UV); From 56909d33922dfddfc85d1bcdc422ce6ecca90046 Mon Sep 17 00:00:00 2001 From: RemberBL Date: Fri, 28 Aug 2020 15:00:49 +0200 Subject: [PATCH 013/103] Make messages have a capital letter at the start (#1952) --- Content.Server/Chat/ChatManager.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Content.Server/Chat/ChatManager.cs b/Content.Server/Chat/ChatManager.cs index 266758207a..0b8a36840b 100644 --- a/Content.Server/Chat/ChatManager.cs +++ b/Content.Server/Chat/ChatManager.cs @@ -109,6 +109,9 @@ namespace Content.Server.Chat message = handler(source, message); } + // Ensure the first letter inside the message string is always a capital letter + message = message[0].ToString().ToUpper() + message.Remove(0,1); + var pos = source.Transform.GridPosition; var clients = _playerManager.GetPlayersInRange(pos, VoiceRange).Select(p => p.ConnectedClient); From f3315feba122de956ef9b2abd00ce37efc5152a9 Mon Sep 17 00:00:00 2001 From: Pieter-Jan Briers Date: Sat, 29 Aug 2020 07:53:04 +0200 Subject: [PATCH 014/103] Fix EntityTest to load prototypes at init properly. --- Content.IntegrationTests/Tests/EntityTest.cs | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/Content.IntegrationTests/Tests/EntityTest.cs b/Content.IntegrationTests/Tests/EntityTest.cs index ae458d078b..a7353a5634 100644 --- a/Content.IntegrationTests/Tests/EntityTest.cs +++ b/Content.IntegrationTests/Tests/EntityTest.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using System.IO; using System.Linq; using System.Threading.Tasks; using NUnit.Framework; @@ -54,6 +53,7 @@ namespace Content.IntegrationTests.Tests { continue; } + prototypes.Add(prototype); } @@ -91,7 +91,8 @@ namespace Content.IntegrationTests.Tests continue; } - Assert.That(prototype.Components.ContainsKey("Icon"), $"Entity {prototype.ID} does not have an Icon component, but is not abstract"); + Assert.That(prototype.Components.ContainsKey("Icon"), + $"Entity {prototype.ID} does not have an Icon component, but is not abstract"); } }); @@ -115,7 +116,7 @@ namespace Content.IntegrationTests.Tests - type: entity id: AllComponentsOneToOneDeleteTestEntity"; - var server = StartServerDummyTicker(); + var server = StartServerDummyTicker(new ServerContentIntegrationOption {ExtraPrototypes = testEntity}); await server.WaitIdleAsync(); var mapManager = server.ResolveDependency(); @@ -123,16 +124,11 @@ namespace Content.IntegrationTests.Tests var mapLoader = server.ResolveDependency(); var pauseManager = server.ResolveDependency(); var componentFactory = server.ResolveDependency(); - var prototypeManager = server.ResolveDependency(); IMapGrid grid = default; server.Post(() => { - // Load test entity - using var reader = new StringReader(testEntity); - prototypeManager.LoadFromStream(reader); - // Load test map var mapId = mapManager.CreateMap(); pauseManager.AddUninitializedMap(mapId); @@ -201,7 +197,7 @@ namespace Content.IntegrationTests.Tests - type: entity id: AllComponentsOneEntityDeleteTestEntity"; - var server = StartServerDummyTicker(); + var server = StartServerDummyTicker(new ServerContentIntegrationOption {ExtraPrototypes = testEntity}); await server.WaitIdleAsync(); var mapManager = server.ResolveDependency(); @@ -209,16 +205,11 @@ namespace Content.IntegrationTests.Tests var mapLoader = server.ResolveDependency(); var pauseManager = server.ResolveDependency(); var componentFactory = server.ResolveDependency(); - var prototypeManager = server.ResolveDependency(); IMapGrid grid = default; server.Post(() => { - // Load test entity - using var reader = new StringReader(testEntity); - prototypeManager.LoadFromStream(reader); - // Load test map var mapId = mapManager.CreateMap(); pauseManager.AddUninitializedMap(mapId); From aa66aa22867d49eb520171d58cbb5cd782f5647e Mon Sep 17 00:00:00 2001 From: ShadowCommander <10494922+ShadowCommander@users.noreply.github.com> Date: Sat, 29 Aug 2020 03:33:42 -0700 Subject: [PATCH 015/103] Implement machine linking (#1784) * Implement machine linking * Cleanup and rename Signals * Implement signal button * Add machine linking signal mapping * Fix signallink command help * Add localization to signal linking and allow infinite range * Add feedback for when a transmitter is not connected to any receivers Refactor PopupMessage to use the entity extension Refactor dependencies to not have to disable warnings --- .../MachineLinking/ISignalReceiver.cs | 14 ++ .../MachineLinking/SignalButtonComponent.cs | 40 +++++ .../MachineLinking/SignalLinkerComponent.cs | 21 +++ .../MachineLinking/SignalReceiverComponent.cs | 118 +++++++++++++ .../MachineLinking/SignalSwitchComponent.cs | 87 +++++++++ .../SignalTransmitterComponent.cs | 166 ++++++++++++++++++ .../PoweredLightComponent.cs | 35 +++- .../EntitySystems/SignalLinkerSystem.cs | 140 +++++++++++++++ Resources/Groups/groups.yml | 2 + .../Entities/Constructible/Walls/lighting.yml | 1 + .../Entities/Constructible/Walls/linking.yml | 41 +++++ .../Entities/Objects/Tools/tools.yml | 1 + .../Constructible/Linking/switch.rsi/dead.png | Bin 0 -> 137 bytes .../Linking/switch.rsi/meta.json | 44 +++++ .../Constructible/Linking/switch.rsi/off.png | Bin 0 -> 137 bytes .../Constructible/Linking/switch.rsi/on.png | Bin 0 -> 137 bytes 16 files changed, 701 insertions(+), 9 deletions(-) create mode 100644 Content.Server/GameObjects/Components/MachineLinking/ISignalReceiver.cs create mode 100644 Content.Server/GameObjects/Components/MachineLinking/SignalButtonComponent.cs create mode 100644 Content.Server/GameObjects/Components/MachineLinking/SignalLinkerComponent.cs create mode 100644 Content.Server/GameObjects/Components/MachineLinking/SignalReceiverComponent.cs create mode 100644 Content.Server/GameObjects/Components/MachineLinking/SignalSwitchComponent.cs create mode 100644 Content.Server/GameObjects/Components/MachineLinking/SignalTransmitterComponent.cs create mode 100644 Content.Server/GameObjects/EntitySystems/SignalLinkerSystem.cs create mode 100644 Resources/Prototypes/Entities/Constructible/Walls/linking.yml create mode 100644 Resources/Textures/Constructible/Linking/switch.rsi/dead.png create mode 100644 Resources/Textures/Constructible/Linking/switch.rsi/meta.json create mode 100644 Resources/Textures/Constructible/Linking/switch.rsi/off.png create mode 100644 Resources/Textures/Constructible/Linking/switch.rsi/on.png diff --git a/Content.Server/GameObjects/Components/MachineLinking/ISignalReceiver.cs b/Content.Server/GameObjects/Components/MachineLinking/ISignalReceiver.cs new file mode 100644 index 0000000000..78e032606f --- /dev/null +++ b/Content.Server/GameObjects/Components/MachineLinking/ISignalReceiver.cs @@ -0,0 +1,14 @@ +namespace Content.Server.GameObjects.Components.MachineLinking +{ + public interface ISignalReceiver + { + void TriggerSignal(SignalState state); + } + + public enum SignalState + { + On, + Off, + Toggle + } +} diff --git a/Content.Server/GameObjects/Components/MachineLinking/SignalButtonComponent.cs b/Content.Server/GameObjects/Components/MachineLinking/SignalButtonComponent.cs new file mode 100644 index 0000000000..4fc80c5902 --- /dev/null +++ b/Content.Server/GameObjects/Components/MachineLinking/SignalButtonComponent.cs @@ -0,0 +1,40 @@ +using Content.Shared.Interfaces; +using Content.Shared.Interfaces.GameObjects.Components; +using Robust.Shared.GameObjects; +using Robust.Shared.Interfaces.GameObjects; +using Robust.Shared.Localization; + +namespace Content.Server.GameObjects.Components.MachineLinking +{ + [RegisterComponent] + public class SignalButtonComponent : Component, IActivate, IInteractHand + { + public override string Name => "SignalButton"; + + public void Activate(ActivateEventArgs eventArgs) + { + TransmitSignal(eventArgs.User); + } + + public bool InteractHand(InteractHandEventArgs eventArgs) + { + TransmitSignal(eventArgs.User); + return true; + } + + private void TransmitSignal(IEntity user) + { + if (!Owner.TryGetComponent(out var transmitter)) + { + return; + } + + if (transmitter.TransmitSignal(user, SignalState.Toggle)) + { + // Since the button doesn't have an animation, I'm going to use a popup message + Owner.PopupMessage(user, Loc.GetString("Click.")); + } + } + + } +} diff --git a/Content.Server/GameObjects/Components/MachineLinking/SignalLinkerComponent.cs b/Content.Server/GameObjects/Components/MachineLinking/SignalLinkerComponent.cs new file mode 100644 index 0000000000..9a0acd7222 --- /dev/null +++ b/Content.Server/GameObjects/Components/MachineLinking/SignalLinkerComponent.cs @@ -0,0 +1,21 @@ +using Robust.Shared.GameObjects; +using Robust.Shared.ViewVariables; + +namespace Content.Server.GameObjects.Components.MachineLinking +{ + [RegisterComponent] + public class SignalLinkerComponent : Component + { + public override string Name => "SignalLinker"; + + [ViewVariables] + public SignalTransmitterComponent Link { get; set; } + + public override void Initialize() + { + base.Initialize(); + + Link = null; + } + } +} diff --git a/Content.Server/GameObjects/Components/MachineLinking/SignalReceiverComponent.cs b/Content.Server/GameObjects/Components/MachineLinking/SignalReceiverComponent.cs new file mode 100644 index 0000000000..c1e274862a --- /dev/null +++ b/Content.Server/GameObjects/Components/MachineLinking/SignalReceiverComponent.cs @@ -0,0 +1,118 @@ +using Content.Server.GameObjects.Components.Interactable; +using Content.Shared.GameObjects.Components.Interactable; +using Content.Shared.Interfaces; +using Content.Shared.Interfaces.GameObjects.Components; +using Robust.Shared.GameObjects; +using Robust.Shared.Interfaces.GameObjects; +using Robust.Shared.Interfaces.Map; +using Robust.Shared.IoC; +using Robust.Shared.Localization; +using System.Collections.Generic; +using System.Threading.Tasks; + +namespace Content.Server.GameObjects.Components.MachineLinking +{ + [RegisterComponent] + public class SignalReceiverComponent : Component, IInteractUsing + { + [Dependency] private readonly IMapManager _mapManager = default!; + + public override string Name => "SignalReceiver"; + + private List _transmitters; + + public override void Initialize() + { + base.Initialize(); + + _transmitters = new List(); + } + + public void DistributeSignal(SignalState state) + { + foreach (var comp in Owner.GetAllComponents()) + { + comp.TriggerSignal(state); + } + } + + public void Subscribe(SignalTransmitterComponent transmitter) + { + if (_transmitters.Contains(transmitter)) + { + return; + } + + transmitter.Subscribe(this); + _transmitters.Add(transmitter); + } + + public void Unsubscribe(SignalTransmitterComponent transmitter) + { + transmitter.Unsubscribe(this); + _transmitters.Remove(transmitter); + } + + ///

+ /// Subscribes/Unsubscribes a transmitter to this component. Returns whether it was successful. + /// + /// + /// + /// + public bool Interact(IEntity user, SignalTransmitterComponent transmitter) + { + if (transmitter == null) + { + user.PopupMessage(user, Loc.GetString("Signal not set.")); + return false; + } + + if (_transmitters.Contains(transmitter)) + { + Unsubscribe(transmitter); + Owner.PopupMessage(user, Loc.GetString("Unlinked.")); + return true; + } + + if (transmitter.Range > 0 && !Owner.Transform.GridPosition.InRange(_mapManager, transmitter.Owner.Transform.GridPosition, transmitter.Range)) + { + Owner.PopupMessage(user, Loc.GetString("Out of range.")); + return false; + } + + Subscribe(transmitter); + Owner.PopupMessage(user, Loc.GetString("Linked!")); + return true; + } + + public async Task InteractUsing(InteractUsingEventArgs eventArgs) + { + if (!eventArgs.Using.TryGetComponent(out var tool)) + return false; + + if (tool.HasQuality(ToolQuality.Multitool) + && eventArgs.Using.TryGetComponent(out var linker)) + { + return Interact(eventArgs.User, linker.Link); + } + + return false; + } + + protected override void Shutdown() + { + base.Shutdown(); + + foreach (var transmitter in _transmitters) + { + if (transmitter.Deleted) + { + continue; + } + + transmitter.Unsubscribe(this); + } + _transmitters.Clear(); + } + } +} diff --git a/Content.Server/GameObjects/Components/MachineLinking/SignalSwitchComponent.cs b/Content.Server/GameObjects/Components/MachineLinking/SignalSwitchComponent.cs new file mode 100644 index 0000000000..6ad3734f3c --- /dev/null +++ b/Content.Server/GameObjects/Components/MachineLinking/SignalSwitchComponent.cs @@ -0,0 +1,87 @@ +using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.GameObjects.Verbs; +using Content.Shared.Interfaces.GameObjects.Components; +using Robust.Server.GameObjects; +using Robust.Shared.GameObjects; +using Robust.Shared.Interfaces.GameObjects; +using Robust.Shared.Localization; +using Robust.Shared.Serialization; + +namespace Content.Server.GameObjects.Components.MachineLinking +{ + [RegisterComponent] + public class SignalSwitchComponent : Component, IInteractHand, IActivate + { + public override string Name => "SignalSwitch"; + + private bool _on; + + public override void Initialize() + { + base.Initialize(); + + UpdateSprite(); + } + + public override void ExposeData(ObjectSerializer serializer) + { + base.ExposeData(serializer); + + serializer.DataField(ref _on, "on", true); + } + + public void Activate(ActivateEventArgs eventArgs) + { + TransmitSignal(eventArgs.User); + } + + public bool InteractHand(InteractHandEventArgs eventArgs) + { + TransmitSignal(eventArgs.User); + return true; + } + + public void TransmitSignal(IEntity user) + { + _on = !_on; + + UpdateSprite(); + + if (!Owner.TryGetComponent(out var transmitter)) + { + return; + } + + transmitter.TransmitSignal(user, _on ? SignalState.On : SignalState.Off); + } + + private void UpdateSprite() + { + if (Owner.TryGetComponent(out var sprite)) + { + sprite.LayerSetState(0, _on ? "on" : "off"); + } + } + + [Verb] + private sealed class ToggleSwitchVerb : Verb + { + protected override void Activate(IEntity user, SignalSwitchComponent component) + { + component.TransmitSignal(user); + } + + protected override void GetData(IEntity user, SignalSwitchComponent component, VerbData data) + { + if (!ActionBlockerSystem.CanInteract(user)) + { + data.Visibility = VerbVisibility.Invisible; + return; + } + + data.Text = Loc.GetString("Toggle Switch"); + data.Visibility = VerbVisibility.Visible; + } + } + } +} diff --git a/Content.Server/GameObjects/Components/MachineLinking/SignalTransmitterComponent.cs b/Content.Server/GameObjects/Components/MachineLinking/SignalTransmitterComponent.cs new file mode 100644 index 0000000000..d2df05bc3d --- /dev/null +++ b/Content.Server/GameObjects/Components/MachineLinking/SignalTransmitterComponent.cs @@ -0,0 +1,166 @@ +using Content.Server.GameObjects.Components.Interactable; +using Content.Shared.GameObjects.Components.Interactable; +using Content.Shared.Interfaces; +using Content.Shared.Interfaces.GameObjects.Components; +using Robust.Shared.GameObjects; +using Robust.Shared.Interfaces.GameObjects; +using Robust.Shared.Interfaces.Map; +using Robust.Shared.IoC; +using Robust.Shared.Localization; +using Robust.Shared.Serialization; +using Robust.Shared.ViewVariables; +using System.Collections.Generic; +using System.Threading.Tasks; + +namespace Content.Server.GameObjects.Components.MachineLinking +{ + [RegisterComponent] + public class SignalTransmitterComponent : Component, IInteractUsing + { + [Dependency] private readonly IMapManager _mapManager = default!; + [Dependency] private readonly IEntityManager _entityManager = default!; + + public override string Name => "SignalTransmitter"; + + private List _unresolvedReceivers; + private List _receivers; + [ViewVariables] private float _range; + + /// + /// 0 is unlimited range + /// + public float Range { get => _range; private set => _range = value; } + + public override void Initialize() + { + base.Initialize(); + + _receivers = new List(); + + if (_unresolvedReceivers != null) + { + foreach (var receiver in _unresolvedReceivers) + { + receiver.Subscribe(this); + } + _unresolvedReceivers = null; + } + } + + public override void ExposeData(ObjectSerializer serializer) + { + base.ExposeData(serializer); + + serializer.DataField(ref _range, "range", 10); + if (serializer.Reading) + { + if (!serializer.TryReadDataField("signalReceivers", out List entityUids)) + { + return; + } + + _unresolvedReceivers = new List(); + foreach (var entityUid in entityUids) + { + if (!_entityManager.TryGetEntity(entityUid, out var entity) + || !entity.TryGetComponent(out var receiver)) + { + continue; + } + + _unresolvedReceivers.Add(receiver); + } + } + else if (serializer.Writing) + { + var entityList = new List(); + foreach (var receiver in _receivers) + { + if (receiver.Deleted) + { + continue; + } + + entityList.Add(receiver.Owner.Uid); + } + + serializer.DataWriteFunction("signalReceivers", null, () => entityList); + } + } + + public bool TransmitSignal(IEntity user, SignalState state) + { + if (_receivers.Count == 0) + { + Owner.PopupMessage(user, Loc.GetString("No receivers connected.")); + return false; + } + + foreach (var receiver in _receivers) + { + if (Range > 0 && !Owner.Transform.GridPosition.InRange(_mapManager, receiver.Owner.Transform.GridPosition, Range)) + { + continue; + } + + receiver.DistributeSignal(state); + } + return true; + } + + public void Subscribe(SignalReceiverComponent receiver) + { + if (_receivers.Contains(receiver)) + { + return; + } + + _receivers.Add(receiver); + } + + public void Unsubscribe(SignalReceiverComponent receiver) + { + _receivers.Remove(receiver); + } + + public SignalTransmitterComponent GetSignal(IEntity user) + { + if (user != null) + { + Owner.PopupMessage(user, Loc.GetString("Signal fetched.")); + } + + return this; + } + + public async Task InteractUsing(InteractUsingEventArgs eventArgs) + { + if (!eventArgs.Using.TryGetComponent(out var tool)) + return false; + + if (tool.HasQuality(ToolQuality.Multitool) + && eventArgs.Using.TryGetComponent(out var linker)) + { + linker.Link = GetSignal(eventArgs.User); + } + + return false; + } + + protected override void Shutdown() + { + base.Shutdown(); + + foreach (var receiver in _receivers) + { + if (receiver.Deleted) + { + continue; + } + + receiver.Unsubscribe(this); + } + _receivers.Clear(); + } + } +} diff --git a/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverUsers/PoweredLightComponent.cs b/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverUsers/PoweredLightComponent.cs index 71befe71bc..0b8890964b 100644 --- a/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverUsers/PoweredLightComponent.cs +++ b/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverUsers/PoweredLightComponent.cs @@ -21,6 +21,8 @@ using Robust.Shared.IoC; using Robust.Shared.Localization; using Robust.Shared.Serialization; using Robust.Shared.ViewVariables; +using Content.Server.GameObjects.Components.MachineLinking; +using Content.Shared.Interfaces; namespace Content.Server.GameObjects.Components.Power.ApcNetComponents.PowerReceiverUsers { @@ -28,21 +30,17 @@ namespace Content.Server.GameObjects.Components.Power.ApcNetComponents.PowerRece /// Component that represents a wall light. It has a light bulb that can be replaced when broken. /// [RegisterComponent] - public class PoweredLightComponent : Component, IInteractHand, IInteractUsing, IMapInit + public class PoweredLightComponent : Component, IInteractHand, IInteractUsing, IMapInit, ISignalReceiver { - [Dependency] private IServerNotifyManager _notifyManager = default!; - public override string Name => "PoweredLight"; private static readonly TimeSpan _thunkDelay = TimeSpan.FromSeconds(2); - private TimeSpan _lastThunk; + [ViewVariables] private bool _on; private LightBulbType BulbType = LightBulbType.Tube; - [ViewVariables] private ContainerSlot _lightBulbContainer; - [ViewVariables] private LightBulbComponent LightBulb { @@ -78,6 +76,23 @@ namespace Content.Server.GameObjects.Components.Power.ApcNetComponents.PowerRece return InsertBulb(eventArgs.Using); } + public void TriggerSignal(SignalState state) + { + switch (state) + { + case SignalState.On: + _on = true; + break; + case SignalState.Off: + _on = false; + break; + case SignalState.Toggle: + _on = !_on; + break; + } + UpdateLight(); + } + public bool InteractHand(InteractHandEventArgs eventArgs) { if (!eventArgs.User.TryGetComponent(out IDamageableComponent damageableComponent)) @@ -103,7 +118,7 @@ namespace Content.Server.GameObjects.Components.Power.ApcNetComponents.PowerRece void Burn() { - _notifyManager.PopupMessage(Owner, eventArgs.User, Loc.GetString("You burn your hand!")); + Owner.PopupMessage(eventArgs.User, Loc.GetString("You burn your hand!")); damageableComponent.ChangeDamage(DamageType.Heat, 20, false, Owner); var audioSystem = EntitySystem.Get(); audioSystem.PlayFromEntity("/Audio/Effects/lightburn.ogg", Owner); @@ -158,6 +173,7 @@ namespace Content.Server.GameObjects.Components.Power.ApcNetComponents.PowerRece public override void ExposeData(ObjectSerializer serializer) { serializer.DataField(ref BulbType, "bulb", LightBulbType.Tube); + serializer.DataField(ref _on, "on", true); } /// @@ -189,9 +205,9 @@ namespace Content.Server.GameObjects.Components.Power.ApcNetComponents.PowerRece switch (LightBulb.State) { case LightBulbState.Normal: - powerReceiver.Load = LightBulb.PowerUse; - if (powerReceiver.Powered) + if (powerReceiver.Powered && _on) { + powerReceiver.Load = LightBulb.PowerUse; sprite.LayerSetState(0, "on"); light.Enabled = true; light.Color = LightBulb.Color; @@ -204,6 +220,7 @@ namespace Content.Server.GameObjects.Components.Power.ApcNetComponents.PowerRece } else { + powerReceiver.Load = 0; sprite.LayerSetState(0, "off"); light.Enabled = false; } diff --git a/Content.Server/GameObjects/EntitySystems/SignalLinkerSystem.cs b/Content.Server/GameObjects/EntitySystems/SignalLinkerSystem.cs new file mode 100644 index 0000000000..04e7fee928 --- /dev/null +++ b/Content.Server/GameObjects/EntitySystems/SignalLinkerSystem.cs @@ -0,0 +1,140 @@ +using Content.Server.GameObjects.Components.MachineLinking; +using Robust.Server.Interfaces.Console; +using Robust.Server.Interfaces.Player; +using Robust.Shared.GameObjects; +using Robust.Shared.GameObjects.Systems; +using Robust.Shared.Input; +using Robust.Shared.Input.Binding; +using Robust.Shared.Interfaces.GameObjects; +using Robust.Shared.IoC; +using Robust.Shared.Map; +using Robust.Shared.Network; +using Robust.Shared.Players; +using System.Collections.Generic; + +namespace Content.Server.GameObjects.EntitySystems +{ + public class SignalLinkerSystem : EntitySystem + { + private Dictionary _transmitters; + + public override void Initialize() + { + base.Initialize(); + + _transmitters = new Dictionary(); + } + + public void SignalLinkerKeybind(NetSessionId id, bool? enable) + { + if (enable == null) + { + enable = !_transmitters.ContainsKey(id); + } + + if (enable == true) + { + if (_transmitters.ContainsKey(id)) + { + return; + } + + if (_transmitters.Count == 0) + { + CommandBinds.Builder + .Bind(EngineKeyFunctions.Use, new PointerInputCmdHandler(HandleUse)) + .Register(); + } + + _transmitters.Add(id, null); + + } + else if (enable == false) + { + if (!_transmitters.ContainsKey(id)) + { + return; + } + + _transmitters.Remove(id); + if (_transmitters.Count == 0) + { + CommandBinds.Unregister(); + } + } + } + + private bool HandleUse(ICommonSession session, GridCoordinates coords, EntityUid uid) + { + if (!_transmitters.TryGetValue(session.SessionId, out var signalTransmitter)) + { + return false; + } + + if (!EntityManager.TryGetEntity(uid, out var entity)) + { + return false; + } + + if (entity == null) + { + return false; + } + + if (entity.TryGetComponent(out var signalReceiver)) + { + if (signalReceiver.Interact(session.AttachedEntity, signalTransmitter)) + { + return true; + } + } + + if (entity.TryGetComponent(out var transmitter)) + { + _transmitters[session.SessionId] = transmitter.GetSignal(session.AttachedEntity); + + return true; + } + + return false; + } + + } + + public class SignalLinkerCommand : IClientCommand + { + public string Command => "signallink"; + + public string Description => "Turns on signal linker mode. Click a transmitter to tune that signal and then click on each receiver to tune them to the transmitter signal."; + + public string Help => "signallink (on/off)"; + + public void Execute(IConsoleShell shell, IPlayerSession player, string[] args) + { + bool? enable = null; + if (args.Length > 0) + { + if (args[0] == "on") + enable = true; + else if (args[0] == "off") + enable = false; + else if (bool.TryParse(args[0], out var boolean)) + enable = boolean; + else if (int.TryParse(args[0], out var num)) + { + if (num == 1) + enable = true; + else if (num == 0) + enable = false; + } + } + + if (!IoCManager.Resolve().TryGetEntitySystem(out var system)) + { + return; + } + + system.SignalLinkerKeybind(player.SessionId, enable); + } + } +} diff --git a/Resources/Groups/groups.yml b/Resources/Groups/groups.yml index e7120fce27..85d071a009 100644 --- a/Resources/Groups/groups.yml +++ b/Resources/Groups/groups.yml @@ -101,6 +101,7 @@ - addaccent - readyall - factions + - signallink CanViewVar: true CanAdminPlace: true CanAdminMenu: true @@ -195,6 +196,7 @@ - addaccent - readyall - factions + - signallink CanViewVar: true CanAdminPlace: true CanScript: true diff --git a/Resources/Prototypes/Entities/Constructible/Walls/lighting.yml b/Resources/Prototypes/Entities/Constructible/Walls/lighting.yml index 06ee76322b..04c1f9ad2a 100644 --- a/Resources/Prototypes/Entities/Constructible/Walls/lighting.yml +++ b/Resources/Prototypes/Entities/Constructible/Walls/lighting.yml @@ -22,6 +22,7 @@ energy: 1.2 offset: "0.5, 0" color: "#DCDCC6" + - type: SignalReceiver placement: snap: - Wallmount diff --git a/Resources/Prototypes/Entities/Constructible/Walls/linking.yml b/Resources/Prototypes/Entities/Constructible/Walls/linking.yml new file mode 100644 index 0000000000..066e6745b1 --- /dev/null +++ b/Resources/Prototypes/Entities/Constructible/Walls/linking.yml @@ -0,0 +1,41 @@ +- type: entity + id: SignalSwitch + name: "signal switch" + components: + - type: Clickable + bounds: + all: -0.25,-0.375,0.25,0.375 + - type: InteractionOutline + - type: Collidable + - type: Sprite + sprite: Constructible/Linking/switch.rsi + state: on + - type: Icon + sprite: Constructible/Linking/switch.rsi + state: on + - type: SignalSwitch + - type: SignalTransmitter + placement: + snap: + - Wallmount + +- type: entity + id: SignalButton + name: "signal button" + components: + - type: Clickable + bounds: + all: -0.25,-0.375,0.25,0.375 + - type: InteractionOutline + - type: Collidable + - type: Sprite + sprite: Constructible/Linking/switch.rsi + state: dead + - type: Icon + sprite: Constructible/Linking/switch.rsi + state: dead + - type: SignalButton + - type: SignalTransmitter + placement: + snap: + - Wallmount diff --git a/Resources/Prototypes/Entities/Objects/Tools/tools.yml b/Resources/Prototypes/Entities/Objects/Tools/tools.yml index 51df8c6cac..bb8b312c91 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/tools.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/tools.yml @@ -185,6 +185,7 @@ - type: Tool qualities: - Multitool + - type: SignalLinker - type: entity name: jaws of life diff --git a/Resources/Textures/Constructible/Linking/switch.rsi/dead.png b/Resources/Textures/Constructible/Linking/switch.rsi/dead.png new file mode 100644 index 0000000000000000000000000000000000000000..7b6a4689e3f84da5608030074a66d92fbe4928c0 GIT binary patch literal 137 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvp#Yx{*8>L*tY5!ABqYS%-rmsA z5GY*miM)(IKOL2DPoF3B^; gjyL*tY5!ABqYS%-u^#> z@fik&uW$Ws17#UYg8YIR9G=}s19DV7T^vI+CMG9H{A&md5b$;Il=O9IUC^Mli(!}K inPbPESQlPkV)%TD@srfAReOLM7(8A5T-G@yGywo3=PUvM literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Linking/switch.rsi/on.png b/Resources/Textures/Constructible/Linking/switch.rsi/on.png new file mode 100644 index 0000000000000000000000000000000000000000..54f9cab6030686d15f34559ac4479ccca196b812 GIT binary patch literal 137 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvp#Yx{*8>L*tY5!ABqYS%-ro4X zvGEyW`z5m!fwGJxL4Lsu4$p3+0XeFkE{-7@6O$7p{xt*!2>3d9O8PpqE@;r&#js2A h%&}untP3wNF?>G7_(|&5sy#pr44$rjF6*2UngHceD=q*4 literal 0 HcmV?d00001 From cc1125cd915d41a9f7f656a795b3863c7cebcdcb Mon Sep 17 00:00:00 2001 From: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Date: Sat, 29 Aug 2020 20:46:42 +1000 Subject: [PATCH 016/103] No context menu through occluder (#1934) * No context menu through occluder * Fix disabled occluders * Comment * Server-side verb ray check Decided to add a buffer because the entity is at the very edge of the context box (0.5, 0.5) then need to make sure that entities at the other end of the box are ignored. Co-authored-by: Metal Gear Sloth --- .../GameObjects/EntitySystems/VerbSystem.cs | 17 +++-- .../GameObjects/EntitySystems/VerbSystem.cs | 7 +- .../GameObjects/Verbs/SharedVerbSystem.cs | 71 +++++++++++++++++++ 3 files changed, 87 insertions(+), 8 deletions(-) create mode 100644 Content.Shared/GameObjects/Verbs/SharedVerbSystem.cs diff --git a/Content.Client/GameObjects/EntitySystems/VerbSystem.cs b/Content.Client/GameObjects/EntitySystems/VerbSystem.cs index fb9c2c441d..7f26504431 100644 --- a/Content.Client/GameObjects/EntitySystems/VerbSystem.cs +++ b/Content.Client/GameObjects/EntitySystems/VerbSystem.cs @@ -7,13 +7,16 @@ using Content.Client.State; using Content.Client.UserInterface; using Content.Client.Utility; using Content.Shared.GameObjects.EntitySystemMessages; +using Content.Shared.GameObjects.EntitySystems; using Content.Shared.GameObjects.Verbs; using Content.Shared.Input; +using Content.Shared.Physics; using JetBrains.Annotations; using Robust.Client.GameObjects.EntitySystems; using Robust.Client.Graphics; using Robust.Client.Graphics.Drawing; using Robust.Client.Interfaces.GameObjects.Components; +using Robust.Client.Interfaces.Graphics.ClientEye; using Robust.Client.Interfaces.Input; using Robust.Client.Interfaces.ResourceManagement; using Robust.Client.Interfaces.State; @@ -29,6 +32,7 @@ using Robust.Shared.Input; using Robust.Shared.Input.Binding; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Map; +using Robust.Shared.Interfaces.Physics; using Robust.Shared.Interfaces.Timing; using Robust.Shared.IoC; using Robust.Shared.Log; @@ -40,7 +44,7 @@ using Timer = Robust.Shared.Timers.Timer; namespace Content.Client.GameObjects.EntitySystems { [UsedImplicitly] - public sealed class VerbSystem : EntitySystem + public sealed class VerbSystem : SharedVerbSystem { [Dependency] private readonly IStateManager _stateManager = default!; [Dependency] private readonly IEntityManager _entityManager = default!; @@ -63,7 +67,7 @@ namespace Content.Client.GameObjects.EntitySystems public override void Initialize() { base.Initialize(); - + SubscribeNetworkEvent(FillEntityPopup); IoCManager.InjectDependencies(this); @@ -114,12 +118,11 @@ namespace Content.Client.GameObjects.EntitySystems { return false; } - + var mapCoordinates = args.Coordinates.ToMap(_mapManager); - var entities = _entityManager.GetEntitiesIntersecting(mapCoordinates.MapId, - Box2.CenteredAround(mapCoordinates.Position, (0.5f, 0.5f))).ToList(); - - if (entities.Count == 0) + var playerEntity = _playerManager.LocalPlayer?.ControlledEntity; + + if (playerEntity == null || !TryGetContextEntities(playerEntity, mapCoordinates, out var entities)) { return false; } diff --git a/Content.Server/GameObjects/EntitySystems/VerbSystem.cs b/Content.Server/GameObjects/EntitySystems/VerbSystem.cs index 6b625cdf25..c48909ad1d 100644 --- a/Content.Server/GameObjects/EntitySystems/VerbSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/VerbSystem.cs @@ -12,7 +12,7 @@ using static Content.Shared.GameObjects.EntitySystemMessages.VerbSystemMessages; namespace Content.Server.GameObjects.EntitySystems { - public class VerbSystem : EntitySystem + public class VerbSystem : SharedVerbSystem { [Dependency] private readonly IEntityManager _entityManager = default!; @@ -93,6 +93,11 @@ namespace Content.Server.GameObjects.EntitySystems return; } + if (!TryGetContextEntities(userEntity, entity.Transform.MapPosition, out var entities, true) || !entities.Contains(entity)) + { + return; + } + var data = new List(); //Get verbs, component dependent. foreach (var (component, verb) in VerbUtility.GetVerbs(entity)) diff --git a/Content.Shared/GameObjects/Verbs/SharedVerbSystem.cs b/Content.Shared/GameObjects/Verbs/SharedVerbSystem.cs new file mode 100644 index 0000000000..51714a1198 --- /dev/null +++ b/Content.Shared/GameObjects/Verbs/SharedVerbSystem.cs @@ -0,0 +1,71 @@ +#nullable enable +using System; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Linq; +using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.Physics; +using Robust.Shared.GameObjects; +using Robust.Shared.GameObjects.Systems; +using Robust.Shared.Interfaces.GameObjects; +using Robust.Shared.Map; +using Robust.Shared.Maths; + +namespace Content.Shared.GameObjects.Verbs +{ + public class SharedVerbSystem : EntitySystem + { + private SharedInteractionSystem _interactionSystem = null!; + + public override void Initialize() + { + base.Initialize(); + _interactionSystem = Get(); + } + + /// + /// Get all of the entities relevant for the contextmenu + /// + /// + /// + /// + /// Whether we should slightly extend out the ignored range for the ray predicated + /// + protected bool TryGetContextEntities(IEntity player, MapCoordinates targetPos, [NotNullWhen(true)] out List? contextEntities, bool buffer = false) + { + contextEntities = null; + var length = buffer ? 1.0f: 0.5f; + + var entities = EntityManager.GetEntitiesIntersecting(targetPos.MapId, + Box2.CenteredAround(targetPos.Position, (length, length))).ToList(); + + if (entities.Count == 0) + { + return false; + } + + // Check if we have LOS to the clicked-location, otherwise no popup. + var vectorDiff = player.Transform.MapPosition.Position - targetPos.Position; + var distance = vectorDiff.Length + 0.01f; + Func ignored = entity => entities.Contains(entity) || + entity == player || + !entity.TryGetComponent(out OccluderComponent? occluder) || + !occluder.Enabled; + + var result = _interactionSystem.InRangeUnobstructed( + player.Transform.MapPosition, + targetPos, + distance, + (int) CollisionGroup.Opaque, + ignored); + + if (!result) + { + return false; + } + + contextEntities = entities; + return true; + } + } +} \ No newline at end of file From 033ddb04e06441ca2ba64916d79d1ff84521b167 Mon Sep 17 00:00:00 2001 From: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Date: Sat, 29 Aug 2020 20:47:03 +1000 Subject: [PATCH 017/103] Parent muzzle flashes to the shooter (#1935) I didn't do hitscan because it would look weird af unless someone has a better idea. Co-authored-by: Metal Gear Sloth --- .../Components/Weapon/Ranged/Ammunition/AmmoComponent.cs | 5 +++-- .../Weapon/Ranged/Barrels/ServerRangedBarrelComponent.cs | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/Content.Server/GameObjects/Components/Weapon/Ranged/Ammunition/AmmoComponent.cs b/Content.Server/GameObjects/Components/Weapon/Ranged/Ammunition/AmmoComponent.cs index e97f95973b..8e3df42259 100644 --- a/Content.Server/GameObjects/Components/Weapon/Ranged/Ammunition/AmmoComponent.cs +++ b/Content.Server/GameObjects/Components/Weapon/Ranged/Ammunition/AmmoComponent.cs @@ -128,7 +128,7 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Ammunition return entity; } - public void MuzzleFlash(GridCoordinates grid, Angle angle) + public void MuzzleFlash(IEntity entity, Angle angle) { if (_muzzleFlashSprite == null) { @@ -145,7 +145,8 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Ammunition EffectSprite = _muzzleFlashSprite, Born = time, DeathTime = deathTime, - Coordinates = grid.Translated(offset), + AttachedEntityUid = entity.Uid, + AttachedOffset = offset, //Rotated from east facing Rotation = (float) angle.Theta, Color = Vector4.Multiply(new Vector4(255, 255, 255, 255), 1.0f), diff --git a/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/ServerRangedBarrelComponent.cs b/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/ServerRangedBarrelComponent.cs index 454f165ee0..1ee780b0d9 100644 --- a/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/ServerRangedBarrelComponent.cs +++ b/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/ServerRangedBarrelComponent.cs @@ -260,7 +260,7 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Barrels if (CanMuzzleFlash) { - ammoComponent.MuzzleFlash(Owner.Transform.GridPosition, angle); + ammoComponent.MuzzleFlash(Owner, angle); } if (ammoComponent.Caseless) From ebc2d59f2e755dcab538bc6b349d442c7aa12a2d Mon Sep 17 00:00:00 2001 From: DTanxxx <55208219+DTanxxx@users.noreply.github.com> Date: Sat, 29 Aug 2020 22:50:43 +1200 Subject: [PATCH 018/103] Bullet only damage the first entity it collided with (#1912) Co-authored-by: David Tan <> --- .../Components/Projectiles/ProjectileComponent.cs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Content.Server/GameObjects/Components/Projectiles/ProjectileComponent.cs b/Content.Server/GameObjects/Components/Projectiles/ProjectileComponent.cs index d3395a5ca2..e9dd0df848 100644 --- a/Content.Server/GameObjects/Components/Projectiles/ProjectileComponent.cs +++ b/Content.Server/GameObjects/Components/Projectiles/ProjectileComponent.cs @@ -36,6 +36,8 @@ namespace Content.Server.GameObjects.Components.Projectiles private string _soundHit; private string _soundHitSpecies; + private bool _damagedEntity; + public override void ExposeData(ObjectSerializer serializer) { base.ExposeData(serializer); @@ -64,6 +66,11 @@ namespace Content.Server.GameObjects.Components.Projectiles /// void ICollideBehavior.CollideWith(IEntity entity) { + if (_damagedEntity) + { + return; + } + // This is so entities that shouldn't get a collision are ignored. if (entity.TryGetComponent(out ICollidableComponent collidable) && collidable.Hard == false) { @@ -91,6 +98,8 @@ namespace Content.Server.GameObjects.Components.Projectiles { damage.ChangeDamage(damageType, amount, false, shooter); } + + _damagedEntity = true; } if (!entity.Deleted && entity.TryGetComponent(out CameraRecoilComponent recoilComponent) From 6156ce3534d4b44206d2e7cd347dd3f51a794ea8 Mon Sep 17 00:00:00 2001 From: DrSmugleaf Date: Sat, 29 Aug 2020 13:00:16 +0200 Subject: [PATCH 019/103] Update submodule --- RobustToolbox | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RobustToolbox b/RobustToolbox index 56d0f04c05..6ffe2e1750 160000 --- a/RobustToolbox +++ b/RobustToolbox @@ -1 +1 @@ -Subproject commit 56d0f04c0536ddde3464bc93d49c37f1ed067239 +Subproject commit 6ffe2e1750a2fc2fd30664b0ea393dc4325f5143 From 566ed6b770e0ea0aa830be50330f7d5891479527 Mon Sep 17 00:00:00 2001 From: ancientpower Date: Sat, 29 Aug 2020 06:05:44 -0500 Subject: [PATCH 020/103] Adds the antimatter engine (#1905) * adds antimatter engine * fixes some nullables * fixes ALL OF THE NULLABLES * adds explosions * adds fancy lighting * requested changes + license info Co-authored-by: ancientpower --- Content.Client/EntryPoint.cs | 2 + .../AME/AMEControllerBoundUserInterface.cs | 62 +++ .../Power/AME/AMEControllerVisualizer.cs | 57 +++ .../Components/Power/AME/AMEVisualizer.cs | 63 +++ .../Components/Power/AME/AMEWindow.cs | 162 ++++++++ Content.Client/IgnoredComponents.cs | 3 + .../NodeContainer/NodeGroups/AMENodeGroup.cs | 152 ++++++++ .../NodeGroups/NodeGroupFactory.cs | 1 + .../Power/AME/AMEControllerComponent.cs | 369 ++++++++++++++++++ .../Power/AME/AMEFuelContainerComponent.cs | 45 +++ .../Components/Power/AME/AMEPartComponent.cs | 51 +++ .../Power/AME/AMEShieldComponent.cs | 73 ++++ .../EntitySystems/AntimatterEngineSystem.cs | 32 ++ .../Power/AME/SharedAMEControllerComponent.cs | 69 ++++ .../Power/AME/SharedAMEShieldComponent.cs | 27 ++ .../Power/AME/ame_controller.yml | 44 +++ .../Constructible/Power/AME/ame_structure.yml | 46 +++ .../Entities/Objects/Power/antimatter_jar.yml | 16 + .../Objects/Power/antimatter_part.yml | 16 + .../Power/ame_controller.rsi/control.png | Bin 0 -> 610 bytes .../ame_controller.rsi/control_critical.png | Bin 0 -> 1217 bytes .../Power/ame_controller.rsi/control_fuck.png | Bin 0 -> 2218 bytes .../Power/ame_controller.rsi/control_on.png | Bin 0 -> 959 bytes .../Power/ame_controller.rsi/meta.json | 120 ++++++ .../Power/ame_shielding.rsi/core.png | Bin 0 -> 1836 bytes .../Power/ame_shielding.rsi/core_strong.png | Bin 0 -> 5472 bytes .../Power/ame_shielding.rsi/core_weak.png | Bin 0 -> 2579 bytes .../Power/ame_shielding.rsi/meta.json | 192 +++++++++ .../Power/ame_shielding.rsi/shield_0.png | Bin 0 -> 425 bytes .../Power/ame_shielding.rsi/shield_1.png | Bin 0 -> 569 bytes .../Power/ame_shielding.rsi/shield_10.png | Bin 0 -> 659 bytes .../Power/ame_shielding.rsi/shield_11.png | Bin 0 -> 779 bytes .../Power/ame_shielding.rsi/shield_12.png | Bin 0 -> 839 bytes .../Power/ame_shielding.rsi/shield_13.png | Bin 0 -> 816 bytes .../Power/ame_shielding.rsi/shield_14.png | Bin 0 -> 864 bytes .../Power/ame_shielding.rsi/shield_15.png | Bin 0 -> 425 bytes .../Power/ame_shielding.rsi/shield_2.png | Bin 0 -> 564 bytes .../Power/ame_shielding.rsi/shield_3.png | Bin 0 -> 831 bytes .../Power/ame_shielding.rsi/shield_4.png | Bin 0 -> 467 bytes .../Power/ame_shielding.rsi/shield_5.png | Bin 0 -> 636 bytes .../Power/ame_shielding.rsi/shield_6.png | Bin 0 -> 637 bytes .../Power/ame_shielding.rsi/shield_7.png | Bin 0 -> 753 bytes .../Power/ame_shielding.rsi/shield_8.png | Bin 0 -> 535 bytes .../Power/ame_shielding.rsi/shield_9.png | Bin 0 -> 646 bytes .../Power/ame_shielding_base.png | Bin 0 -> 425 bytes .../Objects/Power/AME/ame_jar.rsi/jar.png | Bin 0 -> 473 bytes .../Objects/Power/AME/ame_jar.rsi/meta.json | 20 + .../Objects/Power/AME/ame_part.rsi/box.png | Bin 0 -> 384 bytes .../Objects/Power/AME/ame_part.rsi/meta.json | 20 + 49 files changed, 1642 insertions(+) create mode 100644 Content.Client/GameObjects/Components/Power/AME/AMEControllerBoundUserInterface.cs create mode 100644 Content.Client/GameObjects/Components/Power/AME/AMEControllerVisualizer.cs create mode 100644 Content.Client/GameObjects/Components/Power/AME/AMEVisualizer.cs create mode 100644 Content.Client/GameObjects/Components/Power/AME/AMEWindow.cs create mode 100644 Content.Server/GameObjects/Components/NodeContainer/NodeGroups/AMENodeGroup.cs create mode 100644 Content.Server/GameObjects/Components/Power/AME/AMEControllerComponent.cs create mode 100644 Content.Server/GameObjects/Components/Power/AME/AMEFuelContainerComponent.cs create mode 100644 Content.Server/GameObjects/Components/Power/AME/AMEPartComponent.cs create mode 100644 Content.Server/GameObjects/Components/Power/AME/AMEShieldComponent.cs create mode 100644 Content.Server/GameObjects/EntitySystems/AntimatterEngineSystem.cs create mode 100644 Content.Shared/GameObjects/Components/Power/AME/SharedAMEControllerComponent.cs create mode 100644 Content.Shared/GameObjects/Components/Power/AME/SharedAMEShieldComponent.cs create mode 100644 Resources/Prototypes/Entities/Constructible/Power/AME/ame_controller.yml create mode 100644 Resources/Prototypes/Entities/Constructible/Power/AME/ame_structure.yml create mode 100644 Resources/Prototypes/Entities/Objects/Power/antimatter_jar.yml create mode 100644 Resources/Prototypes/Entities/Objects/Power/antimatter_part.yml create mode 100644 Resources/Textures/Constructible/Power/ame_controller.rsi/control.png create mode 100644 Resources/Textures/Constructible/Power/ame_controller.rsi/control_critical.png create mode 100644 Resources/Textures/Constructible/Power/ame_controller.rsi/control_fuck.png create mode 100644 Resources/Textures/Constructible/Power/ame_controller.rsi/control_on.png create mode 100644 Resources/Textures/Constructible/Power/ame_controller.rsi/meta.json create mode 100644 Resources/Textures/Constructible/Power/ame_shielding.rsi/core.png create mode 100644 Resources/Textures/Constructible/Power/ame_shielding.rsi/core_strong.png create mode 100644 Resources/Textures/Constructible/Power/ame_shielding.rsi/core_weak.png create mode 100644 Resources/Textures/Constructible/Power/ame_shielding.rsi/meta.json create mode 100644 Resources/Textures/Constructible/Power/ame_shielding.rsi/shield_0.png create mode 100644 Resources/Textures/Constructible/Power/ame_shielding.rsi/shield_1.png create mode 100644 Resources/Textures/Constructible/Power/ame_shielding.rsi/shield_10.png create mode 100644 Resources/Textures/Constructible/Power/ame_shielding.rsi/shield_11.png create mode 100644 Resources/Textures/Constructible/Power/ame_shielding.rsi/shield_12.png create mode 100644 Resources/Textures/Constructible/Power/ame_shielding.rsi/shield_13.png create mode 100644 Resources/Textures/Constructible/Power/ame_shielding.rsi/shield_14.png create mode 100644 Resources/Textures/Constructible/Power/ame_shielding.rsi/shield_15.png create mode 100644 Resources/Textures/Constructible/Power/ame_shielding.rsi/shield_2.png create mode 100644 Resources/Textures/Constructible/Power/ame_shielding.rsi/shield_3.png create mode 100644 Resources/Textures/Constructible/Power/ame_shielding.rsi/shield_4.png create mode 100644 Resources/Textures/Constructible/Power/ame_shielding.rsi/shield_5.png create mode 100644 Resources/Textures/Constructible/Power/ame_shielding.rsi/shield_6.png create mode 100644 Resources/Textures/Constructible/Power/ame_shielding.rsi/shield_7.png create mode 100644 Resources/Textures/Constructible/Power/ame_shielding.rsi/shield_8.png create mode 100644 Resources/Textures/Constructible/Power/ame_shielding.rsi/shield_9.png create mode 100644 Resources/Textures/Constructible/Power/ame_shielding_base.png create mode 100644 Resources/Textures/Objects/Power/AME/ame_jar.rsi/jar.png create mode 100644 Resources/Textures/Objects/Power/AME/ame_jar.rsi/meta.json create mode 100644 Resources/Textures/Objects/Power/AME/ame_part.rsi/box.png create mode 100644 Resources/Textures/Objects/Power/AME/ame_part.rsi/meta.json diff --git a/Content.Client/EntryPoint.cs b/Content.Client/EntryPoint.cs index a4edb0736c..006199f5e7 100644 --- a/Content.Client/EntryPoint.cs +++ b/Content.Client/EntryPoint.cs @@ -18,6 +18,7 @@ using Content.Shared.GameObjects.Components.Chemistry.ChemMaster; using Content.Shared.GameObjects.Components.Chemistry.ReagentDispenser; using Content.Shared.GameObjects.Components.Gravity; using Content.Shared.GameObjects.Components.Markers; +using Content.Shared.GameObjects.Components.Power.AME; using Content.Shared.GameObjects.Components.Research; using Content.Shared.GameObjects.Components.VendingMachines; using Content.Shared.Kitchen; @@ -72,6 +73,7 @@ namespace Content.Client factory.Register(); factory.Register(); factory.Register(); + factory.Register(); prototypes.RegisterIgnore("material"); prototypes.RegisterIgnore("reaction"); //Chemical reactions only needed by server. Reactions checks are server-side. diff --git a/Content.Client/GameObjects/Components/Power/AME/AMEControllerBoundUserInterface.cs b/Content.Client/GameObjects/Components/Power/AME/AMEControllerBoundUserInterface.cs new file mode 100644 index 0000000000..ff0bcff85e --- /dev/null +++ b/Content.Client/GameObjects/Components/Power/AME/AMEControllerBoundUserInterface.cs @@ -0,0 +1,62 @@ +using Robust.Client.GameObjects.Components.UserInterface; +using Robust.Shared.GameObjects.Components.UserInterface; +using static Content.Shared.GameObjects.Components.Power.AME.SharedAMEControllerComponent; + +namespace Content.Client.GameObjects.Components.Power.AME +{ + public class AMEControllerBoundUserInterface : BoundUserInterface + { + private AMEWindow _window; + + public AMEControllerBoundUserInterface(ClientUserInterfaceComponent owner, object uiKey) : base(owner, uiKey) + { + + } + + protected override void Open() + { + base.Open(); + + _window = new AMEWindow(); + _window.OnClose += Close; + _window.OpenCentered(); + + _window.EjectButton.OnPressed += _ => ButtonPressed(UiButton.Eject); + _window.ToggleInjection.OnPressed += _ => ButtonPressed(UiButton.ToggleInjection); + _window.IncreaseFuelButton.OnPressed += _ => ButtonPressed(UiButton.IncreaseFuel); + _window.DecreaseFuelButton.OnPressed += _ => ButtonPressed(UiButton.DecreaseFuel); + _window.RefreshPartsButton.OnPressed += _ => ButtonPressed(UiButton.RefreshParts); + } + + + /// + /// Update the ui each time new state data is sent from the server. + /// + /// + /// Data of the that this ui represents. + /// Sent from the server. + /// + protected override void UpdateState(BoundUserInterfaceState state) + { + base.UpdateState(state); + + var castState = (AMEControllerBoundUserInterfaceState) state; + _window?.UpdateState(castState); //Update window state + } + + private void ButtonPressed(UiButton button, int dispenseIndex = -1) + { + SendMessage(new UiButtonPressedMessage(button)); + } + + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + + if (disposing) + { + _window.Dispose(); + } + } + } +} diff --git a/Content.Client/GameObjects/Components/Power/AME/AMEControllerVisualizer.cs b/Content.Client/GameObjects/Components/Power/AME/AMEControllerVisualizer.cs new file mode 100644 index 0000000000..4345b68f5b --- /dev/null +++ b/Content.Client/GameObjects/Components/Power/AME/AMEControllerVisualizer.cs @@ -0,0 +1,57 @@ +using Robust.Client.GameObjects; +using Robust.Client.Interfaces.GameObjects.Components; +using Robust.Shared.Interfaces.GameObjects; +using System; +using System.Collections.Generic; +using System.Text; +using static Content.Shared.GameObjects.Components.Power.AME.SharedAMEControllerComponent; + +namespace Content.Client.GameObjects.Components.Power.AME +{ + public class AMEControllerVisualizer : AppearanceVisualizer + { + public override void InitializeEntity(IEntity entity) + { + base.InitializeEntity(entity); + var sprite = entity.GetComponent(); + + sprite.LayerMapSet(Layers.Display, sprite.AddLayerState("control_on")); + sprite.LayerSetVisible(Layers.Display, false); + } + + public override void OnChangeData(AppearanceComponent component) + { + base.OnChangeData(component); + var sprite = component.Owner.GetComponent(); + if (component.TryGetData(AMEControllerVisuals.DisplayState, out var state)) + { + switch (state) + { + case "on": + sprite.LayerSetState(Layers.Display, "control_on"); + sprite.LayerSetVisible(Layers.Display, true); + break; + case "critical": + sprite.LayerSetState(Layers.Display, "control_critical"); + sprite.LayerSetVisible(Layers.Display, true); + break; + case "fuck": + sprite.LayerSetState(Layers.Display, "control_fuck"); + sprite.LayerSetVisible(Layers.Display, true); + break; + case "off": + sprite.LayerSetVisible(Layers.Display, false); + break; + default: + sprite.LayerSetVisible(Layers.Display, false); + break; + } + } + } + + enum Layers + { + Display, + } + } +} diff --git a/Content.Client/GameObjects/Components/Power/AME/AMEVisualizer.cs b/Content.Client/GameObjects/Components/Power/AME/AMEVisualizer.cs new file mode 100644 index 0000000000..45104ed27a --- /dev/null +++ b/Content.Client/GameObjects/Components/Power/AME/AMEVisualizer.cs @@ -0,0 +1,63 @@ +using Robust.Client.GameObjects; +using Robust.Client.Interfaces.GameObjects.Components; +using Robust.Shared.Interfaces.GameObjects; +using System; +using System.Collections.Generic; +using System.Text; +using static Content.Shared.GameObjects.Components.Power.AME.SharedAMEShieldComponent; + +namespace Content.Client.GameObjects.Components.Power.AME +{ + public class AMEVisualizer : AppearanceVisualizer + { + public override void InitializeEntity(IEntity entity) + { + base.InitializeEntity(entity); + var sprite = entity.GetComponent(); + sprite.LayerMapSet(Layers.Core, sprite.AddLayerState("core")); + sprite.LayerSetVisible(Layers.Core, false); + sprite.LayerMapSet(Layers.CoreState, sprite.AddLayerState("core_weak")); + sprite.LayerSetVisible(Layers.CoreState, false); + } + + public override void OnChangeData(AppearanceComponent component) + { + base.OnChangeData(component); + var sprite = component.Owner.GetComponent(); + if (component.TryGetData(AMEShieldVisuals.Core, out var core)) + { + if (core == "isCore") + { + sprite.LayerSetState(Layers.Core, "core"); + sprite.LayerSetVisible(Layers.Core, true); + } + else + { + sprite.LayerSetVisible(Layers.Core, false); + } + } + + if (component.TryGetData(AMEShieldVisuals.CoreState, out var coreState)) + switch (coreState) + { + case "weak": + sprite.LayerSetState(Layers.CoreState, "core_weak"); + sprite.LayerSetVisible(Layers.CoreState, true); + break; + case "strong": + sprite.LayerSetState(Layers.CoreState, "core_strong"); + sprite.LayerSetVisible(Layers.CoreState, true); + break; + case "off": + sprite.LayerSetVisible(Layers.CoreState, false); + break; + } + } + } + + enum Layers + { + Core, + CoreState, + } +} diff --git a/Content.Client/GameObjects/Components/Power/AME/AMEWindow.cs b/Content.Client/GameObjects/Components/Power/AME/AMEWindow.cs new file mode 100644 index 0000000000..8a588035ab --- /dev/null +++ b/Content.Client/GameObjects/Components/Power/AME/AMEWindow.cs @@ -0,0 +1,162 @@ +using Content.Client.UserInterface.Stylesheets; +using Robust.Client.UserInterface; +using Robust.Client.UserInterface.Controls; +using Robust.Client.UserInterface.CustomControls; +using Robust.Shared.GameObjects.Components.UserInterface; +using Robust.Shared.IoC; +using Robust.Shared.Localization; +using System; +using System.Collections.Generic; +using System.Text; +using static Content.Shared.GameObjects.Components.Power.AME.SharedAMEControllerComponent; + +namespace Content.Client.GameObjects.Components.Power.AME +{ + public class AMEWindow : SS14Window + { + public Label InjectionStatus { get; set; } + public Button EjectButton { get; set; } + public Button ToggleInjection { get; set; } + public Button IncreaseFuelButton { get; set; } + public Button DecreaseFuelButton { get; set; } + public Button RefreshPartsButton { get; set; } + public ProgressBar FuelMeter { get; set; } + public Label FuelAmount { get; set; } + public Label InjectionAmount { get; set; } + public Label CoreCount { get; set; } + + + public AMEWindow() + { + IoCManager.InjectDependencies(this); + + Title = "Antimatter Control Unit"; + Contents.AddChild(new VBoxContainer + { + Children = + { + new HBoxContainer + { + Children = + { + new Label {Text = Loc.GetString("Engine Status") + ": "}, + (InjectionStatus = new Label {Text = "Not Injecting"}) + } + }, + new HBoxContainer + { + Children = + { + (ToggleInjection = new Button {Text = "Toggle Injection", StyleClasses = {StyleBase.ButtonOpenBoth}, Disabled = true}), + } + }, + new HBoxContainer + { + Children = + { + new Label {Text = Loc.GetString("Fuel Status") + ": "}, + (FuelAmount = new Label {Text = "No fuel inserted"}) + } + }, + new HBoxContainer + { + Children = + { + (EjectButton = new Button {Text = "Eject", StyleClasses = {StyleBase.ButtonOpenBoth}, Disabled = true}), + } + }, + new HBoxContainer + { + Children = + { + new Label {Text = Loc.GetString("Injection amount") + ": "}, + (InjectionAmount = new Label {Text = "0"}) + } + }, + new HBoxContainer + { + Children = + { + (IncreaseFuelButton = new Button {Text = "Increase", StyleClasses = {StyleBase.ButtonOpenRight}}), + (DecreaseFuelButton = new Button {Text = "Decrease", StyleClasses = {StyleBase.ButtonOpenLeft}}), + } + }, + new HBoxContainer + { + Children = + { + (RefreshPartsButton = new Button {Text = "Refresh Parts", StyleClasses = {StyleBase.ButtonOpenBoth }, Disabled = true }), + new Label { Text = Loc.GetString("Core count") + ": "}, + (CoreCount = new Label { Text = "0"}), + } + } + } + }); + + } + + + /// + /// This searches recursively through all the children of "parent" + /// and sets the Disabled value of any buttons found to "val" + /// + /// The control which childrens get searched + /// The value to which disabled gets set + private void SetButtonDisabledRecursive(Control parent, bool val) + { + foreach (var child in parent.Children) + { + if (child is Button but) + { + but.Disabled = val; + continue; + } + + if (child.Children != null) + { + SetButtonDisabledRecursive(child, val); + } + } + } + + /// + /// Update the UI state when new state data is received from the server. + /// + /// State data sent by the server. + public void UpdateState(BoundUserInterfaceState state) + { + var castState = (AMEControllerBoundUserInterfaceState) state; + + // Disable all buttons if not powered + if (Contents.Children != null) + { + SetButtonDisabledRecursive(Contents, !castState.HasPower); + EjectButton.Disabled = false; + } + + if(!castState.HasFuelJar) + { + EjectButton.Disabled = true; + ToggleInjection.Disabled = true; + FuelAmount.Text = Loc.GetString("No fuel inserted"); + } + else + { + EjectButton.Disabled = false; + ToggleInjection.Disabled = false; + FuelAmount.Text = $"{castState.FuelAmount}"; + } + + if(!castState.IsMaster) + { + ToggleInjection.Disabled = true; + } + + RefreshPartsButton.Disabled = castState.Injecting; + + CoreCount.Text = $"{castState.CoreCount}"; + InjectionAmount.Text = $"{castState.InjectionAmount}"; + + } + } +} diff --git a/Content.Client/IgnoredComponents.cs b/Content.Client/IgnoredComponents.cs index 5d3cca4938..9aceb3988d 100644 --- a/Content.Client/IgnoredComponents.cs +++ b/Content.Client/IgnoredComponents.cs @@ -160,6 +160,9 @@ "Metabolism", "AiFactionTag", "PressureProtection", + "AMEPart", + "AMEFuelContainer", + "AMEShield", "DebugPump", "DebugVent", "DebugSiphon", diff --git a/Content.Server/GameObjects/Components/NodeContainer/NodeGroups/AMENodeGroup.cs b/Content.Server/GameObjects/Components/NodeContainer/NodeGroups/AMENodeGroup.cs new file mode 100644 index 0000000000..93fcaae955 --- /dev/null +++ b/Content.Server/GameObjects/Components/NodeContainer/NodeGroups/AMENodeGroup.cs @@ -0,0 +1,152 @@ +using Content.Server.Explosions; +using Content.Server.GameObjects.Components.NodeContainer.Nodes; +using Content.Server.GameObjects.Components.Power.AME; +using Robust.Shared.GameObjects.Components.Transform; +using Robust.Shared.ViewVariables; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace Content.Server.GameObjects.Components.NodeContainer.NodeGroups +{ + /// + /// Node group class for handling the Antimatter Engine's console and parts. + /// + [NodeGroup(NodeGroupID.AMEngine)] + public class AMENodeGroup : BaseNodeGroup + { + /// + /// The AME controller which is currently in control of this node group. + /// This could be tracked a few different ways, but this is most convenient, + /// since any part connected to the node group can easily find the master. + /// + [ViewVariables] + private AMEControllerComponent _masterController; + + public AMEControllerComponent MasterController => _masterController; + + private List _cores = new List(); + + public int CoreCount => _cores.Count; + + protected override void OnAddNode(Node node) + { + base.OnAddNode(node); + if (_masterController == null) + { + node.Owner.TryGetComponent(out var controller); + _masterController = controller; + } + } + + protected override void OnRemoveNode(Node node) + { + base.OnRemoveNode(node); + RefreshAMENodes(_masterController); + if (_masterController != null && _masterController?.Owner == node.Owner) { _masterController = null; } + } + + public void RefreshAMENodes(AMEControllerComponent controller) + { + if(_masterController == null && controller != null) + { + _masterController = controller; + } + + if (_cores != null) { + foreach (AMEShieldComponent core in _cores) + { + core.UnsetCore(); + } + _cores.Clear(); + } + + //Check each shield node to see if it meets core criteria + foreach (Node node in Nodes) + { + if (!node.Owner.TryGetComponent(out var shield)) { continue; } + var nodeNeighbors = node.Owner + .GetComponent() + .GetCellsInSquareArea() + .Select(sgc => sgc.Owner) + .Where(entity => entity != node.Owner) + .Select(entity => entity.TryGetComponent(out var adjshield) ? adjshield : null) + .Where(adjshield => adjshield != null); + + if (nodeNeighbors.Count() >= 8) { _cores.Add(shield); } + } + + if (_cores == null) { return; } + + foreach (AMEShieldComponent core in _cores) + { + core.SetCore(); + } + } + + public void UpdateCoreVisuals(int injectionAmount, bool injecting) + { + + var injectionStrength = CoreCount > 0 ? injectionAmount / CoreCount : 0; + + foreach (AMEShieldComponent core in _cores) + { + core.UpdateCoreVisuals(injectionStrength, injecting); + } + } + + public int InjectFuel(int injectionAmount) + { + if(injectionAmount > 0 && CoreCount > 0) + { + var instability = 2 * (injectionAmount / CoreCount); + foreach(AMEShieldComponent core in _cores) + { + core.CoreIntegrity -= instability; + } + return CoreCount * injectionAmount * 15000; //2 core engine injecting 2 fuel per core = 60kW(?) + } + return 0; + } + + public int GetTotalStability() + { + if(CoreCount < 1) { return 100; } + var stability = 0; + + foreach(AMEShieldComponent core in _cores) + { + stability += core.CoreIntegrity; + } + + stability = stability / CoreCount; + + return stability; + } + + public void ExplodeCores() + { + if(_cores.Count < 1 || MasterController == null) { return; } + + var intensity = 0; + + /* + * todo: add an exact to the shielding and make this find the core closest to the controller + * so they chain explode, after helpers have been added to make it not cancer + */ + var epicenter = _cores.First(); + + foreach (AMEShieldComponent core in _cores) + { + intensity += MasterController.InjectionAmount; + } + + intensity = Math.Min(intensity, 8); + + ExplosionHelper.SpawnExplosion(epicenter.Owner.Transform.GridPosition, intensity / 2, intensity, intensity * 2, intensity * 3); + + } + + } +} diff --git a/Content.Server/GameObjects/Components/NodeContainer/NodeGroups/NodeGroupFactory.cs b/Content.Server/GameObjects/Components/NodeContainer/NodeGroups/NodeGroupFactory.cs index 2133f67134..557035524f 100644 --- a/Content.Server/GameObjects/Components/NodeContainer/NodeGroups/NodeGroupFactory.cs +++ b/Content.Server/GameObjects/Components/NodeContainer/NodeGroups/NodeGroupFactory.cs @@ -62,6 +62,7 @@ namespace Content.Server.GameObjects.Components.NodeContainer.NodeGroups HVPower, MVPower, Apc, + AMEngine, Pipe, } } diff --git a/Content.Server/GameObjects/Components/Power/AME/AMEControllerComponent.cs b/Content.Server/GameObjects/Components/Power/AME/AMEControllerComponent.cs new file mode 100644 index 0000000000..92ab6732fd --- /dev/null +++ b/Content.Server/GameObjects/Components/Power/AME/AMEControllerComponent.cs @@ -0,0 +1,369 @@ +#nullable enable +using Content.Server.GameObjects.Components.GUI; +using Content.Server.GameObjects.Components.Items.Storage; +using Content.Server.GameObjects.Components.NodeContainer; +using Content.Server.GameObjects.Components.NodeContainer.NodeGroups; +using Content.Server.GameObjects.Components.NodeContainer.Nodes; +using Content.Server.GameObjects.Components.Power.ApcNetComponents; +using Content.Server.GameObjects.Components.Power.PowerNetComponents; +using Content.Server.Interfaces; +using Content.Server.Interfaces.GameObjects.Components.Items; +using Content.Server.Utility; +using Content.Shared.GameObjects.Components.Power.AME; +using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.Interfaces.GameObjects.Components; +using Microsoft.EntityFrameworkCore.Internal; +using Robust.Server.GameObjects; +using Robust.Server.GameObjects.Components.Container; +using Robust.Server.GameObjects.Components.UserInterface; +using Robust.Server.GameObjects.EntitySystems; +using Robust.Server.Interfaces.GameObjects; +using Robust.Shared.Audio; +using Robust.Shared.GameObjects; +using Robust.Shared.GameObjects.Components.Transform; +using Robust.Shared.GameObjects.Systems; +using Robust.Shared.Interfaces.GameObjects; +using Robust.Shared.Interfaces.GameObjects.Components; +using Robust.Shared.IoC; +using Robust.Shared.Localization; +using Robust.Shared.ViewVariables; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Content.Server.GameObjects.Components.Power.AME +{ + [RegisterComponent] + [ComponentReference(typeof(IActivate))] + [ComponentReference(typeof(IInteractUsing))] + public class AMEControllerComponent : SharedAMEControllerComponent, IActivate, IInteractUsing + { + [Dependency] private readonly IServerNotifyManager _notifyManager = default!; + + [ViewVariables] private BoundUserInterface? UserInterface => Owner.GetUIOrNull(AMEControllerUiKey.Key); + [ViewVariables] private bool _injecting; + [ViewVariables] public int InjectionAmount; + + private AppearanceComponent? _appearance; + private PowerSupplierComponent? _powerSupplier; + + private bool Powered => !Owner.TryGetComponent(out PowerReceiverComponent? receiver) || receiver.Powered; + + [ViewVariables] + private int _stability = 100; + + private ContainerSlot _jarSlot = default!; + [ViewVariables] private bool HasJar => _jarSlot.ContainedEntity != null; + + public override void Initialize() + { + base.Initialize(); + + if (UserInterface != null) + { + UserInterface.OnReceiveMessage += OnUiReceiveMessage; + } + + Owner.TryGetComponent(out _appearance); + + if (Owner.TryGetComponent(out PowerReceiverComponent? receiver)) + { + receiver.OnPowerStateChanged += OnPowerChanged; + } + + Owner.TryGetComponent(out _powerSupplier); + + _injecting = false; + InjectionAmount = 2; + _jarSlot = ContainerManagerComponent.Ensure($"{Name}-fuelJarContainer", Owner); + } + + internal void OnUpdate(float frameTime) + { + if(!_injecting) + { + return; + } + + _jarSlot.ContainedEntity.TryGetComponent(out var fuelJar); + if(fuelJar != null && _powerSupplier != null && fuelJar.FuelAmount > InjectionAmount) + { + _powerSupplier.SupplyRate = GetAMENodeGroup().InjectFuel(InjectionAmount); + fuelJar.FuelAmount -= InjectionAmount; + InjectSound(); + UpdateUserInterface(); + } + + _stability = GetAMENodeGroup().GetTotalStability(); + + UpdateDisplay(_stability); + + if(_stability <= 0) { GetAMENodeGroup().ExplodeCores(); } + + } + + /// + /// Called when you click the owner entity with an empty hand. Opens the UI client-side if possible. + /// + /// Data relevant to the event such as the actor which triggered it. + void IActivate.Activate(ActivateEventArgs args) + { + if (!args.User.TryGetComponent(out IActorComponent? actor)) + { + return; + } + + if (!args.User.TryGetComponent(out IHandsComponent? hands)) + { + _notifyManager.PopupMessage(Owner.Transform.GridPosition, args.User, + Loc.GetString("You have no hands.")); + return; + } + + var activeHandEntity = hands.GetActiveHand?.Owner; + if (activeHandEntity == null) + { + UserInterface?.Open(actor.playerSession); + } + } + + private void OnPowerChanged(object? sender, PowerStateEventArgs e) + { + UpdateUserInterface(); + } + + private AMEControllerBoundUserInterfaceState GetUserInterfaceState() + { + var jar = _jarSlot.ContainedEntity; + if (jar == null) + { + return new AMEControllerBoundUserInterfaceState(Powered, IsMasterController(), false, HasJar, 0, InjectionAmount, GetCoreCount()); + } + + var jarcomponent = jar.GetComponent(); + return new AMEControllerBoundUserInterfaceState(Powered, IsMasterController(), _injecting, HasJar, jarcomponent.FuelAmount, InjectionAmount, GetCoreCount()); + } + + /// + /// Checks whether the player entity is able to use the controller. + /// + /// The player entity. + /// Returns true if the entity can use the controller, and false if it cannot. + private bool PlayerCanUseController(IEntity playerEntity, bool needsPower = true) + { + //Need player entity to check if they are still able to use the dispenser + if (playerEntity == null) + return false; + //Check if player can interact in their current state + if (!ActionBlockerSystem.CanInteract(playerEntity) || !ActionBlockerSystem.CanUse(playerEntity)) + return false; + //Check if device is powered + if (needsPower && !Powered) + return false; + + return true; + } + + private void UpdateUserInterface() + { + var state = GetUserInterfaceState(); + UserInterface?.SetState(state); + } + + /// + /// Handles ui messages from the client. For things such as button presses + /// which interact with the world and require server action. + /// + /// A user interface message from the client. + private void OnUiReceiveMessage(ServerBoundUserInterfaceMessage obj) + { + if (obj.Session.AttachedEntity == null) + { + return; + } + + var msg = (UiButtonPressedMessage) obj.Message; + var needsPower = msg.Button switch + { + UiButton.Eject => false, + _ => true, + }; + + if (!PlayerCanUseController(obj.Session.AttachedEntity, needsPower)) + return; + + switch (msg.Button) + { + case UiButton.Eject: + TryEject(obj.Session.AttachedEntity); + break; + case UiButton.ToggleInjection: + ToggleInjection(); + break; + case UiButton.IncreaseFuel: + InjectionAmount += 2; + break; + case UiButton.DecreaseFuel: + InjectionAmount = InjectionAmount > 0 ? InjectionAmount -= 2 : 0; + break; + case UiButton.RefreshParts: + RefreshParts(); + break; + } + + GetAMENodeGroup().UpdateCoreVisuals(InjectionAmount, _injecting); + + UpdateUserInterface(); + ClickSound(); + } + + private void TryEject(IEntity user) + { + if (!HasJar || _injecting) + return; + + var jar = _jarSlot.ContainedEntity; + _jarSlot.Remove(_jarSlot.ContainedEntity); + UpdateUserInterface(); + + if (!user.TryGetComponent(out var hands) || !jar.TryGetComponent(out var item)) + return; + if (hands.CanPutInHand(item)) + hands.PutInHand(item); + } + + private void ToggleInjection() + { + if (!_injecting) + { + _appearance?.SetData(AMEControllerVisuals.DisplayState, "on"); + } + else + { + _appearance?.SetData(AMEControllerVisuals.DisplayState, "off"); + if (_powerSupplier != null) + { + _powerSupplier.SupplyRate = 0; + } + } + _injecting = !_injecting; + UpdateUserInterface(); + } + + + private void UpdateDisplay(int stability) + { + if(_appearance == null) { return; } + + _appearance.TryGetData(AMEControllerVisuals.DisplayState, out var state); + + var newState = "on"; + if (stability < 50) { newState = "critical"; } + if (stability < 10) { newState = "fuck"; } + + if (state != newState) + { + _appearance?.SetData(AMEControllerVisuals.DisplayState, newState); + } + + } + + private void RefreshParts() + { + GetAMENodeGroup().RefreshAMENodes(this); + UpdateUserInterface(); + } + + private AMENodeGroup GetAMENodeGroup() + { + Owner.TryGetComponent(out NodeContainerComponent? nodeContainer); + + var engineNodeGroup = nodeContainer?.Nodes + .Select(node => node.NodeGroup) + .OfType() + .First(); + + return engineNodeGroup ?? default!; + } + + private bool IsMasterController() + { + if(GetAMENodeGroup().MasterController == this) + { + return true; + } + + return false; + } + + private int GetCoreCount() + { + var coreCount = 0; + + if(GetAMENodeGroup() != null) + { + coreCount = GetAMENodeGroup().CoreCount; + } + + return coreCount; + } + + + private void ClickSound() + { + + EntitySystem.Get().PlayFromEntity("/Audio/Machines/machine_switch.ogg", Owner, AudioParams.Default.WithVolume(-2f)); + + } + + private void InjectSound() + { + EntitySystem.Get().PlayFromEntity("/Audio/Effects/bang.ogg", Owner, AudioParams.Default.WithVolume(0f)); + } + + async Task IInteractUsing.InteractUsing(InteractUsingEventArgs args) + { + if (!args.User.TryGetComponent(out IHandsComponent? hands)) + { + _notifyManager.PopupMessage(Owner.Transform.GridPosition, args.User, + Loc.GetString("You have no hands.")); + return true; + } + + if (hands.GetActiveHand == null) + { + _notifyManager.PopupMessage(Owner.Transform.GridPosition, args.User, + Loc.GetString("You have nothing on your hand.")); + return false; + } + + var activeHandEntity = hands.GetActiveHand.Owner; + if (activeHandEntity.TryGetComponent(out var fuelContainer)) + { + if (HasJar) + { + _notifyManager.PopupMessage(Owner.Transform.GridPosition, args.User, + Loc.GetString("The controller already has a jar loaded.")); + } + + else + { + _jarSlot.Insert(activeHandEntity); + _notifyManager.PopupMessage(Owner.Transform.GridPosition, args.User, + Loc.GetString("You insert the jar into the fuel slot.")); + UpdateUserInterface(); + } + } + else + { + _notifyManager.PopupMessage(Owner.Transform.GridPosition, args.User, + Loc.GetString("You can't put that in the controller...")); + } + + return true; + } + } + +} diff --git a/Content.Server/GameObjects/Components/Power/AME/AMEFuelContainerComponent.cs b/Content.Server/GameObjects/Components/Power/AME/AMEFuelContainerComponent.cs new file mode 100644 index 0000000000..af88584187 --- /dev/null +++ b/Content.Server/GameObjects/Components/Power/AME/AMEFuelContainerComponent.cs @@ -0,0 +1,45 @@ +using Robust.Shared.GameObjects; +using Robust.Shared.ViewVariables; +using System; +using System.Collections.Generic; +using System.Text; + +namespace Content.Server.GameObjects.Components.Power.AME +{ + [RegisterComponent] + public class AMEFuelContainerComponent : Component + { + public override string Name => "AMEFuelContainer"; + + private int _fuelAmount; + private int _maxFuelAmount; + + /// + /// The amount of fuel in the jar. + /// + [ViewVariables(VVAccess.ReadWrite)] + public int FuelAmount + { + get => _fuelAmount; + set => _fuelAmount = value; + } + + /// + /// The maximum fuel capacity of the jar. + /// + [ViewVariables(VVAccess.ReadWrite)] + public int MaxFuelAmount + { + get => _maxFuelAmount; + set => _maxFuelAmount = value; + } + + public override void Initialize() + { + base.Initialize(); + _maxFuelAmount = 1000; + _fuelAmount = 1000; + } + + } +} diff --git a/Content.Server/GameObjects/Components/Power/AME/AMEPartComponent.cs b/Content.Server/GameObjects/Components/Power/AME/AMEPartComponent.cs new file mode 100644 index 0000000000..45d951d203 --- /dev/null +++ b/Content.Server/GameObjects/Components/Power/AME/AMEPartComponent.cs @@ -0,0 +1,51 @@ +using Content.Server.GameObjects.Components.Interactable; +using Content.Server.Interfaces; +using Content.Server.Interfaces.GameObjects.Components.Items; +using Content.Shared.GameObjects.Components.Interactable; +using Content.Shared.Interfaces.GameObjects.Components; +using Robust.Server.Interfaces.GameObjects; +using Robust.Shared.GameObjects; +using Robust.Shared.GameObjects.Components.Transform; +using Robust.Shared.Interfaces.Map; +using Robust.Shared.IoC; +using Robust.Shared.Localization; +using System.Threading.Tasks; + +namespace Content.Server.GameObjects.Components.Power.AME +{ + [RegisterComponent] + [ComponentReference(typeof(IInteractUsing))] + public class AMEPartComponent : Component, IInteractUsing + { + [Dependency] private readonly IMapManager _mapManager = default!; + [Dependency] private readonly IServerEntityManager _serverEntityManager = default!; + [Dependency] private readonly IServerNotifyManager _notifyManager = default!; + public override string Name => "AMEPart"; + + async Task IInteractUsing.InteractUsing(InteractUsingEventArgs args) + { + if (!args.User.TryGetComponent(out IHandsComponent hands)) + { + _notifyManager.PopupMessage(Owner.Transform.GridPosition, args.User, + Loc.GetString("You have no hands.")); + return true; + } + + var activeHandEntity = hands.GetActiveHand.Owner; + if (activeHandEntity.TryGetComponent(out var multitool) && multitool.Qualities == ToolQuality.Multitool) + { + + var mapGrid = _mapManager.GetGrid(args.ClickLocation.GridID); + var tile = mapGrid.GetTileRef(args.ClickLocation); + var snapPos = mapGrid.SnapGridCellFor(args.ClickLocation, SnapGridOffset.Center); + + var ent = _serverEntityManager.SpawnEntity("AMEShielding", mapGrid.GridTileToLocal(snapPos)); + ent.Transform.LocalRotation = Owner.Transform.LocalRotation; + + Owner.Delete(); + } + + return true; + } + } +} diff --git a/Content.Server/GameObjects/Components/Power/AME/AMEShieldComponent.cs b/Content.Server/GameObjects/Components/Power/AME/AMEShieldComponent.cs new file mode 100644 index 0000000000..7ae88049df --- /dev/null +++ b/Content.Server/GameObjects/Components/Power/AME/AMEShieldComponent.cs @@ -0,0 +1,73 @@ +#nullable enable +using Content.Shared.GameObjects.Components.Power.AME; +using Robust.Server.GameObjects; +using Robust.Shared.GameObjects; +using Robust.Shared.ViewVariables; +using System; +using System.Collections.Generic; +using System.Text; + +namespace Content.Server.GameObjects.Components.Power.AME +{ + [RegisterComponent] + public class AMEShieldComponent : SharedAMEShieldComponent + { + + private bool _isCore = false; + + [ViewVariables] + public int CoreIntegrity = 100; + + private AppearanceComponent? _appearance; + private PointLightComponent? _pointLight; + + public override void Initialize() + { + base.Initialize(); + Owner.TryGetComponent(out _appearance); + Owner.TryGetComponent(out _pointLight); + } + + internal void OnUpdate(float frameTime) + { + throw new NotImplementedException(); + } + + public void SetCore() + { + if(_isCore) { return; } + _isCore = true; + _appearance?.SetData(AMEShieldVisuals.Core, "isCore"); + } + + public void UnsetCore() + { + _isCore = false; + _appearance?.SetData(AMEShieldVisuals.Core, "isNotCore"); + } + + public void UpdateCoreVisuals(int injectionStrength, bool injecting) + { + if (!injecting) + { + _appearance?.SetData(AMEShieldVisuals.CoreState, "off"); + if (_pointLight != null) { _pointLight.Enabled = false; } + return; + } + + if (_pointLight != null) + { + _pointLight.Radius = Math.Clamp(injectionStrength, 1, 12); + _pointLight.Enabled = true; + } + + if (injectionStrength > 2) + { + _appearance?.SetData(AMEShieldVisuals.CoreState, "strong"); + return; + } + + _appearance?.SetData(AMEShieldVisuals.CoreState, "weak"); + } + } +} diff --git a/Content.Server/GameObjects/EntitySystems/AntimatterEngineSystem.cs b/Content.Server/GameObjects/EntitySystems/AntimatterEngineSystem.cs new file mode 100644 index 0000000000..0b29c0f3e7 --- /dev/null +++ b/Content.Server/GameObjects/EntitySystems/AntimatterEngineSystem.cs @@ -0,0 +1,32 @@ +using Content.Server.GameObjects.Components.Power.AME; +using JetBrains.Annotations; +using Robust.Shared.GameObjects.Systems; + +namespace Content.Server.GameObjects.EntitySystems +{ + [UsedImplicitly] + public class AntimatterEngineSystem : EntitySystem + { + private float _accumulatedFrameTime; + + public override void Initialize() + { + base.Initialize(); + } + + public override void Update(float frameTime) + { + base.Update(frameTime); + _accumulatedFrameTime += frameTime; + if (_accumulatedFrameTime >= 10) + { + foreach (var comp in ComponentManager.EntityQuery()) + { + comp.OnUpdate(frameTime); + } + _accumulatedFrameTime -= 10; + } + + } + } +} diff --git a/Content.Shared/GameObjects/Components/Power/AME/SharedAMEControllerComponent.cs b/Content.Shared/GameObjects/Components/Power/AME/SharedAMEControllerComponent.cs new file mode 100644 index 0000000000..e89789e363 --- /dev/null +++ b/Content.Shared/GameObjects/Components/Power/AME/SharedAMEControllerComponent.cs @@ -0,0 +1,69 @@ +using Robust.Shared.GameObjects; +using Robust.Shared.GameObjects.Components.UserInterface; +using Robust.Shared.Serialization; +using System; +using System.Collections.Generic; +using System.Text; + +namespace Content.Shared.GameObjects.Components.Power.AME +{ + public class SharedAMEControllerComponent : Component + { + public override string Name => "AMEController"; + + [Serializable, NetSerializable] + public class AMEControllerBoundUserInterfaceState : BoundUserInterfaceState + { + public readonly bool HasPower; + public readonly bool IsMaster; + public readonly bool Injecting; + public readonly bool HasFuelJar; + public readonly int FuelAmount; + public readonly int InjectionAmount; + public readonly int CoreCount; + + public AMEControllerBoundUserInterfaceState(bool hasPower, bool isMaster, bool injecting, bool hasFuelJar, int fuelAmount, int injectionAmount, int coreCount) + { + HasPower = hasPower; + IsMaster = isMaster; + Injecting = injecting; + HasFuelJar = hasFuelJar; + FuelAmount = fuelAmount; + InjectionAmount = injectionAmount; + CoreCount = coreCount; + } + } + + [Serializable, NetSerializable] + public class UiButtonPressedMessage : BoundUserInterfaceMessage + { + public readonly UiButton Button; + + public UiButtonPressedMessage(UiButton button) + { + Button = button; + } + } + + [Serializable, NetSerializable] + public enum AMEControllerUiKey + { + Key + } + + public enum UiButton + { + Eject, + ToggleInjection, + IncreaseFuel, + DecreaseFuel, + RefreshParts + } + + [Serializable, NetSerializable] + public enum AMEControllerVisuals + { + DisplayState, + } + } +} diff --git a/Content.Shared/GameObjects/Components/Power/AME/SharedAMEShieldComponent.cs b/Content.Shared/GameObjects/Components/Power/AME/SharedAMEShieldComponent.cs new file mode 100644 index 0000000000..f9af4d12ac --- /dev/null +++ b/Content.Shared/GameObjects/Components/Power/AME/SharedAMEShieldComponent.cs @@ -0,0 +1,27 @@ +using Robust.Shared.GameObjects; +using Robust.Shared.Serialization; +using System; +using System.Collections.Generic; +using System.Text; + +namespace Content.Shared.GameObjects.Components.Power.AME +{ + public class SharedAMEShieldComponent : Component + { + public override string Name => "AMEShield"; + + [Serializable, NetSerializable] + public enum AMEShieldVisuals + { + Core, + CoreState + } + + public enum AMECoreState + { + Off, + Weak, + Strong + } + } +} diff --git a/Resources/Prototypes/Entities/Constructible/Power/AME/ame_controller.yml b/Resources/Prototypes/Entities/Constructible/Power/AME/ame_controller.yml new file mode 100644 index 0000000000..53c4c42f14 --- /dev/null +++ b/Resources/Prototypes/Entities/Constructible/Power/AME/ame_controller.yml @@ -0,0 +1,44 @@ +- type: entity + id: AMEController + name: AME Controller + placement: + mode: SnapgridCenter + components: + - type: Clickable + - type: Icon + sprite: Constructible/Power/ame_controller.rsi + state: control + - type: Sprite + sprite: Constructible/Power/ame_controller.rsi + state: control + - type: Collidable + shapes: + - !type:PhysShapeAabb + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - type: Destructible + maxHP: 500 + - type: SnapGrid + offset: Center + - type: Anchorable + - type: AMEController + - type: UserInterface + interfaces: + - key: enum.AMEControllerUiKey.Key + type: AMEControllerBoundUserInterface + - type: Appearance + visuals: + - type: AMEControllerVisualizer + - type: NodeContainer + nodes: + - !type:AdjacentNode + nodeGroupID: AMEngine + - !type:AdjacentNode + nodeGroupID: HVPower + - type: PowerReceiver + - type: PowerSupplier + supplyRate: 0 \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Constructible/Power/AME/ame_structure.yml b/Resources/Prototypes/Entities/Constructible/Power/AME/ame_structure.yml new file mode 100644 index 0000000000..93c9b23a5f --- /dev/null +++ b/Resources/Prototypes/Entities/Constructible/Power/AME/ame_structure.yml @@ -0,0 +1,46 @@ +- type: entity + id: AMEShielding + name: AME shielding + description: Keeps the antimatter in and the matter out. + placement: + mode: SnapgridCenter + components: + - type: Clickable + - type: Sprite + drawdepth: Walls + sprite: Constructible/Power/ame_shielding.rsi + state: shield_0 + - type: Icon + texture: Constructible/Power/ame_shielding_base.png + - type: Collidable + shapes: + - !type:PhysShapeAabb + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - type: Destructible + maxHP: 500 + spawnondestroy: AMEPart + - type: SnapGrid + offset: Center + - type: Airtight + - type: IconSmooth + mode: CardinalFlags + base: shield_ + key: ame_shield + - type: AMEShield + - type: NodeContainer + nodes: + - !type:AdjacentNode + nodeGroupID: AMEngine + - type: PointLight + enabled: false + radius: 5 + energy: 0.5 + color: "#00AAFF" + - type: Appearance + visuals: + - type: AMEVisualizer \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Objects/Power/antimatter_jar.yml b/Resources/Prototypes/Entities/Objects/Power/antimatter_jar.yml new file mode 100644 index 0000000000..37c7d7f639 --- /dev/null +++ b/Resources/Prototypes/Entities/Objects/Power/antimatter_jar.yml @@ -0,0 +1,16 @@ +- type: entity + id: AMEJar + name: Antimatter Fuel Jar + parent: BaseItem + description: A hermetically sealed jar containing antimatter for use in an antimatter reactor. + components: + - type: Item + size: 5 + sprite: Objects/Power/AME/ame_jar.rsi + - type: Sprite + sprite: Objects/Power/AME/ame_jar.rsi + state: jar + - type: Icon + sprite: Objects/Power/AME/ame_jar.rsi + state: jar + - type: AMEFuelContainer \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Objects/Power/antimatter_part.yml b/Resources/Prototypes/Entities/Objects/Power/antimatter_part.yml new file mode 100644 index 0000000000..2c17c51179 --- /dev/null +++ b/Resources/Prototypes/Entities/Objects/Power/antimatter_part.yml @@ -0,0 +1,16 @@ +- type: entity + id: AMEPart + name: Antimatter Engine Part + parent: BaseItem + description: "A flatpack used for constructing an antimatter engine reactor.\nUse a multitool to unpack it." + components: + - type: Item + size: 5 + sprite: Objects/Power/AME/ame_part.rsi + - type: Sprite + sprite: Objects/Power/AME/ame_part.rsi + state: box + - type: Icon + sprite: Objects/Power/AME/ame_part.rsi + state: box + - type: AMEPart \ No newline at end of file diff --git a/Resources/Textures/Constructible/Power/ame_controller.rsi/control.png b/Resources/Textures/Constructible/Power/ame_controller.rsi/control.png new file mode 100644 index 0000000000000000000000000000000000000000..5f2255983da67bc5629c11dceac91df899cddf0f GIT binary patch literal 610 zcmV-o0-gPdP)BjE7=3CqWbhypJQTXs8Uh`Qap@*H7_tQ9&0PfgEfMJ!$duo3f-C_+;K+Dr4hVc? zbLk+0OY0#^QHNTprMr_(NGg3`tdrmSzNb%j-<=IeVB2;kyDtOh+|cF9Ac$?-&X&ui zb^t<1CljVDIb#fq#iCXiMG@xnd7;xyST$P=4xjwp>04Y~-zbB)u8TLXPw<#Lfe?b( zY^Iewj$^@uStVJPg{$kEf~+)gepVWfMx$E(ZnpyfOs7)-$Z`{}s>Co18QI zum72WHi>ie{tBv-un9s1s>@3S_xudsf4&IGtCO&`f$07LuIn}m4?AHO2nKv_h0V9; zMxpPm@R&T6?sb}koO6Q^k`XPL8f_v~4@n?eASty9}H9dmk9Q6aM!GYF|OV zg${|*>7>ocrVI8vA<{JcTY)xbK|=m4);4Fysy;U%%mKz2EX$I97-K@PDnGag5PS*{ zoCI3>R-I7R{i^)SFPF+Em+1uqo6T2*w|CfXw-}GdrElN+ECj9N>*&R0cyz1`f}>;c zv1<4_dTAd}1yMmKxk@kX13KGr7yco{3jBJJ(0YO-wqPK-e;6#kEOudFe;$DEtp+pT wd#j=erD+Pzxgq^`JeY$$Ow&Y?BnANd2KL<^9s1S~(f|Me07*qoM6N<$g1ZnDTL1t6 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Power/ame_controller.rsi/control_critical.png b/Resources/Textures/Constructible/Power/ame_controller.rsi/control_critical.png new file mode 100644 index 0000000000000000000000000000000000000000..24de7e92b32e5b1ee62a7cd57206ec82b3949f5d GIT binary patch literal 1217 zcmeAS@N?(olHy`uVBq!ia0vp^3xK$RgAGXbBqvD&DaPU;cPEB*=VV?2IV|apzK#qG z8~eHcB(eheoCO|{#S9F5he4R}c>anMpqemG7srr_xVLxqcU^N3Y5UmwNPe3ji}Xjf zHCw;&-Z>=pXvyDxs-Ztnc{%BT z2D8Q#Mv+qt#0jrh#L&0D)Bm5_zZ-&$uX=#t5WZ2_`72+=5vDb@7q4-Dw7(K>bv}IM zzbuAq=JJn^0_BruEL-vO(Dd_iUkuwayJr2em%INO7$_!7Uw`;~@U9)uv%zzke^iS; z&o*pWyMBw%R&fWjU3CktFHHS=li{4`9K9o#80YT)bpsegv(M_*ob253`&+Si@{GJ~ zTmP-)kKYXn>aC?Sia&o&1&Y4gw6rd_{={VK2U!c5r|498m;7~D@BI4LRei;vWnbP! zJZ3Jqmb>8E52gvF(rZljF{IkCKu|8J#R{VvwveHXXnojjEOMSaeywev5||L75Ftx)^);@881 z)*pm+)optfyC>Huw# zR1iT{8Nm>jq>9LzfS}@rsS*e~3TlLqM3$F8!b|31TiZD^wWojl-u>P4``vra``&v$ z=lAVDzw|O%zHT`H07eAwU3+2s0$!~sB>c7bnk0q|B5|*mJHUO49)}%+n4P{m0pJE} z#X{r~*k6|5eIOA4R<|I*zbotKe;~@=zhG$L=Wlg(-^=J zpL~=QKW#Ml%A@L`v-jBM=-A?|Uk8lm5)Cs<_D>plHb{oe*569IU{-ozqd=|0ANv!DDq@c3g}n7HJjsp1QqDd9^=kqGp?=7?rV*c+lD zvV}Rkxs2^DH+(T8P_(gBw5E3?FQ-%HF(-T=Rd4~{DDrvtbJ}i-m_;>jtGs$nT_@zG z!MoyandQO^6ufxBHx?RD2quZBy!gG+7U&Iun}Q7R7kAv`E3C@E8X@!QB&BXa zd*{5me0VU~>GZ=lmd$BheI^@gK27)P*;n)7E%_pyN@|}2;xv$=QXTS*p8LXQ zPMEu9CMJJlGEEQ$r%@Qpt`9P10ebERAC4aB^`3-$+dDku6>gxgGTk3wU=3SJ)6ZRm z-6}Uf55Rp;|Mvm^ldA@i%^ST4_=o93)a$sAIxlOHo=qvt01Bk6-5LTZX)Y5#un2;zpJ`oty zuJ?GDo!Xa3cbR^JY|Fc;ZHT9+sQ9=q&h{7n8yWYgBK8USh&iGDQguN%A4=5Bq&}AU z6)MdoQst=kUv$<-&lG_RHz1} z!ZTwuQ6-mjzK4pY?swHce=F){a7~A}h7{T90JpncXK*~@_Vy}}ukOn4QN0z`&CdJG zM7ye2$8$&w8#?+Q`-^xsl=(dSoifx9Tl7EgT@_P5ie=$#l_8Agp)s?HHPMi%bO^Hi zsVG+zzvpHW=7CHYbeNO=y*9}Qj8jPtx#)Mx{py2Sjxz37ftIf~Gfn`+JBO_1*B^S< z<277?6$i&t66Knq<3K*tH#rj}>t*w*_+s8kB+$WiA$7N$)XpsB+2nVl-~I zh1Hxnb3OU>vS#(_oT?txgmByC5bZgcWp}T3JD8}_-2)Cj&)g)qcQ(fRz(@|QeT@|> z>-uDawoK`wa*XKICfR~L71;)xS!m*P5@O* zk`r?I3-1YhBCmw&`fLas8-{5}AV32#i`YGpm#YqgRu$aVJg2?htUCf^E;&4XsGkZ| zE6=8PmPzaS4p83Hq7^IpugK{fVqqPXw9~o;i+pVv^8_0dgZ46F^S)qOr8yI zcPRW*RHU7Zb(H7H;(6KE&d$e$#<{9zi15T$Q_)O=8bpBQ_?Vg3;#L17WXNIPowuEk zw&N?-rp`(R_Kq~+te={Pw*l^Xh~s@$#LoI;sZZ2NdWo}2f>3b%!dp{n2~Vr!Lblv5 zi?yQQBGcqA4rnDvcKS}wo3V{ZFEK9508ZC0{T(CYH4h2IwdVfUB2 Jxb6|({09Kk1{VMT literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Power/ame_controller.rsi/control_on.png b/Resources/Textures/Constructible/Power/ame_controller.rsi/control_on.png new file mode 100644 index 0000000000000000000000000000000000000000..3bfda8869c218d46f8a451736b592998bc153b4c GIT binary patch literal 959 zcmeAS@N?(olHy`uVBq!ia0vp^3xK$RgAGXbBqvD&DaPU;cPEB*=VV?2IV|apzK#qG z8~eHcB(eheoCO|{#S9F5he4R}c>anM1_tI3PZ!6KinzCT0==FD2(Vswck{p8o%Y$M zBN7x^o~SO2zjyVUj6~bF=UG=xZ=DG^pE*lz!l(DY^E(0@7Ku#IU{&#A?0gk>;Q3?A ztMlJaKYa3k?9b&~KmPofF>n6-jryxX>T2cg>$gkK+&|qoi+}B$d&L$y4?YQ73ftH& zTmP%RR(Mas+|4z$TN=tw=)az`x%$P__^9F=#isR}8;UQ4J-EnJHM4lzr*k}yLSO#5 zbnCFjTFWmRezWAT_Qg4PS?#~G^@sMmInLkfyJpujzWti~K@1}4{ z80x+tgi}dm?h@bNXMETcxzuas7-7xp${%QCB#u~&tv{MM2*WjY5 z5Xj{*g-K{BdCaSO8%k#-+MS=E@Spb`^SY}WXFVxgP*S(@&zHglfyELt>mv@NKA6dR zC2-cf_Clebujf2{y_ogOuV2?K)1QC1{mGo$f<1>-R(C;rNgXIcqPSnIG;J4jd-C3n zF}hpMa6(C)r*2*574tjuc7MLh{>JCu)<5swH$CL~&e-{h1(Zfe40u@50&83Gj&;pt zp3jwSEI)7lS#8E0;a>Tz@6wgy?y~B)PXFZoxwPn=9p98|z*u0fP5Xcx3!nIYrp_!* z<=^|s-SUs14gaHz59PDi?@9fc>-IeV>7N$cJD|{Cc~pNX`+s4v|H9uc%mxPi->-jG o@7mAZrhSK9h4e)9;^PngFZ053Tf@RwfSHcL)78&qol`;+0RI)Iv;Y7A literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Power/ame_controller.rsi/meta.json b/Resources/Textures/Constructible/Power/ame_controller.rsi/meta.json new file mode 100644 index 0000000000..6bf6b7f12e --- /dev/null +++ b/Resources/Textures/Constructible/Power/ame_controller.rsi/meta.json @@ -0,0 +1,120 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/vgstation-coders/vgstation13/blob/Bleeding-Edge/icons/obj/machines/new_ame.dmi at 1b7952787c06c21ef1623e494dcfe7cb1f46e041", + "states": [ + { + "name": "control", + "directions": 1, + "delays": [ + [ + 1.0 + ] + ] + }, + { + "name": "control_critical", + "directions": 1, + "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 + ] + ] + }, + { + "name": "control_fuck", + "directions": 1, + "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, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "control_on", + "directions": 1, + "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 + ] + ] + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Constructible/Power/ame_shielding.rsi/core.png b/Resources/Textures/Constructible/Power/ame_shielding.rsi/core.png new file mode 100644 index 0000000000000000000000000000000000000000..36c0349b822af0fa2e9aa742d4c05e1f137eef99 GIT binary patch literal 1836 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 W`TegC?Z=Vg|YRr zy)2KcX&z>xEW@Z62H(7MzQ4Zn&biCE%OCgr?mhS3R3`^30X_*n001ChV~uuZYb=`) zJlt$a(+`ER6)?=%${f%zD*26Vfc%m6NC2Rj2w{11v2ETE>nmXZ0JQ%f1`gb*@n!pJ zY|u!TNYBk{V?+fjQNm(y$L6odo10SpVuCkXRnDR~Ux_yy4 zoO$h-6Y9Zp=5|OT${|5lFI@wg9Uz*dqtfEtwGl~Z7?6(I*!p@{+fjtH)%EKz{%Cy^ zc&j$%_paK#t_Qz=A_VV~wPAlHz`nwq%`FkbgFMzS7*JI~LDtU~RF#ntn}2>1UhxAv zfL4X1T;v^g+@?q^cCGFx2D(U_I5Bea@l@Mm=3<9e8jEXq?+5{}pdONqJ1<0^RLl3w z@m?ZhOR|C=(Mshk3Z6SxeXu8VQXxB)3p4}ZZbyo+H~lI{<;kR!DFYym&UZ| zp70LSG1K;K)|UxilhEpbM5sA!!CDmM3oH6Qc)|NY=VEAdHzW>hw6(-X9kAn|DYQ&b z_!xeJHII{Qxm0RvoP zLYq|O>|mxn0Re{wjYstBR%K#{&bqftdipJfH!p3~ZXT%BSne=n_ zc~cDs^?Oa>3G&Uu;L5^Rc*>pFwO^-P&Ei?1aOL!ic0&;pI{I~)hrbPVhk|Ao7L-`g zH1(vu@5-d5ei`i?5+H)HNSpB7B{m*MeSbo zz9JB9u;GT=-sX56-4!tMD0rk!2e6E!m*Dk{inbyp=SeRWOh4G%@pNkk%s>Qw&vw=9 zkHtIQriMBjYEt8}I#yCm!jw-X@AOpiG-iwtbM`(TdYSOuwFK06d+20bvM$OE99H)O z6DT z+Wsie{+R9-#4xzqRybw{^wrV4D)y3%Mh6Z>?r2q%S(+>L7P(?rb3=; zZ78UTHKQ)dl3?!PV%DDr4A) z*=Pzw;gRrnz^9D1o z9s0Z_(e+GYA%GrZR9$L$Z(SR-{I58ymA%5eov6H(B#U<=% zsBs$LHg~2H^m%UMky_vUyl(RlpO;1PNLJvdx4O$s__rIa$>bT+ur5xu@{YgTy|}O< z#ZIl6gd3=v8YrP~Ho!R^O!rHy{Du@i)&lhrVk=czHJ;vhNny7`Mc#`aC+t zc+D%@XX);K-^e{Ke_}_z9_S)ixeqt=iw8SdRkh&ol-CY{_u`ZCG+F8 zyv&)s&UwXGj$J_LhYu0MT*7&eHm~myI$ihfJCWq_$AkbNhELnUSpPYB9o`!5Ll)1!U21dXK|t?c?E zODW2iEfC(2v{h~7gkwDNy+lmD>kiY1kC1D(R`fz~dAAyQnxY)gQNe0+hR5VLJRPVT zq!%Y|EJwQWuRurLaNWcHedQWHT*gGtxw8HIO6s-e&FQ7zpbH@LTI&dCa-S|vo)6Da~oSp(VffljfXl=uc0Ie~!8*l|WMPu)`f(oC@PpVqHyB2U%IscCQ)WrYwl zmv_Unse8OvFC)cLq)@GAv$>YaBCWFmQ+;*{A0($D?Pk>AUf>P0?+(<%M0G0!E(%PT zaogFcVO2tq5SN2zp+1uF;;{RzR-zK^S(5|p277xzn}JoYq^fSmaTu`l?#PB()ERmBiCP62%}$exHC69B2@WkjFJeNRd*iAycn=G_oFRDb zXDfl@q|qKv=01G{U$W&edPcu749%uH!OiO^5~Qzt&dQbz6ZH!W8Hi&<49^R z=)&w>Od=<*>95GpM977FMzNHmu*PaK*y#Q1LDNcmG-U4e!?Bsz-14bC-bb@MeH|5M~V80!OE{p!}cDN%OE>fC?$&E6&L zJi9c0qIA5uv?jj3eR8;umr`U#$B**JwjcQZ8I^K=`_>C^h7L6$^Pw}o0)P8`y#Hz& z*$#U>_5Es)`HdVz(xTUEptB84wE2 zy{UaHi|DxT=W%+6IVqb;7k(};+jsI|Ks}_bn~g?`>?mFMro1c)FPjH*M*rKuy2vqP Y^fMl@EC9%I_9F+dv2Z{)m}BGr3oHoR4*&oF literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Power/ame_shielding.rsi/meta.json b/Resources/Textures/Constructible/Power/ame_shielding.rsi/meta.json new file mode 100644 index 0000000000..1ce0d8402b --- /dev/null +++ b/Resources/Textures/Constructible/Power/ame_shielding.rsi/meta.json @@ -0,0 +1,192 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/vgstation-coders/vgstation13/blob/Bleeding-Edge/icons/obj/machines/new_ame.dmi at 1b7952787c06c21ef1623e494dcfe7cb1f46e041", + "states": [ + { + "name": "shield_0", + "directions": 1, + "delays": [ + [ + 1.0 + ] + ] + }, + { + "name": "shield_1", + "directions": 1, + "delays": [ + [ + 1.0 + ] + ] + }, + { + "name": "shield_10", + "directions": 1, + "delays": [ + [ + 1.0 + ] + ] + }, + { + "name": "shield_11", + "directions": 1, + "delays": [ + [ + 1.0 + ] + ] + }, + { + "name": "shield_12", + "directions": 1, + "delays": [ + [ + 1.0 + ] + ] + }, + { + "name": "shield_13", + "directions": 1, + "delays": [ + [ + 1.0 + ] + ] + }, + { + "name": "shield_14", + "directions": 1, + "delays": [ + [ + 1.0 + ] + ] + }, + { + "name": "shield_15", + "directions": 1, + "delays": [ + [ + 1.0 + ] + ] + }, + { + "name": "shield_2", + "directions": 1, + "delays": [ + [ + 1.0 + ] + ] + }, + { + "name": "shield_3", + "directions": 1, + "delays": [ + [ + 1.0 + ] + ] + }, + { + "name": "shield_4", + "directions": 1, + "delays": [ + [ + 1.0 + ] + ] + }, + { + "name": "shield_5", + "directions": 1, + "delays": [ + [ + 1.0 + ] + ] + }, + { + "name": "shield_6", + "directions": 1, + "delays": [ + [ + 1.0 + ] + ] + }, + { + "name": "shield_7", + "directions": 1, + "delays": [ + [ + 1.0 + ] + ] + }, + { + "name": "shield_8", + "directions": 1, + "delays": [ + [ + 1.0 + ] + ] + }, + { + "name": "core", + "directions": 1, + "delays": [ + [ + 1.0 + ] + ] + }, + { + "name": "shield_9", + "directions": 1, + "delays": [ + [ + 1.0 + ] + ] + }, + { + "name": "core_weak", + "directions": 1, + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "core_strong", + "directions": 1, + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Constructible/Power/ame_shielding.rsi/shield_0.png b/Resources/Textures/Constructible/Power/ame_shielding.rsi/shield_0.png new file mode 100644 index 0000000000000000000000000000000000000000..cd62067877c2ee374f373ca3c45efd999989fb10 GIT binary patch literal 425 zcmV;a0apHrP)~Jx8!k6UYIkOBKjvyh9*WIu8&?liCXegmf+`7GYQ|Tx3a# zpzG*FXTq><;RC_XKkxm(&u``;2!d~nsLL_KCxEj6xccjc5W;E@rBolF3J=53N;u~n zLI@>97vNCT;lA%%0SLnoobzAr*}NZMy}pL{_yhnDLaYEZy_2t0y4GpJr{@=|p+nvs zfV2UOquWB~1M zKPiB%1*%fF2M&c)Hb*fbMC$<5qqyy@1bBUWm+IyyHj!!+x4o4Bj}Q08VY*UzcX}X6 zHubsg;-jl1*$i(;s@0HlZgop`^p>Uk3n--!LL6VTAfrub-wU=i`Y4_NMhEx-;AU_I ThOmbQ00000NkvXXu0mjfYzekS literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Power/ame_shielding.rsi/shield_1.png b/Resources/Textures/Constructible/Power/ame_shielding.rsi/shield_1.png new file mode 100644 index 0000000000000000000000000000000000000000..4fa79f44d4b76d483e4d400ec2de74f0b7ecb13e GIT binary patch literal 569 zcmV-90>=G`P)P(k)(t2@KH` za$&rMV?~zdM^fzUfhi>2pToU#bZ1(V$z)3dNGX|4rvQXuNUzsx5{560yiSOVx(-rG z>-)Nus7(OKOJ9Bt!?1QNdkZ!h-esRCieQuF$%GKvl@r@!L{Wry+0Xq<&{m*WX8H6? z5Cq6H1KxwR+wB9N^?H5a8w3HrpPt{o?)-G^F}9#w<|5KGB~8;>ex~+V_rQ2OrrYi2 z&q^ucIA$~&Y3*mTnbF6D%A4><|2s-406LwH({}apS}AU20{0J(3 z67YRLufTjhciL7(qyK;qLaPGP#ymLzn+iUKfK3ITLcpbhvlDQs;OqokDmXiV^Qyox zz2E~X*kthao1K8?T_N)+rbkm1c-|F%{=OW%J30^i{B>sy0y`DxmJ7PrM-{lexqh4d zW;9j7?aj5Dz^+Gj0*zHr>c5_V0mX6bQbC<@T=`gj|L}N}u()itHdK~jaU3re3$2Y1 zBDdAzBQo442UsqbEdzn=-nMuwE5@!ZL#0%nJdR_MB+(`ZNRp(rKmQf|OtHZs!}4L$ zmb_%6y>Dt|Xu4`uO<2WmI2>+)qq_w_Yya_7$xSfj`S17#w4D=zfyv!A00000NkvXX Hu0mjfi8ux; literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Power/ame_shielding.rsi/shield_10.png b/Resources/Textures/Constructible/Power/ame_shielding.rsi/shield_10.png new file mode 100644 index 0000000000000000000000000000000000000000..8c6ab600e7f887241e55fabf3d6c9c54d744707f GIT binary patch literal 659 zcmV;E0&M+>P)04N!T z!8O>neKQY;lB%l7nb82j^#A}M%FZlGKU690;2a)7*L46uqtPfjJ^&;#%K(^ryXc*s z$NwvpN@0=1Fl6SI(-Xdb$v9C;K`EU&aKGOd+86+=C`@qsYzX^oC=HPYZfA{(31+TX&L~)^E?nj@Pq!G5#ZX6uJ;~K3|_C-@%H0y0KopH7DLDbj0UXNNFNUZ z8QfgTEW=ppniK#b1l?{I`hKmJoKc6fX;PtDW{|Zn70L!wtM%Q)Wy2-g#t5qz3 zWmyoNig>bZTL>X)R#IEBT2+`%n9!Y*k|?;XhS)y%f=|!i02jwm6T3Kuu|b6p@jKug z9*Khk*>E!`&VaeM3;#;4-#;Mtaq#{F8e7kRx3+6!=#Z?RHzjc3aNb85j+)_K?7F9R5+Q0L2*yf`ID~ toSsA1^~_CZCIHhkg}s0$(=-bO_zQw$-y5|Y!R`P6002ovPDHLkV1m3WCiVaT literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Power/ame_shielding.rsi/shield_11.png b/Resources/Textures/Constructible/Power/ame_shielding.rsi/shield_11.png new file mode 100644 index 0000000000000000000000000000000000000000..155f3ca3ecbdf2a937f34491580ee2ccfe16d272 GIT binary patch literal 779 zcmV+m1N8ifP)8CzI*T9yHkV^(Z#~JzEQmHgR zK-i>EcuD2U9>ovuA(eixh+3_NxBL-)eJ5M}3V;v-+qUI9arptbuB%7^{zY?W_#O(c z@Q!TtE4r>@S(fCluCDMrPdb+Z9umS~$bS1QqtFjUQ3iYgiVz~I)oKHc{UN=N2gv1e ziRbzGc{%odAJ6lEZVD73L^Nzx4@Id|!nSQvsT2TFbp87{0$~^eP^naKU02cKk0ym| zHcKj%Len%8kn1#BM1UEH#enWXJ-dp*GJ~Jx3>XMRTWLsn4O*F z;NT!3Zhd{7^Ye2lN(#tiGH9B{%E}6sWnr2orfFgr#=U$dlfg92gd?VSn$F-e z48vf0dK%L-@qHh|Fz)52rl!z!UH(u}ltj&+_BrggYXFT#gCGbvK0cO)#l=P1?e@t0 z^767AcRC$bS6A68mlMw8MVJsIgoqxq4BPECVHmQzyW8yplWN7#ZA7u-yBbl9|ECql zljs$1XW{?= literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Power/ame_shielding.rsi/shield_12.png b/Resources/Textures/Constructible/Power/ame_shielding.rsi/shield_12.png new file mode 100644 index 0000000000000000000000000000000000000000..87a87841877e7cb978cfb1dbf08beea2483949ac GIT binary patch literal 839 zcmV-N1GxN&P)kg|9_qCy?0u0UH86TuQM;ADB|eo z2!Lv}N-me1o5S-wQgcWBX8boW-N0x_Vf7WAP6tNA*;z+JI-L%M)mMpeQ4|4S=@-Ta z&o3yIN<{r3kZdB(Q7V=Ac7E}2l^nO=y6%1A=pTS3Pp+@82{*Rk@{D}<1OV4{pOs!Z zq9`H=0sz9oCcJq^{`3IHaV8Du2n(C!yC>MTO*Wea!1w*Rgp0)@0E5Bcm$(5F2J)u| zY8G_(zK<+c>2!Lk@Mtsw#zjV&P=Ub-C9i<(M`<4Z8e)sgb?iP?5KhL{rw3N2`MgxC3GXwghVQpQe1J3 zX0wU4yu6HMSyZc4HJHg{SX^AhvW!Urz}wjM_k`zkE~7>^n?(qr(gh%w%Nb|D^!7UT z+HH1gHMX|4j9ey-zu$~{y&h2%k;!D#5k(R5zK%+zq86M9at-Lvxl9_??d>f>2(`Nb zSYKb~?(Qxzhavf!$1xZT6qiY3;i)Z|=Xo?5jk(eg#zm~vYCV~TGj+p8qX95eA(G+% ztyb$P>Tw~`OR?S&UDqWHLsiv;5ZJb@gyd@1^Iorl0Qr2LAP6Qpp@ic&<1BDuQNoV7TN?by@_fe90{;!!6AxI81=*q)dLW2uuH5+MY=UJrn^ zwY9kn$T+zk^4$~Tp5SF{$@CgM5A;8y=f+z=^1g30q)>Q`_xX_Whxd?PQbX}7Il(a+ z()se0`lpX{yFVu4;z(|H0O=*VS2vW)<*ARE;>zVR-K(3a;_%}CjQ#}!KLK3}uBq7* R{2BlN002ovPDHLkV1lAijGO=f literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Power/ame_shielding.rsi/shield_13.png b/Resources/Textures/Constructible/Power/ame_shielding.rsi/shield_13.png new file mode 100644 index 0000000000000000000000000000000000000000..fe6f214f1712b1fb33ac023d62e83adffa176bd1 GIT binary patch literal 816 zcmV-01JC@4P)|5yUClsJT%#%^uxXY7B^^XT<@c%Bz( zzX!t?Ev>VDa>~}$R^gtNa!^2pNQmOPY0;S)3xG&w+353%gf8D7-^D9V7zzn1WeP6ZO3DLlt6+UA0K0yCi#3G0M~Wd+}z~p>FM2AsZJP_ zR&igpGnovAVUWpWLhU%+d9wHl++EA2=Xq$FCOtnA1p(bpBVgTMfNcZwqadjJX#{3v z(J1&b0t-jMR}lCg1^<2&xUM_bFq_TFW!H5*Q7?$)`^;Pd0F6c?m4IoQa@m9XpM>E! zPOMIpz+ig$G@H#>qgt&N`By9!L$eLq+WvM7x{=E%5(U8oqE*~~mq*XatbJT^5+P7O zIh}soUBlfqt>V5+u`J6%2!Rj+RaH?{ReoERh2uEbwmlwrVjqj0L?D{6If?qfOcEjiY#Sj2nx?U`vcl!%Wyox2XNPvX&1f`= z3>?OuM<5`DLP2`?vykplrNZv+uKeEE*Z{_dR;$%Y93z!LKA)GV zw`rP;Mk6^xfM1jM&E)O(udlC%QuZ_g(Ys&}p96l1#9*g}p)ZP}$hY5y@yu^#^n$vJ zU`MtfSPQtW%iG%<0G&<;fZ=dRxm@O`QVH3W%VpZ_cA}k+JzFCvwOTD)8&1kGh#tq) zY86e>&@>HIRi!^Dio$R>q~Gt;@As+K>mfV;7>+B`w0RfL?d`1s;1{uj!9WfiBmm>p uNwNbb6ASx+l2#r2AigYGNq^MtTjVcHU}|}X9U8z;ZVu; zSH(UzuiEW)ml9c)mCngptybFW^-vTARaF5<(;2U#%*IQSgfvY#KR?gqts0|h7)Jh% znBtD7OVw8@6{^)Ls;cG$BuPRX$HZ~G^sS9wwxF_=yQeM&{r<*jJK2jw;_ z2aAp}X1kR*xhJC1{8S=hFXd37f9OSzv=Sc0ro z%&W6P!nZ)?Kh?l!^r^4}#Tuw=0n?|vuf=2Awrn3CAJge{WQA**#>K@2CnqN|rnKu(t@pz2qdC%g2H8YU?N62EG3l=#R{{=P{P=2U0%D?0P0{;O1`^3|Bqp{@x0000F) literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Power/ame_shielding.rsi/shield_15.png b/Resources/Textures/Constructible/Power/ame_shielding.rsi/shield_15.png new file mode 100644 index 0000000000000000000000000000000000000000..cd62067877c2ee374f373ca3c45efd999989fb10 GIT binary patch literal 425 zcmV;a0apHrP)~Jx8!k6UYIkOBKjvyh9*WIu8&?liCXegmf+`7GYQ|Tx3a# zpzG*FXTq><;RC_XKkxm(&u``;2!d~nsLL_KCxEj6xccjc5W;E@rBolF3J=53N;u~n zLI@>97vNCT;lA%%0SLnoobzAr*}NZMy}pL{_yhnDLaYEZy_2t0y4GpJr{@=|p+nvs zfV2UOquWB~1M zKPiB%1*%fF2M&c)Hb*fbMC$<5qqyy@1bBUWm+IyyHj!!+x4o4Bj}Q08VY*UzcX}X6 zHubsg;-jl1*$i(;s@0HlZgop`^p>Uk3n--!LL6VTAfrub-wU=i`Y4_NMhEx-;AU_I ThOmbQ00000NkvXXu0mjfYzekS literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Power/ame_shielding.rsi/shield_2.png b/Resources/Textures/Constructible/Power/ame_shielding.rsi/shield_2.png new file mode 100644 index 0000000000000000000000000000000000000000..7c558be6d1bee2f9712d1162f0a01160ddfde72b GIT binary patch literal 564 zcmV-40?Yl0P)7w`dk+i9?u@m=}=f)|g)gJ;ph7}QmorZ4P|+nhGDQh z7ay+Y$BxONyo6-4HFOPl)K~(%(Q>uMWHJE&jK^bsSXmWHX~_F+Hk&y1d_HH!9{2#S zFVD;~Aq0ewn2>CCeDb89EH)shfa4s6!3iNaolXFNPNyR!5!s61I7jsoTn+qG_kO=e zx7!7P_?L(0d9iJ;*Gn64$pOI<$S|9ZnCDij#k4HjETk(S!ROa^{NMAuc(y9r;sh?~ z^7H8T`@;U+ZkO$N@l(r?T7uti8}lzVi`*(mLZyNtC`F*O3hE*t+wuQKAkU7!DS@&osEt5r71TxGE-FYK z$0`*_kK-x?X44Vg-ai1SRWO^5a-WE$j$@SysvXA(M3+e(St^kE6ef`Iy^yH_nV$^8 zE16*!*QRS24xV7!HVj=u@*5%u0;Vy(x(3^}F&sR_eyQ(|Uo;krMdl5chwHkqEK4|M znx-_745i)!QJEtmMay1^Kr}G)2~MX|YPA}cWl<;;D3{Art5vD9SS(nrR@k;J zWrHwHQ_2USMJKA&sw6R;P7_%lA0K0yCX2-afO5G^zu%|Z?S=>oM9C-#1mV1T4}kIY zgGww@zc#wqi~u*+xeX;b7WyhE2^ixmocck`(An8pEC%-W_E@b}F~`RE3O4-&(tyB| zAzjxgl}hNk4nV0?;_>m3<#HL<$v~Wdx0J(1qamHRu8ZS1a;#|@uImEu@bDnVDm}a< z6rZUH)a$#PS#D!1OeRyx;pU3m#umL+#B&2}Pz=r@wnPtE}< zl?s(gg~4FJU@(x+;0I{xE+yE`JOxS4FE1|vIPLWSIO%i%Xt&$U=W}#j4+W(Pxd;dd z=fbf-kcc3W7n=C*uZtIv=N~zAl6+~=tfxZK>Vr7#^*HHtI6ORzy-V{G55j*8%{0x# z7fFoU?KUT!PUykv& zu^Ljr+ps3HN#Xb-Mh={zAD#!kVf&tF2%&1O?(KtV!v2_z+>sBK8t0qfmc zzCESmBocWMbuMgYrsMJWR*prv4PY1sj^pGi%MHU|GMNB`c4a)i%`QlM0Y45#qfzKp zEoVuVrngZxbm|9x4K2URRjEp{piWkOsO}4dq319C`^YDd*_a6Vn`@lt!}3sQbYnw*Gf}{s)pDy8MO|a%2Di002ov JPDHLkV1gi&g0lbs literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Power/ame_shielding.rsi/shield_4.png b/Resources/Textures/Constructible/Power/ame_shielding.rsi/shield_4.png new file mode 100644 index 0000000000000000000000000000000000000000..e9b362b9a48e491ecbd02b7d708340c4f02869f1 GIT binary patch literal 467 zcmV;^0WAKBP)BbwQ&x6fux&+ul75H_2sLhU>bx zy}8Ec@@sEWvX+>Jqzm{o?DzYX$jfT2*}Sl?RvS*nqe6~!0iTA)#$xeS{vhFs7eRcY>vrzR6MREDqlMQxo7$5-|$}w_y%u3unkC$1nd9+002ov JPDHLkV1gUx%boxL literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Power/ame_shielding.rsi/shield_5.png b/Resources/Textures/Constructible/Power/ame_shielding.rsi/shield_5.png new file mode 100644 index 0000000000000000000000000000000000000000..ac07397a5da5f6f5d62b8beb4d5cf27e05038489 GIT binary patch literal 636 zcmV-?0)zdDP)3XzR~+5mL9190F=_XVHi*p1!-lPrgUz% z+r^XA6<3NIhVh{MVwM0xO0|N)V1VZ9mr$w|D2ftjLb(8-RDrJRxV+*(sS=y&2bekN z^?Im1Re_lU=~xQ+_Q3egLA%|?@a)H8#$PBdmI}bO?Sf@l^GsG;2S7kjO6QuUt-Tmy zOfJ#$2}3s_Aq0dFOsCV(CgOw;kj*kiqY+*_eJ6CaopU;adST~@3mkl z08#wlbOQ&c8)&s!auDN7x2?!)!9tlE5dfexSPWjR%m<%miB@deHa@(e0DzN|p`1Ne z#mjh@m>LPNt#09(-!35pkd!XIxqTzq2OJ)06{?HRwIWd z1w*MtDIrRGC<~_cK^PqOph&i?-Id~4@dt~RnUUtx&d(08W;}W*N0id(+6Yier-os0 zbx(N4Wf4*93Q$qR1Sq9bP19EH*z-I9fOB#RUDw3~V$^E2l{p`cM#^J3V=N;Ng6oWodjbH^Xf*Jb{YyRw0ECc2&g~y#0D#eCs8*{p4(45GF8_cvpBXBUMME{1t{fZq3?VghmdObrtpeT-JCgIXG^BLUCSU{ z1r-Ilu19zFVkXOU_dq#iI0@l64mMwsXbh8}lzCt<4AE}4lTwQlu5<#XX~MFsJK6sS XWtPTi>+I9I00000NkvXXu0mjfd-fPF literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Power/ame_shielding.rsi/shield_7.png b/Resources/Textures/Constructible/Power/ame_shielding.rsi/shield_7.png new file mode 100644 index 0000000000000000000000000000000000000000..3a6884eb29f36c2a89701354be4fdf2487f5e898 GIT binary patch literal 753 zcmVtaTC|hV`%N<5r;Y?DjoWjEZcW}zVE%ecXtYaZQH_e98A;XCQ+}~ zQE${@3hoHV1fo98W|PwWdl2=>teXS+_>1?e&*tVPpTB&&lE{YAbn_;z{-?lo-OP&} z$C=A`LZH=ZDX!}Z0L!u@uRPDA)oKCIEj@<^Pq99}rC2P^ZY}E5eD|K}%NMlUKSl&% z61HuN<>h78*4C0WzVDBWr@-^PnK;N{ObG#iq9_OD#C1Z>+D)oK+0P16999Z-}@j!_ihdEP?29!C-aMN!Z+4PDn! zRaGJ|91c+w1+NmHc$|deI5;>+o-36KVHgqwfpko- zlLMnVu(PxC*JBulAyE|3?RKZ{=Zuh!p%8*F3=_jQRfuj!DIOysf^WVg!#sT7+lc@7T`dGh!n=1LyZG)LDI-9ibV<=NWWqTTrk jTAs|hg%S7r}{>@jD1kZubF%E?r6?bXPpwtQCTAG&jUS z?9e8?Bp3grQ5Szx?!Daoe)sO~y{Gj1{T(h0#ux}8pp+`POOr=&6Of&Ntq0?-it%_1 zY`vp>1=(7Ru~Zt^WR7mP3+8$Nygj}H0sw#zl1jv}pp+_d0YZp6olfS&wrvOGQUQk1 z0GrGK0II5HO3pct*`()C6h?0i{_~e?V0RUXrMZ4Wbxm4X!LqENXFEeN+9f8U075lXRTZ^r1+Q=KXti1=vx###=l+I5 zB4V##{QMFcJL|7h!0yHk+l9&ZC}btu^uGn}BJWcMD$W z0;>62Br)^Qen2oB4uP2`ZOisR3S8GsUjKLr!!Y3f^bqydqU|3AFvgboYyq6}%A$ao z2h`*OP1p6Mi5_Rz@x* zK!5RUy#nS_Z9M{3jJSY=d>2Aw7L!s1L`$*|0!*2JDHCZCMFhtLB$ecY!8r~F=hEbw zra{v*DG{-DY#trPdiL4#mjK{bxg2s;Rq^WWZvepYo(j%+b|s9h)S8Huf z$X!St?cYtZJwONn=N!j-DgfmEy}W<|9tcDP^E|`_MADED0;?;e4~*`+PwwH}*?V+4 zoy5JlX&4;1Os50<%S#$Lkl+D&atgyR!uQE!vJ|l_GSkp;oYD#BFQfoaPrKtMZC(W` gs;b_ui~PU9Ujcyce}P+9q5uE@07*qoM6N<$g3>f7761SM literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Power/ame_shielding_base.png b/Resources/Textures/Constructible/Power/ame_shielding_base.png new file mode 100644 index 0000000000000000000000000000000000000000..cd62067877c2ee374f373ca3c45efd999989fb10 GIT binary patch literal 425 zcmV;a0apHrP)~Jx8!k6UYIkOBKjvyh9*WIu8&?liCXegmf+`7GYQ|Tx3a# zpzG*FXTq><;RC_XKkxm(&u``;2!d~nsLL_KCxEj6xccjc5W;E@rBolF3J=53N;u~n zLI@>97vNCT;lA%%0SLnoobzAr*}NZMy}pL{_yhnDLaYEZy_2t0y4GpJr{@=|p+nvs zfV2UOquWB~1M zKPiB%1*%fF2M&c)Hb*fbMC$<5qqyy@1bBUWm+IyyHj!!+x4o4Bj}Q08VY*UzcX}X6 zHubsg;-jl1*$i(;s@0HlZgop`^p>Uk3n--!LL6VTAfrub-wU=i`Y4_NMhEx-;AU_I ThOmbQ00000NkvXXu0mjfYzekS literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Power/AME/ame_jar.rsi/jar.png b/Resources/Textures/Objects/Power/AME/ame_jar.rsi/jar.png new file mode 100644 index 0000000000000000000000000000000000000000..ede7ec4094a01bec9134787895ccb737fcc2f2b0 GIT binary patch literal 473 zcmV;~0Ve*5P)MO_{%V{jf=%Xvn&H(xm+@v&7!#EB*UF^ zIOmv7r{sCAtqA~d&T%;#ap&eX^Z7iMCLVd7tK563vUi}d+rtSwAUB?=oWF(HvQ*#R zP`|j_o(Ig%Q#D)HVN;V>;dHi*>>ae@0oi@7a%z`qbP1DYOvY!pc6A&r!iF{=f*B<+ z0I%@zI}AqfvyAg|c$WxRX*vxQCHz=N%?2VaAgj0RKlEIA0jM~@Gw z1NnlTE4Q6W@d;4CUw3j+S|1;SHMyl4M`9;e{zZz(wHQV>k_?|FdD z8eMy^J*+>()E2Bkiwa$>g6ZPk@SP{Begjp7NrxbUszG1H{R=yE_`mTBb9%2>UZdl? P00000NkvXXu0mjf&GpuY literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Power/AME/ame_jar.rsi/meta.json b/Resources/Textures/Objects/Power/AME/ame_jar.rsi/meta.json new file mode 100644 index 0000000000..38c5df1bfe --- /dev/null +++ b/Resources/Textures/Objects/Power/AME/ame_jar.rsi/meta.json @@ -0,0 +1,20 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/vgstation-coders/vgstation13/blob/Bleeding-Edge/icons/obj/machines/new_ame.dmi at 1b7952787c06c21ef1623e494dcfe7cb1f46e041", + "states": [ + { + "name": "jar", + "directions": 1, + "delays": [ + [ + 1.0 + ] + ] + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Objects/Power/AME/ame_part.rsi/box.png b/Resources/Textures/Objects/Power/AME/ame_part.rsi/box.png new file mode 100644 index 0000000000000000000000000000000000000000..320d84905cac876a2502ac957f15296e8065abd8 GIT binary patch literal 384 zcmV-`0e}99P)#c!x!iysB~~C3eG}}(o)EsMX;um z!)?~Ow2**FZW@cr{ic)TB>#7BNDdeb2E#wIq0>~WSLUk*4By7F8CyEx#bP0Ku;)$D zxi40rR%aZ zqAWN$J;bu2e?&_8h_VQs^StTb2rN0e{fxZUYvlp(X9|GPaFjTRKw}ynw+>dCgb)2E etx0Pz7z{rIN@><7mg~X*0000 Date: Sat, 29 Aug 2020 11:12:21 +0000 Subject: [PATCH 021/103] Tweaks suicide to be a little more personal. (#1887) * Copied code from ClimableComponent.cs to make Welder suicides way better * ass nath * Adds other types of suicide and addresses review * fixes conflicts * Welder updates * Welder fixes x2 * themselves * Fix typo * Remove crate textures * Merge remote-tracking branch 'upstream/master' into pr/1887 Co-authored-by: DrSmugleaf --- Content.Server/Chat/ChatCommands.cs | 24 +++++++++++++++- .../Interactable/WelderComponent.cs | 28 +++++++++++++++++-- .../Components/Kitchen/MicrowaveComponent.cs | 23 +++++++++++++-- 3 files changed, 70 insertions(+), 5 deletions(-) diff --git a/Content.Server/Chat/ChatCommands.cs b/Content.Server/Chat/ChatCommands.cs index c5f194d429..9450fa45fc 100644 --- a/Content.Server/Chat/ChatCommands.cs +++ b/Content.Server/Chat/ChatCommands.cs @@ -5,9 +5,11 @@ using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.GameObjects.Components.Observer; using Content.Server.Interfaces.Chat; using Content.Server.Interfaces.GameObjects; +using Content.Server.Interfaces; using Content.Server.Observer; using Content.Server.Players; using Content.Shared.GameObjects.Components.Damage; +using Content.Shared.Interfaces; using Robust.Server.Interfaces.Console; using Robust.Server.Interfaces.Player; using Robust.Shared.Enums; @@ -116,6 +118,9 @@ namespace Content.Server.Chat internal class SuicideCommand : IClientCommand { + [Dependency] private readonly IPlayerManager _playerManager = default!; + [Dependency] private readonly IServerNotifyManager _notifyManager = default!; + public string Command => "suicide"; public string Description => "Commits suicide"; @@ -186,12 +191,29 @@ namespace Content.Server.Chat } } // Default suicide, bite your tongue - chat.EntityMe(owner, Loc.GetString("is attempting to bite {0:their} own tongue, looks like {0:theyre} trying to commit suicide!", owner)); //TODO: theyre macro + PopupMessageOtherClientsInRange(owner, Loc.GetString("{0:theName} is attempting to bite {0:their} own tongue!", owner), 15); + _notifyManager.PopupMessage(owner, owner, Loc.GetString("You attempt to bite your own tongue!")); dmgComponent.ChangeDamage(DamageType.Piercing, 500, true, owner); // Prevent the player from returning to the body. Yes, this is an ugly hack. var ghost = new Ghost(){CanReturn = false}; ghost.Execute(shell, player, Array.Empty()); } + private void PopupMessageOtherClientsInRange(IEntity source, string message, int maxReceiveDistance) + { + var viewers = _playerManager.GetPlayersInRange(source.Transform.GridPosition, maxReceiveDistance); + + foreach (var viewer in viewers) + { + var viewerEntity = viewer.AttachedEntity; + + if (viewerEntity == null || source == viewerEntity) + { + continue; + } + + source.PopupMessage(viewer.AttachedEntity, message); + } + } } } diff --git a/Content.Server/GameObjects/Components/Interactable/WelderComponent.cs b/Content.Server/GameObjects/Components/Interactable/WelderComponent.cs index 7f37eef2e5..5a5228cdbd 100644 --- a/Content.Server/GameObjects/Components/Interactable/WelderComponent.cs +++ b/Content.Server/GameObjects/Components/Interactable/WelderComponent.cs @@ -8,12 +8,16 @@ using Content.Server.GameObjects.EntitySystems; using Content.Server.Interfaces; using Content.Server.Interfaces.Chat; using Content.Server.Interfaces.GameObjects; +using Content.Server.GameObjects.EntitySystems.DoAfter; using Content.Shared.Chemistry; using Content.Shared.GameObjects; using Content.Shared.GameObjects.Components.Interactable; using Content.Shared.Interfaces.GameObjects.Components; +using Content.Shared.Interfaces; using Robust.Server.GameObjects; +using Robust.Server.Interfaces.Player; using Robust.Shared.GameObjects; +using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.IoC; using Robust.Shared.Localization; @@ -31,6 +35,7 @@ namespace Content.Server.GameObjects.Components.Interactable { [Dependency] private readonly IEntitySystemManager _entitySystemManager = default!; [Dependency] private readonly IServerNotifyManager _notifyManager = default!; + [Dependency] private readonly IPlayerManager _playerManager = default!; public override string Name => "Welder"; public override uint? NetID => ContentNetIDs.WELDER; @@ -256,11 +261,13 @@ namespace Content.Server.GameObjects.Components.Interactable if (TryWeld(5, victim, silent: true)) { PlaySoundCollection(WeldSoundCollection); - chat.EntityMe(victim, Loc.GetString("welds {0:their} every orifice closed! It looks like {0:theyre} trying to commit suicide!", victim)); + PopupMessageOtherClientsInRange(victim, Loc.GetString("{0:theName} welds {0:their} every orifice closed! It looks like {0:theyre} trying to commit suicide!", victim), 15); + _notifyManager.PopupMessage(victim, victim, Loc.GetString("You weld your every orifice closed!")); return SuicideKind.Heat; } - chat.EntityMe(victim, Loc.GetString("bashes {0:themselves} with the {1}!", victim, Owner.Name)); + PopupMessageOtherClientsInRange(victim, Loc.GetString("{0:theName} bashes themselves with the unlit welding torch!", victim), 15); + _notifyManager.PopupMessage(victim, victim, Loc.GetString("You bash yourself with the unlit welding torch!")); return SuicideKind.Blunt; } @@ -268,5 +275,22 @@ namespace Content.Server.GameObjects.Components.Interactable { Dirty(); } + + private void PopupMessageOtherClientsInRange(IEntity source, string message, int maxReceiveDistance) + { + var viewers = _playerManager.GetPlayersInRange(source.Transform.GridPosition, maxReceiveDistance); + + foreach (var viewer in viewers) + { + var viewerEntity = viewer.AttachedEntity; + + if (viewerEntity == null || source == viewerEntity) + { + continue; + } + + source.PopupMessage(viewer.AttachedEntity, message); + } + } } } diff --git a/Content.Server/GameObjects/Components/Kitchen/MicrowaveComponent.cs b/Content.Server/GameObjects/Components/Kitchen/MicrowaveComponent.cs index 21ef4a521a..e3ba2687b3 100644 --- a/Content.Server/GameObjects/Components/Kitchen/MicrowaveComponent.cs +++ b/Content.Server/GameObjects/Components/Kitchen/MicrowaveComponent.cs @@ -27,6 +27,7 @@ using Robust.Server.GameObjects.Components.Container; using Robust.Server.GameObjects.Components.UserInterface; using Robust.Server.GameObjects.EntitySystems; using Robust.Server.Interfaces.GameObjects; +using Robust.Server.Interfaces.Player; using Robust.Shared.Audio; using Robust.Shared.GameObjects.Systems; using Content.Shared.GameObjects.Components.Body; @@ -44,8 +45,9 @@ namespace Content.Server.GameObjects.Components.Kitchen [Dependency] private readonly IEntityManager _entityManager = default!; [Dependency] private readonly RecipeManager _recipeManager = default!; [Dependency] private readonly IServerNotifyManager _notifyManager = default!; + [Dependency] private readonly IPlayerManager _playerManager = default!; -#region YAMLSERIALIZE + #region YAMLSERIALIZE private int _cookTimeDefault; private int _cookTimeMultiplier; //For upgrades and stuff I guess? private string _badRecipeName = ""; @@ -498,12 +500,29 @@ namespace Content.Server.GameObjects.Components.Kitchen headCount++; } } - chat.EntityMe(victim, Loc.GetPluralString("is trying to cook {0:their} head!", "is trying to cook {0:their} heads!", headCount, victim)); + PopupMessageOtherClientsInRange(victim, Loc.GetString("{0:theName} is trying to cook {0:their} head!", victim), 15); + _notifyManager.PopupMessage(victim, victim, Loc.GetString("You cook your head!")); _currentCookTimerTime = 10; ClickSound(); _uiDirty = true; wzhzhzh(); return SuicideKind.Heat; } + private void PopupMessageOtherClientsInRange(IEntity source, string message, int maxReceiveDistance) + { + var viewers = _playerManager.GetPlayersInRange(source.Transform.GridPosition, maxReceiveDistance); + + foreach (var viewer in viewers) + { + var viewerEntity = viewer.AttachedEntity; + + if (viewerEntity == null || source == viewerEntity) + { + continue; + } + + source.PopupMessage(viewer.AttachedEntity, message); + } + } } } From c37c39fe3c975b1fb472c8c70e3c3e77c727c46a Mon Sep 17 00:00:00 2001 From: DrSmugleaf Date: Sat, 29 Aug 2020 13:13:08 +0200 Subject: [PATCH 022/103] Fix not checking both perspectives of a disposals tube connection (#1947) * Fix not checking both perspectives of a disposals tube connection * Good night LINQ Switch to Reactive whence * by god --- .../Disposal/DisposalTubeComponent.cs | 26 +++++++++++++++---- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/Content.Server/GameObjects/Components/Disposal/DisposalTubeComponent.cs b/Content.Server/GameObjects/Components/Disposal/DisposalTubeComponent.cs index 5055312f56..f03abfd8b0 100644 --- a/Content.Server/GameObjects/Components/Disposal/DisposalTubeComponent.cs +++ b/Content.Server/GameObjects/Components/Disposal/DisposalTubeComponent.cs @@ -69,12 +69,28 @@ namespace Content.Server.GameObjects.Components.Disposal var nextDirection = NextDirection(holder); var snapGrid = Owner.GetComponent(); var oppositeDirection = new Angle(nextDirection.ToAngle().Theta + Math.PI).GetDir(); - var tube = snapGrid - .GetInDir(nextDirection) - .Select(x => x.TryGetComponent(out IDisposalTubeComponent? c) ? c : null) - .FirstOrDefault(x => x != null && x != this && x.CanConnect(oppositeDirection, this)); - return tube; + foreach (var entity in snapGrid.GetInDir(nextDirection)) + { + if (!entity.TryGetComponent(out IDisposalTubeComponent? tube)) + { + continue; + } + + if (!tube.CanConnect(oppositeDirection, this)) + { + continue; + } + + if (!CanConnect(nextDirection, tube)) + { + continue; + } + + return tube; + } + + return null; } public bool Remove(DisposalHolderComponent holder) From 4d23bbf4df0ed7d45b4cde5ae8ccf7db3e68f277 Mon Sep 17 00:00:00 2001 From: DrSmugleaf Date: Sat, 29 Aug 2020 13:13:22 +0200 Subject: [PATCH 023/103] Fix slippery items not being slippery (#1948) * Fix slippery items not being slippery * Fix slippery not being slippery part 2 redux electric boogaloo * You got a license for that hard collidable? --- .../Components/Fluids/PuddleComponent.cs | 19 ++++++------- .../Movement/SharedSlipperyComponent.cs | 10 ++++++- .../Entities/Objects/Consumable/trash.yml | 21 ++++++++++----- .../Entities/Objects/Devices/pda.yml | 6 +++++ .../Entities/Objects/Specific/janitor.yml | 27 +++++++++++-------- Resources/Prototypes/Entities/puddle.yml | 5 +++- 6 files changed, 59 insertions(+), 29 deletions(-) diff --git a/Content.Server/GameObjects/Components/Fluids/PuddleComponent.cs b/Content.Server/GameObjects/Components/Fluids/PuddleComponent.cs index 8d28737c05..769d14fd16 100644 --- a/Content.Server/GameObjects/Components/Fluids/PuddleComponent.cs +++ b/Content.Server/GameObjects/Components/Fluids/PuddleComponent.cs @@ -63,7 +63,7 @@ namespace Content.Server.GameObjects.Components.Fluids get => _slipThreshold; set => _slipThreshold = value; } - private bool _slippery = false; + private float _evaporateTime; private string _spillSound; @@ -97,6 +97,8 @@ namespace Content.Server.GameObjects.Components.Fluids // Whether the underlying solution color should be used private bool _recolor; + private bool Slippery => Owner.TryGetComponent(out SlipperyComponent slippery) && slippery.Slippery; + /// public override void ExposeData(ObjectSerializer serializer) { @@ -107,7 +109,6 @@ namespace Content.Server.GameObjects.Components.Fluids serializer.DataField(ref _evaporateThreshold, "evaporate_threshold", ReagentUnit.New(20)); serializer.DataField(ref _spriteVariants, "variants", 1); serializer.DataField(ref _recolor, "recolor", false); - } public override void Initialize() @@ -155,7 +156,7 @@ namespace Content.Server.GameObjects.Components.Fluids void IExamine.Examine(FormattedMessage message, bool inDetailsRange) { - if(_slippery) + if(Slippery) { message.AddText(Loc.GetString("It looks slippery.")); } @@ -246,15 +247,15 @@ namespace Content.Server.GameObjects.Components.Fluids private void UpdateSlip() { - if ((_slipThreshold == ReagentUnit.New(-1) || CurrentVolume < _slipThreshold) && Owner.TryGetComponent(out SlipperyComponent existingSlipperyComponent)) + if ((_slipThreshold == ReagentUnit.New(-1) || CurrentVolume < _slipThreshold) && + Owner.TryGetComponent(out SlipperyComponent oldSlippery)) { - Owner.RemoveComponent(); - _slippery = false; + oldSlippery.Slippery = false; } - else if (CurrentVolume >= _slipThreshold && !Owner.TryGetComponent(out SlipperyComponent newSlipperyComponent)) + else if (CurrentVolume >= _slipThreshold) { - Owner.AddComponent(); - _slippery = true; + var newSlippery = Owner.EnsureComponent(); + newSlippery.Slippery = true; } } diff --git a/Content.Shared/GameObjects/Components/Movement/SharedSlipperyComponent.cs b/Content.Shared/GameObjects/Components/Movement/SharedSlipperyComponent.cs index 013b40e59e..d232ffaa50 100644 --- a/Content.Shared/GameObjects/Components/Movement/SharedSlipperyComponent.cs +++ b/Content.Shared/GameObjects/Components/Movement/SharedSlipperyComponent.cs @@ -44,9 +44,16 @@ namespace Content.Shared.GameObjects.Components.Movement [ViewVariables(VVAccess.ReadWrite)] private float RequiredSlipSpeed { get; set; } = 0f; + /// + /// Whether or not this component will try to slip entities. + /// + [ViewVariables(VVAccess.ReadWrite)] + public bool Slippery { get; set; } + private bool TrySlip(IEntity entity) { - if (ContainerHelpers.IsInContainer(Owner) + if (!Slippery + || ContainerHelpers.IsInContainer(Owner) || _slipped.Contains(entity.Uid) || !entity.TryGetComponent(out SharedStunnableComponent stun) || !entity.TryGetComponent(out ICollidableComponent otherBody) @@ -137,6 +144,7 @@ namespace Content.Shared.GameObjects.Components.Movement serializer.DataField(this, x => ParalyzeTime, "paralyzeTime", 3f); serializer.DataField(this, x => IntersectPercentage, "intersectPercentage", 0.3f); serializer.DataField(this, x => RequiredSlipSpeed, "requiredSlipSpeed", 0f); + serializer.DataField(this, x => x.Slippery, "slippery", true); } } } diff --git a/Resources/Prototypes/Entities/Objects/Consumable/trash.yml b/Resources/Prototypes/Entities/Objects/Consumable/trash.yml index 06cbdacf41..dd95f0e23f 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/trash.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/trash.yml @@ -207,10 +207,17 @@ parent: TrashBase id: TrashBananaPeel components: - - type: Sprite - sprite: Objects/Consumable/Food/banana.rsi - state: peel - - type: Icon - sprite: Objects/Consumable/Food/banana.rsi - state: peel - - type: Slippery + - type: Sprite + sprite: Objects/Consumable/Food/banana.rsi + state: peel + - type: Icon + sprite: Objects/Consumable/Food/banana.rsi + state: peel + - type: Slippery + intersectPercentage: 0.2 + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.2,-0.2,0.2,0.2" + layer: + - MobImpassable diff --git a/Resources/Prototypes/Entities/Objects/Devices/pda.yml b/Resources/Prototypes/Entities/Objects/Devices/pda.yml index 672db4b488..0675fd443f 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/pda.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/pda.yml @@ -85,6 +85,12 @@ map: ["enum.PDAVisualLayers.Flashlight"] - type: Slippery paralyzeTime: 4 + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.25,-0.25,0.25,0.25" + layer: + - MobImpassable - type: entity name: Cargo PDA diff --git a/Resources/Prototypes/Entities/Objects/Specific/janitor.yml b/Resources/Prototypes/Entities/Objects/Specific/janitor.yml index 7386b835b5..419856502b 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/janitor.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/janitor.yml @@ -102,17 +102,22 @@ parent: BaseItem description: A cheap bar of soap. Doesn't smell. components: - - type: Sprite - sprite: Objects/Specific/Janitorial/soap.rsi - state: soap - - type: Icon - sprite: Objects/Specific/Janitorial/soap.rsi - state: soap - - type: Item - sprite: Objects/Specific/Janitorial/soap.rsi - - type: Slippery - paralyzeTime: 2.5 - + - type: Sprite + sprite: Objects/Specific/Janitorial/soap.rsi + state: soap + - type: Icon + sprite: Objects/Specific/Janitorial/soap.rsi + state: soap + - type: Item + sprite: Objects/Specific/Janitorial/soap.rsi + - type: Slippery + paralyzeTime: 2.5 + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.3,-0.4,0.3,0.4" + layer: + - MobImpassable - type: entity name: soap diff --git a/Resources/Prototypes/Entities/puddle.yml b/Resources/Prototypes/Entities/puddle.yml index 7f28f6986f..f4a6faaab8 100644 --- a/Resources/Prototypes/Entities/puddle.yml +++ b/Resources/Prototypes/Entities/puddle.yml @@ -15,10 +15,13 @@ - type: LoopingSound - type: InteractionOutline - type: Clickable + - type: Slippery - type: Collidable shapes: - !type:PhysShapeAabb - bounds: "-0.5,-0.5,0.5,0.5" + bounds: "-0.4,-0.4,0.4,0.4" + layer: + - MobImpassable hard: false - type: entity From 1ecf8aad1a0339d9575db3d158e7c3ff677f7608 Mon Sep 17 00:00:00 2001 From: DrSmugleaf Date: Sat, 29 Aug 2020 13:20:37 +0200 Subject: [PATCH 024/103] Add prediction for standing states and mob states (#1937) --- .../Components/Body/BodyManagerComponent.cs | 2 +- .../Components/Mobs/State/CriticalState.cs | 30 + .../Components/Mobs/State/DeadState.cs | 41 ++ .../Mobs/State/MobStateManagerComponent.cs | 62 +++ .../Components/Mobs/State/NormalState.cs | 25 + .../EntitySystems/StandingStateSystem.cs | 50 ++ Content.Client/IgnoredComponents.cs | 1 - .../States/Mobs/NearbyBodiesState.cs | 2 +- .../Components/Body/BodyManagerComponent.cs | 7 +- .../Components/Buckle/BuckleComponent.cs | 11 +- .../Disposal/DisposalHolderComponent.cs | 2 +- .../Disposal/DisposalUnitComponent.cs | 2 +- .../Components/Doors/ServerDoorComponent.cs | 2 +- .../Instruments/InstrumentComponent.cs | 4 +- .../Components/Medical/HealingComponent.cs | 2 +- .../Components/Mobs/MobStateManager.cs | 513 ------------------ .../Components/Mobs/State/CriticalState.cs | 51 ++ .../Components/Mobs/State/DeadState.cs | 62 +++ .../Components/Mobs/State/MobStateManager.cs | 70 +++ .../Components/Mobs/State/NormalState.cs | 79 +++ .../Components/Mobs/StunnableComponent.cs | 9 +- .../Components/Recycling/RecyclerComponent.cs | 2 +- .../EntitySystems/StandingStateSystem.cs | 65 +++ .../StationEvents/RadiationPulseSystem.cs | 2 +- Content.Server/Mobs/StandingStateHelper.cs | 84 --- ...nent.cs => ISharedBodyManagerComponent.cs} | 3 +- .../Body/SharedBodyManagerComponent.cs | 2 +- .../Components/Damage/DamageState.cs | 1 + .../Components/Damage/IDamageableComponent.cs | 4 +- .../Components/Mobs/State/IMobState.cs | 29 + .../Mobs/State/SharedCriticalState.cs | 76 +++ .../Components/Mobs/State/SharedDeadState.cs | 73 +++ .../State/SharedMobStateManagerComponent.cs | 128 +++++ .../Mobs/State/SharedNormalState.cs | 76 +++ .../SharedPlayerInputMoverComponent.cs | 2 +- ...omponent.cs => SharedRotationComponent.cs} | 1 - Content.Shared/GameObjects/ContentNetIDs.cs | 2 + .../SharedStandingStateSystem.cs | 50 ++ 38 files changed, 1001 insertions(+), 626 deletions(-) create mode 100644 Content.Client/GameObjects/Components/Mobs/State/CriticalState.cs create mode 100644 Content.Client/GameObjects/Components/Mobs/State/DeadState.cs create mode 100644 Content.Client/GameObjects/Components/Mobs/State/MobStateManagerComponent.cs create mode 100644 Content.Client/GameObjects/Components/Mobs/State/NormalState.cs create mode 100644 Content.Client/GameObjects/EntitySystems/StandingStateSystem.cs delete mode 100644 Content.Server/GameObjects/Components/Mobs/MobStateManager.cs create mode 100644 Content.Server/GameObjects/Components/Mobs/State/CriticalState.cs create mode 100644 Content.Server/GameObjects/Components/Mobs/State/DeadState.cs create mode 100644 Content.Server/GameObjects/Components/Mobs/State/MobStateManager.cs create mode 100644 Content.Server/GameObjects/Components/Mobs/State/NormalState.cs create mode 100644 Content.Server/GameObjects/EntitySystems/StandingStateSystem.cs delete mode 100644 Content.Server/Mobs/StandingStateHelper.cs rename Content.Shared/GameObjects/Components/Body/{IBodyManagerComponent.cs => ISharedBodyManagerComponent.cs} (52%) create mode 100644 Content.Shared/GameObjects/Components/Mobs/State/IMobState.cs create mode 100644 Content.Shared/GameObjects/Components/Mobs/State/SharedCriticalState.cs create mode 100644 Content.Shared/GameObjects/Components/Mobs/State/SharedDeadState.cs create mode 100644 Content.Shared/GameObjects/Components/Mobs/State/SharedMobStateManagerComponent.cs create mode 100644 Content.Shared/GameObjects/Components/Mobs/State/SharedNormalState.cs rename Content.Shared/GameObjects/Components/Rotation/{RotationComponent.cs => SharedRotationComponent.cs} (93%) create mode 100644 Content.Shared/GameObjects/EntitySystems/SharedStandingStateSystem.cs diff --git a/Content.Client/GameObjects/Components/Body/BodyManagerComponent.cs b/Content.Client/GameObjects/Components/Body/BodyManagerComponent.cs index 767f354f4b..fc54c88a78 100644 --- a/Content.Client/GameObjects/Components/Body/BodyManagerComponent.cs +++ b/Content.Client/GameObjects/Components/Body/BodyManagerComponent.cs @@ -14,7 +14,7 @@ namespace Content.Client.GameObjects.Components.Body { [RegisterComponent] [ComponentReference(typeof(IDamageableComponent))] - [ComponentReference(typeof(IBodyManagerComponent))] + [ComponentReference(typeof(ISharedBodyManagerComponent))] public class BodyManagerComponent : SharedBodyManagerComponent, IClientDraggable { [Dependency] private readonly IEntityManager _entityManager = default!; diff --git a/Content.Client/GameObjects/Components/Mobs/State/CriticalState.cs b/Content.Client/GameObjects/Components/Mobs/State/CriticalState.cs new file mode 100644 index 0000000000..39b750d525 --- /dev/null +++ b/Content.Client/GameObjects/Components/Mobs/State/CriticalState.cs @@ -0,0 +1,30 @@ +using Content.Client.GameObjects.EntitySystems; +using Content.Shared.GameObjects.Components.Damage; +using Content.Shared.GameObjects.Components.Mobs; +using Content.Shared.GameObjects.Components.Mobs.State; +using Robust.Client.GameObjects; +using Robust.Shared.GameObjects.Systems; +using Robust.Shared.Interfaces.GameObjects; + +namespace Content.Client.GameObjects.Components.Mobs.State +{ + public class CriticalState : SharedCriticalState + { + public override void EnterState(IEntity entity) + { + if (entity.TryGetComponent(out AppearanceComponent appearance)) + { + appearance.SetData(DamageStateVisuals.State, DamageState.Critical); + } + + EntitySystem.Get().Down(entity); + } + + public override void ExitState(IEntity entity) + { + EntitySystem.Get().Standing(entity); + } + + public override void UpdateState(IEntity entity) { } + } +} diff --git a/Content.Client/GameObjects/Components/Mobs/State/DeadState.cs b/Content.Client/GameObjects/Components/Mobs/State/DeadState.cs new file mode 100644 index 0000000000..9ab07be1ac --- /dev/null +++ b/Content.Client/GameObjects/Components/Mobs/State/DeadState.cs @@ -0,0 +1,41 @@ +using Content.Client.GameObjects.EntitySystems; +using Content.Shared.GameObjects.Components.Damage; +using Content.Shared.GameObjects.Components.Mobs; +using Content.Shared.GameObjects.Components.Mobs.State; +using Robust.Client.GameObjects; +using Robust.Shared.GameObjects.Components; +using Robust.Shared.GameObjects.Systems; +using Robust.Shared.Interfaces.GameObjects; + +namespace Content.Client.GameObjects.Components.Mobs.State +{ + public class DeadState : SharedDeadState + { + public override void EnterState(IEntity entity) + { + if (entity.TryGetComponent(out AppearanceComponent appearance)) + { + appearance.SetData(DamageStateVisuals.State, DamageState.Dead); + } + + EntitySystem.Get().Down(entity); + + if (entity.TryGetComponent(out CollidableComponent collidable)) + { + collidable.CanCollide = false; + } + } + + public override void ExitState(IEntity entity) + { + EntitySystem.Get().Standing(entity); + + if (entity.TryGetComponent(out CollidableComponent collidable)) + { + collidable.CanCollide = true; + } + } + + public override void UpdateState(IEntity entity) { } + } +} diff --git a/Content.Client/GameObjects/Components/Mobs/State/MobStateManagerComponent.cs b/Content.Client/GameObjects/Components/Mobs/State/MobStateManagerComponent.cs new file mode 100644 index 0000000000..a5b16f9e40 --- /dev/null +++ b/Content.Client/GameObjects/Components/Mobs/State/MobStateManagerComponent.cs @@ -0,0 +1,62 @@ +#nullable enable +using System.Collections.Generic; +using Content.Shared.GameObjects.Components.Damage; +using Content.Shared.GameObjects.Components.Mobs.State; +using Robust.Shared.GameObjects; + +namespace Content.Client.GameObjects.Components.Mobs.State +{ + [RegisterComponent] + [ComponentReference(typeof(SharedMobStateManagerComponent))] + public class MobStateManagerComponent : SharedMobStateManagerComponent + { + private readonly Dictionary _behavior = new Dictionary + { + {DamageState.Alive, new NormalState()}, + {DamageState.Critical, new CriticalState()}, + {DamageState.Dead, new DeadState()} + }; + + private DamageState _currentDamageState; + + protected override IReadOnlyDictionary Behavior => _behavior; + + public override DamageState CurrentDamageState + { + get => _currentDamageState; + protected set + { + if (_currentDamageState == value) + { + return; + } + + if (_currentDamageState != DamageState.Invalid) + { + CurrentMobState.ExitState(Owner); + } + + _currentDamageState = value; + CurrentMobState = Behavior[CurrentDamageState]; + CurrentMobState.EnterState(Owner); + + Dirty(); + } + } + + public override void HandleComponentState(ComponentState? curState, ComponentState? nextState) + { + base.HandleComponentState(curState, nextState); + + if (!(curState is MobStateManagerComponentState state)) + { + return; + } + + _currentDamageState = state.DamageState; + CurrentMobState.ExitState(Owner); + CurrentMobState = Behavior[CurrentDamageState]; + CurrentMobState.EnterState(Owner); + } + } +} diff --git a/Content.Client/GameObjects/Components/Mobs/State/NormalState.cs b/Content.Client/GameObjects/Components/Mobs/State/NormalState.cs new file mode 100644 index 0000000000..af65dcc082 --- /dev/null +++ b/Content.Client/GameObjects/Components/Mobs/State/NormalState.cs @@ -0,0 +1,25 @@ +using Content.Shared.GameObjects.Components.Damage; +using Content.Shared.GameObjects.Components.Mobs; +using Content.Shared.GameObjects.Components.Mobs.State; +using Robust.Client.GameObjects; +using Robust.Shared.Interfaces.GameObjects; + +namespace Content.Client.GameObjects.Components.Mobs.State +{ + public class NormalState : SharedNormalState + { + public override void EnterState(IEntity entity) + { + if (entity.TryGetComponent(out AppearanceComponent appearance)) + { + appearance.SetData(DamageStateVisuals.State, DamageState.Alive); + } + + UpdateState(entity); + } + + public override void ExitState(IEntity entity) { } + + public override void UpdateState(IEntity entity) { } + } +} diff --git a/Content.Client/GameObjects/EntitySystems/StandingStateSystem.cs b/Content.Client/GameObjects/EntitySystems/StandingStateSystem.cs new file mode 100644 index 0000000000..212d386c01 --- /dev/null +++ b/Content.Client/GameObjects/EntitySystems/StandingStateSystem.cs @@ -0,0 +1,50 @@ +using Content.Shared.Audio; +using Content.Shared.GameObjects.Components.Rotation; +using Content.Shared.GameObjects.EntitySystems; +using Robust.Client.GameObjects; +using Robust.Client.GameObjects.EntitySystems; +using Robust.Shared.Interfaces.GameObjects; + +namespace Content.Client.GameObjects.EntitySystems +{ + public class StandingStateSystem : SharedStandingStateSystem + { + protected override bool OnDown(IEntity entity, bool playSound = true, bool dropItems = true, bool force = false) + { + if (!entity.TryGetComponent(out AppearanceComponent appearance)) + { + return false; + } + + var newState = RotationState.Horizontal; + appearance.TryGetData(RotationVisuals.RotationState, out var oldState); + + if (newState != oldState) + { + appearance.SetData(RotationVisuals.RotationState, newState); + } + + if (playSound) + { + var file = AudioHelpers.GetRandomFileFromSoundCollection("bodyfall"); + Get().Play(file, entity, AudioHelpers.WithVariation(0.25f)); + } + + return true; + } + + protected override bool OnStand(IEntity entity) + { + if (!entity.TryGetComponent(out AppearanceComponent appearance)) return false; + + appearance.TryGetData(RotationVisuals.RotationState, out var oldState); + var newState = RotationState.Vertical; + + if (newState == oldState) return false; + + appearance.SetData(RotationVisuals.RotationState, newState); + + return true; + } + } +} diff --git a/Content.Client/IgnoredComponents.cs b/Content.Client/IgnoredComponents.cs index 9aceb3988d..e49789d519 100644 --- a/Content.Client/IgnoredComponents.cs +++ b/Content.Client/IgnoredComponents.cs @@ -156,7 +156,6 @@ "Barotrauma", "GasSprayer", "GasVapor", - "MobStateManager", "Metabolism", "AiFactionTag", "PressureProtection", diff --git a/Content.Server/AI/WorldState/States/Mobs/NearbyBodiesState.cs b/Content.Server/AI/WorldState/States/Mobs/NearbyBodiesState.cs index 2554c4cf53..b6664b00c7 100644 --- a/Content.Server/AI/WorldState/States/Mobs/NearbyBodiesState.cs +++ b/Content.Server/AI/WorldState/States/Mobs/NearbyBodiesState.cs @@ -21,7 +21,7 @@ namespace Content.Server.AI.WorldState.States.Mobs return result; } - foreach (var entity in Visibility.GetEntitiesInRange(Owner.Transform.GridPosition, typeof(IBodyManagerComponent), controller.VisionRadius)) + foreach (var entity in Visibility.GetEntitiesInRange(Owner.Transform.GridPosition, typeof(ISharedBodyManagerComponent), controller.VisionRadius)) { if (entity == Owner) continue; result.Add(entity); diff --git a/Content.Server/GameObjects/Components/Body/BodyManagerComponent.cs b/Content.Server/GameObjects/Components/Body/BodyManagerComponent.cs index 3c65da2fd1..e5154a9d93 100644 --- a/Content.Server/GameObjects/Components/Body/BodyManagerComponent.cs +++ b/Content.Server/GameObjects/Components/Body/BodyManagerComponent.cs @@ -20,6 +20,7 @@ using Content.Shared.GameObjects.Components.Damage; using Content.Shared.GameObjects.Components.Movement; using Robust.Server.Interfaces.Player; using Robust.Shared.GameObjects; +using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Reflection; using Robust.Shared.IoC; @@ -38,7 +39,7 @@ namespace Content.Server.GameObjects.Components.Body /// [RegisterComponent] [ComponentReference(typeof(IDamageableComponent))] - [ComponentReference(typeof(IBodyManagerComponent))] + [ComponentReference(typeof(ISharedBodyManagerComponent))] public class BodyManagerComponent : SharedBodyManagerComponent, IBodyPartContainer, IRelayMoveInput { [Dependency] private readonly IPrototypeManager _prototypeManager = default!; @@ -289,14 +290,14 @@ namespace Content.Server.GameObjects.Components.Body if (speedSum <= 0.001f || _activeLegs.Count <= 0) { // Case: no way of moving. Fall down. - StandingStateHelper.Down(Owner); + EntitySystem.Get().Down(Owner); playerMover.BaseWalkSpeed = 0.8f; playerMover.BaseSprintSpeed = 2.0f; } else { // Case: have at least one leg. Set move speed. - StandingStateHelper.Standing(Owner); + EntitySystem.Get().Standing(Owner); // Extra legs stack diminishingly. // Final speed = speed sum/(leg count-log4(leg count)) diff --git a/Content.Server/GameObjects/Components/Buckle/BuckleComponent.cs b/Content.Server/GameObjects/Components/Buckle/BuckleComponent.cs index 0b15560869..b23b629d24 100644 --- a/Content.Server/GameObjects/Components/Buckle/BuckleComponent.cs +++ b/Content.Server/GameObjects/Components/Buckle/BuckleComponent.cs @@ -3,9 +3,10 @@ using System; using System.Diagnostics.CodeAnalysis; using Content.Server.GameObjects.Components.GUI; using Content.Server.GameObjects.Components.Mobs; +using Content.Server.GameObjects.Components.Mobs.State; using Content.Server.GameObjects.Components.Strap; +using Content.Server.GameObjects.EntitySystems; using Content.Server.Interfaces; -using Content.Server.Mobs; using Content.Server.Utility; using Content.Shared.GameObjects.Components.Buckle; using Content.Shared.GameObjects.Components.Mobs; @@ -136,11 +137,11 @@ namespace Content.Server.GameObjects.Components.Buckle ownTransform.WorldRotation = strapTransform.WorldRotation; break; case StrapPosition.Stand: - StandingStateHelper.Standing(Owner); + EntitySystem.Get().Standing(Owner); ownTransform.WorldRotation = strapTransform.WorldRotation; break; case StrapPosition.Down: - StandingStateHelper.Down(Owner, force: true); + EntitySystem.Get().Down(Owner, force: true); ownTransform.WorldRotation = Angle.South; break; } @@ -364,11 +365,11 @@ namespace Content.Server.GameObjects.Components.Buckle if (Owner.TryGetComponent(out StunnableComponent? stunnable) && stunnable.KnockedDown) { - StandingStateHelper.Down(Owner); + EntitySystem.Get().Down(Owner); } else { - StandingStateHelper.Standing(Owner); + EntitySystem.Get().Standing(Owner); } if (Owner.TryGetComponent(out MobStateManagerComponent? stateManager)) diff --git a/Content.Server/GameObjects/Components/Disposal/DisposalHolderComponent.cs b/Content.Server/GameObjects/Components/Disposal/DisposalHolderComponent.cs index 838cf933d2..ed19c29447 100644 --- a/Content.Server/GameObjects/Components/Disposal/DisposalHolderComponent.cs +++ b/Content.Server/GameObjects/Components/Disposal/DisposalHolderComponent.cs @@ -63,7 +63,7 @@ namespace Content.Server.GameObjects.Components.Disposal } return entity.HasComponent() || - entity.HasComponent(); + entity.HasComponent(); } public bool TryInsert(IEntity entity) diff --git a/Content.Server/GameObjects/Components/Disposal/DisposalUnitComponent.cs b/Content.Server/GameObjects/Components/Disposal/DisposalUnitComponent.cs index d67721987a..ad43b62def 100644 --- a/Content.Server/GameObjects/Components/Disposal/DisposalUnitComponent.cs +++ b/Content.Server/GameObjects/Components/Disposal/DisposalUnitComponent.cs @@ -143,7 +143,7 @@ namespace Content.Server.GameObjects.Components.Disposal } if (!entity.HasComponent() && - !entity.HasComponent()) + !entity.HasComponent()) { return false; } diff --git a/Content.Server/GameObjects/Components/Doors/ServerDoorComponent.cs b/Content.Server/GameObjects/Components/Doors/ServerDoorComponent.cs index 1a0aeb7b21..064bc6fde4 100644 --- a/Content.Server/GameObjects/Components/Doors/ServerDoorComponent.cs +++ b/Content.Server/GameObjects/Components/Doors/ServerDoorComponent.cs @@ -100,7 +100,7 @@ namespace Content.Server.GameObjects.Components.Doors // Disabled because it makes it suck hard to walk through double doors. - if (entity.HasComponent()) + if (entity.HasComponent()) { if (!entity.TryGetComponent(out var mover)) return; diff --git a/Content.Server/GameObjects/Components/Instruments/InstrumentComponent.cs b/Content.Server/GameObjects/Components/Instruments/InstrumentComponent.cs index 931b95288a..3af194ba8d 100644 --- a/Content.Server/GameObjects/Components/Instruments/InstrumentComponent.cs +++ b/Content.Server/GameObjects/Components/Instruments/InstrumentComponent.cs @@ -2,6 +2,7 @@ using System; using System.Linq; using Content.Server.GameObjects.Components.Mobs; +using Content.Server.GameObjects.EntitySystems; using Content.Server.Interfaces; using Content.Server.Mobs; using Content.Server.Utility; @@ -15,6 +16,7 @@ using Robust.Server.Interfaces.Player; using Robust.Server.Player; using Robust.Shared.Enums; using Robust.Shared.GameObjects; +using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.Network; using Robust.Shared.Interfaces.Timing; using Robust.Shared.IoC; @@ -323,7 +325,7 @@ namespace Content.Server.GameObjects.Components.Instruments } else { - StandingStateHelper.DropAllItemsInHands(mob, false); + EntitySystem.Get().DropAllItemsInHands(mob, false); } InstrumentPlayer = null; diff --git a/Content.Server/GameObjects/Components/Medical/HealingComponent.cs b/Content.Server/GameObjects/Components/Medical/HealingComponent.cs index f89e4a5508..0b751e24c4 100644 --- a/Content.Server/GameObjects/Components/Medical/HealingComponent.cs +++ b/Content.Server/GameObjects/Components/Medical/HealingComponent.cs @@ -32,7 +32,7 @@ namespace Content.Server.GameObjects.Components.Medical return; } - if (!eventArgs.Target.TryGetComponent(out IBodyManagerComponent body)) + if (!eventArgs.Target.TryGetComponent(out ISharedBodyManagerComponent body)) { return; } diff --git a/Content.Server/GameObjects/Components/Mobs/MobStateManager.cs b/Content.Server/GameObjects/Components/Mobs/MobStateManager.cs deleted file mode 100644 index beb3bfa2d3..0000000000 --- a/Content.Server/GameObjects/Components/Mobs/MobStateManager.cs +++ /dev/null @@ -1,513 +0,0 @@ -using System.Collections.Generic; -using Content.Server.GameObjects.Components.Body; -using Content.Server.GameObjects.Components.Damage; -using Content.Server.Mobs; -using Content.Shared.GameObjects.Components.Damage; -using Content.Shared.GameObjects.Components.Mobs; -using Content.Shared.GameObjects.EntitySystems; -using Robust.Server.GameObjects; -using Robust.Shared.GameObjects; -using Robust.Shared.GameObjects.Components; -using Robust.Shared.Interfaces.GameObjects; - -namespace Content.Server.GameObjects.Components.Mobs -{ - /// - /// When attacked to an , this component will handle critical and death behaviors - /// for mobs. - /// Additionally, it handles sending effects to clients (such as blur effect for unconsciousness) and managing the - /// health HUD. - /// - [RegisterComponent] - internal class MobStateManagerComponent : Component, IOnHealthChangedBehavior, IActionBlocker - { - private readonly Dictionary _behavior = new Dictionary - { - {DamageState.Alive, new NormalState()}, - {DamageState.Critical, new CriticalState()}, - {DamageState.Dead, new DeadState()} - }; - - public override string Name => "MobStateManager"; - - private DamageState _currentDamageState; - - public IMobState CurrentMobState { get; private set; } = new NormalState(); - - bool IActionBlocker.CanInteract() - { - return CurrentMobState.CanInteract(); - } - - bool IActionBlocker.CanMove() - { - return CurrentMobState.CanMove(); - } - - bool IActionBlocker.CanUse() - { - return CurrentMobState.CanUse(); - } - - bool IActionBlocker.CanThrow() - { - return CurrentMobState.CanThrow(); - } - - bool IActionBlocker.CanSpeak() - { - return CurrentMobState.CanSpeak(); - } - - bool IActionBlocker.CanDrop() - { - return CurrentMobState.CanDrop(); - } - - bool IActionBlocker.CanPickup() - { - return CurrentMobState.CanPickup(); - } - - bool IActionBlocker.CanEmote() - { - return CurrentMobState.CanEmote(); - } - - bool IActionBlocker.CanAttack() - { - return CurrentMobState.CanAttack(); - } - - bool IActionBlocker.CanEquip() - { - return CurrentMobState.CanEquip(); - } - - bool IActionBlocker.CanUnequip() - { - return CurrentMobState.CanUnequip(); - } - - bool IActionBlocker.CanChangeDirection() - { - return CurrentMobState.CanChangeDirection(); - } - - public void OnHealthChanged(HealthChangedEventArgs e) - { - if (e.Damageable.CurrentDamageState != _currentDamageState) - { - _currentDamageState = e.Damageable.CurrentDamageState; - CurrentMobState.ExitState(Owner); - CurrentMobState = _behavior[_currentDamageState]; - CurrentMobState.EnterState(Owner); - } - - CurrentMobState.UpdateState(Owner); - } - - public override void Initialize() - { - base.Initialize(); - - _currentDamageState = DamageState.Alive; - CurrentMobState = _behavior[_currentDamageState]; - CurrentMobState.EnterState(Owner); - CurrentMobState.UpdateState(Owner); - } - - public override void OnRemove() - { - // TODO: Might want to add an OnRemove() to IMobState since those are where these components are being used - base.OnRemove(); - - if (Owner.TryGetComponent(out ServerStatusEffectsComponent status)) - { - status.RemoveStatusEffect(StatusEffect.Health); - } - - if (Owner.TryGetComponent(out ServerOverlayEffectsComponent overlay)) - { - overlay.ClearOverlays(); - } - } - } - - /// - /// Defines the blocking effects of an associated - /// (i.e. Normal, Critical, Dead) and what effects to apply upon entering or - /// exiting the state. - /// - public interface IMobState : IActionBlocker - { - /// - /// Called when this state is entered. - /// - void EnterState(IEntity entity); - - /// - /// Called when this state is left for a different state. - /// - void ExitState(IEntity entity); - - /// - /// Called when this state is updated. - /// - void UpdateState(IEntity entity); - } - - /// - /// The standard state an entity is in; no negative effects. - /// - public struct NormalState : IMobState - { - public void EnterState(IEntity entity) - { - if (entity.TryGetComponent(out AppearanceComponent appearance)) - { - appearance.SetData(DamageStateVisuals.State, DamageState.Alive); - } - - UpdateState(entity); - } - - public void ExitState(IEntity entity) { } - - public void UpdateState(IEntity entity) - { - if (!entity.TryGetComponent(out ServerStatusEffectsComponent status)) - { - return; - } - - if (!entity.TryGetComponent(out IDamageableComponent damageable)) - { - status.ChangeStatusEffectIcon(StatusEffect.Health, - "/Textures/Interface/StatusEffects/Human/human0.png"); - return; - } - - // TODO - switch (damageable) - { - case RuinableComponent ruinable: - { - if (ruinable.DeadThreshold == null) - { - break; - } - - var modifier = (int) (ruinable.TotalDamage / (ruinable.DeadThreshold / 7f)); - - status.ChangeStatusEffectIcon(StatusEffect.Health, - "/Textures/Interface/StatusEffects/Human/human" + modifier + ".png"); - - break; - } - case BodyManagerComponent body: - { - if (body.CriticalThreshold == null) - { - return; - } - - var modifier = (int) (body.TotalDamage / (body.CriticalThreshold / 7f)); - - status.ChangeStatusEffectIcon(StatusEffect.Health, - "/Textures/Interface/StatusEffects/Human/human" + modifier + ".png"); - - break; - } - default: - { - status.ChangeStatusEffectIcon(StatusEffect.Health, - "/Textures/Interface/StatusEffects/Human/human0.png"); - break; - } - } - } - - bool IActionBlocker.CanInteract() - { - return true; - } - - bool IActionBlocker.CanMove() - { - return true; - } - - bool IActionBlocker.CanUse() - { - return true; - } - - bool IActionBlocker.CanThrow() - { - return true; - } - - bool IActionBlocker.CanSpeak() - { - return true; - } - - bool IActionBlocker.CanDrop() - { - return true; - } - - bool IActionBlocker.CanPickup() - { - return true; - } - - bool IActionBlocker.CanEmote() - { - return true; - } - - bool IActionBlocker.CanAttack() - { - return true; - } - - bool IActionBlocker.CanEquip() - { - return true; - } - - bool IActionBlocker.CanUnequip() - { - return true; - } - - bool IActionBlocker.CanChangeDirection() - { - return true; - } - } - - /// - /// A state in which an entity is disabled from acting due to sufficient damage (considered unconscious). - /// - public struct CriticalState : IMobState - { - public void EnterState(IEntity entity) - { - if (entity.TryGetComponent(out AppearanceComponent appearance)) - { - appearance.SetData(DamageStateVisuals.State, DamageState.Critical); - } - - if (entity.TryGetComponent(out ServerStatusEffectsComponent status)) - { - status.ChangeStatusEffectIcon(StatusEffect.Health, - "/Textures/Interface/StatusEffects/Human/humancrit-0.png"); //Todo: combine humancrit-0 and humancrit-1 into a gif and display it - } - - if (entity.TryGetComponent(out ServerOverlayEffectsComponent overlay)) - { - overlay.AddOverlay(SharedOverlayID.GradientCircleMaskOverlay); - } - - if (entity.TryGetComponent(out StunnableComponent stun)) - { - stun.CancelAll(); - } - - StandingStateHelper.Down(entity); - } - - public void ExitState(IEntity entity) - { - StandingStateHelper.Standing(entity); - - if (entity.TryGetComponent(out ServerOverlayEffectsComponent overlay)) - { - overlay.ClearOverlays(); - } - } - - public void UpdateState(IEntity entity) - { - } - - bool IActionBlocker.CanInteract() - { - return false; - } - - bool IActionBlocker.CanMove() - { - return false; - } - - bool IActionBlocker.CanUse() - { - return false; - } - - bool IActionBlocker.CanThrow() - { - return false; - } - - bool IActionBlocker.CanSpeak() - { - return false; - } - - bool IActionBlocker.CanDrop() - { - return false; - } - - bool IActionBlocker.CanPickup() - { - return false; - } - - bool IActionBlocker.CanEmote() - { - return false; - } - - bool IActionBlocker.CanAttack() - { - return false; - } - - bool IActionBlocker.CanEquip() - { - return false; - } - - bool IActionBlocker.CanUnequip() - { - return false; - } - - bool IActionBlocker.CanChangeDirection() - { - return false; - } - } - - /// - /// The state representing a dead entity; allows for ghosting. - /// - public struct DeadState : IMobState - { - public void EnterState(IEntity entity) - { - if (entity.TryGetComponent(out AppearanceComponent appearance)) - { - appearance.SetData(DamageStateVisuals.State, DamageState.Dead); - } - - if (entity.TryGetComponent(out ServerStatusEffectsComponent status)) - { - status.ChangeStatusEffectIcon(StatusEffect.Health, - "/Textures/Interface/StatusEffects/Human/humandead.png"); - } - - if (entity.TryGetComponent(out ServerOverlayEffectsComponent overlayComponent)) - { - overlayComponent.AddOverlay(SharedOverlayID.CircleMaskOverlay); - } - - if (entity.TryGetComponent(out StunnableComponent stun)) - { - stun.CancelAll(); - } - - StandingStateHelper.Down(entity); - - if (entity.TryGetComponent(out CollidableComponent collidable)) - { - collidable.CanCollide = false; - } - } - - public void ExitState(IEntity entity) - { - StandingStateHelper.Standing(entity); - - if (entity.TryGetComponent(out CollidableComponent collidable)) - { - collidable.CanCollide = true; - } - - if (entity.TryGetComponent(out ServerOverlayEffectsComponent overlay)) - { - overlay.ClearOverlays(); - } - } - - public void UpdateState(IEntity entity) - { - } - - bool IActionBlocker.CanInteract() - { - return false; - } - - bool IActionBlocker.CanMove() - { - return false; - } - - bool IActionBlocker.CanUse() - { - return false; - } - - bool IActionBlocker.CanThrow() - { - return false; - } - - bool IActionBlocker.CanSpeak() - { - return false; - } - - bool IActionBlocker.CanDrop() - { - return false; - } - - bool IActionBlocker.CanPickup() - { - return false; - } - - bool IActionBlocker.CanEmote() - { - return false; - } - - bool IActionBlocker.CanAttack() - { - return false; - } - - bool IActionBlocker.CanEquip() - { - return false; - } - - bool IActionBlocker.CanUnequip() - { - return false; - } - - bool IActionBlocker.CanChangeDirection() - { - return false; - } - } -} diff --git a/Content.Server/GameObjects/Components/Mobs/State/CriticalState.cs b/Content.Server/GameObjects/Components/Mobs/State/CriticalState.cs new file mode 100644 index 0000000000..4592a90f51 --- /dev/null +++ b/Content.Server/GameObjects/Components/Mobs/State/CriticalState.cs @@ -0,0 +1,51 @@ +using Content.Server.GameObjects.EntitySystems; +using Content.Shared.GameObjects.Components.Damage; +using Content.Shared.GameObjects.Components.Mobs; +using Content.Shared.GameObjects.Components.Mobs.State; +using Robust.Server.GameObjects; +using Robust.Shared.GameObjects.Systems; +using Robust.Shared.Interfaces.GameObjects; + +namespace Content.Server.GameObjects.Components.Mobs.State +{ + public class CriticalState : SharedCriticalState + { + public override void EnterState(IEntity entity) + { + if (entity.TryGetComponent(out AppearanceComponent appearance)) + { + appearance.SetData(DamageStateVisuals.State, DamageState.Critical); + } + + if (entity.TryGetComponent(out ServerStatusEffectsComponent status)) + { + status.ChangeStatusEffectIcon(StatusEffect.Health, + "/Textures/Interface/StatusEffects/Human/humancrit-0.png"); //Todo: combine humancrit-0 and humancrit-1 into a gif and display it + } + + if (entity.TryGetComponent(out ServerOverlayEffectsComponent overlay)) + { + overlay.AddOverlay(SharedOverlayID.GradientCircleMaskOverlay); + } + + if (entity.TryGetComponent(out StunnableComponent stun)) + { + stun.CancelAll(); + } + + EntitySystem.Get().Down(entity); + } + + public override void ExitState(IEntity entity) + { + EntitySystem.Get().Standing(entity); + + if (entity.TryGetComponent(out ServerOverlayEffectsComponent overlay)) + { + overlay.ClearOverlays(); + } + } + + public override void UpdateState(IEntity entity) { } + } +} diff --git a/Content.Server/GameObjects/Components/Mobs/State/DeadState.cs b/Content.Server/GameObjects/Components/Mobs/State/DeadState.cs new file mode 100644 index 0000000000..174fc68ef4 --- /dev/null +++ b/Content.Server/GameObjects/Components/Mobs/State/DeadState.cs @@ -0,0 +1,62 @@ +using Content.Server.GameObjects.EntitySystems; +using Content.Shared.GameObjects.Components.Damage; +using Content.Shared.GameObjects.Components.Mobs; +using Content.Shared.GameObjects.Components.Mobs.State; +using Robust.Server.GameObjects; +using Robust.Shared.GameObjects.Components; +using Robust.Shared.GameObjects.Systems; +using Robust.Shared.Interfaces.GameObjects; + +namespace Content.Server.GameObjects.Components.Mobs.State +{ + public class DeadState : SharedDeadState + { + public override void EnterState(IEntity entity) + { + if (entity.TryGetComponent(out AppearanceComponent appearance)) + { + appearance.SetData(DamageStateVisuals.State, DamageState.Dead); + } + + if (entity.TryGetComponent(out ServerStatusEffectsComponent status)) + { + status.ChangeStatusEffectIcon(StatusEffect.Health, + "/Textures/Interface/StatusEffects/Human/humandead.png"); + } + + if (entity.TryGetComponent(out ServerOverlayEffectsComponent overlayComponent)) + { + overlayComponent.AddOverlay(SharedOverlayID.CircleMaskOverlay); + } + + if (entity.TryGetComponent(out StunnableComponent stun)) + { + stun.CancelAll(); + } + + EntitySystem.Get().Down(entity); + + if (entity.TryGetComponent(out CollidableComponent collidable)) + { + collidable.CanCollide = false; + } + } + + public override void ExitState(IEntity entity) + { + EntitySystem.Get().Standing(entity); + + if (entity.TryGetComponent(out CollidableComponent collidable)) + { + collidable.CanCollide = true; + } + + if (entity.TryGetComponent(out ServerOverlayEffectsComponent overlay)) + { + overlay.ClearOverlays(); + } + } + + public override void UpdateState(IEntity entity) { } + } +} diff --git a/Content.Server/GameObjects/Components/Mobs/State/MobStateManager.cs b/Content.Server/GameObjects/Components/Mobs/State/MobStateManager.cs new file mode 100644 index 0000000000..c0e90dd9fa --- /dev/null +++ b/Content.Server/GameObjects/Components/Mobs/State/MobStateManager.cs @@ -0,0 +1,70 @@ +using System.Collections.Generic; +using Content.Shared.GameObjects.Components.Damage; +using Content.Shared.GameObjects.Components.Mobs; +using Content.Shared.GameObjects.Components.Mobs.State; +using Robust.Shared.GameObjects; + +namespace Content.Server.GameObjects.Components.Mobs.State +{ + [RegisterComponent] + [ComponentReference(typeof(SharedMobStateManagerComponent))] + public class MobStateManagerComponent : SharedMobStateManagerComponent + { + private readonly Dictionary _behavior = new Dictionary + { + {DamageState.Alive, new NormalState()}, + {DamageState.Critical, new CriticalState()}, + {DamageState.Dead, new DeadState()} + }; + + private DamageState _currentDamageState; + + protected override IReadOnlyDictionary Behavior => _behavior; + + public override IMobState CurrentMobState { get; protected set; } + + public override DamageState CurrentDamageState + { + get => _currentDamageState; + protected set + { + if (_currentDamageState == value) + { + return; + } + + if (_currentDamageState != DamageState.Invalid) + { + CurrentMobState.ExitState(Owner); + } + + _currentDamageState = value; + CurrentMobState = Behavior[CurrentDamageState]; + CurrentMobState.EnterState(Owner); + + Dirty(); + } + } + + public override void OnRemove() + { + // TODO: Might want to add an OnRemove() to IMobState since those are where these components are being used + base.OnRemove(); + + if (Owner.TryGetComponent(out ServerStatusEffectsComponent status)) + { + status.RemoveStatusEffect(StatusEffect.Health); + } + + if (Owner.TryGetComponent(out ServerOverlayEffectsComponent overlay)) + { + overlay.ClearOverlays(); + } + } + + public override ComponentState GetComponentState() + { + return new MobStateManagerComponentState(CurrentDamageState); + } + } +} diff --git a/Content.Server/GameObjects/Components/Mobs/State/NormalState.cs b/Content.Server/GameObjects/Components/Mobs/State/NormalState.cs new file mode 100644 index 0000000000..507139e8bc --- /dev/null +++ b/Content.Server/GameObjects/Components/Mobs/State/NormalState.cs @@ -0,0 +1,79 @@ +using Content.Server.GameObjects.Components.Body; +using Content.Server.GameObjects.Components.Damage; +using Content.Shared.GameObjects.Components.Damage; +using Content.Shared.GameObjects.Components.Mobs; +using Content.Shared.GameObjects.Components.Mobs.State; +using Robust.Server.GameObjects; +using Robust.Shared.Interfaces.GameObjects; + +namespace Content.Server.GameObjects.Components.Mobs.State +{ + public class NormalState : SharedNormalState + { + public override void EnterState(IEntity entity) + { + if (entity.TryGetComponent(out AppearanceComponent appearance)) + { + appearance.SetData(DamageStateVisuals.State, DamageState.Alive); + } + + UpdateState(entity); + } + + public override void ExitState(IEntity entity) { } + + public override void UpdateState(IEntity entity) + { + if (!entity.TryGetComponent(out ServerStatusEffectsComponent status)) + { + return; + } + + if (!entity.TryGetComponent(out IDamageableComponent damageable)) + { + status.ChangeStatusEffectIcon(StatusEffect.Health, + "/Textures/Interface/StatusEffects/Human/human0.png"); + return; + } + + // TODO + switch (damageable) + { + case RuinableComponent ruinable: + { + if (ruinable.DeadThreshold == null) + { + break; + } + + var modifier = (int) (ruinable.TotalDamage / (ruinable.DeadThreshold / 7f)); + + status.ChangeStatusEffectIcon(StatusEffect.Health, + "/Textures/Interface/StatusEffects/Human/human" + modifier + ".png"); + + break; + } + case BodyManagerComponent body: + { + if (body.CriticalThreshold == null) + { + return; + } + + var modifier = (int) (body.TotalDamage / (body.CriticalThreshold / 7f)); + + status.ChangeStatusEffectIcon(StatusEffect.Health, + "/Textures/Interface/StatusEffects/Human/human" + modifier + ".png"); + + break; + } + default: + { + status.ChangeStatusEffectIcon(StatusEffect.Health, + "/Textures/Interface/StatusEffects/Human/human0.png"); + break; + } + } + } + } +} diff --git a/Content.Server/GameObjects/Components/Mobs/StunnableComponent.cs b/Content.Server/GameObjects/Components/Mobs/StunnableComponent.cs index 82d42a098e..2e19baa7a1 100644 --- a/Content.Server/GameObjects/Components/Mobs/StunnableComponent.cs +++ b/Content.Server/GameObjects/Components/Mobs/StunnableComponent.cs @@ -1,7 +1,8 @@ -using Content.Server.Mobs; +using Content.Server.GameObjects.EntitySystems; using Content.Shared.GameObjects.Components.Mobs; using Content.Shared.GameObjects.Components.Movement; using Robust.Shared.GameObjects; +using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.Timing; using Robust.Shared.IoC; using Robust.Shared.Timers; @@ -16,7 +17,7 @@ namespace Content.Server.GameObjects.Components.Mobs protected override void OnKnockdown() { - StandingStateHelper.Down(Owner); + EntitySystem.Get().Down(Owner); } public void CancelAll() @@ -33,7 +34,7 @@ namespace Content.Server.GameObjects.Components.Mobs if (KnockedDown) { - StandingStateHelper.Standing(Owner); + EntitySystem.Get().Standing(Owner); } KnockdownTimer = 0f; @@ -58,7 +59,7 @@ namespace Content.Server.GameObjects.Components.Mobs if (KnockdownTimer <= 0f) { - StandingStateHelper.Standing(Owner); + EntitySystem.Get().Standing(Owner); KnockdownTimer = 0f; Dirty(); diff --git a/Content.Server/GameObjects/Components/Recycling/RecyclerComponent.cs b/Content.Server/GameObjects/Components/Recycling/RecyclerComponent.cs index 47285443dc..828ec9bb36 100644 --- a/Content.Server/GameObjects/Components/Recycling/RecyclerComponent.cs +++ b/Content.Server/GameObjects/Components/Recycling/RecyclerComponent.cs @@ -69,7 +69,7 @@ namespace Content.Server.GameObjects.Components.Recycling private bool CanGib(IEntity entity) { - return entity.HasComponent() && !_safe && Powered; + return entity.HasComponent() && !_safe && Powered; } private bool CanRecycle(IEntity entity, [MaybeNullWhen(false)] out ConstructionPrototype prototype) diff --git a/Content.Server/GameObjects/EntitySystems/StandingStateSystem.cs b/Content.Server/GameObjects/EntitySystems/StandingStateSystem.cs new file mode 100644 index 0000000000..49165efd87 --- /dev/null +++ b/Content.Server/GameObjects/EntitySystems/StandingStateSystem.cs @@ -0,0 +1,65 @@ +using Content.Server.Interfaces.GameObjects.Components.Items; +using Content.Shared.Audio; +using Content.Shared.GameObjects.Components.Rotation; +using Content.Shared.GameObjects.EntitySystems; +using JetBrains.Annotations; +using Robust.Server.GameObjects; +using Robust.Server.GameObjects.EntitySystems; +using Robust.Shared.Interfaces.GameObjects; + +namespace Content.Server.GameObjects.EntitySystems +{ + [UsedImplicitly] + public class StandingStateSystem : SharedStandingStateSystem + { + protected override bool OnDown(IEntity entity, bool playSound = true, bool dropItems = true, bool force = false) + { + if (!entity.TryGetComponent(out AppearanceComponent appearance)) + { + return false; + } + + var newState = RotationState.Horizontal; + appearance.TryGetData(RotationVisuals.RotationState, out var oldState); + + if (newState != oldState) + { + appearance.SetData(RotationVisuals.RotationState, newState); + } + + if (playSound) + { + var file = AudioHelpers.GetRandomFileFromSoundCollection("bodyfall"); + Get().PlayFromEntity(file, entity, AudioHelpers.WithVariation(0.25f)); + } + + return true; + } + + protected override bool OnStand(IEntity entity) + { + if (!entity.TryGetComponent(out AppearanceComponent appearance)) return false; + + appearance.TryGetData(RotationVisuals.RotationState, out var oldState); + var newState = RotationState.Vertical; + + if (newState == oldState) return false; + + appearance.SetData(RotationVisuals.RotationState, newState); + + return true; + } + + public override void DropAllItemsInHands(IEntity entity, bool doMobChecks = true) + { + base.DropAllItemsInHands(entity, doMobChecks); + + if (!entity.TryGetComponent(out IHandsComponent hands)) return; + + foreach (var heldItem in hands.GetAllHeldItems()) + { + hands.Drop(heldItem.Owner, doMobChecks); + } + } + } +} diff --git a/Content.Server/GameObjects/EntitySystems/StationEvents/RadiationPulseSystem.cs b/Content.Server/GameObjects/EntitySystems/StationEvents/RadiationPulseSystem.cs index a40029da44..2f436c922a 100644 --- a/Content.Server/GameObjects/EntitySystems/StationEvents/RadiationPulseSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/StationEvents/RadiationPulseSystem.cs @@ -34,7 +34,7 @@ namespace Content.Server.GameObjects.EntitySystems.StationEvents public override void Initialize() { base.Initialize(); - _speciesQuery = new TypeEntityQuery(typeof(IBodyManagerComponent)); + _speciesQuery = new TypeEntityQuery(typeof(ISharedBodyManagerComponent)); } public override void Update(float frameTime) diff --git a/Content.Server/Mobs/StandingStateHelper.cs b/Content.Server/Mobs/StandingStateHelper.cs deleted file mode 100644 index 3169b80503..0000000000 --- a/Content.Server/Mobs/StandingStateHelper.cs +++ /dev/null @@ -1,84 +0,0 @@ -using Content.Server.Interfaces.GameObjects.Components.Items; -using Content.Shared.Audio; -using Content.Shared.GameObjects.Components.Rotation; -using Content.Shared.GameObjects.EntitySystems; -using Robust.Server.GameObjects; -using Robust.Server.GameObjects.EntitySystems; -using Robust.Shared.Interfaces.GameObjects; -using Robust.Shared.IoC; - -namespace Content.Server.Mobs -{ - public static class StandingStateHelper - { - /// - /// Set's the mob standing state to down. - /// - /// The mob in question - /// Whether to play a sound when falling down or not - /// Whether to make the mob drop all the items on his hands - /// Whether or not to check if the entity can fall. - /// False if the mob was already downed or couldn't set the state - public static bool Down(IEntity entity, bool playSound = true, bool dropItems = true, bool force = false) - { - if (dropItems) - { - DropAllItemsInHands(entity, false); - } - - if (!force && !EffectBlockerSystem.CanFall(entity)) - { - return false; - } - - if (!entity.TryGetComponent(out AppearanceComponent appearance)) - { - return false; - } - - var newState = RotationState.Horizontal; - appearance.TryGetData(RotationVisuals.RotationState, out var oldState); - - if (newState != oldState) - { - appearance.SetData(RotationVisuals.RotationState, newState); - } - - if (playSound) - { - IoCManager.Resolve().GetEntitySystem() - .PlayFromEntity(AudioHelpers.GetRandomFileFromSoundCollection("bodyfall"), entity, AudioHelpers.WithVariation(0.25f)); - } - - return true; - } - - /// - /// Sets the mob's standing state to standing. - /// - /// The mob in question. - /// False if the mob was already standing or couldn't set the state - public static bool Standing(IEntity entity) - { - if (!entity.TryGetComponent(out AppearanceComponent appearance)) return false; - appearance.TryGetData(RotationVisuals.RotationState, out var oldState); - var newState = RotationState.Vertical; - if (newState == oldState) - return false; - - appearance.SetData(RotationVisuals.RotationState, newState); - - return true; - } - - public static void DropAllItemsInHands(IEntity entity, bool doMobChecks = true) - { - if (!entity.TryGetComponent(out IHandsComponent hands)) return; - - foreach (var heldItem in hands.GetAllHeldItems()) - { - hands.Drop(heldItem.Owner, doMobChecks); - } - } - } -} diff --git a/Content.Shared/GameObjects/Components/Body/IBodyManagerComponent.cs b/Content.Shared/GameObjects/Components/Body/ISharedBodyManagerComponent.cs similarity index 52% rename from Content.Shared/GameObjects/Components/Body/IBodyManagerComponent.cs rename to Content.Shared/GameObjects/Components/Body/ISharedBodyManagerComponent.cs index bc3ee631f2..9a8c026460 100644 --- a/Content.Shared/GameObjects/Components/Body/IBodyManagerComponent.cs +++ b/Content.Shared/GameObjects/Components/Body/ISharedBodyManagerComponent.cs @@ -1,9 +1,8 @@ using Content.Shared.GameObjects.Components.Damage; -using Robust.Shared.Interfaces.GameObjects; namespace Content.Shared.GameObjects.Components.Body { - public interface IBodyManagerComponent : IDamageableComponent + public interface ISharedBodyManagerComponent : IDamageableComponent { } } diff --git a/Content.Shared/GameObjects/Components/Body/SharedBodyManagerComponent.cs b/Content.Shared/GameObjects/Components/Body/SharedBodyManagerComponent.cs index d78b93320f..2cb0022e88 100644 --- a/Content.Shared/GameObjects/Components/Body/SharedBodyManagerComponent.cs +++ b/Content.Shared/GameObjects/Components/Body/SharedBodyManagerComponent.cs @@ -5,7 +5,7 @@ using Robust.Shared.Serialization; namespace Content.Shared.GameObjects.Components.Body { - public abstract class SharedBodyManagerComponent : DamageableComponent, IBodyManagerComponent + public abstract class SharedBodyManagerComponent : DamageableComponent, ISharedBodyManagerComponent { public override string Name => "BodyManager"; diff --git a/Content.Shared/GameObjects/Components/Damage/DamageState.cs b/Content.Shared/GameObjects/Components/Damage/DamageState.cs index 7ec6a260b7..ab49364b6f 100644 --- a/Content.Shared/GameObjects/Components/Damage/DamageState.cs +++ b/Content.Shared/GameObjects/Components/Damage/DamageState.cs @@ -16,6 +16,7 @@ namespace Content.Shared.GameObjects.Components.Damage [Serializable, NetSerializable] public enum DamageState { + Invalid = 0, Alive, Critical, Dead diff --git a/Content.Shared/GameObjects/Components/Damage/IDamageableComponent.cs b/Content.Shared/GameObjects/Components/Damage/IDamageableComponent.cs index f979d326c6..4290cf4ac2 100644 --- a/Content.Shared/GameObjects/Components/Damage/IDamageableComponent.cs +++ b/Content.Shared/GameObjects/Components/Damage/IDamageableComponent.cs @@ -143,8 +143,8 @@ namespace Content.Shared.GameObjects.Components.Damage _ => throw new ArgumentOutOfRangeException() }; - ChangeDamage(DamageType.Piercing, damage, false, null); - ChangeDamage(DamageType.Heat, damage, false, null); + ChangeDamage(DamageType.Piercing, damage, false); + ChangeDamage(DamageType.Heat, damage, false); } } diff --git a/Content.Shared/GameObjects/Components/Mobs/State/IMobState.cs b/Content.Shared/GameObjects/Components/Mobs/State/IMobState.cs new file mode 100644 index 0000000000..f22265dd92 --- /dev/null +++ b/Content.Shared/GameObjects/Components/Mobs/State/IMobState.cs @@ -0,0 +1,29 @@ +using Content.Shared.GameObjects.Components.Damage; +using Content.Shared.GameObjects.EntitySystems; +using Robust.Shared.Interfaces.GameObjects; + +namespace Content.Shared.GameObjects.Components.Mobs.State +{ + /// + /// Defines the blocking effects of an associated + /// (i.e. Normal, Critical, Dead) and what effects to apply upon entering or + /// exiting the state. + /// + public interface IMobState : IActionBlocker + { + /// + /// Called when this state is entered. + /// + void EnterState(IEntity entity); + + /// + /// Called when this state is left for a different state. + /// + void ExitState(IEntity entity); + + /// + /// Called when this state is updated. + /// + void UpdateState(IEntity entity); + } +} diff --git a/Content.Shared/GameObjects/Components/Mobs/State/SharedCriticalState.cs b/Content.Shared/GameObjects/Components/Mobs/State/SharedCriticalState.cs new file mode 100644 index 0000000000..bd50cc36ca --- /dev/null +++ b/Content.Shared/GameObjects/Components/Mobs/State/SharedCriticalState.cs @@ -0,0 +1,76 @@ +using Robust.Shared.Interfaces.GameObjects; + +namespace Content.Shared.GameObjects.Components.Mobs.State +{ + /// + /// A state in which an entity is disabled from acting due to sufficient damage (considered unconscious). + /// + public abstract class SharedCriticalState : IMobState + { + public abstract void EnterState(IEntity entity); + + public abstract void ExitState(IEntity entity); + + public abstract void UpdateState(IEntity entity); + + public bool CanInteract() + { + return false; + } + + public bool CanMove() + { + return false; + } + + public bool CanUse() + { + return false; + } + + public bool CanThrow() + { + return false; + } + + public bool CanSpeak() + { + return false; + } + + public bool CanDrop() + { + return false; + } + + public bool CanPickup() + { + return false; + } + + public bool CanEmote() + { + return false; + } + + public bool CanAttack() + { + return false; + } + + public bool CanEquip() + { + return false; + } + + public bool CanUnequip() + { + return false; + } + + public bool CanChangeDirection() + { + return false; + } + } +} diff --git a/Content.Shared/GameObjects/Components/Mobs/State/SharedDeadState.cs b/Content.Shared/GameObjects/Components/Mobs/State/SharedDeadState.cs new file mode 100644 index 0000000000..6dc85a07cf --- /dev/null +++ b/Content.Shared/GameObjects/Components/Mobs/State/SharedDeadState.cs @@ -0,0 +1,73 @@ +using Robust.Shared.Interfaces.GameObjects; + +namespace Content.Shared.GameObjects.Components.Mobs.State +{ + public abstract class SharedDeadState : IMobState + { + public abstract void EnterState(IEntity entity); + + public abstract void ExitState(IEntity entity); + + public abstract void UpdateState(IEntity entity); + + public bool CanInteract() + { + return false; + } + + public bool CanMove() + { + return false; + } + + public bool CanUse() + { + return false; + } + + public bool CanThrow() + { + return false; + } + + public bool CanSpeak() + { + return false; + } + + public bool CanDrop() + { + return false; + } + + public bool CanPickup() + { + return false; + } + + public bool CanEmote() + { + return false; + } + + public bool CanAttack() + { + return false; + } + + public bool CanEquip() + { + return false; + } + + public bool CanUnequip() + { + return false; + } + + public bool CanChangeDirection() + { + return false; + } + } +} diff --git a/Content.Shared/GameObjects/Components/Mobs/State/SharedMobStateManagerComponent.cs b/Content.Shared/GameObjects/Components/Mobs/State/SharedMobStateManagerComponent.cs new file mode 100644 index 0000000000..98a6899e8f --- /dev/null +++ b/Content.Shared/GameObjects/Components/Mobs/State/SharedMobStateManagerComponent.cs @@ -0,0 +1,128 @@ +using System; +using System.Collections.Generic; +using Content.Shared.GameObjects.Components.Damage; +using Content.Shared.GameObjects.EntitySystems; +using Robust.Shared.GameObjects; +using Robust.Shared.Serialization; + +namespace Content.Shared.GameObjects.Components.Mobs.State +{ + /// + /// When attacked to an , this component will + /// handle critical and death behaviors for mobs. + /// Additionally, it handles sending effects to clients + /// (such as blur effect for unconsciousness) and managing the health HUD. + /// + public abstract class SharedMobStateManagerComponent : Component, IOnHealthChangedBehavior, IActionBlocker + { + public override string Name => "MobStateManager"; + + public override uint? NetID => ContentNetIDs.MOB_STATE_MANAGER; + + protected abstract IReadOnlyDictionary Behavior { get; } + + public virtual IMobState CurrentMobState { get; protected set; } + + public virtual DamageState CurrentDamageState { get; protected set; } + + public override void OnAdd() + { + base.OnAdd(); + + CurrentDamageState = DamageState.Alive; + } + + public override void Initialize() + { + base.Initialize(); + + CurrentMobState = Behavior[CurrentDamageState]; + CurrentMobState.EnterState(Owner); + CurrentMobState.UpdateState(Owner); + } + + bool IActionBlocker.CanInteract() + { + return CurrentMobState.CanInteract(); + } + + bool IActionBlocker.CanMove() + { + return CurrentMobState.CanMove(); + } + + bool IActionBlocker.CanUse() + { + return CurrentMobState.CanUse(); + } + + bool IActionBlocker.CanThrow() + { + return CurrentMobState.CanThrow(); + } + + bool IActionBlocker.CanSpeak() + { + return CurrentMobState.CanSpeak(); + } + + bool IActionBlocker.CanDrop() + { + return CurrentMobState.CanDrop(); + } + + bool IActionBlocker.CanPickup() + { + return CurrentMobState.CanPickup(); + } + + bool IActionBlocker.CanEmote() + { + return CurrentMobState.CanEmote(); + } + + bool IActionBlocker.CanAttack() + { + return CurrentMobState.CanAttack(); + } + + bool IActionBlocker.CanEquip() + { + return CurrentMobState.CanEquip(); + } + + bool IActionBlocker.CanUnequip() + { + return CurrentMobState.CanUnequip(); + } + + bool IActionBlocker.CanChangeDirection() + { + return CurrentMobState.CanChangeDirection(); + } + + public void OnHealthChanged(HealthChangedEventArgs e) + { + if (e.Damageable.CurrentDamageState != CurrentDamageState) + { + CurrentDamageState = e.Damageable.CurrentDamageState; + CurrentMobState.ExitState(Owner); + CurrentMobState = Behavior[CurrentDamageState]; + CurrentMobState.EnterState(Owner); + } + + CurrentMobState.UpdateState(Owner); + } + } + + [Serializable, NetSerializable] + public class MobStateManagerComponentState : ComponentState + { + public readonly DamageState DamageState; + + public MobStateManagerComponentState(DamageState damageState) : base(ContentNetIDs.MOB_STATE_MANAGER) + { + DamageState = damageState; + } + } +} diff --git a/Content.Shared/GameObjects/Components/Mobs/State/SharedNormalState.cs b/Content.Shared/GameObjects/Components/Mobs/State/SharedNormalState.cs new file mode 100644 index 0000000000..6b68620834 --- /dev/null +++ b/Content.Shared/GameObjects/Components/Mobs/State/SharedNormalState.cs @@ -0,0 +1,76 @@ +using Robust.Shared.Interfaces.GameObjects; + +namespace Content.Shared.GameObjects.Components.Mobs.State +{ + /// + /// The standard state an entity is in; no negative effects. + /// + public abstract class SharedNormalState : IMobState + { + public abstract void EnterState(IEntity entity); + + public abstract void ExitState(IEntity entity); + + public abstract void UpdateState(IEntity entity); + + public bool CanInteract() + { + return true; + } + + public bool CanMove() + { + return true; + } + + public bool CanUse() + { + return true; + } + + public bool CanThrow() + { + return true; + } + + public bool CanSpeak() + { + return true; + } + + public bool CanDrop() + { + return true; + } + + public bool CanPickup() + { + return true; + } + + public bool CanEmote() + { + return true; + } + + public bool CanAttack() + { + return true; + } + + public bool CanEquip() + { + return true; + } + + public bool CanUnequip() + { + return true; + } + + public bool CanChangeDirection() + { + return true; + } + } +} diff --git a/Content.Shared/GameObjects/Components/Movement/SharedPlayerInputMoverComponent.cs b/Content.Shared/GameObjects/Components/Movement/SharedPlayerInputMoverComponent.cs index a3b3794d3e..de864025fc 100644 --- a/Content.Shared/GameObjects/Components/Movement/SharedPlayerInputMoverComponent.cs +++ b/Content.Shared/GameObjects/Components/Movement/SharedPlayerInputMoverComponent.cs @@ -270,7 +270,7 @@ namespace Content.Shared.GameObjects.Components.Movement bool ICollideSpecial.PreventCollide(IPhysBody collidedWith) { // Don't collide with other mobs - return collidedWith.Entity.HasComponent(); + return collidedWith.Entity.HasComponent(); } [Serializable, NetSerializable] diff --git a/Content.Shared/GameObjects/Components/Rotation/RotationComponent.cs b/Content.Shared/GameObjects/Components/Rotation/SharedRotationComponent.cs similarity index 93% rename from Content.Shared/GameObjects/Components/Rotation/RotationComponent.cs rename to Content.Shared/GameObjects/Components/Rotation/SharedRotationComponent.cs index 150ed62a30..acdb33b7db 100644 --- a/Content.Shared/GameObjects/Components/Rotation/RotationComponent.cs +++ b/Content.Shared/GameObjects/Components/Rotation/SharedRotationComponent.cs @@ -1,5 +1,4 @@ using System; -using Robust.Shared.GameObjects; using Robust.Shared.Serialization; namespace Content.Shared.GameObjects.Components.Rotation diff --git a/Content.Shared/GameObjects/ContentNetIDs.cs b/Content.Shared/GameObjects/ContentNetIDs.cs index 3f127c68c4..6210936e41 100644 --- a/Content.Shared/GameObjects/ContentNetIDs.cs +++ b/Content.Shared/GameObjects/ContentNetIDs.cs @@ -72,6 +72,8 @@ public const uint HANDCUFFS = 1066; public const uint BATTERY_BARREL = 1067; public const uint SUSPICION_ROLE = 1068; + public const uint ROTATION = 1069; + public const uint MOB_STATE_MANAGER = 1070; // Net IDs for integration tests. public const uint PREDICTION_TEST = 10001; diff --git a/Content.Shared/GameObjects/EntitySystems/SharedStandingStateSystem.cs b/Content.Shared/GameObjects/EntitySystems/SharedStandingStateSystem.cs new file mode 100644 index 0000000000..9526b5414a --- /dev/null +++ b/Content.Shared/GameObjects/EntitySystems/SharedStandingStateSystem.cs @@ -0,0 +1,50 @@ +using Robust.Shared.GameObjects.Systems; +using Robust.Shared.Interfaces.GameObjects; + +namespace Content.Shared.GameObjects.EntitySystems +{ + public abstract class SharedStandingStateSystem : EntitySystem + { + protected abstract bool OnDown(IEntity entity, bool playSound = true, bool dropItems = true, + bool force = false); + + protected abstract bool OnStand(IEntity entity); + + /// + /// Set's the mob standing state to down. + /// + /// The mob in question + /// Whether to play a sound when falling down or not + /// Whether to make the mob drop all the items on his hands + /// Whether or not to check if the entity can fall. + /// False if the mob was already downed or couldn't set the state + public bool Down(IEntity entity, bool playSound = true, bool dropItems = true, bool force = false) + { + if (dropItems) + { + DropAllItemsInHands(entity, false); + } + + if (!force && !EffectBlockerSystem.CanFall(entity)) + { + return false; + } + + return OnDown(entity, playSound, dropItems, force); + } + + /// + /// Sets the mob's standing state to standing. + /// + /// The mob in question. + /// False if the mob was already standing or couldn't set the state + public bool Standing(IEntity entity) + { + return OnStand(entity); + } + + public virtual void DropAllItemsInHands(IEntity entity, bool doMobChecks = true) + { + } + } +} From b993ebb30aa2ee6007ea798c6aa73c1e0319d419 Mon Sep 17 00:00:00 2001 From: Exp Date: Sat, 29 Aug 2020 13:33:38 +0200 Subject: [PATCH 025/103] Status Effect Tooltip & Notify on click (#1943) * -Show tooltip on hover -Show notify on click * -Status Effects now get removed instead of going invisible -Removed empty textures for that * Revert break in HungerComponent --- .../Mobs/ClientStatusEffectsComponent.cs | 7 ++-- .../UserInterface/StatusEffectsUI.cs | 7 ++-- .../ActionBlocking/CuffableComponent.cs | 10 ++++-- .../Components/Buckle/BuckleComponent.cs | 12 ++++--- .../Mobs/ServerStatusEffectsComponent.cs | 6 +++- .../Components/Nutrition/HungerComponent.cs | 24 ++++++++----- .../Components/Nutrition/ThirstComponent.cs | 32 ++++++++++-------- .../StatusEffects/Buckle/unbuckled.png | Bin 97 -> 0 bytes .../StatusEffects/Handcuffed/Uncuffed.png | Bin 97 -> 0 bytes .../Interface/StatusEffects/Hunger/Dead.png | Bin 97 -> 0 bytes .../Interface/StatusEffects/Hunger/Okay.png | Bin 97 -> 0 bytes .../Interface/StatusEffects/Thirst/Dead.png | Bin 97 -> 0 bytes .../Interface/StatusEffects/Thirst/Okay.png | Bin 97 -> 0 bytes 13 files changed, 61 insertions(+), 37 deletions(-) delete mode 100644 Resources/Textures/Interface/StatusEffects/Buckle/unbuckled.png delete mode 100644 Resources/Textures/Interface/StatusEffects/Handcuffed/Uncuffed.png delete mode 100644 Resources/Textures/Interface/StatusEffects/Hunger/Dead.png delete mode 100644 Resources/Textures/Interface/StatusEffects/Hunger/Okay.png delete mode 100644 Resources/Textures/Interface/StatusEffects/Thirst/Dead.png delete mode 100644 Resources/Textures/Interface/StatusEffects/Thirst/Okay.png diff --git a/Content.Client/GameObjects/Components/Mobs/ClientStatusEffectsComponent.cs b/Content.Client/GameObjects/Components/Mobs/ClientStatusEffectsComponent.cs index fc2984f3ae..248767c326 100644 --- a/Content.Client/GameObjects/Components/Mobs/ClientStatusEffectsComponent.cs +++ b/Content.Client/GameObjects/Components/Mobs/ClientStatusEffectsComponent.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using Content.Client.UserInterface; @@ -100,7 +100,10 @@ namespace Content.Client.GameObjects.Components.Mobs foreach (var (key, effect) in _status.OrderBy(x => (int) x.Key)) { var texture = _resourceCache.GetTexture(effect.Icon); - var status = new StatusControl(key, texture); + var status = new StatusControl(key, texture) + { + ToolTip = key.ToString() + }; if (effect.Cooldown.HasValue) { diff --git a/Content.Client/UserInterface/StatusEffectsUI.cs b/Content.Client/UserInterface/StatusEffectsUI.cs index e6f0fc044f..baaade0028 100644 --- a/Content.Client/UserInterface/StatusEffectsUI.cs +++ b/Content.Client/UserInterface/StatusEffectsUI.cs @@ -8,13 +8,12 @@ namespace Content.Client.UserInterface /// public sealed class StatusEffectsUI : Control { - public VBoxContainer VBox => _vBox; - private readonly VBoxContainer _vBox; + public VBoxContainer VBox { get; } public StatusEffectsUI() { - _vBox = new VBoxContainer(); - AddChild(_vBox); + VBox = new VBoxContainer(); + AddChild(VBox); LayoutContainer.SetGrowHorizontal(this, LayoutContainer.GrowDirection.Begin); LayoutContainer.SetAnchorAndMarginPreset(this, LayoutContainer.LayoutPreset.TopRight, margin: 10); diff --git a/Content.Server/GameObjects/Components/ActionBlocking/CuffableComponent.cs b/Content.Server/GameObjects/Components/ActionBlocking/CuffableComponent.cs index 3325fc2caa..f6e979557a 100644 --- a/Content.Server/GameObjects/Components/ActionBlocking/CuffableComponent.cs +++ b/Content.Server/GameObjects/Components/ActionBlocking/CuffableComponent.cs @@ -193,8 +193,14 @@ namespace Content.Server.GameObjects.Components.ActionBlocking { if (Owner.TryGetComponent(out ServerStatusEffectsComponent status)) { - status.ChangeStatusEffectIcon(StatusEffect.Cuffed, - CanStillInteract ? "/Textures/Interface/StatusEffects/Handcuffed/Uncuffed.png" : "/Textures/Interface/StatusEffects/Handcuffed/Handcuffed.png"); + if (CanStillInteract) + { + status.RemoveStatusEffect(StatusEffect.Cuffed); + } + else + { + status.ChangeStatusEffectIcon(StatusEffect.Cuffed, "/Textures/Interface/StatusEffects/Handcuffed/Handcuffed.png"); + } } } diff --git a/Content.Server/GameObjects/Components/Buckle/BuckleComponent.cs b/Content.Server/GameObjects/Components/Buckle/BuckleComponent.cs index b23b629d24..e32be62caa 100644 --- a/Content.Server/GameObjects/Components/Buckle/BuckleComponent.cs +++ b/Content.Server/GameObjects/Components/Buckle/BuckleComponent.cs @@ -113,10 +113,14 @@ namespace Content.Server.GameObjects.Components.Buckle { if (Owner.TryGetComponent(out ServerStatusEffectsComponent? status)) { - status.ChangeStatusEffectIcon(StatusEffect.Buckled, - Buckled - ? BuckledTo!.BuckledIcon - : "/Textures/Interface/StatusEffects/Buckle/unbuckled.png"); + if (Buckled) + { + status.ChangeStatusEffectIcon(StatusEffect.Buckled, BuckledTo!.BuckledIcon); + } + else + { + status.RemoveStatusEffect(StatusEffect.Buckled); + } } } diff --git a/Content.Server/GameObjects/Components/Mobs/ServerStatusEffectsComponent.cs b/Content.Server/GameObjects/Components/Mobs/ServerStatusEffectsComponent.cs index 25ea510016..a0fb2d8166 100644 --- a/Content.Server/GameObjects/Components/Mobs/ServerStatusEffectsComponent.cs +++ b/Content.Server/GameObjects/Components/Mobs/ServerStatusEffectsComponent.cs @@ -1,9 +1,10 @@ -using System; +using System; using System.Collections.Generic; using Content.Server.GameObjects.Components.Buckle; using Content.Server.GameObjects.Components.GUI; using Content.Server.GameObjects.Components.Movement; using Content.Shared.GameObjects.Components.Mobs; +using Content.Shared.Interfaces; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.Network; using Robust.Shared.Players; @@ -113,6 +114,9 @@ namespace Content.Server.GameObjects.Components.Mobs hands.StopPull(); break; + default: + player.PopupMessage(player, msg.Effect.ToString()); + break; } break; diff --git a/Content.Server/GameObjects/Components/Nutrition/HungerComponent.cs b/Content.Server/GameObjects/Components/Nutrition/HungerComponent.cs index 0633289de8..00d1a8c27b 100644 --- a/Content.Server/GameObjects/Components/Nutrition/HungerComponent.cs +++ b/Content.Server/GameObjects/Components/Nutrition/HungerComponent.cs @@ -68,15 +68,12 @@ namespace Content.Server.GameObjects.Components.Nutrition serializer.DataField(ref _baseDecayRate, "base_decay_rate", 0.1f); } - // for shared string dict, since we don't define these anywhere in content - [UsedImplicitly] - public static readonly string[] _hungerThresholdImages = + + public static readonly Dictionary HungerThresholdImages = new Dictionary { - "/Textures/Interface/StatusEffects/Hunger/Overfed.png", - "/Textures/Interface/StatusEffects/Hunger/Okay.png", - "/Textures/Interface/StatusEffects/Hunger/Peckish.png", - "/Textures/Interface/StatusEffects/Hunger/Starving.png", - "/Textures/Interface/StatusEffects/Hunger/Dead.png", + { HungerThreshold.Overfed, "/Textures/Interface/StatusEffects/Hunger/Overfed.png" }, + { HungerThreshold.Peckish, "/Textures/Interface/StatusEffects/Hunger/Peckish.png" }, + { HungerThreshold.Starving, "/Textures/Interface/StatusEffects/Hunger/Starving.png" }, }; public void HungerThresholdEffect(bool force = false) @@ -92,7 +89,16 @@ namespace Content.Server.GameObjects.Components.Nutrition // Update UI Owner.TryGetComponent(out ServerStatusEffectsComponent statusEffectsComponent); - statusEffectsComponent?.ChangeStatusEffectIcon(StatusEffect.Hunger, _hungerThresholdImages[ (int)_currentHungerThreshold ]); + + if (HungerThresholdImages.TryGetValue(_currentHungerThreshold, out var statusTexture)) + { + statusEffectsComponent?.ChangeStatusEffectIcon(StatusEffect.Hunger, statusTexture); + } + else + { + statusEffectsComponent?.RemoveStatusEffect(StatusEffect.Hunger); + } + switch (_currentHungerThreshold) { case HungerThreshold.Overfed: diff --git a/Content.Server/GameObjects/Components/Nutrition/ThirstComponent.cs b/Content.Server/GameObjects/Components/Nutrition/ThirstComponent.cs index 379432e4f1..e8cee505fc 100644 --- a/Content.Server/GameObjects/Components/Nutrition/ThirstComponent.cs +++ b/Content.Server/GameObjects/Components/Nutrition/ThirstComponent.cs @@ -52,8 +52,7 @@ namespace Content.Server.GameObjects.Components.Nutrition private float _currentThirst; [ViewVariables(VVAccess.ReadOnly)] - public Dictionary ThirstThresholds => _thirstThresholds; - private readonly Dictionary _thirstThresholds = new Dictionary + public Dictionary ThirstThresholds { get; } = new Dictionary { {ThirstThreshold.OverHydrated, 600.0f}, {ThirstThreshold.Okay, 450.0f}, @@ -62,15 +61,11 @@ namespace Content.Server.GameObjects.Components.Nutrition {ThirstThreshold.Dead, 0.0f}, }; - // for shared string dict, since we don't define these anywhere in content - [UsedImplicitly] - public static readonly string[] _thirstThresholdImages = + public static readonly Dictionary ThirstThresholdImages = new Dictionary { - "/Textures/Interface/StatusEffects/Thirst/OverHydrated.png", - "/Textures/Interface/StatusEffects/Thirst/Okay.png", - "/Textures/Interface/StatusEffects/Thirst/Thirsty.png", - "/Textures/Interface/StatusEffects/Thirst/Parched.png", - "/Textures/Interface/StatusEffects/Thirst/Dead.png", + {ThirstThreshold.OverHydrated, "/Textures/Interface/StatusEffects/Thirst/OverHydrated.png"}, + {ThirstThreshold.Thirsty, "/Textures/Interface/StatusEffects/Thirst/Thirsty.png"}, + {ThirstThreshold.Parched, "/Textures/Interface/StatusEffects/Thirst/Parched.png"}, }; public override void ExposeData(ObjectSerializer serializer) @@ -92,8 +87,15 @@ namespace Content.Server.GameObjects.Components.Nutrition // Update UI Owner.TryGetComponent(out ServerStatusEffectsComponent statusEffectsComponent); - statusEffectsComponent?.ChangeStatusEffectIcon(StatusEffect.Thirst, "/Textures/Interface/StatusEffects/Thirst/" + - _currentThirstThreshold + ".png"); + + if (ThirstThresholdImages.TryGetValue(_currentThirstThreshold, out var statusTexture)) + { + statusEffectsComponent?.ChangeStatusEffectIcon(StatusEffect.Thirst, statusTexture); + } + else + { + statusEffectsComponent?.RemoveStatusEffect(StatusEffect.Thirst); + } switch (_currentThirstThreshold) { @@ -135,8 +137,8 @@ namespace Content.Server.GameObjects.Components.Nutrition { base.Startup(); _currentThirst = IoCManager.Resolve().Next( - (int)_thirstThresholds[ThirstThreshold.Thirsty] + 10, - (int)_thirstThresholds[ThirstThreshold.Okay] - 1); + (int)ThirstThresholds[ThirstThreshold.Thirsty] + 10, + (int)ThirstThresholds[ThirstThreshold.Okay] - 1); _currentThirstThreshold = GetThirstThreshold(_currentThirst); _lastThirstThreshold = ThirstThreshold.Okay; // TODO: Potentially change this -> Used Okay because no effects. // TODO: Check all thresholds make sense and throw if they don't. @@ -148,7 +150,7 @@ namespace Content.Server.GameObjects.Components.Nutrition { ThirstThreshold result = ThirstThreshold.Dead; var value = ThirstThresholds[ThirstThreshold.OverHydrated]; - foreach (var threshold in _thirstThresholds) + foreach (var threshold in ThirstThresholds) { if (threshold.Value <= value && threshold.Value >= drink) { diff --git a/Resources/Textures/Interface/StatusEffects/Buckle/unbuckled.png b/Resources/Textures/Interface/StatusEffects/Buckle/unbuckled.png deleted file mode 100644 index 6879bd394fd6dc3f84de4bc3b3403d4a5612aa4e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 97 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnL3?x0byx0z;m;-!5Tn`*LkmkKF1;}MA3GxeO qaCmkj4ani~ba4#fn3 Date: Sat, 29 Aug 2020 21:35:03 +1000 Subject: [PATCH 026/103] Add post-checks for do_after (#1940) * Add post-checks for do_after So you can do InRangeUnobstructed or whatever at the end. Individual components should do their own check upfront to avoid the state ever being sent. I added a pre-made function for people to do InRangeUnobstructed. * Woops imports Co-authored-by: Metal Gear Sloth --- .../EntitySystems/DoAfter/DoAfter.cs | 24 ++++++++++++++++--- .../EntitySystems/DoAfter/DoAfterEventArgs.cs | 23 ++++++++++++++++++ 2 files changed, 44 insertions(+), 3 deletions(-) diff --git a/Content.Server/GameObjects/EntitySystems/DoAfter/DoAfter.cs b/Content.Server/GameObjects/EntitySystems/DoAfter/DoAfter.cs index 2f45195624..7cf9bdb56d 100644 --- a/Content.Server/GameObjects/EntitySystems/DoAfter/DoAfter.cs +++ b/Content.Server/GameObjects/EntitySystems/DoAfter/DoAfter.cs @@ -1,7 +1,6 @@ #nullable enable using System; using System.Threading.Tasks; -using Content.Server.GameObjects.Components.Damage; using Content.Server.GameObjects.Components.GUI; using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.GameObjects.Components.Mobs; @@ -86,7 +85,16 @@ namespace Content.Server.GameObjects.EntitySystems.DoAfter if (IsFinished()) { - Tcs.SetResult(DoAfterStatus.Finished); + // Do the final checks here + if (!TryPostCheck()) + { + Tcs.SetResult(DoAfterStatus.Cancelled); + } + else + { + Tcs.SetResult(DoAfterStatus.Finished); + } + return; } @@ -98,6 +106,11 @@ namespace Content.Server.GameObjects.EntitySystems.DoAfter private bool IsCancelled() { + if (EventArgs.User.Deleted || EventArgs.Target?.Deleted == true) + { + return true; + } + //https://github.com/tgstation/tgstation/blob/1aa293ea337283a0191140a878eeba319221e5df/code/__HELPERS/mobs.dm if (EventArgs.CancelToken.IsCancellationRequested) { @@ -157,10 +170,15 @@ namespace Content.Server.GameObjects.EntitySystems.DoAfter } } } - + return false; } + private bool TryPostCheck() + { + return EventArgs.PostCheck?.Invoke() != false; + } + private bool IsFinished() { if (Elapsed <= EventArgs.Delay) diff --git a/Content.Server/GameObjects/EntitySystems/DoAfter/DoAfterEventArgs.cs b/Content.Server/GameObjects/EntitySystems/DoAfter/DoAfterEventArgs.cs index 7906c616eb..1f46dbd7ee 100644 --- a/Content.Server/GameObjects/EntitySystems/DoAfter/DoAfterEventArgs.cs +++ b/Content.Server/GameObjects/EntitySystems/DoAfter/DoAfterEventArgs.cs @@ -1,6 +1,9 @@ #nullable enable using System; using System.Threading; +using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.Physics; +using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; // ReSharper disable UnassignedReadonlyField @@ -9,6 +12,18 @@ namespace Content.Server.GameObjects.EntitySystems.DoAfter { public sealed class DoAfterEventArgs { + // Premade checks + public Func GetInRangeUnobstructed(int collisionMask = (int) CollisionGroup.MobMask) + { + if (Target == null) + { + throw new InvalidOperationException("Can't supply a null target to DoAfterEventArgs.GetInRangeUnobstructed"); + } + var interactionSystem = EntitySystem.Get(); + Func ignored = entity => entity == User || entity == Target; + return () => interactionSystem.InRangeUnobstructed(User.Transform.MapPosition, Target.Transform.MapPosition, collisionMask: collisionMask, predicate: ignored); + } + /// /// The entity invoking do_after /// @@ -49,6 +64,14 @@ namespace Content.Server.GameObjects.EntitySystems.DoAfter public bool BreakOnDamage { get; set; } public bool BreakOnStun { get; set; } + /// + /// Requires a function call once at the end (like InRangeUnobstructed). + /// + /// + /// Anything that needs a pre-check should do it itself so no DoAfterState is ever sent to the client. + /// + public Func? PostCheck { get; set; } = null; + /// /// Additional conditions that need to be met. Return false to cancel. /// From 5a0f7d93166aa570377cf08f332d8089ebadaf3c Mon Sep 17 00:00:00 2001 From: DrSmugleaf Date: Sat, 29 Aug 2020 13:36:02 +0200 Subject: [PATCH 027/103] Add missing localization to verb names (#1953) --- .../Components/Chemistry/SolutionComponent.cs | 10 ++++++++-- .../Components/Disposal/DisposalTubeComponent.cs | 2 +- .../Components/Fluids/CanSpillComponent.cs | 3 ++- .../Interactable/HandheldLightComponent.cs | 4 ++-- .../Items/Storage/EntityStorageComponent.cs | 2 +- .../Components/Items/Storage/ItemComponent.cs | 3 ++- .../Items/Storage/SecureEntityStorageComponent.cs | 2 +- .../PowerReceiverUsers/BaseCharger.cs | 12 ++++++++---- .../Components/Rotatable/RotatableComponent.cs | 4 ++-- .../GameObjects/Components/Strap/StrapComponent.cs | 2 +- .../Components/Weapon/Melee/StunbatonComponent.cs | 4 ++-- .../Ranged/Barrels/ServerBatteryBarrelComponent.cs | 5 +++-- Content.Server/GlobalVerbs/ControlMobVerb.cs | 3 ++- Content.Server/GlobalVerbs/RejuvenateVerb.cs | 3 ++- 14 files changed, 37 insertions(+), 22 deletions(-) diff --git a/Content.Server/GameObjects/Components/Chemistry/SolutionComponent.cs b/Content.Server/GameObjects/Components/Chemistry/SolutionComponent.cs index 241d103dc9..71c6ee7996 100644 --- a/Content.Server/GameObjects/Components/Chemistry/SolutionComponent.cs +++ b/Content.Server/GameObjects/Components/Chemistry/SolutionComponent.cs @@ -234,7 +234,10 @@ namespace Content.Server.GameObjects.Components.Chemistry var heldEntityName = hands.GetActiveHand.Owner?.Prototype?.Name ?? ""; var myName = component.Owner.Prototype?.Name ?? ""; - data.Text= $"Transfer liquid from [{heldEntityName}] to [{myName}]."; + var locHeldEntityName = Loc.GetString(heldEntityName); + var locMyName = Loc.GetString(myName); + + data.Text = Loc.GetString("Transfer liquid from [{0}] to [{1}].", locHeldEntityName, locMyName); return; } @@ -334,7 +337,10 @@ namespace Content.Server.GameObjects.Components.Chemistry var heldEntityName = hands.GetActiveHand.Owner?.Prototype?.Name ?? ""; var myName = component.Owner.Prototype?.Name ?? ""; - data.Text = $"Transfer liquid from [{myName}] to [{heldEntityName}]."; + var locHeldEntityName = Loc.GetString(heldEntityName); + var locMyName = Loc.GetString(myName); + + data.Text = Loc.GetString("Transfer liquid from [{0}] to [{1}].", locMyName, locHeldEntityName); return; } diff --git a/Content.Server/GameObjects/Components/Disposal/DisposalTubeComponent.cs b/Content.Server/GameObjects/Components/Disposal/DisposalTubeComponent.cs index f03abfd8b0..aa007c3cdf 100644 --- a/Content.Server/GameObjects/Components/Disposal/DisposalTubeComponent.cs +++ b/Content.Server/GameObjects/Components/Disposal/DisposalTubeComponent.cs @@ -294,7 +294,7 @@ namespace Content.Server.GameObjects.Components.Disposal { protected override void GetData(IEntity user, IDisposalTubeComponent component, VerbData data) { - data.Text = "Tube Directions"; + data.Text = Loc.GetString("Tube Directions"); data.CategoryData = VerbCategories.Debug; data.Visibility = VerbVisibility.Invisible; diff --git a/Content.Server/GameObjects/Components/Fluids/CanSpillComponent.cs b/Content.Server/GameObjects/Components/Fluids/CanSpillComponent.cs index 24b56c876f..1eb779557b 100644 --- a/Content.Server/GameObjects/Components/Fluids/CanSpillComponent.cs +++ b/Content.Server/GameObjects/Components/Fluids/CanSpillComponent.cs @@ -4,6 +4,7 @@ using Content.Shared.GameObjects.EntitySystems; using Content.Shared.GameObjects.Verbs; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; +using Robust.Shared.Localization; namespace Content.Server.GameObjects.Components.Fluids { @@ -28,7 +29,7 @@ namespace Content.Server.GameObjects.Components.Fluids return; } - data.Text = "Spill liquid"; + data.Text = Loc.GetString("Spill liquid"); data.Visibility = solutionComponent.CurrentVolume > ReagentUnit.Zero ? VerbVisibility.Visible : VerbVisibility.Disabled; diff --git a/Content.Server/GameObjects/Components/Interactable/HandheldLightComponent.cs b/Content.Server/GameObjects/Components/Interactable/HandheldLightComponent.cs index b2daa8e37c..6e607ae9c8 100644 --- a/Content.Server/GameObjects/Components/Interactable/HandheldLightComponent.cs +++ b/Content.Server/GameObjects/Components/Interactable/HandheldLightComponent.cs @@ -273,12 +273,12 @@ namespace Content.Server.GameObjects.Components.Interactable if (component.Cell == null) { - data.Text = "Eject cell (cell missing)"; + data.Text = Loc.GetString("Eject cell (cell missing)"); data.Visibility = VerbVisibility.Disabled; } else { - data.Text = "Eject cell"; + data.Text = Loc.GetString("Eject cell"); } } diff --git a/Content.Server/GameObjects/Components/Items/Storage/EntityStorageComponent.cs b/Content.Server/GameObjects/Components/Items/Storage/EntityStorageComponent.cs index ab4c181253..6bbdacca5e 100644 --- a/Content.Server/GameObjects/Components/Items/Storage/EntityStorageComponent.cs +++ b/Content.Server/GameObjects/Components/Items/Storage/EntityStorageComponent.cs @@ -428,7 +428,7 @@ namespace Content.Server.GameObjects.Components.Items.Storage return; } - data.Text = component.Open ? "Close" : "Open"; + data.Text = Loc.GetString(component.Open ? "Close" : "Open"); } void IExAct.OnExplosion(ExplosionEventArgs eventArgs) diff --git a/Content.Server/GameObjects/Components/Items/Storage/ItemComponent.cs b/Content.Server/GameObjects/Components/Items/Storage/ItemComponent.cs index 93260ae1bb..4eead02f0f 100644 --- a/Content.Server/GameObjects/Components/Items/Storage/ItemComponent.cs +++ b/Content.Server/GameObjects/Components/Items/Storage/ItemComponent.cs @@ -15,6 +15,7 @@ using Robust.Shared.GameObjects.Components; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Map; using Robust.Shared.IoC; +using Robust.Shared.Localization; using Robust.Shared.Serialization; namespace Content.Server.GameObjects.Components.Items.Storage @@ -122,7 +123,7 @@ namespace Content.Server.GameObjects.Components.Items.Storage return; } - data.Text = "Pick Up"; + data.Text = Loc.GetString("Pick Up"); } protected override void Activate(IEntity user, ItemComponent component) diff --git a/Content.Server/GameObjects/Components/Items/Storage/SecureEntityStorageComponent.cs b/Content.Server/GameObjects/Components/Items/Storage/SecureEntityStorageComponent.cs index dcdab4725b..dca9f41cc8 100644 --- a/Content.Server/GameObjects/Components/Items/Storage/SecureEntityStorageComponent.cs +++ b/Content.Server/GameObjects/Components/Items/Storage/SecureEntityStorageComponent.cs @@ -146,7 +146,7 @@ namespace Content.Server.GameObjects.Components.Items.Storage return; } - data.Text = component.Locked ? Loc.GetString("Unlock") : Loc.GetString("Lock"); + data.Text = Loc.GetString(component.Locked ? "Unlock" : "Lock"); } protected override void Activate(IEntity user, SecureEntityStorageComponent component) diff --git a/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverUsers/BaseCharger.cs b/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverUsers/BaseCharger.cs index e0f0f436ed..986b404aea 100644 --- a/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverUsers/BaseCharger.cs +++ b/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverUsers/BaseCharger.cs @@ -137,11 +137,13 @@ namespace Content.Server.GameObjects.Components.Power.ApcNetComponents.PowerRece if (component._container.ContainedEntity != null || handsComponent.GetActiveHand == null) { data.Visibility = VerbVisibility.Disabled; - data.Text = "Insert"; + data.Text = Loc.GetString("Insert"); return; } - data.Text = $"Insert {handsComponent.GetActiveHand.Owner.Name}"; + var heldItemName = Loc.GetString(handsComponent.GetActiveHand.Owner.Name); + + data.Text = Loc.GetString("Insert {0}", heldItemName); } protected override void Activate(IEntity user, BaseCharger component) @@ -173,12 +175,14 @@ namespace Content.Server.GameObjects.Components.Power.ApcNetComponents.PowerRece } if (component._container.ContainedEntity == null) { - data.Text = "Eject"; + data.Text = Loc.GetString("Eject"); data.Visibility = VerbVisibility.Disabled; return; } - data.Text = $"Eject {component._container.ContainedEntity.Name}"; + var containerItemName = Loc.GetString(component._container.ContainedEntity.Name); + + data.Text = Loc.GetString("Eject {0}", containerItemName); } protected override void Activate(IEntity user, BaseCharger component) diff --git a/Content.Server/GameObjects/Components/Rotatable/RotatableComponent.cs b/Content.Server/GameObjects/Components/Rotatable/RotatableComponent.cs index 564decbb9c..6534dfe9b6 100644 --- a/Content.Server/GameObjects/Components/Rotatable/RotatableComponent.cs +++ b/Content.Server/GameObjects/Components/Rotatable/RotatableComponent.cs @@ -43,7 +43,7 @@ namespace Content.Server.GameObjects.Components.Rotatable } data.CategoryData = VerbCategories.Rotate; - data.Text = "Rotate clockwise"; + data.Text = Loc.GetString("Rotate clockwise"); data.IconTexture = "/Textures/Interface/VerbIcons/rotate_cw.svg.96dpi.png"; } @@ -65,7 +65,7 @@ namespace Content.Server.GameObjects.Components.Rotatable } data.CategoryData = VerbCategories.Rotate; - data.Text = "Rotate counter-clockwise"; + data.Text = Loc.GetString("Rotate counter-clockwise"); data.IconTexture = "/Textures/Interface/VerbIcons/rotate_ccw.svg.96dpi.png"; } diff --git a/Content.Server/GameObjects/Components/Strap/StrapComponent.cs b/Content.Server/GameObjects/Components/Strap/StrapComponent.cs index 420837f29e..ea47b05290 100644 --- a/Content.Server/GameObjects/Components/Strap/StrapComponent.cs +++ b/Content.Server/GameObjects/Components/Strap/StrapComponent.cs @@ -215,7 +215,7 @@ namespace Content.Server.GameObjects.Components.Strap } data.Visibility = VerbVisibility.Visible; - data.Text = buckle.BuckledTo == null ? Loc.GetString("Buckle") : Loc.GetString("Unbuckle"); + data.Text = Loc.GetString(buckle.BuckledTo == null ? "Buckle" : "Unbuckle"); } protected override void Activate(IEntity user, StrapComponent component) diff --git a/Content.Server/GameObjects/Components/Weapon/Melee/StunbatonComponent.cs b/Content.Server/GameObjects/Components/Weapon/Melee/StunbatonComponent.cs index 6ede88e76a..15bbd862c8 100644 --- a/Content.Server/GameObjects/Components/Weapon/Melee/StunbatonComponent.cs +++ b/Content.Server/GameObjects/Components/Weapon/Melee/StunbatonComponent.cs @@ -269,12 +269,12 @@ namespace Content.Server.GameObjects.Components.Weapon.Melee if (component.Cell == null) { - data.Text = "Eject cell (cell missing)"; + data.Text = Loc.GetString("Eject cell (cell missing)"); data.Visibility = VerbVisibility.Disabled; } else { - data.Text = "Eject cell"; + data.Text = Loc.GetString("Eject cell"); } } diff --git a/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/ServerBatteryBarrelComponent.cs b/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/ServerBatteryBarrelComponent.cs index d81aa8115e..e6e6094dab 100644 --- a/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/ServerBatteryBarrelComponent.cs +++ b/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/ServerBatteryBarrelComponent.cs @@ -18,6 +18,7 @@ using Robust.Shared.Audio; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; +using Robust.Shared.Localization; using Robust.Shared.Map; using Robust.Shared.Serialization; using Robust.Shared.ViewVariables; @@ -302,12 +303,12 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Barrels if (component.PowerCell == null) { - data.Text = "Eject cell (cell missing)"; + data.Text = Loc.GetString("Eject cell (cell missing)"); data.Visibility = VerbVisibility.Disabled; } else { - data.Text = "Eject cell"; + data.Text = Loc.GetString("Eject cell"); } } diff --git a/Content.Server/GlobalVerbs/ControlMobVerb.cs b/Content.Server/GlobalVerbs/ControlMobVerb.cs index 390094d763..48e226a855 100644 --- a/Content.Server/GlobalVerbs/ControlMobVerb.cs +++ b/Content.Server/GlobalVerbs/ControlMobVerb.cs @@ -6,6 +6,7 @@ using Robust.Server.Console; using Robust.Server.Interfaces.GameObjects; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.IoC; +using Robust.Shared.Localization; namespace Content.Server.GlobalVerbs { @@ -35,7 +36,7 @@ namespace Content.Server.GlobalVerbs if (groupController.CanCommand(player.playerSession, "controlmob")) { data.Visibility = VerbVisibility.Visible; - data.Text = "Control Mob"; + data.Text = Loc.GetString("Control Mob"); data.CategoryData = VerbCategories.Debug; } } diff --git a/Content.Server/GlobalVerbs/RejuvenateVerb.cs b/Content.Server/GlobalVerbs/RejuvenateVerb.cs index 8d49222da8..e7b949f6b8 100644 --- a/Content.Server/GlobalVerbs/RejuvenateVerb.cs +++ b/Content.Server/GlobalVerbs/RejuvenateVerb.cs @@ -6,6 +6,7 @@ using Robust.Server.Console; using Robust.Server.Interfaces.GameObjects; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.IoC; +using Robust.Shared.Localization; namespace Content.Server.GlobalVerbs { @@ -20,7 +21,7 @@ namespace Content.Server.GlobalVerbs public override void GetData(IEntity user, IEntity target, VerbData data) { - data.Text = "Rejuvenate"; + data.Text = Loc.GetString("Rejuvenate"); data.CategoryData = VerbCategories.Debug; data.Visibility = VerbVisibility.Invisible; From 8acb0ba1a57a1632ac82f195c0752d39371ac324 Mon Sep 17 00:00:00 2001 From: 20kdc Date: Sat, 29 Aug 2020 19:55:16 +0100 Subject: [PATCH 028/103] GLES2: Fixes, clarifications to shaders --- Resources/Textures/Shaders/cooldown.swsl | 2 +- Resources/Textures/Shaders/flashed_effect.swsl | 4 ++-- Resources/Textures/Shaders/outline.swsl | 3 ++- Resources/Textures/Shaders/stencil_mask.swsl | 1 + 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/Resources/Textures/Shaders/cooldown.swsl b/Resources/Textures/Shaders/cooldown.swsl index 990453ccd8..e91083b5a2 100644 --- a/Resources/Textures/Shaders/cooldown.swsl +++ b/Resources/Textures/Shaders/cooldown.swsl @@ -5,7 +5,7 @@ const highp float PI = 3.14159265; uniform highp float progress; void fragment() { - highp vec4 col = texture2D(TEXTURE, UV); + highp vec4 col = zTexture(UV); highp vec2 center = vec2(0.5,0.5); highp vec2 delta = UV.xy - center; diff --git a/Resources/Textures/Shaders/flashed_effect.swsl b/Resources/Textures/Shaders/flashed_effect.swsl index 0b15474b15..67dc67b185 100644 --- a/Resources/Textures/Shaders/flashed_effect.swsl +++ b/Resources/Textures/Shaders/flashed_effect.swsl @@ -6,8 +6,8 @@ void fragment() { highp float remaining = -pow(percentComplete, fadeFalloffExp) + 1.0; // Two ghost textures that spin around the character - highp vec4 tex1 = texture2D(TEXTURE, vec2(UV.x + (0.02) * sin(TIME * 3.0), UV.y + (0.02) * cos(TIME * 3.0))); - highp vec4 tex2 = texture2D(TEXTURE, vec2(UV.x + (0.01) * sin(TIME * 2.0), UV.y + (0.01) * cos(TIME * 2.0))); + highp vec4 tex1 = zTexture(vec2(UV.x + (0.02) * sin(TIME * 3.0), UV.y + (0.02) * cos(TIME * 3.0))); + highp vec4 tex2 = zTexture(vec2(UV.x + (0.01) * sin(TIME * 2.0), UV.y + (0.01) * cos(TIME * 2.0))); highp vec4 textureMix = mix(tex1, tex2, 0.5); diff --git a/Resources/Textures/Shaders/outline.swsl b/Resources/Textures/Shaders/outline.swsl index 945ac4bdb6..a4d6b331f1 100644 --- a/Resources/Textures/Shaders/outline.swsl +++ b/Resources/Textures/Shaders/outline.swsl @@ -35,12 +35,13 @@ uniform highp float outline_width; // = 2.0; uniform highp vec4 outline_color; // =vec4(1.0,0.0,0.0,0.33); void fragment() { - highp vec4 col = texture2D(TEXTURE, UV); + highp vec4 col = zTexture(UV); highp vec2 ps = TEXTURE_PIXEL_SIZE; highp float a; highp float maxa = col.a; highp float mina = col.a; + // note: these bypass zTexture because only alpha is queried. a = texture2D(TEXTURE, UV + vec2(0.0, -outline_width)*ps).a; maxa = max(a, maxa); mina = min(a, mina); diff --git a/Resources/Textures/Shaders/stencil_mask.swsl b/Resources/Textures/Shaders/stencil_mask.swsl index 8668d60c7d..458e29c595 100644 --- a/Resources/Textures/Shaders/stencil_mask.swsl +++ b/Resources/Textures/Shaders/stencil_mask.swsl @@ -1,4 +1,5 @@ void fragment() { + // Bypasses zTexture because only alpha is queried. if (texture2D(TEXTURE, UV).a == 0.0) { discard; // Discard if no alpha so that there's a hole in the stencil buffer. } From b4fc79bcc87572697f9c0086b0b9622d112cc905 Mon Sep 17 00:00:00 2001 From: Swept Date: Sun, 30 Aug 2020 09:09:32 +0000 Subject: [PATCH 029/103] Adds components from #1784 to IgnoredComponents.cs (#1961) --- Content.Client/IgnoredComponents.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Content.Client/IgnoredComponents.cs b/Content.Client/IgnoredComponents.cs index e49789d519..d92e3d3e30 100644 --- a/Content.Client/IgnoredComponents.cs +++ b/Content.Client/IgnoredComponents.cs @@ -165,6 +165,11 @@ "DebugPump", "DebugVent", "DebugSiphon", + "SignalReceiver", + "SignalSwitch", + "SignalTransmitter", + "SignalButton", + "SignalLinker", }; } } From 38b9a5a9018aace4ca351d01340b9f5882f4e20a Mon Sep 17 00:00:00 2001 From: Julian Giebel Date: Sun, 30 Aug 2020 11:10:14 +0200 Subject: [PATCH 030/103] Remove collision from disposal pipes (#1958) Co-authored-by: Julian Giebel --- .../Components/Disposal/DisposalTubeComponent.cs | 4 ---- .../Prototypes/Entities/Constructible/disposal.yml | 14 -------------- 2 files changed, 18 deletions(-) diff --git a/Content.Server/GameObjects/Components/Disposal/DisposalTubeComponent.cs b/Content.Server/GameObjects/Components/Disposal/DisposalTubeComponent.cs index aa007c3cdf..8a002a3dea 100644 --- a/Content.Server/GameObjects/Components/Disposal/DisposalTubeComponent.cs +++ b/Content.Server/GameObjects/Components/Disposal/DisposalTubeComponent.cs @@ -197,8 +197,6 @@ namespace Content.Server.GameObjects.Components.Disposal return; } - collidable.CanCollide = !collidable.Anchored; - if (collidable.Anchored) { OnAnchor(); @@ -237,8 +235,6 @@ namespace Content.Server.GameObjects.Components.Disposal var collidable = Owner.EnsureComponent(); collidable.AnchoredChanged += AnchoredChanged; - - collidable.CanCollide = !collidable.Anchored; } protected override void Startup() diff --git a/Resources/Prototypes/Entities/Constructible/disposal.yml b/Resources/Prototypes/Entities/Constructible/disposal.yml index d9e67582e7..64ee85fe52 100644 --- a/Resources/Prototypes/Entities/Constructible/disposal.yml +++ b/Resources/Prototypes/Entities/Constructible/disposal.yml @@ -10,20 +10,6 @@ - type: InteractionOutline - type: Collidable anchored: true - shapes: - - !type:PhysShapeAabb - bounds: "-0.3,-0.3,0.3,0.3" - mask: - - Impassable - - MobImpassable - - VaultImpassable - - SmallImpassable - layer: - - Opaque - - Impassable - - MobImpassable - - VaultImpassable - - SmallImpassable - type: SnapGrid offset: Center - type: Anchorable From 72eb1fdc1c754ca477ff2ae696fa0158b72d7d48 Mon Sep 17 00:00:00 2001 From: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Date: Sun, 30 Aug 2020 19:16:29 +1000 Subject: [PATCH 031/103] Add door welding (#1951) * Add door welding Surprised this wasn't in already. * smug's feedback Co-authored-by: Metal Gear Sloth --- .../Components/Doors/AirlockVisualizer.cs | 8 +++- .../Components/Doors/AirlockComponent.cs | 9 ++-- .../Components/Doors/ServerDoorComponent.cs | 48 +++++++++++++++++-- .../Components/Doors/SharedDoorComponent.cs | 1 + .../Constructible/Doors/airlock_base.yml | 2 + 5 files changed, 60 insertions(+), 8 deletions(-) diff --git a/Content.Client/GameObjects/Components/Doors/AirlockVisualizer.cs b/Content.Client/GameObjects/Components/Doors/AirlockVisualizer.cs index 622e9d0c23..2c0994a35e 100644 --- a/Content.Client/GameObjects/Components/Doors/AirlockVisualizer.cs +++ b/Content.Client/GameObjects/Components/Doors/AirlockVisualizer.cs @@ -107,6 +107,7 @@ namespace Content.Client.GameObjects.Components.Doors var unlitVisible = true; var boltedVisible = false; + var weldedVisible = false; switch (state) { case DoorVisualState.Closed: @@ -137,6 +138,9 @@ namespace Content.Client.GameObjects.Components.Doors animPlayer.Play(DenyAnimation, AnimationKey); } break; + case DoorVisualState.Welded: + weldedVisible = true; + break; default: throw new ArgumentOutOfRangeException(); } @@ -151,6 +155,7 @@ namespace Content.Client.GameObjects.Components.Doors } sprite.LayerSetVisible(DoorVisualLayers.BaseUnlit, unlitVisible); + sprite.LayerSetVisible(DoorVisualLayers.BaseWelded, weldedVisible); sprite.LayerSetVisible(DoorVisualLayers.BaseBolted, unlitVisible && boltedVisible); } } @@ -159,6 +164,7 @@ namespace Content.Client.GameObjects.Components.Doors { Base, BaseUnlit, - BaseBolted + BaseWelded, + BaseBolted, } } diff --git a/Content.Server/GameObjects/Components/Doors/AirlockComponent.cs b/Content.Server/GameObjects/Components/Doors/AirlockComponent.cs index e33ab84758..ab58e2461c 100644 --- a/Content.Server/GameObjects/Components/Doors/AirlockComponent.cs +++ b/Content.Server/GameObjects/Components/Doors/AirlockComponent.cs @@ -26,7 +26,7 @@ namespace Content.Server.GameObjects.Components.Doors [RegisterComponent] [ComponentReference(typeof(IActivate))] [ComponentReference(typeof(ServerDoorComponent))] - public class AirlockComponent : ServerDoorComponent, IWires, IInteractUsing + public class AirlockComponent : ServerDoorComponent, IWires { public override string Name => "Airlock"; @@ -383,7 +383,7 @@ namespace Content.Server.GameObjects.Components.Doors public override bool CanOpen() { - return IsPowered() && !IsBolted(); + return base.CanOpen() && IsPowered() && !IsBolted(); } public override bool CanClose() @@ -412,8 +412,11 @@ namespace Content.Server.GameObjects.Components.Doors || receiver.Powered; } - public async Task InteractUsing(InteractUsingEventArgs eventArgs) + public override async Task InteractUsing(InteractUsingEventArgs eventArgs) { + if (await base.InteractUsing(eventArgs)) + return true; + if (!eventArgs.Using.TryGetComponent(out var tool)) return false; diff --git a/Content.Server/GameObjects/Components/Doors/ServerDoorComponent.cs b/Content.Server/GameObjects/Components/Doors/ServerDoorComponent.cs index 064bc6fde4..5042371ea4 100644 --- a/Content.Server/GameObjects/Components/Doors/ServerDoorComponent.cs +++ b/Content.Server/GameObjects/Components/Doors/ServerDoorComponent.cs @@ -2,15 +2,18 @@ using System; using System.Linq; using System.Threading; +using System.Threading.Tasks; using Content.Server.GameObjects.Components.Access; using Content.Server.GameObjects.Components.Atmos; using Content.Server.GameObjects.Components.GUI; +using Content.Server.GameObjects.Components.Interactable; using Content.Server.GameObjects.Components.Mobs; using Content.Server.GameObjects.EntitySystems; using Content.Shared.Damage; using Content.Shared.GameObjects.Components.Body; using Content.Shared.GameObjects.Components.Damage; using Content.Shared.GameObjects.Components.Doors; +using Content.Shared.GameObjects.Components.Interactable; using Content.Shared.GameObjects.Components.Movement; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.GameObjects; @@ -29,7 +32,7 @@ namespace Content.Server.GameObjects.Components.Doors { [RegisterComponent] [ComponentReference(typeof(IActivate))] - public class ServerDoorComponent : Component, IActivate, ICollideBehavior + public class ServerDoorComponent : Component, IActivate, ICollideBehavior, IInteractUsing { public override string Name => "Door"; @@ -45,7 +48,7 @@ namespace Content.Server.GameObjects.Components.Doors protected bool AutoClose = true; protected const float AutoCloseDelay = 5; protected float CloseSpeed = AutoCloseDelay; - + private CancellationTokenSource _cancellationTokenSource = new CancellationTokenSource(); private static readonly TimeSpan CloseTimeOne = TimeSpan.FromSeconds(0.3f); @@ -60,11 +63,31 @@ namespace Content.Server.GameObjects.Components.Doors [ViewVariables] private bool _occludes; + [ViewVariables] + public bool IsWeldedShut + { + get => _isWeldedShut; + set + { + if (_isWeldedShut == value) + { + return; + } + + _isWeldedShut = value; + SetAppearance(_isWeldedShut ? DoorVisualState.Welded : DoorVisualState.Closed); + } + } + private bool _isWeldedShut; + + private bool _canWeldShut = true; + public override void ExposeData(ObjectSerializer serializer) { base.ExposeData(serializer); serializer.DataField(ref _occludes, "occludes", true); + serializer.DataField(ref _isWeldedShut, "welded", false); } public override void OnRemove() @@ -129,7 +152,7 @@ namespace Content.Server.GameObjects.Components.Doors public virtual bool CanOpen() { - return true; + return !_isWeldedShut; } public bool CanOpen(IEntity user) @@ -192,6 +215,7 @@ namespace Content.Server.GameObjects.Components.Doors return; } + _canWeldShut = false; State = DoorState.Opening; SetAppearance(DoorVisualState.Opening); if (_occludes && Owner.TryGetComponent(out OccluderComponent? occluder)) @@ -325,6 +349,7 @@ namespace Content.Server.GameObjects.Components.Doors await Timer.Delay(CloseTimeTwo, _cancellationTokenSource.Token); + _canWeldShut = true; State = DoorState.Closed; SetAppearance(DoorVisualState.Closed); }, _cancellationTokenSource.Token); @@ -334,7 +359,7 @@ namespace Content.Server.GameObjects.Components.Doors public virtual void Deny() { - if (State == DoorState.Open) + if (State == DoorState.Open || _isWeldedShut) { return; } @@ -375,5 +400,20 @@ namespace Content.Server.GameObjects.Components.Doors Closing, Opening, } + + public virtual async Task InteractUsing(InteractUsingEventArgs eventArgs) + { + if (!_canWeldShut) + return false; + + if (!eventArgs.Using.TryGetComponent(out WelderComponent? tool)) + return false; + + if (!await tool.UseTool(eventArgs.User, Owner, 3f, ToolQuality.Welding, 3f, () => _canWeldShut)) + return false; + + IsWeldedShut ^= true; + return true; + } } } diff --git a/Content.Shared/GameObjects/Components/Doors/SharedDoorComponent.cs b/Content.Shared/GameObjects/Components/Doors/SharedDoorComponent.cs index 37f34ac70d..e9fbcb32d6 100644 --- a/Content.Shared/GameObjects/Components/Doors/SharedDoorComponent.cs +++ b/Content.Shared/GameObjects/Components/Doors/SharedDoorComponent.cs @@ -21,5 +21,6 @@ namespace Content.Shared.GameObjects.Components.Doors Open, Closing, Deny, + Welded, } } diff --git a/Resources/Prototypes/Entities/Constructible/Doors/airlock_base.yml b/Resources/Prototypes/Entities/Constructible/Doors/airlock_base.yml index 931791379e..54163a71c3 100644 --- a/Resources/Prototypes/Entities/Constructible/Doors/airlock_base.yml +++ b/Resources/Prototypes/Entities/Constructible/Doors/airlock_base.yml @@ -16,6 +16,8 @@ - state: closed_unlit shader: unshaded map: ["enum.DoorVisualLayers.BaseUnlit"] + - state: welded + map: ["enum.DoorVisualLayers.BaseWelded"] - state: bolted shader: unshaded map: ["enum.DoorVisualLayers.BaseBolted"] From a8aa0880583dbb2893727d0232066c03224a65a0 Mon Sep 17 00:00:00 2001 From: DrSmugleaf Date: Sun, 30 Aug 2020 11:16:47 +0200 Subject: [PATCH 032/103] Add invulnerable damage flag, godmode and damage flag commands (#1949) * Add invulnerable damage flag and commands * Add serialization for damage flags * Add godmode command --- .../Components/Damage/DamageCommands.cs | 214 ++++++++++++++++++ .../Components/Damage/DamageFlag.cs | 13 ++ .../Components/Damage/DamageableComponent.cs | 78 +++++++ .../Components/Damage/IDamageableComponent.cs | 24 ++ Resources/Groups/groups.yml | 6 + 5 files changed, 335 insertions(+) create mode 100644 Content.Server/GameObjects/Components/Damage/DamageCommands.cs create mode 100644 Content.Shared/GameObjects/Components/Damage/DamageFlag.cs diff --git a/Content.Server/GameObjects/Components/Damage/DamageCommands.cs b/Content.Server/GameObjects/Components/Damage/DamageCommands.cs new file mode 100644 index 0000000000..5b4fe5b43a --- /dev/null +++ b/Content.Server/GameObjects/Components/Damage/DamageCommands.cs @@ -0,0 +1,214 @@ +#nullable enable +using System; +using System.Diagnostics.CodeAnalysis; +using Content.Server.GameObjects.Components.Atmos; +using Content.Shared.GameObjects.Components.Damage; +using Robust.Server.Interfaces.Console; +using Robust.Server.Interfaces.Player; +using Robust.Shared.GameObjects; +using Robust.Shared.Interfaces.GameObjects; +using Robust.Shared.IoC; + +namespace Content.Server.GameObjects.Components.Damage +{ + public abstract class DamageFlagCommand : IClientCommand + { + public abstract string Command { get; } + public abstract string Description { get; } + public abstract string Help { get; } + + public abstract void Execute(IConsoleShell shell, IPlayerSession? player, string[] args); + + public bool TryGetEntity( + IConsoleShell shell, + IPlayerSession? player, + string[] args, + bool adding, + [NotNullWhen(true)] out IEntity? entity, + out DamageFlag flag, + [NotNullWhen(true)] out IDamageableComponent? damageable) + { + entity = null; + flag = DamageFlag.None; + damageable = null; + + IEntity? parsedEntity; + DamageFlag parsedFlag; + IDamageableComponent? parsedDamageable; + + switch (args.Length) + { + case 1: + { + if (player == null) + { + shell.SendText(player, "An entity needs to be specified when the command isn't used by a player."); + return false; + } + + if (player.AttachedEntity == null) + { + shell.SendText(player, "An entity needs to be specified when you aren't attached to an entity."); + return false; + } + + if (!Enum.TryParse(args[0], true, out parsedFlag)) + { + shell.SendText(player, $"{args[0]} is not a valid damage flag."); + return false; + } + + parsedEntity = player.AttachedEntity; + flag = parsedFlag; + break; + } + case 2: + { + if (!EntityUid.TryParse(args[0], out var id)) + { + shell.SendText(player, $"{args[0]} isn't a valid entity id."); + return false; + } + + var entityManager = IoCManager.Resolve(); + if (!entityManager.TryGetEntity(id, out parsedEntity)) + { + shell.SendText(player, $"No entity found with id {id}."); + return false; + } + + if (!Enum.TryParse(args[1], true, out parsedFlag)) + { + shell.SendText(player, $"{args[1]} is not a valid damage flag."); + return false; + } + + break; + } + default: + shell.SendText(player, Help); + return false; + } + + if (!parsedEntity.TryGetComponent(out parsedDamageable)) + { + shell.SendText(player, $"Entity {parsedEntity.Name} doesn't have a {nameof(IDamageableComponent)}"); + return false; + } + + if (parsedDamageable.HasFlag(parsedFlag) && adding) + { + shell.SendText(player, $"Entity {parsedEntity.Name} already has damage flag {parsedFlag}."); + return false; + } + else if (!parsedDamageable.HasFlag(parsedFlag) && !adding) + { + shell.SendText(player, $"Entity {parsedEntity.Name} doesn't have damage flag {parsedFlag}."); + return false; + } + + entity = parsedEntity; + flag = parsedFlag; + damageable = parsedDamageable; + + return true; + } + } + + public class AddDamageFlagCommand : DamageFlagCommand + { + public override string Command => "adddamageflag"; + public override string Description => "Adds a damage flag to your entity or another."; + public override string Help => $"Usage: {Command} / {Command} "; + + public override void Execute(IConsoleShell shell, IPlayerSession? player, string[] args) + { + if (!TryGetEntity(shell, player, args, true, out var entity, out var flag, out var damageable)) + { + return; + } + + damageable.AddFlag(flag); + shell.SendText(player, $"Added damage flag {flag} to entity {entity.Name}"); + } + } + + public class RemoveDamageFlagCommand : DamageFlagCommand + { + public override string Command => "removedamageflag"; + public override string Description => "Removes a damage flag from your entity or another."; + public override string Help => $"Usage: {Command} / {Command} "; + + public override void Execute(IConsoleShell shell, IPlayerSession? player, string[] args) + { + if (!TryGetEntity(shell, player, args, false, out var entity, out var flag, out var damageable)) + { + return; + } + + damageable.RemoveFlag(flag); + shell.SendText(player, $"Removed damage flag {flag} from entity {entity.Name}"); + } + } + + public class GodModeCommand : IClientCommand + { + public string Command => "godmode"; + public string Description => "Makes your entity or another invulnerable to almost anything. May have irreversible changes."; + public string Help => $"Usage: {Command} / {Command} "; + public void Execute(IConsoleShell shell, IPlayerSession? player, string[] args) + { + IEntity entity; + + switch (args.Length) + { + case 0: + if (player == null) + { + shell.SendText(player, "An entity needs to be specified when the command isn't used by a player."); + return; + } + + if (player.AttachedEntity == null) + { + shell.SendText(player, "An entity needs to be specified when you aren't attached to an entity."); + return; + } + + entity = player.AttachedEntity; + break; + case 1: + if (!EntityUid.TryParse(args[0], out var id)) + { + shell.SendText(player, $"{args[0]} isn't a valid entity id."); + return; + } + + var entityManager = IoCManager.Resolve(); + if (!entityManager.TryGetEntity(id, out var parsedEntity)) + { + shell.SendText(player, $"No entity found with id {id}."); + return; + } + + entity = parsedEntity; + break; + default: + shell.SendText(player, Help); + return; + } + + if (entity.HasComponent()) + { + entity.RemoveComponent(); + } + + if (entity.TryGetComponent(out IDamageableComponent? damageable)) + { + damageable.AddFlag(DamageFlag.Invulnerable); + } + + shell.SendText(player, $"Enabled godmode for entity {entity.Name}"); + } + } +} diff --git a/Content.Shared/GameObjects/Components/Damage/DamageFlag.cs b/Content.Shared/GameObjects/Components/Damage/DamageFlag.cs new file mode 100644 index 0000000000..537fed2391 --- /dev/null +++ b/Content.Shared/GameObjects/Components/Damage/DamageFlag.cs @@ -0,0 +1,13 @@ +using System; +using Robust.Shared.Serialization; + +namespace Content.Shared.GameObjects.Components.Damage +{ + [Flags] + [Serializable, NetSerializable] + public enum DamageFlag + { + None = 0, + Invulnerable = 1 << 0 + } +} diff --git a/Content.Shared/GameObjects/Components/Damage/DamageableComponent.cs b/Content.Shared/GameObjects/Components/Damage/DamageableComponent.cs index 8557e738df..7fdfeba0ac 100644 --- a/Content.Shared/GameObjects/Components/Damage/DamageableComponent.cs +++ b/Content.Shared/GameObjects/Components/Damage/DamageableComponent.cs @@ -27,6 +27,8 @@ namespace Content.Shared.GameObjects.Components.Damage private DamageState _currentDamageState; + private DamageFlag _flags; + public event Action? HealthChangedEvent; /// @@ -79,6 +81,8 @@ namespace Content.Shared.GameObjects.Components.Damage { EnterState(value); } + + Dirty(); } } @@ -88,6 +92,36 @@ namespace Content.Shared.GameObjects.Components.Damage public IReadOnlyDictionary DamageTypes => Damage.DamageTypes; + public DamageFlag Flags + { + get => _flags; + private set + { + if (_flags == value) + { + return; + } + + _flags = value; + Dirty(); + } + } + + public void AddFlag(DamageFlag flag) + { + Flags |= flag; + } + + public bool HasFlag(DamageFlag flag) + { + return Flags.HasFlag(flag); + } + + public void RemoveFlag(DamageFlag flag) + { + Flags &= ~flag; + } + public override void ExposeData(ObjectSerializer serializer) { base.ExposeData(serializer); @@ -104,6 +138,35 @@ namespace Content.Shared.GameObjects.Components.Damage t => DeadThreshold = t == -1 ? (int?) null : t, () => DeadThreshold ?? -1); + serializer.DataReadWriteFunction( + "flags", + new List(), + flags => + { + var result = DamageFlag.None; + + foreach (var flag in flags) + { + result |= flag; + } + + Flags = result; + }, + () => + { + var writeFlags = new List(); + + foreach (var flag in (DamageFlag[]) Enum.GetValues(typeof(DamageFlag))) + { + if ((Flags & flag) == flag) + { + writeFlags.Add(flag); + } + } + + return writeFlags; + }); + if (serializer.Reading) { // Doesn't write to file, TODO? @@ -151,6 +214,11 @@ namespace Content.Shared.GameObjects.Components.Damage IEntity? source = null, HealthChangeParams? extraParams = null) { + if (amount > 0 && HasFlag(DamageFlag.Invulnerable)) + { + return false; + } + if (Damage.SupportsDamageType(type)) { var finalDamage = amount; @@ -171,6 +239,11 @@ namespace Content.Shared.GameObjects.Components.Damage IEntity? source = null, HealthChangeParams? extraParams = null) { + if (amount > 0 && HasFlag(DamageFlag.Invulnerable)) + { + return false; + } + if (Damage.SupportsDamageClass(@class)) { var types = @class.ToTypes(); @@ -250,6 +323,11 @@ namespace Content.Shared.GameObjects.Components.Damage public bool SetDamage(DamageType type, int newValue, IEntity? source = null, HealthChangeParams? extraParams = null) { + if (newValue >= TotalDamage && HasFlag(DamageFlag.Invulnerable)) + { + return false; + } + if (Damage.SupportsDamageType(type)) { Damage.SetDamageValue(type, newValue); diff --git a/Content.Shared/GameObjects/Components/Damage/IDamageableComponent.cs b/Content.Shared/GameObjects/Components/Damage/IDamageableComponent.cs index 4290cf4ac2..8c6891953d 100644 --- a/Content.Shared/GameObjects/Components/Damage/IDamageableComponent.cs +++ b/Content.Shared/GameObjects/Components/Damage/IDamageableComponent.cs @@ -45,6 +45,30 @@ namespace Content.Shared.GameObjects.Components.Damage /// IReadOnlyDictionary DamageTypes { get; } + /// + /// The damage flags on this component. + /// + DamageFlag Flags { get; } + + /// + /// Adds a flag to this component. + /// + /// The flag to add. + void AddFlag(DamageFlag flag); + + /// + /// Checks whether or not this component has a specific flag. + /// + /// The flag to check for. + /// True if it has the flag, false otherwise. + bool HasFlag(DamageFlag flag); + + /// + /// Removes a flag from this component. + /// + /// The flag to remove. + void RemoveFlag(DamageFlag flag); + /// /// Gets the amount of damage of a type. /// diff --git a/Resources/Groups/groups.yml b/Resources/Groups/groups.yml index 85d071a009..a2bf42796c 100644 --- a/Resources/Groups/groups.yml +++ b/Resources/Groups/groups.yml @@ -102,6 +102,9 @@ - readyall - factions - signallink + - adddamageflag + - removedamageflag + - godmode CanViewVar: true CanAdminPlace: true CanAdminMenu: true @@ -197,6 +200,9 @@ - readyall - factions - signallink + - adddamageflag + - removedamageflag + - godmode CanViewVar: true CanAdminPlace: true CanScript: true From 827eab17d0e81ee7d099101edb450f1cd6cb3c54 Mon Sep 17 00:00:00 2001 From: DrSmugleaf Date: Sun, 30 Aug 2020 11:26:52 +0200 Subject: [PATCH 033/103] Add body part and body manager interfaces (#1939) * Add body part and body manager interfaces * Merge fixes --- .../Components/ActionBlocking/CuffUnitTest.cs | 2 +- Content.Server/Body/BodyCommands.cs | 2 +- Content.Server/Body/BodyPart.cs | 168 ++++-------- Content.Server/Body/BodyPreset.cs | 2 +- Content.Server/Body/IBodyPart.cs | 131 ++++++++++ Content.Server/Body/IBodyPartContainer.cs | 10 +- .../Mechanisms/Behaviors/MechanismBehavior.cs | 30 +-- Content.Server/Body/Mechanisms/Mechanism.cs | 18 +- .../Body/Surgery/BiologicalSurgeryData.cs | 7 +- Content.Server/Body/Surgery/SurgeryData.cs | 22 +- .../Components/Body/BodyManagerComponent.cs | 243 +++++++----------- .../Components/Body/BodyScannerComponent.cs | 2 +- .../Body/DroppedBodyPartComponent.cs | 2 +- .../Components/Body/IBodyManagerComponent.cs | 67 +++++ .../Components/Medical/HealingComponent.cs | 1 + .../Components/Interaction/IBodyPartAdded.cs | 8 +- 16 files changed, 393 insertions(+), 322 deletions(-) create mode 100644 Content.Server/Body/IBodyPart.cs create mode 100644 Content.Server/GameObjects/Components/Body/IBodyManagerComponent.cs diff --git a/Content.IntegrationTests/Tests/GameObjects/Components/ActionBlocking/CuffUnitTest.cs b/Content.IntegrationTests/Tests/GameObjects/Components/ActionBlocking/CuffUnitTest.cs index ea8d5ea324..682f01752a 100644 --- a/Content.IntegrationTests/Tests/GameObjects/Components/ActionBlocking/CuffUnitTest.cs +++ b/Content.IntegrationTests/Tests/GameObjects/Components/ActionBlocking/CuffUnitTest.cs @@ -87,7 +87,7 @@ namespace Content.IntegrationTests.Tests.GameObjects.Components.ActionBlocking var slot = part.GetHashCode().ToString(); body.Template.Slots.Add(slot, BodyPartType.Hand); - body.InstallBodyPart(part, slot); + body.TryAddPart(slot, part, true); } } } diff --git a/Content.Server/Body/BodyCommands.cs b/Content.Server/Body/BodyCommands.cs index da8c9e4ca1..899a793f6d 100644 --- a/Content.Server/Body/BodyCommands.cs +++ b/Content.Server/Body/BodyCommands.cs @@ -48,7 +48,7 @@ namespace Content.Server.Body var slot = part.GetHashCode().ToString(); body.Template.Slots.Add(slot, BodyPartType.Hand); - body.InstallBodyPart(part, slot); + body.TryAddPart(slot, part, true); } } diff --git a/Content.Server/Body/BodyPart.cs b/Content.Server/Body/BodyPart.cs index 32121f056a..acd984af53 100644 --- a/Content.Server/Body/BodyPart.cs +++ b/Content.Server/Body/BodyPart.cs @@ -14,13 +14,11 @@ using Content.Shared.Damage.DamageContainer; using Content.Shared.Damage.ResistanceSet; using Content.Shared.GameObjects.Components.Body; using Content.Shared.GameObjects.Components.Damage; -using Robust.Server.GameObjects; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Reflection; using Robust.Shared.Interfaces.Serialization; using Robust.Shared.IoC; using Robust.Shared.Log; -using Robust.Shared.Map; using Robust.Shared.Maths; using Robust.Shared.Prototypes; using Robust.Shared.Utility; @@ -34,19 +32,10 @@ namespace Content.Server.Body /// which coordinates functions between BodyParts, or a /// . /// - public class BodyPart + public class BodyPart : IBodyPart { - /// - /// The body that this body part is in, if any. - /// - private BodyManagerComponent? _body; + private IBodyManagerComponent? _body; - /// - /// Set of all currently inside this - /// . - /// To add and remove from this list see and - /// - /// private readonly HashSet _mechanisms = new HashSet(); public BodyPart(BodyPartPrototype data) @@ -64,11 +53,8 @@ namespace Content.Server.Body LoadFromPrototype(data); } - /// - /// The body that this body part is in, if any. - /// [ViewVariables] - public BodyManagerComponent? Body + public IBodyManagerComponent? Body { get => _body; set @@ -111,91 +97,48 @@ namespace Content.Server.Body [ViewVariables] private HashSet Properties { get; } - /// - /// The name of this , often displayed to the user. - /// For example, it could be named "advanced robotic arm". - /// - [ViewVariables] - public string Name { get; private set; } + [ViewVariables] public string Name { get; private set; } - /// - /// Plural version of this name. - /// - [ViewVariables] - public string Plural { get; private set; } + [ViewVariables] public string Plural { get; private set; } - /// - /// Path to the RSI that represents this . - /// - [ViewVariables] - public string RSIPath { get; private set; } + [ViewVariables] public string RSIPath { get; private set; } - /// - /// RSI state that represents this . - /// - [ViewVariables] - public string RSIState { get; private set; } + [ViewVariables] public string RSIState { get; private set; } - /// - /// RSI map keys that this body part changes on the sprite. - /// - [ViewVariables] - public Enum? RSIMap { get; set; } + [ViewVariables] public Enum? RSIMap { get; set; } - /// - /// RSI color of this body part. - /// // TODO: SpriteComponent rework - public Color? RSIColor { get; set; } + [ViewVariables] public Color? RSIColor { get; set; } - /// - /// that this is considered - /// to be. - /// For example, . - /// - [ViewVariables] - public BodyPartType PartType { get; private set; } + [ViewVariables] public BodyPartType PartType { get; private set; } - /// - /// Determines many things: how many mechanisms can be fit inside this - /// , whether a body can fit through tiny crevices, etc. - /// - [ViewVariables] - private int Size { get; set; } + [ViewVariables] public int Size { get; private set; } - /// - /// Max HP of this . - /// - [ViewVariables] - public int MaxDurability { get; private set; } + [ViewVariables] public int MaxDurability { get; private set; } - /// - /// Current HP of this based on sum of all damage types. - /// - [ViewVariables] - public int CurrentDurability => MaxDurability - Damage.TotalDamage; + [ViewVariables] public int CurrentDurability => MaxDurability - Damage.TotalDamage; // TODO: Individual body part damage /// - /// Current damage dealt to this . + /// Current damage dealt to this . /// [ViewVariables] public DamageContainer Damage { get; private set; } /// - /// Armor of this against damages. + /// Armor of this against damages. /// [ViewVariables] public ResistanceSet Resistances { get; private set; } /// - /// At what HP this destroyed. + /// At what HP this destroyed. /// [ViewVariables] public int DestroyThreshold { get; private set; } /// - /// What types of BodyParts this can easily attach to. + /// What types of BodyParts this can easily attach to. /// For the most part, most limbs aren't universal and require extra work to /// attach between types. /// @@ -204,14 +147,15 @@ namespace Content.Server.Body /// /// Set of all currently inside this - /// . + /// . /// [ViewVariables] public IReadOnlyCollection Mechanisms => _mechanisms; /// - /// This method is called by - /// before is called. + /// This method is called by + /// before + /// is called. /// public void PreMetabolism(float frameTime) { @@ -222,8 +166,9 @@ namespace Content.Server.Body } /// - /// This method is called by - /// after is called. + /// This method is called by + /// after + /// is called. /// public void PostMetabolism(float frameTime) { @@ -258,9 +203,10 @@ namespace Content.Server.Body /// The property if found, null otherwise. /// The type of the property to find. /// True if successful, false otherwise. - public bool TryGetProperty(out T property) + public bool TryGetProperty([NotNullWhen(true)] out T? property) where T : BodyPartProperty { - property = (T) Properties.First(x => x.GetType() == typeof(T)); + property = (T?) Properties.FirstOrDefault(x => x.GetType() == typeof(T)); + return property != null; } @@ -269,20 +215,21 @@ namespace Content.Server.Body /// The resulting will be null if unsuccessful. /// /// True if successful, false otherwise. - public bool TryGetProperty(Type propertyType, out BodyPartProperty property) + public bool TryGetProperty(Type propertyType, [NotNullWhen(true)] out BodyPartProperty? property) { - property = (BodyPartProperty) Properties.First(x => x.GetType() == propertyType); + property = (BodyPartProperty?) Properties.First(x => x.GetType() == propertyType); + return property != null; } /// - /// Checks if the given type is on this . + /// Checks if the given type is on this . /// /// /// The subtype of to look for. /// /// - /// True if this has a property of type + /// True if this has a property of type /// , false otherwise. /// public bool HasProperty() where T : BodyPartProperty @@ -292,13 +239,13 @@ namespace Content.Server.Body /// /// Checks if a subtype of is on this - /// . + /// . /// /// /// The subtype of to look for. /// /// - /// True if this has a property of type + /// True if this has a property of type /// , false otherwise. /// public bool HasProperty(Type propertyType) @@ -306,21 +253,11 @@ namespace Content.Server.Body return Properties.Count(x => x.GetType() == propertyType) > 0; } - /// - /// Checks if another can be connected to this one. - /// - /// The part to connect. - /// True if it can be connected, false otherwise. - public bool CanAttachBodyPart(BodyPart toBeConnected) + public bool CanAttachPart(IBodyPart part) { - return SurgeryData.CanAttachBodyPart(toBeConnected); + return SurgeryData.CanAttachBodyPart(part); } - /// - /// Checks if a can be installed on this - /// . - /// - /// True if it can be installed, false otherwise. public bool CanInstallMechanism(Mechanism mechanism) { return SizeUsed + mechanism.Size <= Size && @@ -336,7 +273,7 @@ namespace Content.Server.Body /// The mechanism to try to install. /// /// True if successful, false if there was an error - /// (e.g. not enough room in ). + /// (e.g. not enough room in ). /// private bool TryInstallMechanism(Mechanism mechanism) { @@ -352,7 +289,7 @@ namespace Content.Server.Body /// /// Tries to install a into this - /// , potentially deleting the dropped + /// , potentially deleting the dropped /// . /// /// The mechanism to install. @@ -364,21 +301,13 @@ namespace Content.Server.Body { if (!TryInstallMechanism(droppedMechanism.ContainedMechanism)) { - return false; //Installing the mechanism failed for some reason. + return false; // Installing the mechanism failed for some reason. } droppedMechanism.Owner.Delete(); return true; } - /// - /// Tries to remove the given reference from - /// this . - /// - /// - /// The newly spawned , or null - /// if there was an error in spawning the entity or removing the mechanism. - /// public bool TryDropMechanism(IEntity dropLocation, Mechanism mechanismTarget, [NotNullWhen(true)] out DroppedMechanismComponent dropped) { @@ -403,11 +332,11 @@ namespace Content.Server.Body /// /// Tries to destroy the given in this - /// . Does NOT spawn a dropped entity. + /// . Does NOT spawn a dropped entity. /// /// /// Tries to destroy the given in this - /// . + /// . /// /// The mechanism to destroy. /// True if successful, false otherwise. @@ -421,18 +350,13 @@ namespace Content.Server.Body return true; } - /// - /// Checks if the given can be used on - /// the current state of this . - /// - /// True if it can be used, false otherwise. - public bool SurgeryCheck(SurgeryType toolType) + public bool SurgeryCheck(SurgeryType surgery) { - return SurgeryData.CheckSurgery(toolType); + return SurgeryData.CheckSurgery(surgery); } /// - /// Attempts to perform surgery on this with the given + /// Attempts to perform surgery on this with the given /// tool. /// /// True if successful, false if there was an error. @@ -474,7 +398,7 @@ namespace Content.Server.Body /// /// Tries to remove the given from this - /// . + /// . /// /// The mechanism to remove. /// True if it was removed, false otherwise. @@ -515,7 +439,7 @@ namespace Content.Server.Body /// /// Loads the given . - /// Current data on this will be overwritten! + /// Current data on this will be overwritten! /// protected virtual void LoadFromPrototype(BodyPartPrototype data) { diff --git a/Content.Server/Body/BodyPreset.cs b/Content.Server/Body/BodyPreset.cs index 12e67c53e9..2afc863beb 100644 --- a/Content.Server/Body/BodyPreset.cs +++ b/Content.Server/Body/BodyPreset.cs @@ -21,7 +21,7 @@ namespace Content.Server.Body [ViewVariables] public string Name { get; private set; } /// - /// Maps a template slot to the ID of the that should + /// Maps a template slot to the ID of the that should /// fill it. E.g. "right arm" : "BodyPart.arm.basic_human". /// [ViewVariables] diff --git a/Content.Server/Body/IBodyPart.cs b/Content.Server/Body/IBodyPart.cs new file mode 100644 index 0000000000..12859fcdf7 --- /dev/null +++ b/Content.Server/Body/IBodyPart.cs @@ -0,0 +1,131 @@ +#nullable enable +using System; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using Content.Server.Body.Mechanisms; +using Content.Server.GameObjects.Components.Body; +using Content.Shared.Body.Part.Properties; +using Content.Shared.GameObjects.Components.Body; +using Robust.Shared.Interfaces.GameObjects; +using Robust.Shared.Maths; + +namespace Content.Server.Body +{ + public interface IBodyPart + { + /// + /// The body that this body part is currently in, if any. + /// + IBodyManagerComponent? Body { get; set; } + + /// + /// that this is considered + /// to be. + /// For example, . + /// + BodyPartType PartType { get; } + + /// + /// The name of this , often displayed to the user. + /// For example, it could be named "advanced robotic arm". + /// + public string Name { get; } + + /// + /// Plural version of this name. + /// + public string Plural { get; } + + /// + /// Determines many things: how many mechanisms can be fit inside this + /// , whether a body can fit through tiny crevices, + /// etc. + /// + int Size { get; } + + /// + /// Max HP of this . + /// + int MaxDurability { get; } + + /// + /// Current HP of this based on sum of all damage types. + /// + int CurrentDurability { get; } + + /// + /// Collection of all s currently inside this + /// . + /// To add and remove from this list see and + /// + /// + IReadOnlyCollection Mechanisms { get; } + + /// + /// Path to the RSI that represents this . + /// + public string RSIPath { get; } + + /// + /// RSI state that represents this . + /// + public string RSIState { get; } + + /// + /// RSI map keys that this body part changes on the sprite. + /// + public Enum? RSIMap { get; set; } + + /// + /// RSI color of this body part. + /// + // TODO: SpriteComponent rework + public Color? RSIColor { get; set; } + + bool HasProperty() where T : BodyPartProperty; + + bool HasProperty(Type type); + + bool TryGetProperty([NotNullWhen(true)] out T? property) where T : BodyPartProperty; + + void PreMetabolism(float frameTime); + + void PostMetabolism(float frameTime); + + bool SpawnDropped([NotNullWhen(true)] out IEntity? dropped); + + /// + /// Checks if the given can be used on + /// the current state of this . + /// + /// True if it can be used, false otherwise. + bool SurgeryCheck(SurgeryType surgery); + + /// + /// Checks if another can be connected to this one. + /// + /// The part to connect. + /// True if it can be connected, false otherwise. + bool CanAttachPart(IBodyPart part); + + /// + /// Checks if a can be installed on this + /// . + /// + /// True if it can be installed, false otherwise. + bool CanInstallMechanism(Mechanism mechanism); + + /// + /// Tries to remove the given reference from + /// this . + /// + /// + /// The newly spawned , or null + /// if there was an error in spawning the entity or removing the mechanism. + /// + bool TryDropMechanism(IEntity dropLocation, Mechanism mechanismTarget, + [NotNullWhen(true)] out DroppedMechanismComponent dropped); + + bool DestroyMechanism(Mechanism mechanism); + } +} diff --git a/Content.Server/Body/IBodyPartContainer.cs b/Content.Server/Body/IBodyPartContainer.cs index fdc4c402e9..f47d9b4657 100644 --- a/Content.Server/Body/IBodyPartContainer.cs +++ b/Content.Server/Body/IBodyPartContainer.cs @@ -7,11 +7,11 @@ namespace Content.Server.Body /// Making a class inherit from this interface allows you to do many things with /// it in the class. /// This includes passing it as an argument to a - /// delegate, as to later typecast it back - /// to the original class type. - /// Every BodyPart also needs an to be its parent - /// (i.e. the holds many , - /// each of which have an upward reference to it). + /// delegate, as to later typecast + /// it back to the original class type. + /// Every BodyPart also needs an to be + /// its parent (i.e. the holds many + /// , each of which have an upward reference to it). /// public interface IBodyPartContainer { diff --git a/Content.Server/Body/Mechanisms/Behaviors/MechanismBehavior.cs b/Content.Server/Body/Mechanisms/Behaviors/MechanismBehavior.cs index 77c3d5e982..54f1e97384 100644 --- a/Content.Server/Body/Mechanisms/Behaviors/MechanismBehavior.cs +++ b/Content.Server/Body/Mechanisms/Behaviors/MechanismBehavior.cs @@ -70,7 +70,7 @@ namespace Content.Server.Body.Mechanisms.Behaviors } /// - /// Called when the containing is attached to a + /// Called when the containing is attached to a /// . /// For instance, attaching a head to a body will call this on the brain inside. /// @@ -82,7 +82,7 @@ namespace Content.Server.Body.Mechanisms.Behaviors /// /// Called when the parent is - /// installed into a . + /// installed into a . /// For instance, putting a brain into an empty head. /// public void InstalledIntoPart() @@ -92,22 +92,22 @@ namespace Content.Server.Body.Mechanisms.Behaviors } /// - /// Called when the containing is removed from a + /// Called when the containing is removed from a /// . /// For instance, cutting off ones head will call this on the brain inside. /// - public void RemovedFromBody(BodyManagerComponent old) + public void RemovedFromBody(IBodyManagerComponent old) { OnRemovedFromBody(old); TryRemoveNetwork(old); } /// - /// Called when the parent is removed from a - /// . + /// Called when the parent is + /// removed from a . /// For instance, taking a brain out of ones head. /// - public void RemovedFromPart(BodyPart old) + public void RemovedFromPart(IBodyPart old) { OnRemovedFromPart(old); TryRemoveNetwork(old.Body); @@ -121,7 +121,7 @@ namespace Content.Server.Body.Mechanisms.Behaviors } } - private void TryRemoveNetwork(BodyManagerComponent? body) + private void TryRemoveNetwork(IBodyManagerComponent? body) { if (Network != null) { @@ -137,7 +137,7 @@ namespace Content.Server.Body.Mechanisms.Behaviors protected virtual void OnRemove() { } /// - /// Called when the containing is attached to a + /// Called when the containing is attached to a /// . /// For instance, attaching a head to a body will call this on the brain inside. /// @@ -145,24 +145,24 @@ namespace Content.Server.Body.Mechanisms.Behaviors /// /// Called when the parent is - /// installed into a . + /// installed into a . /// For instance, putting a brain into an empty head. /// protected virtual void OnInstalledIntoPart() { } /// - /// Called when the containing is removed from a + /// Called when the containing is removed from a /// . /// For instance, cutting off ones head will call this on the brain inside. /// - protected virtual void OnRemovedFromBody(BodyManagerComponent old) { } + protected virtual void OnRemovedFromBody(IBodyManagerComponent old) { } /// - /// Called when the parent is removed from a - /// . + /// Called when the parent is + /// removed from a . /// For instance, taking a brain out of ones head. /// - protected virtual void OnRemovedFromPart(BodyPart old) { } + protected virtual void OnRemovedFromPart(IBodyPart old) { } /// /// Called every update when this behavior is connected to a diff --git a/Content.Server/Body/Mechanisms/Mechanism.cs b/Content.Server/Body/Mechanisms/Mechanism.cs index 9c88b0425b..1dfaf0ee67 100644 --- a/Content.Server/Body/Mechanisms/Mechanism.cs +++ b/Content.Server/Body/Mechanisms/Mechanism.cs @@ -12,13 +12,13 @@ using Robust.Shared.ViewVariables; namespace Content.Server.Body.Mechanisms { /// - /// Data class representing a persistent item inside a . + /// Data class representing a persistent item inside a . /// This includes livers, eyes, cameras, brains, explosive implants, /// binary communicators, and other things. /// public class Mechanism { - private BodyPart? _part; + private IBodyPart? _part; public Mechanism(MechanismPrototype data) { @@ -91,13 +91,13 @@ namespace Content.Server.Body.Mechanisms /// /// Determines a handful of things - mostly whether this - /// can fit into a . + /// can fit into a . /// [ViewVariables] public int Size { get; set; } /// - /// What kind of this can be + /// What kind of this can be /// easily installed into. /// [ViewVariables] @@ -109,9 +109,9 @@ namespace Content.Server.Body.Mechanisms [ViewVariables] private List Behaviors { get; } - public BodyManagerComponent? Body => Part?.Body; + public IBodyManagerComponent? Body => Part?.Body; - public BodyPart? Part + public IBodyPart? Part { get => _part; set @@ -202,7 +202,7 @@ namespace Content.Server.Body.Mechanisms } } - public void RemovedFromBody(BodyManagerComponent old) + public void RemovedFromBody(IBodyManagerComponent old) { foreach (var behavior in Behaviors) { @@ -211,7 +211,7 @@ namespace Content.Server.Body.Mechanisms } /// - /// This method is called by before + /// This method is called by before /// is called. /// public void PreMetabolism(float frameTime) @@ -223,7 +223,7 @@ namespace Content.Server.Body.Mechanisms } /// - /// This method is called by after + /// This method is called by after /// is called. /// public void PostMetabolism(float frameTime) diff --git a/Content.Server/Body/Surgery/BiologicalSurgeryData.cs b/Content.Server/Body/Surgery/BiologicalSurgeryData.cs index 37fbb57b29..f1bff3a145 100644 --- a/Content.Server/Body/Surgery/BiologicalSurgeryData.cs +++ b/Content.Server/Body/Surgery/BiologicalSurgeryData.cs @@ -23,7 +23,7 @@ namespace Content.Server.Body.Surgery private bool _skinRetracted; private bool _vesselsClamped; - public BiologicalSurgeryData(BodyPart parent) : base(parent) { } + public BiologicalSurgeryData(IBodyPart parent) : base(parent) { } protected override SurgeryAction? GetSurgeryStep(SurgeryType toolType) { @@ -123,7 +123,7 @@ namespace Content.Server.Body.Surgery return _skinOpened && _vesselsClamped && _skinRetracted; } - public override bool CanAttachBodyPart(BodyPart part) + public override bool CanAttachBodyPart(IBodyPart part) { return true; // TODO: if a bodypart is disconnected, you should have to do some surgery to allow another bodypart to be attached. @@ -216,8 +216,7 @@ namespace Content.Server.Body.Surgery } } - private void RemoveOrganSurgeryCallback(Mechanism target, IBodyPartContainer container, - ISurgeon surgeon, + private void RemoveOrganSurgeryCallback(Mechanism target, IBodyPartContainer container, ISurgeon surgeon, IEntity performer) { if (target == null || !Parent.Mechanisms.Contains(target)) diff --git a/Content.Server/Body/Surgery/SurgeryData.cs b/Content.Server/Body/Surgery/SurgeryData.cs index a4274d0042..48b7d265da 100644 --- a/Content.Server/Body/Surgery/SurgeryData.cs +++ b/Content.Server/Body/Surgery/SurgeryData.cs @@ -6,7 +6,7 @@ using Robust.Shared.Interfaces.GameObjects; namespace Content.Server.Body.Surgery { /// - /// This data class represents the state of a in regards to everything surgery related - + /// This data class represents the state of a in regards to everything surgery related - /// whether there's an incision on it, whether the bone is broken, etc. /// public abstract class SurgeryData @@ -14,40 +14,40 @@ namespace Content.Server.Body.Surgery protected delegate void SurgeryAction(IBodyPartContainer container, ISurgeon surgeon, IEntity performer); /// - /// The this surgeryData is attached to. + /// The this surgeryData is attached to. /// The class should not exist without a - /// that it represents, and will throw errors if it + /// that it represents, and will throw errors if it /// is null. /// - protected readonly BodyPart Parent; + protected readonly IBodyPart Parent; - protected SurgeryData(BodyPart parent) + protected SurgeryData(IBodyPart parent) { Parent = parent; } /// - /// The of the parent . + /// The of the parent . /// protected BodyPartType ParentType => Parent.PartType; /// - /// Returns the description of this current to be shown + /// Returns the description of this current to be shown /// upon observing the given entity. /// public abstract string GetDescription(IEntity target); /// /// Returns whether a can be installed into the - /// this represents. + /// this represents. /// public abstract bool CanInstallMechanism(Mechanism mechanism); /// - /// Returns whether the given can be connected to the - /// this represents. + /// Returns whether the given can be connected to the + /// this represents. /// - public abstract bool CanAttachBodyPart(BodyPart part); + public abstract bool CanAttachBodyPart(IBodyPart part); /// /// Gets the delegate corresponding to the surgery step using the given diff --git a/Content.Server/GameObjects/Components/Body/BodyManagerComponent.cs b/Content.Server/GameObjects/Components/Body/BodyManagerComponent.cs index e5154a9d93..c7e658e2b9 100644 --- a/Content.Server/GameObjects/Components/Body/BodyManagerComponent.cs +++ b/Content.Server/GameObjects/Components/Body/BodyManagerComponent.cs @@ -8,7 +8,6 @@ using Content.Server.Body.Network; using Content.Server.GameObjects.Components.Metabolism; using Content.Server.GameObjects.EntitySystems; using Content.Server.Interfaces.GameObjects.Components.Interaction; -using Content.Server.Mobs; using Content.Server.Observer; using Content.Shared.Body.Part; using Content.Shared.Body.Part.Properties.Movement; @@ -34,13 +33,14 @@ using Robust.Shared.ViewVariables; namespace Content.Server.GameObjects.Components.Body { /// - /// Component representing a collection of + /// Component representing a collection of /// attached to each other. /// [RegisterComponent] [ComponentReference(typeof(IDamageableComponent))] [ComponentReference(typeof(ISharedBodyManagerComponent))] - public class BodyManagerComponent : SharedBodyManagerComponent, IBodyPartContainer, IRelayMoveInput + [ComponentReference(typeof(IBodyManagerComponent))] + public class BodyManagerComponent : SharedBodyManagerComponent, IBodyPartContainer, IRelayMoveInput, IBodyManagerComponent { [Dependency] private readonly IPrototypeManager _prototypeManager = default!; [Dependency] private readonly IBodyNetworkFactory _bodyNetworkFactory = default!; @@ -48,38 +48,28 @@ namespace Content.Server.GameObjects.Components.Body [ViewVariables] private string _presetName = default!; - private readonly Dictionary _parts = new Dictionary(); + private readonly Dictionary _parts = new Dictionary(); [ViewVariables] private readonly Dictionary _networks = new Dictionary(); /// - /// All with + /// All with /// that are currently affecting move speed, mapped to how big that leg /// they're on is. /// [ViewVariables] - private readonly Dictionary _activeLegs = new Dictionary(); + private readonly Dictionary _activeLegs = new Dictionary(); + + [ViewVariables] public BodyTemplate Template { get; private set; } = default!; + + [ViewVariables] public BodyPreset Preset { get; private set; } = default!; /// - /// The that this - /// is adhering to. - /// - [ViewVariables] - public BodyTemplate Template { get; private set; } = default!; - - /// - /// The that this - /// is adhering to. - /// - [ViewVariables] - public BodyPreset Preset { get; private set; } = default!; - - /// - /// Maps slot name to the + /// Maps slot name to the /// object filling it (if there is one). /// [ViewVariables] - public IReadOnlyDictionary Parts => _parts; + public IReadOnlyDictionary Parts => _parts; /// /// List of all slots in this body, taken from the keys of @@ -171,7 +161,7 @@ namespace Content.Server.GameObjects.Components.Body // Add a new BodyPart with the BodyPartPrototype as a baseline to our // BodyComponent. var addedPart = new BodyPart(newPartData); - AddBodyPart(addedPart, slotName); + TryAddPart(slotName, addedPart); } OnBodyChanged(); // TODO: Duplicate code @@ -180,8 +170,8 @@ namespace Content.Server.GameObjects.Components.Body /// /// Changes the current to the given /// . - /// Attempts to keep previous if there is a slot for - /// them in both . + /// Attempts to keep previous if there is a + /// slot for them in both . /// public void ChangeBodyTemplate(BodyTemplatePrototype newTemplate) { @@ -280,10 +270,10 @@ namespace Content.Server.GameObjects.Components.Body foreach (var (key, value) in _activeLegs) { - if (key.TryGetProperty(out LegProperty legProperty)) + if (key.TryGetProperty(out LegProperty? leg)) { // Speed of a leg = base speed * (1+log1024(leg length)) - speedSum += legProperty.Speed * (1 + (float) Math.Log(value, 1024.0)); + speedSum += leg.Speed * (1 + (float) Math.Log(value, 1024.0)); } } @@ -321,11 +311,11 @@ namespace Content.Server.GameObjects.Components.Body /// /// Recursively searches for if is connected to /// the center. Not efficient (O(n^2)), but most bodies don't have a ton - /// of s. + /// of s. /// /// The body part to find the center for. /// True if it is connected to the center, false otherwise. - private bool ConnectedToCenterPart(BodyPart target) + private bool ConnectedToCenterPart(IBodyPart target) { var searchedSlots = new List(); @@ -335,9 +325,7 @@ namespace Content.Server.GameObjects.Components.Body private bool ConnectedToCenterPartRecursion(ICollection searchedSlots, string slotName) { - TryGetBodyPart(slotName, out var part); - - if (part == null) + if (!TryGetBodyPart(slotName, out var part)) { return false; } @@ -367,14 +355,14 @@ namespace Content.Server.GameObjects.Components.Body } /// - /// Finds the central , if any, of this body based on + /// Finds the central , if any, of this body based on /// the . For humans, this is the torso. /// /// The if one exists, null otherwise. - private BodyPart? GetCenterBodyPart() + private IBodyPart? GetCenterBodyPart() { Parts.TryGetValue(Template.CenterSlot, out var center); - return center!; + return center; } /// @@ -387,29 +375,31 @@ namespace Content.Server.GameObjects.Components.Body } /// - /// Finds the in the given if + /// Finds the in the given if /// one exists. /// /// The slot to search in. /// The body part in that slot, if any. /// True if found, false otherwise. - private bool TryGetBodyPart(string slotName, [NotNullWhen(true)] out BodyPart result) + private bool TryGetBodyPart(string slotName, [NotNullWhen(true)] out IBodyPart? result) { return Parts.TryGetValue(slotName, out result!); } /// - /// Finds the slotName that the given resides in. + /// Finds the slotName that the given resides in. /// - /// The to find the slot for. + /// The to find the slot for. /// The slot found, if any. /// True if a slot was found, false otherwise - private bool TryGetSlotName(BodyPart part, [NotNullWhen(true)] out string result) + private bool TryGetSlotName(IBodyPart part, [NotNullWhen(true)] out string result) { // We enforce that there is only one of each value in the dictionary, // so we can iterate through the dictionary values to get the key from there. - result = Parts.FirstOrDefault(x => x.Value == part).Key; - return result != null; + var pair = Parts.FirstOrDefault(x => x.Value == part); + result = pair.Key; + + return !pair.Equals(default); } /// @@ -448,7 +438,7 @@ namespace Content.Server.GameObjects.Components.Body /// True if successful, false if there was an error or no connected /// s were found. /// - public bool TryGetBodyPartConnections(string slotName, [NotNullWhen(true)] out List result) + public bool TryGetBodyPartConnections(string slotName, [NotNullWhen(true)] out List result) { result = null!; @@ -457,7 +447,7 @@ namespace Content.Server.GameObjects.Components.Body return false; } - var toReturn = new List(); + var toReturn = new List(); foreach (var connection in connections) { if (TryGetBodyPart(connection, out var bodyPartResult)) @@ -481,9 +471,9 @@ namespace Content.Server.GameObjects.Components.Body /// /// /// True if successful, false if there was an error or no connected - /// s were found. + /// s were found. /// - private bool TryGetBodyPartConnections(BodyPart part, [NotNullWhen(true)] out List result) + private bool TryGetBodyPartConnections(IBodyPart part, [NotNullWhen(true)] out List result) { result = null!; @@ -492,11 +482,11 @@ namespace Content.Server.GameObjects.Components.Body } /// - /// Grabs all of the given type in this body. + /// Grabs all of the given type in this body. /// - public List GetBodyPartsOfType(BodyPartType type) + public List GetBodyPartsOfType(BodyPartType type) { - var toReturn = new List(); + var toReturn = new List(); foreach (var part in Parts.Values) { @@ -509,32 +499,6 @@ namespace Content.Server.GameObjects.Components.Body return toReturn; } - /// - /// Installs the given into the given slot. - /// - /// True if successful, false otherwise. - public bool InstallBodyPart(BodyPart part, string slotName) - { - DebugTools.AssertNotNull(part); - - // Make sure the given slot exists - if (!SlotExists(slotName)) - { - return false; - } - - // And that nothing is in it - if (TryGetBodyPart(slotName, out _)) - { - return false; - } - - AddBodyPart(part, slotName); // TODO: Sort this duplicate out - OnBodyChanged(); - - return true; - } - /// /// Installs the given into the /// given slot, deleting the afterwards. @@ -544,7 +508,7 @@ namespace Content.Server.GameObjects.Components.Body { DebugTools.AssertNotNull(part); - if (!InstallBodyPart(part.ContainedBodyPart, slotName)) + if (!TryAddPart(slotName, part.ContainedBodyPart)) { return false; } @@ -554,15 +518,15 @@ namespace Content.Server.GameObjects.Components.Body } /// - /// Disconnects the given reference, potentially - /// dropping other BodyParts if they were hanging + /// Disconnects the given reference, potentially + /// dropping other BodyParts if they were hanging /// off of it. /// /// /// The representing the dropped - /// , or null if none was dropped. + /// , or null if none was dropped. /// - public IEntity? DropPart(BodyPart part) + public IEntity? DropPart(IBodyPart part) { DebugTools.AssertNotNull(part); @@ -596,11 +560,11 @@ namespace Content.Server.GameObjects.Components.Body } /// - /// Disconnects the given reference, potentially - /// dropping other BodyParts if they were hanging + /// Disconnects the given reference, potentially + /// dropping other BodyParts if they were hanging /// off of it. /// - public void DisconnectBodyPart(BodyPart part, bool dropEntity) + public void DisconnectBodyPart(IBodyPart part, bool dropEntity) { DebugTools.AssertNotNull(part); @@ -640,12 +604,7 @@ namespace Content.Server.GameObjects.Components.Body { DebugTools.AssertNotNull(slotName); - if (!TryGetBodyPart(slotName, out var part)) - { - return; - } - - if (part == null) + if (!HasPart(slotName)) { return; } @@ -666,27 +625,47 @@ namespace Content.Server.GameObjects.Components.Body OnBodyChanged(); } - private void AddBodyPart(BodyPart part, string slotName) + public bool TryAddPart(string slot, IBodyPart part, bool force = false) { DebugTools.AssertNotNull(part); - DebugTools.AssertNotNull(slotName); + DebugTools.AssertNotNull(slot); - _parts.Add(slotName, part); + // Make sure the given slot exists + if (!force) + { + if (!SlotExists(slot)) + { + return false; + } + + // And that nothing is in it + if (!_parts.TryAdd(slot, part)) + { + return false; + } + } + else + { + _parts[slot] = part; + } part.Body = this; - var argsAdded = new BodyPartAddedEventArgs(part, slotName); + var argsAdded = new BodyPartAddedEventArgs(part, slot); foreach (var component in Owner.GetAllComponents().ToArray()) { component.BodyPartAdded(argsAdded); } - if (!Template.Layers.TryGetValue(slotName, out var partMap) || + // TODO: Sort this duplicate out + OnBodyChanged(); + + if (!Template.Layers.TryGetValue(slot, out var partMap) || !_reflectionManager.TryParseEnumReference(partMap, out var partEnum)) { Logger.Warning($"Template {Template.Name} has an invalid RSI map key {partMap} for body part {part.Name}."); - return; + return false; } part.RSIMap = partEnum; @@ -712,6 +691,13 @@ namespace Content.Server.GameObjects.Components.Body SendNetworkMessage(mechanismMessage); } + + return true; + } + + public bool HasPart(string slot) + { + return _parts.ContainsKey(slot); } /// @@ -720,7 +706,7 @@ namespace Content.Server.GameObjects.Components.Body /// /// The slot to remove it from. /// - /// Whether or not to drop the removed . + /// Whether or not to drop the removed . /// /// private bool RemoveBodyPart(string slotName, bool drop) @@ -780,17 +766,20 @@ namespace Content.Server.GameObjects.Components.Body /// The part to remove from this body. /// The slot that the part was in, if any. /// True if was removed, false otherwise. - private bool RemoveBodyPart(BodyPart part, [NotNullWhen(true)] out string slotName) + private bool RemoveBodyPart(IBodyPart part, [NotNullWhen(true)] out string? slotName) { DebugTools.AssertNotNull(part); - slotName = _parts.FirstOrDefault(pair => pair.Value == part).Key; + var pair = _parts.FirstOrDefault(kvPair => kvPair.Value == part); - if (slotName == null) + if (pair.Equals(default)) { + slotName = null; return false; } + slotName = pair.Key; + return RemoveBodyPart(slotName, false); } @@ -804,13 +793,13 @@ namespace Content.Server.GameObjects.Components.Body if (_networks.ContainsKey(network.GetType())) { - return false; + return true; } _networks.Add(network.GetType(), network); network.OnAdd(Owner); - return true; + return false; } /// @@ -844,62 +833,21 @@ namespace Content.Server.GameObjects.Components.Body return EnsureNetwork(typeof(T)); } - /// - /// Attempts to add a of the given name to - /// this body. - /// - /// - /// True if successful, false if there was an error - /// (such as passing in an invalid type or a network of that type already - /// existing). - /// - private bool EnsureNetwork(string networkName) + public void RemoveNetwork(Type networkType) { - DebugTools.AssertNotNull(networkName); + DebugTools.AssertNotNull(networkType); - var network = _bodyNetworkFactory.GetNetwork(networkName); - return EnsureNetwork(network); - } - - /// - /// Removes the of the given type in this body, - /// if there is one. - /// - /// The type of the network to remove. - public void RemoveNetwork(Type type) - { - DebugTools.AssertNotNull(type); - - if (_networks.Remove(type, out var network)) + if (_networks.Remove(networkType, out var network)) { network.OnRemove(); } } - /// - /// Removes the of the given type in this body, - /// if one exists. - /// - /// The type of the network to remove. public void RemoveNetwork() where T : BodyNetwork { RemoveNetwork(typeof(T)); } - /// - /// Removes the with the given name in this body, - /// if there is one. - /// - private void RemoveNetwork(string networkName) - { - var type = _bodyNetworkFactory.GetNetwork(networkName).GetType(); - - if (_networks.Remove(type, out var network)) - { - network.OnRemove(); - } - } - /// /// Attempts to get the of the given type in this body. /// @@ -924,7 +872,7 @@ namespace Content.Server.GameObjects.Components.Body /// a foot node from the given node. It can /// only search through BodyParts with . /// - private static float DistanceToNearestFoot(BodyManagerComponent body, BodyPart source) + private static float DistanceToNearestFoot(BodyManagerComponent body, IBodyPart source) { if (source.HasProperty() && source.TryGetProperty(out var property)) { @@ -934,7 +882,8 @@ namespace Content.Server.GameObjects.Components.Body return LookForFootRecursion(body, source, new List()); } - private static float LookForFootRecursion(BodyManagerComponent body, BodyPart current, + // TODO: Make this not static and not keep me up at night + private static float LookForFootRecursion(BodyManagerComponent body, IBodyPart current, ICollection searchedParts) { if (!current.TryGetProperty(out var extProperty)) diff --git a/Content.Server/GameObjects/Components/Body/BodyScannerComponent.cs b/Content.Server/GameObjects/Components/Body/BodyScannerComponent.cs index dfc1cb5198..343d4cff5e 100644 --- a/Content.Server/GameObjects/Components/Body/BodyScannerComponent.cs +++ b/Content.Server/GameObjects/Components/Body/BodyScannerComponent.cs @@ -56,7 +56,7 @@ namespace Content.Server.GameObjects.Components.Body /// /// Copy BodyTemplate and BodyPart data into a common data class that the client can read. /// - private BodyScannerInterfaceState InterfaceState(BodyTemplate template, IReadOnlyDictionary bodyParts) + private BodyScannerInterfaceState InterfaceState(BodyTemplate template, IReadOnlyDictionary bodyParts) { var partsData = new Dictionary(); diff --git a/Content.Server/GameObjects/Components/Body/DroppedBodyPartComponent.cs b/Content.Server/GameObjects/Components/Body/DroppedBodyPartComponent.cs index f7fb29c6e7..d917459671 100644 --- a/Content.Server/GameObjects/Components/Body/DroppedBodyPartComponent.cs +++ b/Content.Server/GameObjects/Components/Body/DroppedBodyPartComponent.cs @@ -101,7 +101,7 @@ namespace Content.Server.GameObjects.Components.Body foreach (var connectedPart in parts) { - if (!connectedPart.CanAttachBodyPart(ContainedBodyPart)) + if (!connectedPart.CanAttachPart(ContainedBodyPart)) { continue; } diff --git a/Content.Server/GameObjects/Components/Body/IBodyManagerComponent.cs b/Content.Server/GameObjects/Components/Body/IBodyManagerComponent.cs new file mode 100644 index 0000000000..26414eefa4 --- /dev/null +++ b/Content.Server/GameObjects/Components/Body/IBodyManagerComponent.cs @@ -0,0 +1,67 @@ +using System; +using Content.Server.Body; +using Content.Server.Body.Network; +using Content.Shared.GameObjects.Components.Body; + +namespace Content.Server.GameObjects.Components.Body +{ + // TODO: Merge with ISharedBodyManagerComponent + public interface IBodyManagerComponent : ISharedBodyManagerComponent + { + /// + /// The that this + /// is adhering to. + /// + public BodyTemplate Template { get; } + + /// + /// The that this + /// is adhering to. + /// + public BodyPreset Preset { get; } + + /// + /// Installs the given into the given slot. + /// + /// True if successful, false otherwise. + bool TryAddPart(string slot, IBodyPart part, bool force = false); + + bool HasPart(string slot); + + /// + /// Ensures that this body has the specified network. + /// + /// The type of the network to ensure. + /// + /// True if the network already existed, false if it had to be created. + /// + bool EnsureNetwork() where T : BodyNetwork; + + /// + /// Ensures that this body has the specified network. + /// + /// The type of the network to ensure. + /// + /// True if the network already existed, false if it had to be created. + /// + bool EnsureNetwork(Type networkType); + + /// + /// Removes the of the given type in this body, + /// if one exists. + /// + /// The type of the network to remove. + void RemoveNetwork() where T : BodyNetwork; + + /// + /// Removes the of the given type in this body, + /// if there is one. + /// + /// The type of the network to remove. + void RemoveNetwork(Type networkType); + + void PreMetabolism(float frameTime); + + void PostMetabolism(float frameTime); + } +} diff --git a/Content.Server/GameObjects/Components/Medical/HealingComponent.cs b/Content.Server/GameObjects/Components/Medical/HealingComponent.cs index 0b751e24c4..8768acc071 100644 --- a/Content.Server/GameObjects/Components/Medical/HealingComponent.cs +++ b/Content.Server/GameObjects/Components/Medical/HealingComponent.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using Content.Server.GameObjects.Components.Body; using Content.Server.GameObjects.Components.Stack; using Content.Shared.Damage; using Content.Shared.GameObjects.Components.Body; diff --git a/Content.Server/Interfaces/GameObjects/Components/Interaction/IBodyPartAdded.cs b/Content.Server/Interfaces/GameObjects/Components/Interaction/IBodyPartAdded.cs index f261d6edc5..d18fe596ee 100644 --- a/Content.Server/Interfaces/GameObjects/Components/Interaction/IBodyPartAdded.cs +++ b/Content.Server/Interfaces/GameObjects/Components/Interaction/IBodyPartAdded.cs @@ -14,13 +14,13 @@ namespace Content.Server.Interfaces.GameObjects.Components.Interaction public class BodyPartAddedEventArgs : EventArgs { - public BodyPartAddedEventArgs(BodyPart part, string slotName) + public BodyPartAddedEventArgs(IBodyPart part, string slotName) { Part = part; SlotName = slotName; } - public BodyPart Part { get; } + public IBodyPart Part { get; } public string SlotName { get; } } @@ -36,13 +36,13 @@ namespace Content.Server.Interfaces.GameObjects.Components.Interaction public class BodyPartRemovedEventArgs : EventArgs { - public BodyPartRemovedEventArgs(BodyPart part, string slotName) + public BodyPartRemovedEventArgs(IBodyPart part, string slotName) { Part = part; SlotName = slotName; } - public BodyPart Part { get; } + public IBodyPart Part { get; } public string SlotName { get; } } From 9ec3ddf368b17c3597586d94a8a627fcc6590ef4 Mon Sep 17 00:00:00 2001 From: DrSmugleaf Date: Sun, 30 Aug 2020 11:28:46 +0200 Subject: [PATCH 034/103] Add popup message extension for players in range except for the source (#1962) --- Content.Server/Chat/ChatCommands.cs | 26 ++++------- .../Interactable/WelderComponent.cs | 43 +++++++++---------- .../Components/Kitchen/MicrowaveComponent.cs | 25 +++-------- .../Components/Movement/ClimbableComponent.cs | 31 +++++-------- Content.Server/Utility/NotifyExtensions.cs | 37 ++++++++++++++++ .../Interfaces/ISharedNotifyManager.cs | 17 ++++++++ 6 files changed, 100 insertions(+), 79 deletions(-) create mode 100644 Content.Server/Utility/NotifyExtensions.cs diff --git a/Content.Server/Chat/ChatCommands.cs b/Content.Server/Chat/ChatCommands.cs index 9450fa45fc..a309a344f0 100644 --- a/Content.Server/Chat/ChatCommands.cs +++ b/Content.Server/Chat/ChatCommands.cs @@ -8,6 +8,7 @@ using Content.Server.Interfaces.GameObjects; using Content.Server.Interfaces; using Content.Server.Observer; using Content.Server.Players; +using Content.Server.Utility; using Content.Shared.GameObjects.Components.Damage; using Content.Shared.Interfaces; using Robust.Server.Interfaces.Console; @@ -190,30 +191,19 @@ namespace Content.Server.Chat } } } + // Default suicide, bite your tongue - PopupMessageOtherClientsInRange(owner, Loc.GetString("{0:theName} is attempting to bite {0:their} own tongue!", owner), 15); - _notifyManager.PopupMessage(owner, owner, Loc.GetString("You attempt to bite your own tongue!")); + var othersMessage = Loc.GetString("{0:theName} is attempting to bite {0:their} own tongue!", owner); + owner.PopupMessageOtherClients(othersMessage); + + var selfMessage = Loc.GetString("You attempt to bite your own tongue!"); + owner.PopupMessage(selfMessage); + dmgComponent.ChangeDamage(DamageType.Piercing, 500, true, owner); // Prevent the player from returning to the body. Yes, this is an ugly hack. var ghost = new Ghost(){CanReturn = false}; ghost.Execute(shell, player, Array.Empty()); } - private void PopupMessageOtherClientsInRange(IEntity source, string message, int maxReceiveDistance) - { - var viewers = _playerManager.GetPlayersInRange(source.Transform.GridPosition, maxReceiveDistance); - - foreach (var viewer in viewers) - { - var viewerEntity = viewer.AttachedEntity; - - if (viewerEntity == null || source == viewerEntity) - { - continue; - } - - source.PopupMessage(viewer.AttachedEntity, message); - } - } } } diff --git a/Content.Server/GameObjects/Components/Interactable/WelderComponent.cs b/Content.Server/GameObjects/Components/Interactable/WelderComponent.cs index 5a5228cdbd..8987084e21 100644 --- a/Content.Server/GameObjects/Components/Interactable/WelderComponent.cs +++ b/Content.Server/GameObjects/Components/Interactable/WelderComponent.cs @@ -8,7 +8,7 @@ using Content.Server.GameObjects.EntitySystems; using Content.Server.Interfaces; using Content.Server.Interfaces.Chat; using Content.Server.Interfaces.GameObjects; -using Content.Server.GameObjects.EntitySystems.DoAfter; +using Content.Server.Utility; using Content.Shared.Chemistry; using Content.Shared.GameObjects; using Content.Shared.GameObjects.Components.Interactable; @@ -17,7 +17,6 @@ using Content.Shared.Interfaces; using Robust.Server.GameObjects; using Robust.Server.Interfaces.Player; using Robust.Shared.GameObjects; -using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.IoC; using Robust.Shared.Localization; @@ -258,16 +257,31 @@ namespace Content.Server.GameObjects.Components.Interactable public SuicideKind Suicide(IEntity victim, IChatManager chat) { + string othersMessage; + string selfMessage; + if (TryWeld(5, victim, silent: true)) { PlaySoundCollection(WeldSoundCollection); - PopupMessageOtherClientsInRange(victim, Loc.GetString("{0:theName} welds {0:their} every orifice closed! It looks like {0:theyre} trying to commit suicide!", victim), 15); - _notifyManager.PopupMessage(victim, victim, Loc.GetString("You weld your every orifice closed!")); + + othersMessage = + Loc.GetString( + "{0:theName} welds {0:their} every orifice closed! It looks like {0:theyre} trying to commit suicide!", + victim); + victim.PopupMessageOtherClients(othersMessage); + + selfMessage = Loc.GetString("You weld your every orifice closed!"); + victim.PopupMessage(selfMessage); + return SuicideKind.Heat; } - PopupMessageOtherClientsInRange(victim, Loc.GetString("{0:theName} bashes themselves with the unlit welding torch!", victim), 15); - _notifyManager.PopupMessage(victim, victim, Loc.GetString("You bash yourself with the unlit welding torch!")); + othersMessage = Loc.GetString("{0:theName} bashes themselves with the unlit welding torch!", victim); + victim.PopupMessageOtherClients(othersMessage); + + selfMessage = Loc.GetString("You bash yourself with the unlit welding torch!"); + victim.PopupMessage(selfMessage); + return SuicideKind.Blunt; } @@ -275,22 +289,5 @@ namespace Content.Server.GameObjects.Components.Interactable { Dirty(); } - - private void PopupMessageOtherClientsInRange(IEntity source, string message, int maxReceiveDistance) - { - var viewers = _playerManager.GetPlayersInRange(source.Transform.GridPosition, maxReceiveDistance); - - foreach (var viewer in viewers) - { - var viewerEntity = viewer.AttachedEntity; - - if (viewerEntity == null || source == viewerEntity) - { - continue; - } - - source.PopupMessage(viewer.AttachedEntity, message); - } - } } } diff --git a/Content.Server/GameObjects/Components/Kitchen/MicrowaveComponent.cs b/Content.Server/GameObjects/Components/Kitchen/MicrowaveComponent.cs index e3ba2687b3..c7ec8a84f1 100644 --- a/Content.Server/GameObjects/Components/Kitchen/MicrowaveComponent.cs +++ b/Content.Server/GameObjects/Components/Kitchen/MicrowaveComponent.cs @@ -500,29 +500,18 @@ namespace Content.Server.GameObjects.Components.Kitchen headCount++; } } - PopupMessageOtherClientsInRange(victim, Loc.GetString("{0:theName} is trying to cook {0:their} head!", victim), 15); - _notifyManager.PopupMessage(victim, victim, Loc.GetString("You cook your head!")); + + var othersMessage = Loc.GetString("{0:theName} is trying to cook {0:their} head!", victim); + victim.PopupMessageOtherClients(othersMessage); + + var selfMessage = Loc.GetString("You cook your head!"); + victim.PopupMessage(selfMessage); + _currentCookTimerTime = 10; ClickSound(); _uiDirty = true; wzhzhzh(); return SuicideKind.Heat; } - private void PopupMessageOtherClientsInRange(IEntity source, string message, int maxReceiveDistance) - { - var viewers = _playerManager.GetPlayersInRange(source.Transform.GridPosition, maxReceiveDistance); - - foreach (var viewer in viewers) - { - var viewerEntity = viewer.AttachedEntity; - - if (viewerEntity == null || source == viewerEntity) - { - continue; - } - - source.PopupMessage(viewer.AttachedEntity, message); - } - } } } diff --git a/Content.Server/GameObjects/Components/Movement/ClimbableComponent.cs b/Content.Server/GameObjects/Components/Movement/ClimbableComponent.cs index f04b50cff2..2b2cf18bbd 100644 --- a/Content.Server/GameObjects/Components/Movement/ClimbableComponent.cs +++ b/Content.Server/GameObjects/Components/Movement/ClimbableComponent.cs @@ -17,6 +17,7 @@ using Robust.Shared.Maths; using Robust.Shared.Serialization; using Robust.Shared.ViewVariables; using System; +using Content.Server.Utility; namespace Content.Server.GameObjects.Components.Movement { @@ -207,8 +208,12 @@ namespace Content.Server.GameObjects.Components.Movement // we may potentially need additional logic since we're forcing a player onto a climbable // there's also the cases where the user might collide with the person they are forcing onto the climbable that i haven't accounted for - PopupMessageOtherClientsInRange(user, Loc.GetString("{0:theName} forces {1:theName} onto {2:theName}!", user, entityToMove, Owner), 15); - user.PopupMessage(user, Loc.GetString("You force {0:theName} onto {1:theName}!", entityToMove, Owner)); + var othersMessage = Loc.GetString("{0:theName} forces {1:theName} onto {2:theName}!", user, + entityToMove, Owner); + user.PopupMessageOtherClients(othersMessage); + + var selfMessage = Loc.GetString("You force {0:theName} onto {1:theName}!", entityToMove, Owner); + user.PopupMessage(selfMessage); } } @@ -243,25 +248,11 @@ namespace Content.Server.GameObjects.Components.Movement climbMode.TryMoveTo(user.Transform.WorldPosition, endPoint); - PopupMessageOtherClientsInRange(user, Loc.GetString("{0:theName} jumps onto {1:theName}!", user, Owner), 15); - user.PopupMessage(user, Loc.GetString("You jump onto {0:theName}!", Owner)); - } - } + var othersMessage = Loc.GetString("{0:theName} jumps onto {1:theName}!", user, Owner); + user.PopupMessageOtherClients(othersMessage); - private void PopupMessageOtherClientsInRange(IEntity source, string message, int maxReceiveDistance) - { - var viewers = _playerManager.GetPlayersInRange(source.Transform.GridPosition, maxReceiveDistance); - - foreach (var viewer in viewers) - { - var viewerEntity = viewer.AttachedEntity; - - if (viewerEntity == null || source == viewerEntity) - { - continue; - } - - source.PopupMessage(viewer.AttachedEntity, message); + var selfMessage = Loc.GetString("You jump onto {0:theName}!", Owner); + user.PopupMessage(selfMessage); } } diff --git a/Content.Server/Utility/NotifyExtensions.cs b/Content.Server/Utility/NotifyExtensions.cs new file mode 100644 index 0000000000..c617c25cbd --- /dev/null +++ b/Content.Server/Utility/NotifyExtensions.cs @@ -0,0 +1,37 @@ +using Content.Shared.Interfaces; +using Robust.Server.Interfaces.Player; +using Robust.Shared.Interfaces.GameObjects; +using Robust.Shared.IoC; + +namespace Content.Server.Utility +{ + public static class NotifyExtensions + { + /// + /// Pops up a message for every player around to see, + /// except for itself. + /// + /// The entity on which to popup the message. + /// The message to show. + /// + /// The range in which to search for players, defaulting to one screen. + /// + public static void PopupMessageOtherClients(this IEntity source, string message, int range = 15) + { + var playerManager = IoCManager.Resolve(); + var viewers = playerManager.GetPlayersInRange(source.Transform.GridPosition, range); + + foreach (var viewer in viewers) + { + var viewerEntity = viewer.AttachedEntity; + + if (viewerEntity == null || source == viewerEntity) + { + continue; + } + + source.PopupMessage(viewer.AttachedEntity, message); + } + } + } +} diff --git a/Content.Shared/Interfaces/ISharedNotifyManager.cs b/Content.Shared/Interfaces/ISharedNotifyManager.cs index 2dde0e7b50..c7d6adcd4f 100644 --- a/Content.Shared/Interfaces/ISharedNotifyManager.cs +++ b/Content.Shared/Interfaces/ISharedNotifyManager.cs @@ -35,9 +35,26 @@ namespace Content.Shared.Interfaces public static class NotifyManagerExt { + /// + /// Pops up a message at the location of for + /// alone to see. + /// + /// The entity above which the message will appear. + /// The entity that will see the message. + /// The message to show. public static void PopupMessage(this IEntity source, IEntity viewer, string message) { IoCManager.Resolve().PopupMessage(source, viewer, message); } + + /// + /// Pops up a message at the given entity's location for it alone to see. + /// + /// The entity that will see the message. + /// The message to be seen. + public static void PopupMessage(this IEntity viewer, string message) + { + viewer.PopupMessage(viewer, message); + } } } From 9d6c394f6bbf04b9f1a7a55d58f94840a21ba9d5 Mon Sep 17 00:00:00 2001 From: DrSmugleaf Date: Sun, 30 Aug 2020 11:37:06 +0200 Subject: [PATCH 035/103] Refactor InRangeUnobstructed and add extension methods (#1925) * Sort out InRangeUnobstructed and add extension methods * Rename client RangeChecks to RangeExtensions * Add container extension methods and test * Add missing component methods Component to container Grid coordinates to container Map coordinates to container Local player to container * Actually use the field * Merge fixes * Add popup argument to local player extension methods * Reduce code repetition for client range extensions --- .../EntitySystems/DragDropSystem.cs | 13 +- Content.Client/Instruments/InstrumentMenu.cs | 8 +- Content.Client/State/GameScreenBase.cs | 11 +- Content.Client/Utility/RangeExtensions.cs | 93 +++ .../Tests/Interaction/InRangeUnobstructed.cs | 159 ++++++ .../Inventory/CloseStorageOperator.cs | 3 +- .../Inventory/InteractWithEntityOperator.cs | 3 +- .../Inventory/OpenStorageOperator.cs | 3 +- .../Inventory/PickupEntityOperator.cs | 3 +- .../ActionBlocking/CuffableComponent.cs | 26 +- .../ActionBlocking/HandcuffComponent.cs | 11 +- .../Components/Buckle/BuckleComponent.cs | 11 +- .../Components/Chemistry/InjectorComponent.cs | 4 +- .../Components/Chemistry/PillComponent.cs | 3 +- .../Components/Fluids/MopComponent.cs | 3 +- .../Interactable/TilePryingComponent.cs | 3 +- .../Items/FloorTileItemComponent.cs | 3 +- .../Components/Items/RCD/RCDComponent.cs | 3 +- .../Components/Items/Storage/ItemComponent.cs | 5 +- .../Items/Storage/ServerStorageComponent.cs | 5 +- .../Components/Medical/HealingComponent.cs | 15 +- .../Components/Movement/ClimbableComponent.cs | 20 +- .../Components/Nutrition/FoodComponent.cs | 3 +- .../Power/AME/AMEControllerComponent.cs | 35 +- .../Components/Power/WirePlacerComponent.cs | 3 +- .../Components/Strap/StrapComponent.cs | 8 +- .../Components/Utensil/UtensilComponent.cs | 3 +- .../Components/Weapon/FlashableComponent.cs | 4 +- .../GameObjects/Components/WiresComponent.cs | 3 +- .../AI/Steering/AiSteeringSystem.cs | 4 +- .../EntitySystems/Click/InteractionSystem.cs | 12 +- .../EntitySystems/ConstructionSystem.cs | 11 +- .../EntitySystems/DoAfter/DoAfterEventArgs.cs | 13 +- .../GameObjects/EntitySystems/HandsSystem.cs | 2 +- Content.Server/Utility/InteractionChecks.cs | 124 ---- .../EntitySystems/ExamineSystemShared.cs | 15 +- .../EntitySystems/SharedInteractionSystem.cs | 529 ++++++++++++++++-- .../GameObjects/Verbs/SharedVerbSystem.cs | 37 +- .../Utility/SharedRangeExtensions.cs | 432 ++++++++++++++ 39 files changed, 1287 insertions(+), 359 deletions(-) create mode 100644 Content.Client/Utility/RangeExtensions.cs create mode 100644 Content.IntegrationTests/Tests/Interaction/InRangeUnobstructed.cs delete mode 100644 Content.Server/Utility/InteractionChecks.cs create mode 100644 Content.Shared/Utility/SharedRangeExtensions.cs diff --git a/Content.Client/GameObjects/EntitySystems/DragDropSystem.cs b/Content.Client/GameObjects/EntitySystems/DragDropSystem.cs index 6458c6edbc..e42e8585d8 100644 --- a/Content.Client/GameObjects/EntitySystems/DragDropSystem.cs +++ b/Content.Client/GameObjects/EntitySystems/DragDropSystem.cs @@ -142,8 +142,7 @@ namespace Content.Client.GameObjects.EntitySystems if (_entityManager.TryGetEntity(args.EntityUid, out var entity)) { // check if the entity is reachable - if (_interactionSystem.InRangeUnobstructed(dragger.Transform.MapPosition, - entity.Transform.MapPosition, ignoredEnt: dragger) == false) + if (!_interactionSystem.InRangeUnobstructed(dragger, entity)) { return false; } @@ -193,8 +192,8 @@ namespace Content.Client.GameObjects.EntitySystems // tell the server we are dropping if we are over a valid drop target in range. // We don't use args.EntityUid here because drag interactions generally should // work even if there's something "on top" of the drop target - if (_interactionSystem.InRangeUnobstructed(_dragger.Transform.MapPosition, - args.Coordinates.ToMap(_mapManager), ignoredEnt: _dragger, ignoreInsideBlocker: true) == false) + if (!_interactionSystem.InRangeUnobstructed(_dragger, + args.Coordinates, ignoreInsideBlocker: true)) { CancelDrag(false, null); return false; @@ -288,8 +287,7 @@ namespace Content.Client.GameObjects.EntitySystems if (anyValidDraggable) { // highlight depending on whether its in or out of range - var inRange = _interactionSystem.InRangeUnobstructed(_dragger.Transform.MapPosition, - pvsEntity.Transform.MapPosition, ignoredEnt: _dragger); + var inRange = _interactionSystem.InRangeUnobstructed(_dragger, pvsEntity); inRangeSprite.PostShader = inRange ? _dropTargetInRangeShader : _dropTargetOutOfRangeShader; inRangeSprite.RenderOrder = EntityManager.CurrentTick.Value; highlightedSprites.Add(inRangeSprite); @@ -377,8 +375,7 @@ namespace Content.Client.GameObjects.EntitySystems return; } // still in range of the thing we are dragging? - if (_interactionSystem.InRangeUnobstructed(_dragger.Transform.MapPosition, - _draggedEntity.Transform.MapPosition, ignoredEnt: _dragger) == false) + if (!_interactionSystem.InRangeUnobstructed(_dragger, _draggedEntity)) { CancelDrag(false, null); return; diff --git a/Content.Client/Instruments/InstrumentMenu.cs b/Content.Client/Instruments/InstrumentMenu.cs index 166ecfaf04..731f80eb87 100644 --- a/Content.Client/Instruments/InstrumentMenu.cs +++ b/Content.Client/Instruments/InstrumentMenu.cs @@ -1,6 +1,7 @@ using Content.Client.GameObjects.Components.Instruments; using Content.Client.UserInterface.Stylesheets; -using Content.Shared.GameObjects.EntitySystems; +using Content.Client.Utility; +using Content.Shared.Utility; using Robust.Client.Audio.Midi; using Robust.Client.Graphics.Drawing; using Robust.Client.Interfaces.UserInterface; @@ -9,7 +10,6 @@ using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controls; using Robust.Client.UserInterface.CustomControls; using Robust.Shared.Containers; -using Robust.Shared.GameObjects.Systems; using Robust.Shared.IoC; using Robust.Shared.Localization; using Robust.Shared.Log; @@ -197,9 +197,7 @@ namespace Content.Client.Instruments || conMan.Owner != localPlayer.ControlledEntity))) return; // We check that we're in range unobstructed just in case. - if(!EntitySystem.Get() - .InRangeUnobstructed(localPlayer.ControlledEntity.Transform.MapPosition, - instrumentEnt.Transform.MapPosition, ignoredEnt:instrumentEnt)) return; + if (!localPlayer.InRangeUnobstructed(instrumentEnt)) return; if (!_midiManager.IsMidiFile(filename)) { diff --git a/Content.Client/State/GameScreenBase.cs b/Content.Client/State/GameScreenBase.cs index 8b88d26ebc..4caf83d86d 100644 --- a/Content.Client/State/GameScreenBase.cs +++ b/Content.Client/State/GameScreenBase.cs @@ -2,7 +2,8 @@ using System.Collections.Immutable; using System.Linq; using Content.Client.GameObjects.Components; -using Content.Shared.GameObjects.EntitySystems; +using Content.Client.Utility; +using Content.Shared.Utility; using Robust.Client.GameObjects.EntitySystems; using Robust.Client.Interfaces.GameObjects; using Robust.Client.Interfaces.Graphics.ClientEye; @@ -67,13 +68,7 @@ namespace Content.Client.State var inRange = false; if (localPlayer.ControlledEntity != null && entityToClick != null) { - var playerPos = localPlayer.ControlledEntity.Transform.MapPosition; - var entityPos = entityToClick.Transform.MapPosition; - inRange = EntitySystemManager.GetEntitySystem() - .InRangeUnobstructed(playerPos, entityPos, - predicate: entity => - entity == localPlayer.ControlledEntity || entity == entityToClick, - ignoreInsideBlocker: true); + inRange = localPlayer.InRangeUnobstructed(entityToClick, ignoreInsideBlocker: true); } InteractionOutlineComponent outline; diff --git a/Content.Client/Utility/RangeExtensions.cs b/Content.Client/Utility/RangeExtensions.cs new file mode 100644 index 0000000000..c69eb91f6c --- /dev/null +++ b/Content.Client/Utility/RangeExtensions.cs @@ -0,0 +1,93 @@ +using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.Physics; +using Robust.Client.Player; +using Robust.Shared.GameObjects.Systems; +using Robust.Shared.Interfaces.GameObjects; +using Robust.Shared.Interfaces.GameObjects.Components; +using Robust.Shared.Interfaces.Map; +using Robust.Shared.IoC; +using Robust.Shared.Map; +using static Content.Shared.GameObjects.EntitySystems.SharedInteractionSystem; + +namespace Content.Client.Utility +{ + public static class RangeExtensions + { + private static SharedInteractionSystem SharedInteractionSystem => EntitySystem.Get(); + + public static bool InRangeUnobstructed( + this LocalPlayer origin, + IEntity other, + float range = InteractionRange, + CollisionGroup collisionMask = CollisionGroup.Impassable, + Ignored predicate = null, + bool ignoreInsideBlocker = false, + bool popup = false) + { + var otherPosition = other.Transform.MapPosition; + + return origin.InRangeUnobstructed(otherPosition, range, collisionMask, predicate, ignoreInsideBlocker, + popup); + } + + public static bool InRangeUnobstructed( + this LocalPlayer origin, + IComponent other, + float range = InteractionRange, + CollisionGroup collisionMask = CollisionGroup.Impassable, + Ignored predicate = null, + bool ignoreInsideBlocker = false, + bool popup = false) + { + return origin.InRangeUnobstructed(other.Owner, range, collisionMask, predicate, ignoreInsideBlocker, popup); + } + + public static bool InRangeUnobstructed( + this LocalPlayer origin, + IContainer other, + float range = InteractionRange, + CollisionGroup collisionMask = CollisionGroup.Impassable, + Ignored predicate = null, + bool ignoreInsideBlocker = false, + bool popup = false) + { + return origin.InRangeUnobstructed(other.Owner, range, collisionMask, predicate, ignoreInsideBlocker, popup); + } + + public static bool InRangeUnobstructed( + this LocalPlayer origin, + GridCoordinates other, + float range = InteractionRange, + CollisionGroup collisionMask = CollisionGroup.Impassable, + Ignored predicate = null, + bool ignoreInsideBlocker = false, + bool popup = false) + { + var mapManager = IoCManager.Resolve(); + var otherPosition = other.ToMap(mapManager); + + return origin.InRangeUnobstructed(otherPosition, range, collisionMask, predicate, ignoreInsideBlocker, + popup); + } + + public static bool InRangeUnobstructed( + this LocalPlayer origin, + MapCoordinates other, + float range = InteractionRange, + CollisionGroup collisionMask = CollisionGroup.Impassable, + Ignored predicate = null, + bool ignoreInsideBlocker = false, + bool popup = false) + { + var originEntity = origin.ControlledEntity; + if (originEntity == null) + { + // TODO: Take into account the player's camera position? + return false; + } + + return SharedInteractionSystem.InRangeUnobstructed(originEntity, other, range, collisionMask, predicate, + ignoreInsideBlocker, popup); + } + } +} diff --git a/Content.IntegrationTests/Tests/Interaction/InRangeUnobstructed.cs b/Content.IntegrationTests/Tests/Interaction/InRangeUnobstructed.cs new file mode 100644 index 0000000000..6ff7cfba99 --- /dev/null +++ b/Content.IntegrationTests/Tests/Interaction/InRangeUnobstructed.cs @@ -0,0 +1,159 @@ +using System.Threading.Tasks; +using Content.Client.Utility; +using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.Utility; +using NUnit.Framework; +using Robust.Server.GameObjects.Components.Container; +using Robust.Shared.Interfaces.GameObjects; +using Robust.Shared.Interfaces.GameObjects.Components; +using Robust.Shared.Interfaces.Map; +using Robust.Shared.Map; + +namespace Content.IntegrationTests.Tests.Interaction +{ + [TestFixture] + [TestOf(typeof(SharedInteractionSystem))] + [TestOf(typeof(SharedRangeExtensions))] + [TestOf(typeof(RangeExtensions))] + public class InRangeUnobstructed : ContentIntegrationTest + { + private const string HumanId = "BaseHumanMob_Content"; + + private const float InteractionRange = SharedInteractionSystem.InteractionRange; + + private const float InteractionRangeDivided15 = InteractionRange / 1.5f; + + private readonly (float, float) _interactionRangeDivided15X = (InteractionRangeDivided15, 0f); + + private const float InteractionRangeDivided15Times3 = InteractionRangeDivided15 * 3; + + [Test] + public async Task EntityEntityTest() + { + var server = StartServerDummyTicker(); + + await server.WaitIdleAsync(); + + var entityManager = server.ResolveDependency(); + var mapManager = server.ResolveDependency(); + + IEntity origin = null; + IEntity other = null; + IContainer container = null; + IComponent component = null; + GridCoordinates gridCoordinates = default; + MapCoordinates mapCoordinates = default; + + server.Assert(() => + { + mapManager.CreateNewMapEntity(MapId.Nullspace); + var coordinates = MapCoordinates.Nullspace; + + origin = entityManager.SpawnEntity(HumanId, coordinates); + other = entityManager.SpawnEntity(HumanId, coordinates); + container = ContainerManagerComponent.Ensure("InRangeUnobstructedTestOtherContainer", other); + component = other.Transform; + gridCoordinates = other.Transform.GridPosition; + mapCoordinates = other.Transform.MapPosition; + }); + + await server.WaitIdleAsync(); + + server.Assert(() => + { + // Entity <-> Entity + Assert.True(origin.InRangeUnobstructed(other)); + Assert.True(other.InRangeUnobstructed(origin)); + + // Entity <-> Component + Assert.True(origin.InRangeUnobstructed(component)); + Assert.True(component.InRangeUnobstructed(origin)); + + // Entity <-> Container + Assert.True(origin.InRangeUnobstructed(container)); + Assert.True(container.InRangeUnobstructed(origin)); + + // Entity <-> GridCoordinates + Assert.True(origin.InRangeUnobstructed(gridCoordinates)); + Assert.True(gridCoordinates.InRangeUnobstructed(origin)); + + // Entity <-> MapCoordinates + Assert.True(origin.InRangeUnobstructed(mapCoordinates)); + Assert.True(mapCoordinates.InRangeUnobstructed(origin)); + + + // Move them slightly apart + origin.Transform.LocalPosition += _interactionRangeDivided15X; + + // Entity <-> Entity + Assert.True(origin.InRangeUnobstructed(other)); + Assert.True(other.InRangeUnobstructed(origin)); + + // Entity <-> Component + Assert.True(origin.InRangeUnobstructed(component)); + Assert.True(component.InRangeUnobstructed(origin)); + + // Entity <-> Container + Assert.True(origin.InRangeUnobstructed(container)); + Assert.True(container.InRangeUnobstructed(origin)); + + // Entity <-> GridCoordinates + Assert.True(origin.InRangeUnobstructed(gridCoordinates)); + Assert.True(gridCoordinates.InRangeUnobstructed(origin)); + + // Entity <-> MapCoordinates + Assert.True(origin.InRangeUnobstructed(mapCoordinates)); + Assert.True(mapCoordinates.InRangeUnobstructed(origin)); + + + // Move them out of range + origin.Transform.LocalPosition += _interactionRangeDivided15X; + + // Entity <-> Entity + Assert.False(origin.InRangeUnobstructed(other)); + Assert.False(other.InRangeUnobstructed(origin)); + + // Entity <-> Component + Assert.False(origin.InRangeUnobstructed(component)); + Assert.False(component.InRangeUnobstructed(origin)); + + // Entity <-> Container + Assert.False(origin.InRangeUnobstructed(container)); + Assert.False(container.InRangeUnobstructed(origin)); + + // Entity <-> GridCoordinates + Assert.False(origin.InRangeUnobstructed(gridCoordinates)); + Assert.False(gridCoordinates.InRangeUnobstructed(origin)); + + // Entity <-> MapCoordinates + Assert.False(origin.InRangeUnobstructed(mapCoordinates)); + Assert.False(mapCoordinates.InRangeUnobstructed(origin)); + + + // Checks with increased range + + // Entity <-> Entity + Assert.True(origin.InRangeUnobstructed(other, InteractionRangeDivided15Times3)); + Assert.True(other.InRangeUnobstructed(origin, InteractionRangeDivided15Times3)); + + // Entity <-> Component + Assert.True(origin.InRangeUnobstructed(component, InteractionRangeDivided15Times3)); + Assert.True(component.InRangeUnobstructed(origin, InteractionRangeDivided15Times3)); + + // Entity <-> Container + Assert.True(origin.InRangeUnobstructed(container, InteractionRangeDivided15Times3)); + Assert.True(container.InRangeUnobstructed(origin, InteractionRangeDivided15Times3)); + + // Entity <-> GridCoordinates + Assert.True(origin.InRangeUnobstructed(gridCoordinates, InteractionRangeDivided15Times3)); + Assert.True(gridCoordinates.InRangeUnobstructed(origin, InteractionRangeDivided15Times3)); + + // Entity <-> MapCoordinates + Assert.True(origin.InRangeUnobstructed(mapCoordinates, InteractionRangeDivided15Times3)); + Assert.True(mapCoordinates.InRangeUnobstructed(origin, InteractionRangeDivided15Times3)); + }); + + await server.WaitIdleAsync(); + } + } +} diff --git a/Content.Server/AI/Operators/Inventory/CloseStorageOperator.cs b/Content.Server/AI/Operators/Inventory/CloseStorageOperator.cs index 8753fb6115..477c878491 100644 --- a/Content.Server/AI/Operators/Inventory/CloseStorageOperator.cs +++ b/Content.Server/AI/Operators/Inventory/CloseStorageOperator.cs @@ -3,6 +3,7 @@ using Content.Server.AI.WorldState.States.Inventory; using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.Utility; using Content.Shared.Interfaces.GameObjects.Components; +using Content.Shared.Utility; using Robust.Shared.Interfaces.GameObjects; namespace Content.Server.AI.Operators.Inventory @@ -50,7 +51,7 @@ namespace Content.Server.AI.Operators.Inventory public override Outcome Execute(float frameTime) { - if (!InteractionChecks.InRangeUnobstructed(_owner, _target.Transform.MapPosition)) + if (!_owner.InRangeUnobstructed(_target, popup: true)) { return Outcome.Failed; } diff --git a/Content.Server/AI/Operators/Inventory/InteractWithEntityOperator.cs b/Content.Server/AI/Operators/Inventory/InteractWithEntityOperator.cs index 8e49c9587c..94702d95d6 100644 --- a/Content.Server/AI/Operators/Inventory/InteractWithEntityOperator.cs +++ b/Content.Server/AI/Operators/Inventory/InteractWithEntityOperator.cs @@ -1,6 +1,7 @@ using Content.Server.GameObjects.Components.Mobs; using Content.Server.GameObjects.EntitySystems.Click; using Content.Server.Utility; +using Content.Shared.Utility; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.IoC; @@ -28,7 +29,7 @@ namespace Content.Server.AI.Operators.Inventory return Outcome.Failed; } - if (!InteractionChecks.InRangeUnobstructed(_owner, _useTarget.Transform.MapPosition)) + if (!_owner.InRangeUnobstructed(_useTarget, popup: true)) { return Outcome.Failed; } diff --git a/Content.Server/AI/Operators/Inventory/OpenStorageOperator.cs b/Content.Server/AI/Operators/Inventory/OpenStorageOperator.cs index f909842264..d981b843e6 100644 --- a/Content.Server/AI/Operators/Inventory/OpenStorageOperator.cs +++ b/Content.Server/AI/Operators/Inventory/OpenStorageOperator.cs @@ -4,6 +4,7 @@ using Content.Server.AI.WorldState.States.Inventory; using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.Utility; using Content.Shared.Interfaces.GameObjects.Components; +using Content.Shared.Utility; using Robust.Shared.Containers; using Robust.Shared.Interfaces.GameObjects; @@ -30,7 +31,7 @@ namespace Content.Server.AI.Operators.Inventory return Outcome.Success; } - if (!InteractionChecks.InRangeUnobstructed(_owner, container.Owner.Transform.MapPosition, ignoredEnt: container.Owner)) + if (!_owner.InRangeUnobstructed(container, popup: true)) { return Outcome.Failed; } diff --git a/Content.Server/AI/Operators/Inventory/PickupEntityOperator.cs b/Content.Server/AI/Operators/Inventory/PickupEntityOperator.cs index d6631a41d7..289a9ba96a 100644 --- a/Content.Server/AI/Operators/Inventory/PickupEntityOperator.cs +++ b/Content.Server/AI/Operators/Inventory/PickupEntityOperator.cs @@ -3,6 +3,7 @@ using Content.Server.GameObjects.Components.GUI; using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.GameObjects.EntitySystems.Click; using Content.Server.Utility; +using Content.Shared.Utility; using Robust.Shared.Containers; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.IoC; @@ -26,7 +27,7 @@ namespace Content.Server.AI.Operators.Inventory if (_target.Deleted || !_target.HasComponent() || ContainerHelpers.IsInContainer(_target) || - !InteractionChecks.InRangeUnobstructed(_owner, _target.Transform.MapPosition)) + !_owner.InRangeUnobstructed(_target, popup: true)) { return Outcome.Failed; } diff --git a/Content.Server/GameObjects/Components/ActionBlocking/CuffableComponent.cs b/Content.Server/GameObjects/Components/ActionBlocking/CuffableComponent.cs index f6e979557a..890d2d576f 100644 --- a/Content.Server/GameObjects/Components/ActionBlocking/CuffableComponent.cs +++ b/Content.Server/GameObjects/Components/ActionBlocking/CuffableComponent.cs @@ -1,5 +1,4 @@ - -using Robust.Server.GameObjects; +using Robust.Server.GameObjects; using Content.Shared.GameObjects.EntitySystems; using Content.Shared.Interfaces; using Robust.Shared.GameObjects; @@ -22,6 +21,8 @@ using Content.Shared.GameObjects.Components.Mobs; using Robust.Shared.Maths; using System; using System.Collections.Generic; +using Content.Shared.Utility; +using Serilog; using Content.Server.GameObjects.Components.GUI; namespace Content.Server.GameObjects.Components.ActionBlocking @@ -109,11 +110,7 @@ namespace Content.Server.GameObjects.Components.ActionBlocking return; } - if (!EntitySystem.Get().InRangeUnobstructed( - handcuff.Transform.MapPosition, - Owner.Transform.MapPosition, - _interactRange, - ignoredEnt: Owner)) + if (!handcuff.InRangeUnobstructed(Owner, _interactRange)) { Logger.Warning("Handcuffs being applied to player are obstructed or too far away! This should not happen!"); return; @@ -131,7 +128,7 @@ namespace Content.Server.GameObjects.Components.ActionBlocking /// /// Check the current amount of hands the owner has, and if there's less hands than active cuffs we remove some cuffs. /// - private void UpdateHandCount() + private void UpdateHandCount() { var dirty = false; var handCount = _hands.Hands.Count(); @@ -238,22 +235,13 @@ namespace Content.Server.GameObjects.Components.ActionBlocking return; } - if (!isOwner && - !EntitySystem.Get().InRangeUnobstructed( - user.Transform.MapPosition, - Owner.Transform.MapPosition, - _interactRange, - ignoredEnt: Owner)) + if (!isOwner && user.InRangeUnobstructed(Owner, _interactRange)) { user.PopupMessage(user, Loc.GetString("You are too far away to remove the cuffs.")); return; } - if (!EntitySystem.Get().InRangeUnobstructed( - cuffsToRemove.Transform.MapPosition, - Owner.Transform.MapPosition, - _interactRange, - ignoredEnt: Owner)) + if (!cuffsToRemove.InRangeUnobstructed(Owner, _interactRange)) { Logger.Warning("Handcuffs being removed from player are obstructed or too far away! This should not happen!"); return; diff --git a/Content.Server/GameObjects/Components/ActionBlocking/HandcuffComponent.cs b/Content.Server/GameObjects/Components/ActionBlocking/HandcuffComponent.cs index ca05cf37dc..2f7d8e6aab 100644 --- a/Content.Server/GameObjects/Components/ActionBlocking/HandcuffComponent.cs +++ b/Content.Server/GameObjects/Components/ActionBlocking/HandcuffComponent.cs @@ -16,6 +16,7 @@ using Content.Shared.GameObjects.Components.ActionBlocking; using Content.Server.GameObjects.Components.Mobs; using Robust.Shared.Maths; using System; +using Content.Shared.Utility; namespace Content.Server.GameObjects.Components.ActionBlocking { @@ -115,7 +116,7 @@ namespace Content.Server.GameObjects.Components.ActionBlocking private float _interactRange; private DoAfterSystem _doAfterSystem; private AudioSystem _audioSystem; - + public override void Initialize() { base.Initialize(); @@ -182,11 +183,7 @@ namespace Content.Server.GameObjects.Components.ActionBlocking return; } - if (!EntitySystem.Get().InRangeUnobstructed( - eventArgs.User.Transform.MapPosition, - eventArgs.Target.Transform.MapPosition, - _interactRange, - ignoredEnt: Owner)) + if (!eventArgs.InRangeUnobstructed(_interactRange, ignoreInsideBlocker: true)) { _notifyManager.PopupMessage(eventArgs.User, eventArgs.User, Loc.GetString("You are too far away to use the cuffs!")); return; @@ -196,7 +193,7 @@ namespace Content.Server.GameObjects.Components.ActionBlocking _notifyManager.PopupMessage(eventArgs.User, eventArgs.Target, Loc.GetString("{0:theName} starts cuffing you!", eventArgs.User)); _audioSystem.PlayFromEntity(StartCuffSound, Owner); - TryUpdateCuff(eventArgs.User, eventArgs.Target, cuffed); + TryUpdateCuff(eventArgs.User, eventArgs.Target, cuffed); } /// diff --git a/Content.Server/GameObjects/Components/Buckle/BuckleComponent.cs b/Content.Server/GameObjects/Components/Buckle/BuckleComponent.cs index e32be62caa..e46b2c576b 100644 --- a/Content.Server/GameObjects/Components/Buckle/BuckleComponent.cs +++ b/Content.Server/GameObjects/Components/Buckle/BuckleComponent.cs @@ -7,13 +7,13 @@ using Content.Server.GameObjects.Components.Mobs.State; using Content.Server.GameObjects.Components.Strap; using Content.Server.GameObjects.EntitySystems; using Content.Server.Interfaces; -using Content.Server.Utility; using Content.Shared.GameObjects.Components.Buckle; using Content.Shared.GameObjects.Components.Mobs; using Content.Shared.GameObjects.Components.Strap; using Content.Shared.GameObjects.EntitySystems; using Content.Shared.GameObjects.Verbs; using Content.Shared.Interfaces.GameObjects.Components; +using Content.Shared.Utility; using Robust.Server.GameObjects; using Robust.Server.GameObjects.EntitySystemMessages; using Robust.Server.GameObjects.EntitySystems; @@ -190,13 +190,10 @@ namespace Content.Server.GameObjects.Components.Buckle return false; } - var ownerPosition = Owner.Transform.MapPosition; - var strapPosition = strap.Owner.Transform.MapPosition; - var interaction = EntitySystem.Get(); var component = strap; bool Ignored(IEntity entity) => entity == Owner || entity == user || entity == component.Owner; - if (!interaction.InRangeUnobstructed(ownerPosition, strapPosition, _range, predicate: Ignored)) + if (!Owner.InRangeUnobstructed(strap, _range, predicate: Ignored, popup: true)) { _notifyManager.PopupMessage(strap.Owner, user, Loc.GetString("You can't reach there!")); @@ -346,9 +343,7 @@ namespace Content.Server.GameObjects.Components.Buckle return false; } - var strapPosition = Owner.Transform.MapPosition; - - if (!InteractionChecks.InRangeUnobstructed(user, strapPosition, _range)) + if (!user.InRangeUnobstructed(oldBuckledTo, _range, popup: true)) { return false; } diff --git a/Content.Server/GameObjects/Components/Chemistry/InjectorComponent.cs b/Content.Server/GameObjects/Components/Chemistry/InjectorComponent.cs index a3a9959ca1..d081e498a9 100644 --- a/Content.Server/GameObjects/Components/Chemistry/InjectorComponent.cs +++ b/Content.Server/GameObjects/Components/Chemistry/InjectorComponent.cs @@ -2,10 +2,10 @@ using System; using Content.Server.GameObjects.Components.Body.Circulatory; using Content.Server.Interfaces; -using Content.Server.Utility; using Content.Shared.Chemistry; using Content.Shared.GameObjects.Components.Chemistry; using Content.Shared.Interfaces.GameObjects.Components; +using Content.Shared.Utility; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.IoC; @@ -111,7 +111,7 @@ namespace Content.Server.GameObjects.Components.Chemistry /// void IAfterInteract.AfterInteract(AfterInteractEventArgs eventArgs) { - if (!InteractionChecks.InRangeUnobstructed(eventArgs)) return; + if (!eventArgs.InRangeUnobstructed(ignoreInsideBlocker: true, popup: true)) return; //Make sure we have the attacking entity if (eventArgs.Target == null || !Owner.TryGetComponent(out SolutionComponent? solution) || !solution.Injector) diff --git a/Content.Server/GameObjects/Components/Chemistry/PillComponent.cs b/Content.Server/GameObjects/Components/Chemistry/PillComponent.cs index 0704436578..170795c469 100644 --- a/Content.Server/GameObjects/Components/Chemistry/PillComponent.cs +++ b/Content.Server/GameObjects/Components/Chemistry/PillComponent.cs @@ -5,6 +5,7 @@ using Content.Server.Utility; using Content.Shared.Chemistry; using Content.Shared.Interfaces; using Content.Shared.Interfaces.GameObjects.Components; +using Content.Shared.Utility; using Robust.Server.GameObjects.EntitySystems; using Robust.Shared.Audio; using Robust.Shared.GameObjects; @@ -80,7 +81,7 @@ namespace Content.Server.GameObjects.Components.Chemistry return false; } - if (!InteractionChecks.InRangeUnobstructed(user, trueTarget.Transform.MapPosition)) + if (!user.InRangeUnobstructed(trueTarget, popup: true)) { return false; } diff --git a/Content.Server/GameObjects/Components/Fluids/MopComponent.cs b/Content.Server/GameObjects/Components/Fluids/MopComponent.cs index 338af8611c..907c1d3a48 100644 --- a/Content.Server/GameObjects/Components/Fluids/MopComponent.cs +++ b/Content.Server/GameObjects/Components/Fluids/MopComponent.cs @@ -4,6 +4,7 @@ using Content.Server.Utility; using Content.Shared.Chemistry; using Content.Shared.Interfaces; using Content.Shared.Interfaces.GameObjects.Components; +using Content.Shared.Utility; using Robust.Server.GameObjects.EntitySystems; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; @@ -68,7 +69,7 @@ namespace Content.Server.GameObjects.Components.Fluids void IAfterInteract.AfterInteract(AfterInteractEventArgs eventArgs) { if (!Owner.TryGetComponent(out SolutionComponent? contents)) return; - if (!InteractionChecks.InRangeUnobstructed(eventArgs)) return; + if (!eventArgs.InRangeUnobstructed(ignoreInsideBlocker: true, popup: true)) return; if (CurrentVolume <= 0) { diff --git a/Content.Server/GameObjects/Components/Interactable/TilePryingComponent.cs b/Content.Server/GameObjects/Components/Interactable/TilePryingComponent.cs index 954c1ed639..d8e69e964d 100644 --- a/Content.Server/GameObjects/Components/Interactable/TilePryingComponent.cs +++ b/Content.Server/GameObjects/Components/Interactable/TilePryingComponent.cs @@ -2,6 +2,7 @@ using Content.Shared.GameObjects.Components.Interactable; using Content.Shared.Interfaces.GameObjects.Components; using Content.Shared.Maps; +using Content.Shared.Utility; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Map; @@ -42,7 +43,7 @@ namespace Content.Server.GameObjects.Components.Interactable var coordinates = mapGrid.GridTileToLocal(tile.GridIndices); - if (!_entitySystemManager.GetEntitySystem().InRangeUnobstructed(user.Transform.MapPosition, coordinates.ToMap(_mapManager), ignoredEnt:user)) + if (!user.InRangeUnobstructed(coordinates, popup: true)) return; var tileDef = (ContentTileDefinition)_tileDefinitionManager[tile.Tile.TypeId]; diff --git a/Content.Server/GameObjects/Components/Items/FloorTileItemComponent.cs b/Content.Server/GameObjects/Components/Items/FloorTileItemComponent.cs index 8321016565..d39515349f 100644 --- a/Content.Server/GameObjects/Components/Items/FloorTileItemComponent.cs +++ b/Content.Server/GameObjects/Components/Items/FloorTileItemComponent.cs @@ -2,6 +2,7 @@ using Content.Server.Utility; using Content.Shared.Interfaces.GameObjects.Components; using Content.Shared.Maps; +using Content.Shared.Utility; using Robust.Server.GameObjects.EntitySystems; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; @@ -35,7 +36,7 @@ namespace Content.Server.GameObjects.Components.Items public void AfterInteract(AfterInteractEventArgs eventArgs) { - if (!InteractionChecks.InRangeUnobstructed(eventArgs)) return; + if (!eventArgs.InRangeUnobstructed(ignoreInsideBlocker: true, popup: true)) return; if (!Owner.TryGetComponent(out StackComponent stack)) return; var attacked = eventArgs.Target; diff --git a/Content.Server/GameObjects/Components/Items/RCD/RCDComponent.cs b/Content.Server/GameObjects/Components/Items/RCD/RCDComponent.cs index 40f2b36722..d8194508e4 100644 --- a/Content.Server/GameObjects/Components/Items/RCD/RCDComponent.cs +++ b/Content.Server/GameObjects/Components/Items/RCD/RCDComponent.cs @@ -6,6 +6,7 @@ using Content.Server.Utility; using Content.Shared.GameObjects.EntitySystems; using Content.Shared.Interfaces.GameObjects.Components; using Content.Shared.Maps; +using Content.Shared.Utility; using Robust.Server.GameObjects.EntitySystems; using Robust.Server.Interfaces.GameObjects; using Robust.Shared.GameObjects; @@ -168,7 +169,7 @@ namespace Content.Server.GameObjects.Components.Items.RCD } var coordinates = mapGrid.GridTileToLocal(tile.GridIndices); - if (coordinates == GridCoordinates.InvalidGrid || !InteractionChecks.InRangeUnobstructed(eventArgs)) + if (coordinates == GridCoordinates.InvalidGrid || !eventArgs.InRangeUnobstructed(ignoreInsideBlocker: true, popup: true)) { return false; } diff --git a/Content.Server/GameObjects/Components/Items/Storage/ItemComponent.cs b/Content.Server/GameObjects/Components/Items/Storage/ItemComponent.cs index 4eead02f0f..265d925ad1 100644 --- a/Content.Server/GameObjects/Components/Items/Storage/ItemComponent.cs +++ b/Content.Server/GameObjects/Components/Items/Storage/ItemComponent.cs @@ -8,6 +8,7 @@ using Content.Shared.GameObjects.Components.Items; using Content.Shared.GameObjects.EntitySystems; using Content.Shared.GameObjects.Verbs; using Content.Shared.Interfaces.GameObjects.Components; +using Content.Shared.Utility; using Robust.Server.Interfaces.GameObjects; using Robust.Shared.Containers; using Robust.Shared.GameObjects; @@ -96,9 +97,7 @@ namespace Content.Server.GameObjects.Components.Items.Storage return false; } - var itemPos = Owner.Transform.MapPosition; - - return InteractionChecks.InRangeUnobstructed(user, itemPos, ignoredEnt: Owner, ignoreInsideBlocker:true); + return user.InRangeUnobstructed(Owner, ignoreInsideBlocker: true, popup: true); } public bool InteractHand(InteractHandEventArgs eventArgs) diff --git a/Content.Server/GameObjects/Components/Items/Storage/ServerStorageComponent.cs b/Content.Server/GameObjects/Components/Items/Storage/ServerStorageComponent.cs index 719c361083..6b8acac68a 100644 --- a/Content.Server/GameObjects/Components/Items/Storage/ServerStorageComponent.cs +++ b/Content.Server/GameObjects/Components/Items/Storage/ServerStorageComponent.cs @@ -11,6 +11,7 @@ using Content.Shared.GameObjects.Components.Storage; using Content.Shared.GameObjects.EntitySystems; using Content.Shared.Interfaces; using Content.Shared.Interfaces.GameObjects.Components; +using Content.Shared.Utility; using Robust.Server.GameObjects; using Robust.Server.GameObjects.Components.Container; using Robust.Server.GameObjects.EntitySystemMessages; @@ -405,9 +406,7 @@ namespace Content.Server.GameObjects.Components.Items.Storage break; } - var storagePosition = Owner.Transform.MapPosition; - - if (!InteractionChecks.InRangeUnobstructed(player, storagePosition)) + if (!player.InRangeUnobstructed(Owner, popup: true)) { break; } diff --git a/Content.Server/GameObjects/Components/Medical/HealingComponent.cs b/Content.Server/GameObjects/Components/Medical/HealingComponent.cs index 8768acc071..ea1eb95f89 100644 --- a/Content.Server/GameObjects/Components/Medical/HealingComponent.cs +++ b/Content.Server/GameObjects/Components/Medical/HealingComponent.cs @@ -5,6 +5,7 @@ using Content.Shared.Damage; using Content.Shared.GameObjects.Components.Body; using Content.Shared.GameObjects.EntitySystems; using Content.Shared.Interfaces.GameObjects.Components; +using Content.Shared.Utility; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; @@ -43,18 +44,10 @@ namespace Content.Server.GameObjects.Components.Medical return; } - if (eventArgs.User != eventArgs.Target) + if (eventArgs.User != eventArgs.Target && + !eventArgs.InRangeUnobstructed(ignoreInsideBlocker: true, popup: true)) { - var interactionSystem = EntitySystem.Get(); - var from = eventArgs.User.Transform.MapPosition; - var to = eventArgs.Target.Transform.MapPosition; - bool Ignored(IEntity entity) => entity == eventArgs.User || entity == eventArgs.Target; - var inRange = interactionSystem.InRangeUnobstructed(from, to, predicate: Ignored); - - if (!inRange) - { - return; - } + return; } if (Owner.TryGetComponent(out StackComponent stack) && diff --git a/Content.Server/GameObjects/Components/Movement/ClimbableComponent.cs b/Content.Server/GameObjects/Components/Movement/ClimbableComponent.cs index 2b2cf18bbd..cf7f44b432 100644 --- a/Content.Server/GameObjects/Components/Movement/ClimbableComponent.cs +++ b/Content.Server/GameObjects/Components/Movement/ClimbableComponent.cs @@ -1,4 +1,4 @@ -using Content.Server.GameObjects.Components.Body; +using Content.Server.GameObjects.Components.Body; using Content.Server.GameObjects.EntitySystems.DoAfter; using Content.Shared.GameObjects.Components.Movement; using Content.Shared.GameObjects.EntitySystems; @@ -18,6 +18,7 @@ using Robust.Shared.Serialization; using Robust.Shared.ViewVariables; using System; using Content.Server.Utility; +using Content.Shared.Utility; namespace Content.Server.GameObjects.Components.Movement { @@ -107,12 +108,7 @@ namespace Content.Server.GameObjects.Components.Movement return false; } - var userPosition = user.Transform.MapPosition; - var climbablePosition = target.Transform.MapPosition; - var interaction = EntitySystem.Get(); - bool Ignored(IEntity entity) => (entity == target || entity == user); - - if (!interaction.InRangeUnobstructed(userPosition, climbablePosition, _range, predicate: Ignored)) + if (!user.InRangeUnobstructed(target, _range)) { reason = Loc.GetString("You can't reach there!"); return false; @@ -144,14 +140,10 @@ namespace Content.Server.GameObjects.Components.Movement return false; } - var userPosition = user.Transform.MapPosition; - var otherUserPosition = dragged.Transform.MapPosition; - var climbablePosition = target.Transform.MapPosition; - var interaction = EntitySystem.Get(); - bool Ignored(IEntity entity) => (entity == target || entity == user || entity == dragged); + bool Ignored(IEntity entity) => entity == target || entity == user || entity == dragged; - if (!interaction.InRangeUnobstructed(userPosition, climbablePosition, _range, predicate: Ignored) || - !interaction.InRangeUnobstructed(userPosition, otherUserPosition, _range, predicate: Ignored)) + if (!user.InRangeUnobstructed(target, _range, predicate: Ignored) || + !user.InRangeUnobstructed(dragged, _range, predicate: Ignored)) { reason = Loc.GetString("You can't reach there!"); return false; diff --git a/Content.Server/GameObjects/Components/Nutrition/FoodComponent.cs b/Content.Server/GameObjects/Components/Nutrition/FoodComponent.cs index cec956d208..6604f0ea1e 100644 --- a/Content.Server/GameObjects/Components/Nutrition/FoodComponent.cs +++ b/Content.Server/GameObjects/Components/Nutrition/FoodComponent.cs @@ -11,6 +11,7 @@ using Content.Shared.Chemistry; using Content.Shared.GameObjects.Components.Utensil; using Content.Shared.Interfaces; using Content.Shared.Interfaces.GameObjects.Components; +using Content.Shared.Utility; using Robust.Server.GameObjects.EntitySystems; using Robust.Shared.Audio; using Robust.Shared.GameObjects; @@ -162,7 +163,7 @@ namespace Content.Server.GameObjects.Components.Nutrition } } - if (!InteractionChecks.InRangeUnobstructed(user, trueTarget.Transform.MapPosition)) + if (!user.InRangeUnobstructed(trueTarget, popup: true)) { return false; } diff --git a/Content.Server/GameObjects/Components/Power/AME/AMEControllerComponent.cs b/Content.Server/GameObjects/Components/Power/AME/AMEControllerComponent.cs index 92ab6732fd..b8a768d728 100644 --- a/Content.Server/GameObjects/Components/Power/AME/AMEControllerComponent.cs +++ b/Content.Server/GameObjects/Components/Power/AME/AMEControllerComponent.cs @@ -3,7 +3,6 @@ using Content.Server.GameObjects.Components.GUI; using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.GameObjects.Components.NodeContainer; using Content.Server.GameObjects.Components.NodeContainer.NodeGroups; -using Content.Server.GameObjects.Components.NodeContainer.Nodes; using Content.Server.GameObjects.Components.Power.ApcNetComponents; using Content.Server.GameObjects.Components.Power.PowerNetComponents; using Content.Server.Interfaces; @@ -12,7 +11,6 @@ using Content.Server.Utility; using Content.Shared.GameObjects.Components.Power.AME; using Content.Shared.GameObjects.EntitySystems; using Content.Shared.Interfaces.GameObjects.Components; -using Microsoft.EntityFrameworkCore.Internal; using Robust.Server.GameObjects; using Robust.Server.GameObjects.Components.Container; using Robust.Server.GameObjects.Components.UserInterface; @@ -20,17 +18,12 @@ using Robust.Server.GameObjects.EntitySystems; using Robust.Server.Interfaces.GameObjects; using Robust.Shared.Audio; using Robust.Shared.GameObjects; -using Robust.Shared.GameObjects.Components.Transform; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; -using Robust.Shared.Interfaces.GameObjects.Components; using Robust.Shared.IoC; using Robust.Shared.Localization; using Robust.Shared.ViewVariables; -using System; -using System.Collections.Generic; using System.Linq; -using System.Text; using System.Threading.Tasks; namespace Content.Server.GameObjects.Components.Power.AME @@ -87,20 +80,27 @@ namespace Content.Server.GameObjects.Components.Power.AME return; } + var group = GetAMENodeGroup(); + + if (group == null) + { + return; + } + _jarSlot.ContainedEntity.TryGetComponent(out var fuelJar); if(fuelJar != null && _powerSupplier != null && fuelJar.FuelAmount > InjectionAmount) { - _powerSupplier.SupplyRate = GetAMENodeGroup().InjectFuel(InjectionAmount); + _powerSupplier.SupplyRate = group.InjectFuel(InjectionAmount); fuelJar.FuelAmount -= InjectionAmount; InjectSound(); UpdateUserInterface(); } - _stability = GetAMENodeGroup().GetTotalStability(); + _stability = group.GetTotalStability(); UpdateDisplay(_stability); - if(_stability <= 0) { GetAMENodeGroup().ExplodeCores(); } + if(_stability <= 0) { group.ExplodeCores(); } } @@ -213,7 +213,7 @@ namespace Content.Server.GameObjects.Components.Power.AME break; } - GetAMENodeGroup().UpdateCoreVisuals(InjectionAmount, _injecting); + GetAMENodeGroup()?.UpdateCoreVisuals(InjectionAmount, _injecting); UpdateUserInterface(); ClickSound(); @@ -272,11 +272,11 @@ namespace Content.Server.GameObjects.Components.Power.AME private void RefreshParts() { - GetAMENodeGroup().RefreshAMENodes(this); + GetAMENodeGroup()?.RefreshAMENodes(this); UpdateUserInterface(); } - private AMENodeGroup GetAMENodeGroup() + private AMENodeGroup? GetAMENodeGroup() { Owner.TryGetComponent(out NodeContainerComponent? nodeContainer); @@ -285,12 +285,12 @@ namespace Content.Server.GameObjects.Components.Power.AME .OfType() .First(); - return engineNodeGroup ?? default!; + return engineNodeGroup; } private bool IsMasterController() { - if(GetAMENodeGroup().MasterController == this) + if(GetAMENodeGroup()?.MasterController == this) { return true; } @@ -301,10 +301,11 @@ namespace Content.Server.GameObjects.Components.Power.AME private int GetCoreCount() { var coreCount = 0; + var group = GetAMENodeGroup(); - if(GetAMENodeGroup() != null) + if (group != null) { - coreCount = GetAMENodeGroup().CoreCount; + coreCount = group.CoreCount; } return coreCount; diff --git a/Content.Server/GameObjects/Components/Power/WirePlacerComponent.cs b/Content.Server/GameObjects/Components/Power/WirePlacerComponent.cs index bed8295a06..5b79399c9d 100644 --- a/Content.Server/GameObjects/Components/Power/WirePlacerComponent.cs +++ b/Content.Server/GameObjects/Components/Power/WirePlacerComponent.cs @@ -1,6 +1,7 @@ using Content.Server.GameObjects.Components.Stack; using Content.Server.Utility; using Content.Shared.Interfaces.GameObjects.Components; +using Content.Shared.Utility; using Robust.Server.Interfaces.GameObjects; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Components.Transform; @@ -36,7 +37,7 @@ namespace Content.Server.GameObjects.Components.Power /// public void AfterInteract(AfterInteractEventArgs eventArgs) { - if (!InteractionChecks.InRangeUnobstructed(eventArgs)) return; + if (!eventArgs.InRangeUnobstructed(ignoreInsideBlocker: true, popup: true)) return; if(!_mapManager.TryGetGrid(eventArgs.ClickLocation.GridID, out var grid)) return; var snapPos = grid.SnapGridCellFor(eventArgs.ClickLocation, SnapGridOffset.Center); diff --git a/Content.Server/GameObjects/Components/Strap/StrapComponent.cs b/Content.Server/GameObjects/Components/Strap/StrapComponent.cs index ea47b05290..45a6346ada 100644 --- a/Content.Server/GameObjects/Components/Strap/StrapComponent.cs +++ b/Content.Server/GameObjects/Components/Strap/StrapComponent.cs @@ -4,6 +4,7 @@ using Content.Shared.GameObjects.Components.Strap; using Content.Shared.GameObjects.EntitySystems; using Content.Shared.GameObjects.Verbs; using Content.Shared.Interfaces.GameObjects.Components; +using Content.Shared.Utility; using Robust.Server.GameObjects; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; @@ -202,14 +203,9 @@ namespace Content.Server.GameObjects.Components.Strap parent = parent.Parent; } - var userPosition = user.Transform.MapPosition; - var strapPosition = component.Owner.Transform.MapPosition; var range = SharedInteractionSystem.InteractionRange / 2; - var inRange = EntitySystem.Get() - .InRangeUnobstructed(userPosition, strapPosition, range, - predicate: entity => entity == user || entity == component.Owner); - if (!inRange) + if (!user.InRangeUnobstructed(component, range)) { return; } diff --git a/Content.Server/GameObjects/Components/Utensil/UtensilComponent.cs b/Content.Server/GameObjects/Components/Utensil/UtensilComponent.cs index b530ce5d22..8fadffc4d1 100644 --- a/Content.Server/GameObjects/Components/Utensil/UtensilComponent.cs +++ b/Content.Server/GameObjects/Components/Utensil/UtensilComponent.cs @@ -4,6 +4,7 @@ using Content.Server.GameObjects.Components.Nutrition; using Content.Server.Utility; using Content.Shared.GameObjects.Components.Utensil; using Content.Shared.Interfaces.GameObjects.Components; +using Content.Shared.Utility; using Robust.Server.GameObjects.EntitySystems; using Robust.Shared.Audio; using Robust.Shared.GameObjects; @@ -121,7 +122,7 @@ namespace Content.Server.GameObjects.Components.Utensil return; } - if (!InteractionChecks.InRangeUnobstructed(user, target.Transform.MapPosition)) + if (!user.InRangeUnobstructed(target, popup: true)) { return; } diff --git a/Content.Server/GameObjects/Components/Weapon/FlashableComponent.cs b/Content.Server/GameObjects/Components/Weapon/FlashableComponent.cs index d94e9b87ae..b09d95aa19 100644 --- a/Content.Server/GameObjects/Components/Weapon/FlashableComponent.cs +++ b/Content.Server/GameObjects/Components/Weapon/FlashableComponent.cs @@ -1,6 +1,6 @@ using System; -using Content.Server.Utility; using Content.Shared.GameObjects.Components.Weapons; +using Content.Shared.Utility; using Robust.Server.GameObjects.EntitySystems; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; @@ -32,7 +32,7 @@ namespace Content.Server.GameObjects.Components.Weapon { foreach (var entity in IoCManager.Resolve().GetEntitiesInRange(source.Transform.GridPosition, range)) { - if (!InteractionChecks.InRangeUnobstructed(source, entity.Transform.MapPosition, range, ignoredEnt:entity)) + if (!source.InRangeUnobstructed(entity, range, popup: true)) continue; if(entity.TryGetComponent(out FlashableComponent flashable)) diff --git a/Content.Server/GameObjects/Components/WiresComponent.cs b/Content.Server/GameObjects/Components/WiresComponent.cs index 50ea153a2d..3ad387a7ba 100644 --- a/Content.Server/GameObjects/Components/WiresComponent.cs +++ b/Content.Server/GameObjects/Components/WiresComponent.cs @@ -13,6 +13,7 @@ using Content.Shared.GameObjects.Components; using Content.Shared.GameObjects.Components.Interactable; using Content.Shared.GameObjects.EntitySystems; using Content.Shared.Interfaces.GameObjects.Components; +using Content.Shared.Utility; using JetBrains.Annotations; using Robust.Server.GameObjects; using Robust.Server.GameObjects.Components.UserInterface; @@ -388,7 +389,7 @@ namespace Content.Server.GameObjects.Components return; } - if (!EntitySystem.Get().InRangeUnobstructed(player.Transform.MapPosition, Owner.Transform.MapPosition, ignoredEnt: Owner)) + if (!player.InRangeUnobstructed(Owner)) { _notifyManager.PopupMessage(Owner.Transform.GridPosition, player, Loc.GetString("You can't reach there!")); diff --git a/Content.Server/GameObjects/EntitySystems/AI/Steering/AiSteeringSystem.cs b/Content.Server/GameObjects/EntitySystems/AI/Steering/AiSteeringSystem.cs index fbb36045ab..2d852011b0 100644 --- a/Content.Server/GameObjects/EntitySystems/AI/Steering/AiSteeringSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/AI/Steering/AiSteeringSystem.cs @@ -7,8 +7,8 @@ using Content.Server.GameObjects.Components.Movement; using Content.Server.GameObjects.EntitySystems.AI.Pathfinding; using Content.Server.GameObjects.EntitySystems.AI.Pathfinding.Pathfinders; using Content.Server.GameObjects.EntitySystems.JobQueues; -using Content.Server.Utility; using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.Utility; using Robust.Server.Interfaces.Timing; using Robust.Shared.GameObjects.Components; using Robust.Shared.GameObjects.Systems; @@ -281,7 +281,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Steering if (targetDistance <= steeringRequest.ArrivalDistance && steeringRequest.TimeUntilInteractionCheck <= 0.0f) { if (!steeringRequest.RequiresInRangeUnobstructed || - InteractionChecks.InRangeUnobstructed(entity, steeringRequest.TargetMap, steeringRequest.ArrivalDistance, ignoredEnt: entity)) + entity.InRangeUnobstructed(steeringRequest.TargetMap, steeringRequest.ArrivalDistance, popup: true)) { // TODO: Need cruder LOS checks for ranged weaps controller.VelocityDir = Vector2.Zero; diff --git a/Content.Server/GameObjects/EntitySystems/Click/InteractionSystem.cs b/Content.Server/GameObjects/EntitySystems/Click/InteractionSystem.cs index c46ffa7bb7..ddab046408 100644 --- a/Content.Server/GameObjects/EntitySystems/Click/InteractionSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/Click/InteractionSystem.cs @@ -12,8 +12,8 @@ using Content.Shared.GameObjects.EntitySystemMessages; using Content.Shared.GameObjects.EntitySystems; using Content.Shared.Input; using Content.Shared.Interfaces.GameObjects.Components; -using Content.Shared.Physics; using Content.Shared.Physics.Pull; +using Content.Shared.Utility; using JetBrains.Annotations; using Robust.Server.GameObjects; using Robust.Server.Interfaces.Player; @@ -71,7 +71,7 @@ namespace Content.Server.GameObjects.EntitySystems.Click var interactionArgs = new DragDropEventArgs(performer, msg.DropLocation, dropped, target); // must be in range of both the target and the object they are drag / dropping - if (!InteractionChecks.InRangeUnobstructed(interactionArgs)) return; + if (!interactionArgs.InRangeUnobstructed(ignoreInsideBlocker: true, popup: true)) return; // trigger dragdrops on the dropped entity foreach (var dragDrop in dropped.GetAllComponents()) @@ -145,7 +145,7 @@ namespace Content.Server.GameObjects.EntitySystems.Click // all activates should only fire when in range / unbostructed var activateEventArgs = new ActivateEventArgs {User = user, Target = used}; - if (InteractionChecks.InRangeUnobstructed(activateEventArgs)) + if (activateEventArgs.InRangeUnobstructed(ignoreInsideBlocker: true, popup: true)) { activateComp.Activate(activateEventArgs); } @@ -453,7 +453,7 @@ namespace Content.Server.GameObjects.EntitySystems.Click }; // all AttackBys should only happen when in range / unobstructed, so no range check is needed - if (InteractionChecks.InRangeUnobstructed(attackByEventArgs)) + if (attackByEventArgs.InRangeUnobstructed(ignoreInsideBlocker: true, popup: true)) { foreach (var attackBy in attackBys) { @@ -501,8 +501,8 @@ namespace Content.Server.GameObjects.EntitySystems.Click var attackHands = attacked.GetAllComponents().ToList(); var attackHandEventArgs = new InteractHandEventArgs {User = user, Target = attacked}; - // all attackHands should only fire when in range / unbostructed - if (InteractionChecks.InRangeUnobstructed(attackHandEventArgs)) + // all attackHands should only fire when in range / unobstructed + if (attackHandEventArgs.InRangeUnobstructed(ignoreInsideBlocker: true, popup: true)) { foreach (var attackHand in attackHands) { diff --git a/Content.Server/GameObjects/EntitySystems/ConstructionSystem.cs b/Content.Server/GameObjects/EntitySystems/ConstructionSystem.cs index e766994372..557a6e8bf7 100644 --- a/Content.Server/GameObjects/EntitySystems/ConstructionSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/ConstructionSystem.cs @@ -6,19 +6,18 @@ using Content.Server.GameObjects.Components.GUI; using Content.Server.GameObjects.Components.Interactable; using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.GameObjects.Components.Stack; -using Content.Server.GameObjects.EntitySystems.Click; using Content.Server.Utility; using Content.Shared.Construction; using Content.Shared.GameObjects.Components; using Content.Shared.GameObjects.Components.Interactable; using Content.Shared.GameObjects.EntitySystems; using Content.Shared.Interfaces.GameObjects.Components; +using Content.Shared.Utility; using JetBrains.Annotations; using Robust.Server.GameObjects; using Robust.Server.GameObjects.EntitySystems; using Robust.Server.Interfaces.Player; using Robust.Shared.GameObjects; -using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.GameObjects.Components; using Robust.Shared.Interfaces.Map; @@ -91,8 +90,7 @@ namespace Content.Server.GameObjects.EntitySystems if(targetEnt is null || handEnt is null) return; - var interaction = Get(); - if(!interaction.InRangeUnobstructed(handEnt.Transform.MapPosition, targetEnt.Transform.MapPosition, ignoredEnt: targetEnt, ignoreInsideBlocker: true)) + if (!handEnt.InRangeUnobstructed(targetEnt, ignoreInsideBlocker: true)) return; // Cannot deconstruct an entity with no prototype. @@ -246,8 +244,7 @@ namespace Content.Server.GameObjects.EntitySystems { var prototype = _prototypeManager.Index(prototypeName); - if (!InteractionChecks.InRangeUnobstructed(placingEnt, loc.ToMap(_mapManager), - ignoredEnt: placingEnt, ignoreInsideBlocker: prototype.CanBuildInImpassable)) + if (!placingEnt.InRangeUnobstructed(loc, ignoreInsideBlocker: prototype.CanBuildInImpassable, popup: true)) { return false; } @@ -377,7 +374,7 @@ namespace Content.Server.GameObjects.EntitySystems var constructPrototype = constructionComponent.Prototype; if (constructPrototype.CanBuildInImpassable == false) { - if (!InteractionChecks.InRangeUnobstructed(user, constructEntity.Transform.MapPosition)) + if (!user.InRangeUnobstructed(constructEntity, popup: true)) return false; } diff --git a/Content.Server/GameObjects/EntitySystems/DoAfter/DoAfterEventArgs.cs b/Content.Server/GameObjects/EntitySystems/DoAfter/DoAfterEventArgs.cs index 1f46dbd7ee..efc7d8d797 100644 --- a/Content.Server/GameObjects/EntitySystems/DoAfter/DoAfterEventArgs.cs +++ b/Content.Server/GameObjects/EntitySystems/DoAfter/DoAfterEventArgs.cs @@ -3,6 +3,7 @@ using System; using System.Threading; using Content.Shared.GameObjects.EntitySystems; using Content.Shared.Physics; +using Content.Shared.Utility; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; @@ -13,17 +14,17 @@ namespace Content.Server.GameObjects.EntitySystems.DoAfter public sealed class DoAfterEventArgs { // Premade checks - public Func GetInRangeUnobstructed(int collisionMask = (int) CollisionGroup.MobMask) + public Func GetInRangeUnobstructed(CollisionGroup collisionMask = CollisionGroup.MobMask) { if (Target == null) { throw new InvalidOperationException("Can't supply a null target to DoAfterEventArgs.GetInRangeUnobstructed"); } - var interactionSystem = EntitySystem.Get(); - Func ignored = entity => entity == User || entity == Target; - return () => interactionSystem.InRangeUnobstructed(User.Transform.MapPosition, Target.Transform.MapPosition, collisionMask: collisionMask, predicate: ignored); + + bool Ignored(IEntity entity) => entity == User || entity == Target; + return () => User.InRangeUnobstructed(Target, collisionMask: collisionMask, predicate: Ignored); } - + /// /// The entity invoking do_after /// @@ -71,7 +72,7 @@ namespace Content.Server.GameObjects.EntitySystems.DoAfter /// Anything that needs a pre-check should do it itself so no DoAfterState is ever sent to the client. /// public Func? PostCheck { get; set; } = null; - + /// /// Additional conditions that need to be met. Return false to cancel. /// diff --git a/Content.Server/GameObjects/EntitySystems/HandsSystem.cs b/Content.Server/GameObjects/EntitySystems/HandsSystem.cs index 68d95e7028..b5d521bac7 100644 --- a/Content.Server/GameObjects/EntitySystems/HandsSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/HandsSystem.cs @@ -125,7 +125,7 @@ namespace Content.Server.GameObjects.EntitySystems var entToDesiredDropCoords = coords.Position - entCoords; var targetLength = Math.Min(entToDesiredDropCoords.Length, SharedInteractionSystem.InteractionRange - 0.001f); // InteractionRange is reduced due to InRange not dealing with floating point error var newCoords = new GridCoordinates((entToDesiredDropCoords.Normalized * targetLength) + entCoords, coords.GridID); - var rayLength = Get().UnobstructedRayLength(ent.Transform.MapPosition, newCoords.ToMap(_mapManager), ignoredEnt: ent); + var rayLength = Get().UnobstructedDistance(ent.Transform.MapPosition, newCoords.ToMap(_mapManager), ignoredEnt: ent); handsComp.Drop(handsComp.ActiveHand, new GridCoordinates(entCoords + (entToDesiredDropCoords.Normalized * rayLength), coords.GridID)); diff --git a/Content.Server/Utility/InteractionChecks.cs b/Content.Server/Utility/InteractionChecks.cs deleted file mode 100644 index 1f5a452b74..0000000000 --- a/Content.Server/Utility/InteractionChecks.cs +++ /dev/null @@ -1,124 +0,0 @@ -using Content.Shared.GameObjects.EntitySystems; -using Content.Shared.Interfaces; -using Content.Shared.Interfaces.GameObjects.Components; -using Content.Shared.Physics; -using Robust.Shared.GameObjects.Systems; -using Robust.Shared.Interfaces.GameObjects; -using Robust.Shared.Interfaces.Map; -using Robust.Shared.IoC; -using Robust.Shared.Localization; -using Robust.Shared.Map; - -namespace Content.Server.Utility -{ - /// - /// Convenient methods for checking for various conditions commonly needed - /// for interactions. - /// - public static class InteractionChecks - { - - /// - /// Default interaction check for targeted attack interaction types. - /// Same as , but defaults to ignore inside blockers - /// (making the check less restrictive). - /// Validates that attacker is in range of the attacked entity. Additionally shows a popup if - /// validation fails. - /// - public static bool InRangeUnobstructed(ITargetedInteractEventArgs eventArgs, bool ignoreInsideBlocker = true) - { - if (!EntitySystem.Get().InRangeUnobstructed(eventArgs.User.Transform.MapPosition, - eventArgs.Target.Transform.MapPosition, ignoredEnt: eventArgs.Target, ignoreInsideBlocker: ignoreInsideBlocker)) - { - var localizationManager = IoCManager.Resolve(); - eventArgs.Target.PopupMessage(eventArgs.User, localizationManager.GetString("You can't reach there!")); - return false; - } - - return true; - } - - /// - /// Default interaction check for Drag drop interaction types. - /// Same as , but defaults to ignore inside blockers - /// (making the check less restrictive) and checks reachability of both the target and the dragged / dropped object. - /// Additionally shows a popup if validation fails. - /// - public static bool InRangeUnobstructed(DragDropEventArgs eventArgs, bool ignoreInsideBlocker = true) - { - if (!EntitySystem.Get().InRangeUnobstructed(eventArgs.User.Transform.MapPosition, - eventArgs.Target.Transform.MapPosition, ignoredEnt: eventArgs.Target, ignoreInsideBlocker: ignoreInsideBlocker)) - { - var localizationManager = IoCManager.Resolve(); - eventArgs.Target.PopupMessage(eventArgs.User, localizationManager.GetString("You can't reach there!")); - return false; - } - if (!EntitySystem.Get().InRangeUnobstructed(eventArgs.User.Transform.MapPosition, - eventArgs.Dropped.Transform.MapPosition, ignoredEnt: eventArgs.Dropped, ignoreInsideBlocker: ignoreInsideBlocker)) - { - var localizationManager = IoCManager.Resolve(); - eventArgs.Dropped.PopupMessage(eventArgs.User, localizationManager.GetString("You can't reach there!")); - return false; - } - - return true; - } - - /// - /// Default interaction check for after attack interaction types. - /// Same as , but defaults to ignore inside blockers - /// (making the check less restrictive). - /// Validates that attacker is in range of the attacked entity, if there is such an entity. - /// If there is no attacked entity, validates that they are in range of the clicked position. - /// Additionally shows a popup if validation fails. - /// - public static bool InRangeUnobstructed(AfterInteractEventArgs eventArgs, bool ignoreInsideBlocker = true) - { - if (eventArgs.Target != null) - { - if (!EntitySystem.Get().InRangeUnobstructed(eventArgs.User.Transform.MapPosition, - eventArgs.Target.Transform.MapPosition, ignoredEnt: eventArgs.Target, ignoreInsideBlocker: ignoreInsideBlocker)) - { - var localizationManager = IoCManager.Resolve(); - eventArgs.Target.PopupMessage(eventArgs.User, localizationManager.GetString("You can't reach there!")); - return false; - } - } - else - { - if (!EntitySystem.Get().InRangeUnobstructed(eventArgs.User.Transform.MapPosition, - eventArgs.ClickLocation.ToMap(IoCManager.Resolve()), ignoredEnt: eventArgs.User, ignoreInsideBlocker: ignoreInsideBlocker)) - { - var localizationManager = IoCManager.Resolve(); - eventArgs.User.PopupMessage(eventArgs.User, localizationManager.GetString("You can't reach there!")); - return false; - } - } - - - return true; - } - - /// - /// Convenient static alternative to , which also - /// shows a popup message if not in range. - /// - public static bool InRangeUnobstructed(IEntity user, MapCoordinates otherCoords, - float range = SharedInteractionSystem.InteractionRange, - int collisionMask = (int) CollisionGroup.Impassable, IEntity ignoredEnt = null, bool ignoreInsideBlocker = false) - { - var mapManager = IoCManager.Resolve(); - var interactionSystem = EntitySystem.Get(); - if (!interactionSystem.InRangeUnobstructed(user.Transform.MapPosition, otherCoords, range, collisionMask, - ignoredEnt, ignoreInsideBlocker)) - { - var localizationManager = IoCManager.Resolve(); - user.PopupMessage(user, localizationManager.GetString("You can't reach there!")); - - return false; - } - - return true; - } - } -} diff --git a/Content.Shared/GameObjects/EntitySystems/ExamineSystemShared.cs b/Content.Shared/GameObjects/EntitySystems/ExamineSystemShared.cs index 71e0190d8d..d8eaea3172 100644 --- a/Content.Shared/GameObjects/EntitySystems/ExamineSystemShared.cs +++ b/Content.Shared/GameObjects/EntitySystems/ExamineSystemShared.cs @@ -1,11 +1,13 @@ using System; using Content.Shared.GameObjects.Components.Mobs; +using Content.Shared.Utility; using JetBrains.Annotations; using Robust.Shared.Containers; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Maths; using Robust.Shared.Utility; +using static Content.Shared.GameObjects.EntitySystems.SharedInteractionSystem; namespace Content.Shared.GameObjects.EntitySystems { @@ -26,11 +28,8 @@ namespace Content.Shared.GameObjects.EntitySystems private static bool IsInDetailsRange(IEntity examiner, IEntity entity) { - return Get() - .InRangeUnobstructed(examiner.Transform.MapPosition, entity.Transform.MapPosition, - ExamineDetailsRange, predicate: entity0 => entity0 == examiner || entity0 == entity, - ignoreInsideBlocker: true) && - examiner.IsInSameOrNoContainer(entity); + return examiner.InRangeUnobstructed(entity, ExamineDetailsRange, ignoreInsideBlocker: true) && + examiner.IsInSameOrNoContainer(entity); } [Pure] @@ -51,16 +50,14 @@ namespace Content.Shared.GameObjects.EntitySystems return false; } - Func predicate = entity => entity == examiner || entity == examined; + Ignored predicate = entity => entity == examiner || entity == examined; if (ContainerHelpers.TryGetContainer(examiner, out var container)) { predicate += entity => entity == container.Owner; } - return Get() - .InRangeUnobstructed(examiner.Transform.MapPosition, examined.Transform.MapPosition, - ExamineRange, predicate: predicate, ignoreInsideBlocker:true); + return examiner.InRangeUnobstructed(examined, ExamineRange, predicate: predicate, ignoreInsideBlocker: true); } public static FormattedMessage GetExamineText(IEntity entity, IEntity examiner) diff --git a/Content.Shared/GameObjects/EntitySystems/SharedInteractionSystem.cs b/Content.Shared/GameObjects/EntitySystems/SharedInteractionSystem.cs index 610b414c65..e795676e78 100644 --- a/Content.Shared/GameObjects/EntitySystems/SharedInteractionSystem.cs +++ b/Content.Shared/GameObjects/EntitySystems/SharedInteractionSystem.cs @@ -1,11 +1,14 @@ -using System; -using System.Linq; +using System.Linq; +using Content.Shared.Interfaces; +using Content.Shared.Interfaces.GameObjects.Components; using Content.Shared.Physics; using JetBrains.Annotations; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; +using Robust.Shared.Interfaces.Map; using Robust.Shared.Interfaces.Physics; using Robust.Shared.IoC; +using Robust.Shared.Localization; using Robust.Shared.Map; using Robust.Shared.Maths; @@ -18,98 +21,516 @@ namespace Content.Shared.GameObjects.EntitySystems public class SharedInteractionSystem : EntitySystem { [Dependency] private readonly IPhysicsManager _physicsManager = default!; + [Dependency] private readonly IMapManager _mapManager = default!; public const float InteractionRange = 2; public const float InteractionRangeSquared = InteractionRange * InteractionRange; + public delegate bool Ignored(IEntity entity); + /// /// Traces a ray from coords to otherCoords and returns the length /// of the vector between coords and the ray's first hit. /// - /// Set of coordinates to use. - /// Other set of coordinates to use. + /// Set of coordinates to use. + /// Other set of coordinates to use. /// the mask to check for collisions - /// A predicate to check whether to ignore an entity or not. If it returns true, it will be ignored. + /// + /// A predicate to check whether to ignore an entity or not. + /// If it returns true, it will be ignored. + /// /// Length of resulting ray. - public float UnobstructedRayLength(MapCoordinates coords, MapCoordinates otherCoords, - int collisionMask = (int) CollisionGroup.Impassable, Func predicate = null) + public float UnobstructedDistance( + MapCoordinates origin, + MapCoordinates other, + int collisionMask = (int) CollisionGroup.Impassable, + Ignored predicate = null) { - var dir = otherCoords.Position - coords.Position; + var dir = other.Position - origin.Position; if (dir.LengthSquared.Equals(0f)) return 0f; - var ray = new CollisionRay(coords.Position, dir.Normalized, collisionMask); - var rayResults = _physicsManager.IntersectRayWithPredicate(coords.MapId, ray, dir.Length, predicate, returnOnFirstHit: false).ToList(); + predicate ??= _ => false; + var ray = new CollisionRay(origin.Position, dir.Normalized, collisionMask); + var rayResults = _physicsManager.IntersectRayWithPredicate(origin.MapId, ray, dir.Length, predicate.Invoke, false).ToList(); if (rayResults.Count == 0) return dir.Length; - return (rayResults[0].HitPos - coords.Position).Length; + return (rayResults[0].HitPos - origin.Position).Length; } /// /// Traces a ray from coords to otherCoords and returns the length /// of the vector between coords and the ray's first hit. /// - /// Set of coordinates to use. - /// Other set of coordinates to use. - /// the mask to check for collisions - /// the entity to be ignored when checking for collisions. + /// Set of coordinates to use. + /// Other set of coordinates to use. + /// The mask to check for collisions + /// + /// The entity to be ignored when checking for collisions. + /// /// Length of resulting ray. - public float UnobstructedRayLength(MapCoordinates coords, MapCoordinates otherCoords, - int collisionMask = (int) CollisionGroup.Impassable, IEntity ignoredEnt = null) => - UnobstructedRayLength(coords, otherCoords, collisionMask, - ignoredEnt == null ? null : (Func) (entity => ignoredEnt == entity)); + public float UnobstructedDistance( + MapCoordinates origin, + MapCoordinates other, + int collisionMask = (int) CollisionGroup.Impassable, + IEntity ignoredEnt = null) + { + var predicate = ignoredEnt == null + ? null + : (Ignored) (e => e == ignoredEnt); + + return UnobstructedDistance(origin, other, collisionMask, predicate); + } /// /// Checks that these coordinates are within a certain distance without any /// entity that matches the collision mask obstructing them. /// If the is zero or negative, - /// this method will only check if nothing obstructs the two sets of coordinates.. + /// this method will only check if nothing obstructs the two sets + /// of coordinates. /// - /// Set of coordinates to use. - /// Other set of coordinates to use. - /// maximum distance between the two sets of coordinates. - /// the mask to check for collisions - /// A predicate to check whether to ignore an entity or not. If it returns true, it will be ignored. - /// if true and the coordinates are inside the obstruction, ignores the obstruction and - /// considers the interaction unobstructed. Therefore, setting this to true makes this check more permissive, such - /// as allowing an interaction to occur inside something impassable (like a wall). The default, false, - /// makes the check more restrictive. - /// True if the two points are within a given range without being obstructed. - public bool InRangeUnobstructed(MapCoordinates coords, MapCoordinates otherCoords, float range = InteractionRange, - int collisionMask = (int)CollisionGroup.Impassable, Func predicate = null, bool ignoreInsideBlocker = false) + /// Set of coordinates to use. + /// Other set of coordinates to use. + /// + /// Maximum distance between the two sets of coordinates. + /// + /// The mask to check for collisions. + /// + /// A predicate to check whether to ignore an entity or not. + /// If it returns true, it will be ignored. + /// + /// + /// If true and or are inside + /// the obstruction, ignores the obstruction and considers the interaction + /// unobstructed. + /// Therefore, setting this to true makes this check more permissive, + /// such as allowing an interaction to occur inside something impassable + /// (like a wall). The default, false, makes the check more restrictive. + /// + /// + /// True if the two points are within a given range without being obstructed. + /// + public bool InRangeUnobstructed( + MapCoordinates origin, + MapCoordinates other, + float range = InteractionRange, + CollisionGroup collisionMask = CollisionGroup.Impassable, + Ignored predicate = null, + bool ignoreInsideBlocker = false) { - if (!coords.InRange(otherCoords, range)) - return false; + if (!origin.InRange(other, range)) return false; - var dir = otherCoords.Position - coords.Position; + var dir = other.Position - origin.Position; if (dir.LengthSquared.Equals(0f)) return true; if (range > 0f && !(dir.LengthSquared <= range * range)) return false; - var ray = new CollisionRay(coords.Position, dir.Normalized, collisionMask); - var rayResults = _physicsManager.IntersectRayWithPredicate(coords.MapId, ray, dir.Length, predicate, returnOnFirstHit: false).ToList(); - return rayResults.Count == 0 || (ignoreInsideBlocker && rayResults.Count > 0 && (rayResults[0].HitPos - otherCoords.Position).Length < 1f); + predicate ??= _ => false; + + var ray = new CollisionRay(origin.Position, dir.Normalized, (int) collisionMask); + var rayResults = _physicsManager.IntersectRayWithPredicate(origin.MapId, ray, dir.Length, predicate.Invoke, false).ToList(); + + if (rayResults.Count == 0) return true; + + if (!ignoreInsideBlocker) return false; + + if (rayResults.Count <= 0) return false; + + return (rayResults[0].HitPos - other.Position).Length < 1f; } /// - /// Checks that these coordinates are within a certain distance without any + /// Checks that two entities are within a certain distance without any /// entity that matches the collision mask obstructing them. /// If the is zero or negative, - /// this method will only check if nothing obstructs the two sets of coordinates.. + /// this method will only check if nothing obstructs the two entities. /// - /// Set of coordinates to use. - /// Other set of coordinates to use. - /// maximum distance between the two sets of coordinates. - /// the mask to check for collisions - /// the entity to be ignored when checking for collisions. - /// if true and the coordinates are inside the obstruction, ignores the obstruction and - /// considers the interaction unobstructed. Therefore, setting this to true makes this check more permissive, such - /// as allowing an interaction to occur inside something impassable (like a wall). The default, false, - /// makes the check more restrictive. - /// True if the two points are within a given range without being obstructed. - public bool InRangeUnobstructed(MapCoordinates coords, MapCoordinates otherCoords, float range = InteractionRange, - int collisionMask = (int)CollisionGroup.Impassable, IEntity ignoredEnt = null, bool ignoreInsideBlocker = false) => - InRangeUnobstructed(coords, otherCoords, range, collisionMask, - ignoredEnt == null ? null : (Func)(entity => ignoredEnt == entity), ignoreInsideBlocker); + /// The first entity to use. + /// Other entity to use. + /// + /// Maximum distance between the two entities. + /// + /// The mask to check for collisions. + /// + /// A predicate to check whether to ignore an entity or not. + /// If it returns true, it will be ignored. + /// + /// + /// If true and or are inside + /// the obstruction, ignores the obstruction and considers the interaction + /// unobstructed. + /// Therefore, setting this to true makes this check more permissive, + /// such as allowing an interaction to occur inside something impassable + /// (like a wall). The default, false, makes the check more restrictive. + /// + /// + /// Whether or not to popup a feedback message on the origin entity for + /// it to see. + /// + /// + /// True if the two points are within a given range without being obstructed. + /// + public bool InRangeUnobstructed( + IEntity origin, + IEntity other, + float range = InteractionRange, + CollisionGroup collisionMask = CollisionGroup.Impassable, + Ignored predicate = null, + bool ignoreInsideBlocker = false, + bool popup = false) + { + var originPosition = origin.Transform.MapPosition; + var otherPosition = other.Transform.MapPosition; + predicate ??= e => e == origin || e == other; + + var inRange = InRangeUnobstructed(originPosition, otherPosition, range, collisionMask, predicate, ignoreInsideBlocker); + + if (!inRange && popup) + { + var message = Loc.GetString("You can't reach there!"); + origin.PopupMessage(origin, message); + } + + return inRange; + } + + /// + /// Checks that an entity and a component are within a certain + /// distance without any entity that matches the collision mask + /// obstructing them. + /// If the is zero or negative, + /// this method will only check if nothing obstructs the entity and component. + /// + /// The entity to use. + /// The component to use. + /// + /// Maximum distance between the entity and component. + /// + /// The mask to check for collisions. + /// + /// A predicate to check whether to ignore an entity or not. + /// If it returns true, it will be ignored. + /// + /// + /// If true and or are inside + /// the obstruction, ignores the obstruction and considers the interaction + /// unobstructed. + /// Therefore, setting this to true makes this check more permissive, + /// such as allowing an interaction to occur inside something impassable + /// (like a wall). The default, false, makes the check more restrictive. + /// + /// + /// Whether or not to popup a feedback message on the origin entity for + /// it to see. + /// + /// + /// True if the two points are within a given range without being obstructed. + /// + public bool InRangeUnobstructed( + IEntity origin, + IComponent other, + float range = InteractionRange, + CollisionGroup collisionMask = CollisionGroup.Impassable, + Ignored predicate = null, + bool ignoreInsideBlocker = false, + bool popup = false) + { + var originPosition = origin.Transform.MapPosition; + var otherPosition = other.Owner.Transform.MapPosition; + predicate ??= e => e == origin || e == other.Owner; + + var inRange = InRangeUnobstructed(originPosition, otherPosition, range, collisionMask, predicate, ignoreInsideBlocker); + + if (!inRange && popup) + { + var message = Loc.GetString("You can't reach there!"); + origin.PopupMessage(origin, message); + } + + return inRange; + } + + /// + /// Checks that an entity and a set of grid coordinates are within a certain + /// distance without any entity that matches the collision mask + /// obstructing them. + /// If the is zero or negative, + /// this method will only check if nothing obstructs the entity and component. + /// + /// The entity to use. + /// The grid coordinates to use. + /// + /// Maximum distance between the two entity and set of grid coordinates. + /// + /// The mask to check for collisions. + /// + /// A predicate to check whether to ignore an entity or not. + /// If it returns true, it will be ignored. + /// + /// + /// If true and or are inside + /// the obstruction, ignores the obstruction and considers the interaction + /// unobstructed. + /// Therefore, setting this to true makes this check more permissive, + /// such as allowing an interaction to occur inside something impassable + /// (like a wall). The default, false, makes the check more restrictive. + /// + /// + /// Whether or not to popup a feedback message on the origin entity for + /// it to see. + /// + /// + /// True if the two points are within a given range without being obstructed. + /// + public bool InRangeUnobstructed( + IEntity origin, + GridCoordinates other, + float range = InteractionRange, + CollisionGroup collisionMask = CollisionGroup.Impassable, + Ignored predicate = null, + bool ignoreInsideBlocker = false, + bool popup = false) + { + var originPosition = origin.Transform.MapPosition; + var otherPosition = other.ToMap(_mapManager); + predicate ??= e => e == origin; + + var inRange = InRangeUnobstructed(originPosition, otherPosition, range, collisionMask, predicate, ignoreInsideBlocker); + + if (!inRange && popup) + { + var message = Loc.GetString("You can't reach there!"); + origin.PopupMessage(origin, message); + } + + return inRange; + } + + /// + /// Checks that an entity and a set of map coordinates are within a certain + /// distance without any entity that matches the collision mask + /// obstructing them. + /// If the is zero or negative, + /// this method will only check if nothing obstructs the entity and component. + /// + /// The entity to use. + /// The map coordinates to use. + /// + /// Maximum distance between the two entity and set of map coordinates. + /// + /// The mask to check for collisions. + /// + /// A predicate to check whether to ignore an entity or not. + /// If it returns true, it will be ignored. + /// + /// + /// If true and or are inside + /// the obstruction, ignores the obstruction and considers the interaction + /// unobstructed. + /// Therefore, setting this to true makes this check more permissive, + /// such as allowing an interaction to occur inside something impassable + /// (like a wall). The default, false, makes the check more restrictive. + /// + /// + /// Whether or not to popup a feedback message on the origin entity for + /// it to see. + /// + /// + /// True if the two points are within a given range without being obstructed. + /// + public bool InRangeUnobstructed( + IEntity origin, + MapCoordinates other, + float range = InteractionRange, + CollisionGroup collisionMask = CollisionGroup.Impassable, + Ignored predicate = null, + bool ignoreInsideBlocker = false, + bool popup = false) + { + var originPosition = origin.Transform.MapPosition; + predicate ??= e => e == origin; + + var inRange = InRangeUnobstructed(originPosition, other, range, collisionMask, predicate, ignoreInsideBlocker); + + if (!inRange && popup) + { + var message = Loc.GetString("You can't reach there!"); + origin.PopupMessage(origin, message); + } + + return inRange; + } + + /// + /// Checks that the user and target of a + /// are within a certain + /// distance without any entity that matches the collision mask + /// obstructing them. + /// If the is zero or negative, + /// this method will only check if nothing obstructs the entity and component. + /// + /// The event args to use. + /// + /// Maximum distance between the two entity and set of map coordinates. + /// + /// The mask to check for collisions. + /// + /// A predicate to check whether to ignore an entity or not. + /// If it returns true, it will be ignored. + /// + /// + /// If true and both the user and target are inside + /// the obstruction, ignores the obstruction and considers the interaction + /// unobstructed. + /// Therefore, setting this to true makes this check more permissive, + /// such as allowing an interaction to occur inside something impassable + /// (like a wall). The default, false, makes the check more restrictive. + /// + /// + /// Whether or not to popup a feedback message on the user entity for + /// it to see. + /// + /// + /// True if the two points are within a given range without being obstructed. + /// + public bool InRangeUnobstructed( + ITargetedInteractEventArgs args, + float range = InteractionRange, + CollisionGroup collisionMask = CollisionGroup.Impassable, + Ignored predicate = null, + bool ignoreInsideBlocker = false, + bool popup = false) + { + var origin = args.User; + var other = args.Target; + + return InRangeUnobstructed(origin, other, range, collisionMask, predicate, ignoreInsideBlocker, popup); + } + + /// + /// Checks that the user of a is within a + /// certain distance of the target and dropped entities without any entity + /// that matches the collision mask obstructing them. + /// If the is zero or negative, + /// this method will only check if nothing obstructs the entity and component. + /// + /// The event args to use. + /// + /// Maximum distance between the two entity and set of map coordinates. + /// + /// The mask to check for collisions. + /// + /// A predicate to check whether to ignore an entity or not. + /// If it returns true, it will be ignored. + /// + /// + /// If true and both the user and target are inside + /// the obstruction, ignores the obstruction and considers the interaction + /// unobstructed. + /// Therefore, setting this to true makes this check more permissive, + /// such as allowing an interaction to occur inside something impassable + /// (like a wall). The default, false, makes the check more restrictive. + /// + /// + /// Whether or not to popup a feedback message on the user entity for + /// it to see. + /// + /// + /// True if the two points are within a given range without being obstructed. + /// + public bool InRangeUnobstructed( + DragDropEventArgs args, + float range = InteractionRange, + CollisionGroup collisionMask = CollisionGroup.Impassable, + Ignored predicate = null, + bool ignoreInsideBlocker = false, + bool popup = false) + { + var user = args.User; + var dropped = args.Dropped; + var target = args.Target; + + if (!InRangeUnobstructed(user, target, range, collisionMask, predicate, ignoreInsideBlocker)) + { + if (popup) + { + var message = Loc.GetString("You can't reach there!"); + target.PopupMessage(user, message); + } + + return false; + } + + if (!InRangeUnobstructed(user, dropped, range, collisionMask, predicate, ignoreInsideBlocker)) + { + if (popup) + { + var message = Loc.GetString("You can't reach there!"); + dropped.PopupMessage(user, message); + } + + return false; + } + + return true; + } + + /// + /// Checks that the user and target of a + /// are within a certain distance + /// without any entity that matches the collision mask obstructing them. + /// If the is zero or negative, + /// this method will only check if nothing obstructs the entity and component. + /// + /// The event args to use. + /// + /// Maximum distance between the two entity and set of map coordinates. + /// + /// The mask to check for collisions. + /// + /// A predicate to check whether to ignore an entity or not. + /// If it returns true, it will be ignored. + /// + /// + /// If true and both the user and target are inside + /// the obstruction, ignores the obstruction and considers the interaction + /// unobstructed. + /// Therefore, setting this to true makes this check more permissive, + /// such as allowing an interaction to occur inside something impassable + /// (like a wall). The default, false, makes the check more restrictive. + /// + /// + /// Whether or not to popup a feedback message on the user entity for + /// it to see. + /// + /// + /// True if the two points are within a given range without being obstructed. + /// + public bool InRangeUnobstructed( + AfterInteractEventArgs args, + float range = InteractionRange, + CollisionGroup collisionMask = CollisionGroup.Impassable, + Ignored predicate = null, + bool ignoreInsideBlocker = false, + bool popup = false) + { + var user = args.User; + var target = args.Target; + predicate ??= e => e == user; + + MapCoordinates otherPosition; + + if (target == null) + { + otherPosition = args.ClickLocation.ToMap(_mapManager); + } + else + { + otherPosition = target.Transform.MapPosition; + predicate += e => e == target; + } + + return InRangeUnobstructed(user, otherPosition, range, collisionMask, predicate, ignoreInsideBlocker, popup); + } } } diff --git a/Content.Shared/GameObjects/Verbs/SharedVerbSystem.cs b/Content.Shared/GameObjects/Verbs/SharedVerbSystem.cs index 51714a1198..82c5a940e2 100644 --- a/Content.Shared/GameObjects/Verbs/SharedVerbSystem.cs +++ b/Content.Shared/GameObjects/Verbs/SharedVerbSystem.cs @@ -1,10 +1,9 @@ #nullable enable -using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Linq; -using Content.Shared.GameObjects.EntitySystems; using Content.Shared.Physics; +using Content.Shared.Utility; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; @@ -15,14 +14,6 @@ namespace Content.Shared.GameObjects.Verbs { public class SharedVerbSystem : EntitySystem { - private SharedInteractionSystem _interactionSystem = null!; - - public override void Initialize() - { - base.Initialize(); - _interactionSystem = Get(); - } - /// /// Get all of the entities relevant for the contextmenu /// @@ -35,29 +26,27 @@ namespace Content.Shared.GameObjects.Verbs { contextEntities = null; var length = buffer ? 1.0f: 0.5f; - + var entities = EntityManager.GetEntitiesIntersecting(targetPos.MapId, Box2.CenteredAround(targetPos.Position, (length, length))).ToList(); - + if (entities.Count == 0) { return false; } - + // Check if we have LOS to the clicked-location, otherwise no popup. var vectorDiff = player.Transform.MapPosition.Position - targetPos.Position; var distance = vectorDiff.Length + 0.01f; - Func ignored = entity => entities.Contains(entity) || - entity == player || - !entity.TryGetComponent(out OccluderComponent? occluder) || - !occluder.Enabled; + bool Ignored(IEntity entity) + { + return entities.Contains(entity) || + entity == player || + !entity.TryGetComponent(out OccluderComponent? occluder) || + !occluder.Enabled; + } - var result = _interactionSystem.InRangeUnobstructed( - player.Transform.MapPosition, - targetPos, - distance, - (int) CollisionGroup.Opaque, - ignored); + var result = player.InRangeUnobstructed(targetPos, distance, CollisionGroup.Opaque, Ignored); if (!result) { @@ -68,4 +57,4 @@ namespace Content.Shared.GameObjects.Verbs return true; } } -} \ No newline at end of file +} diff --git a/Content.Shared/Utility/SharedRangeExtensions.cs b/Content.Shared/Utility/SharedRangeExtensions.cs new file mode 100644 index 0000000000..326d2adfeb --- /dev/null +++ b/Content.Shared/Utility/SharedRangeExtensions.cs @@ -0,0 +1,432 @@ +using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.Interfaces.GameObjects.Components; +using Content.Shared.Physics; +using Robust.Shared.GameObjects.Systems; +using Robust.Shared.Interfaces.GameObjects; +using Robust.Shared.Interfaces.GameObjects.Components; +using Robust.Shared.Interfaces.Map; +using Robust.Shared.IoC; +using Robust.Shared.Map; +using static Content.Shared.GameObjects.EntitySystems.SharedInteractionSystem; + +namespace Content.Shared.Utility +{ + public static class SharedRangeExtensions + { + private static SharedInteractionSystem SharedInteractionSystem => EntitySystem.Get(); + + #region Entities + public static bool InRangeUnobstructed( + this IEntity origin, + IEntity other, + float range = InteractionRange, + CollisionGroup collisionMask = CollisionGroup.Impassable, + Ignored predicate = null, + bool ignoreInsideBlocker = false, + bool popup = false) + { + return SharedInteractionSystem.InRangeUnobstructed(origin, other, range, collisionMask, predicate, + ignoreInsideBlocker, popup); + } + + public static bool InRangeUnobstructed( + this IEntity origin, + IComponent other, + float range = InteractionRange, + CollisionGroup collisionMask = CollisionGroup.Impassable, + Ignored predicate = null, + bool ignoreInsideBlocker = false, + bool popup = false) + { + return SharedInteractionSystem.InRangeUnobstructed(origin, other, range, collisionMask, predicate, + ignoreInsideBlocker, popup); + } + + public static bool InRangeUnobstructed( + this IEntity origin, + IContainer other, + float range = InteractionRange, + CollisionGroup collisionMask = CollisionGroup.Impassable, + Ignored predicate = null, + bool ignoreInsideBlocker = false, + bool popup = false) + { + var otherEntity = other.Owner; + + return SharedInteractionSystem.InRangeUnobstructed(origin, otherEntity, range, collisionMask, predicate, + ignoreInsideBlocker, popup); + } + + public static bool InRangeUnobstructed( + this IEntity origin, + GridCoordinates other, + float range = InteractionRange, + CollisionGroup collisionMask = CollisionGroup.Impassable, + Ignored predicate = null, + bool ignoreInsideBlocker = false, + bool popup = false) + { + return SharedInteractionSystem.InRangeUnobstructed(origin, other, range, collisionMask, predicate, + ignoreInsideBlocker, popup); + } + + public static bool InRangeUnobstructed( + this IEntity origin, + MapCoordinates other, + float range = InteractionRange, + CollisionGroup collisionMask = CollisionGroup.Impassable, + Ignored predicate = null, + bool ignoreInsideBlocker = false, + bool popup = false) + { + return SharedInteractionSystem.InRangeUnobstructed(origin, other, range, collisionMask, predicate, + ignoreInsideBlocker, popup); + } + #endregion + + #region Components + public static bool InRangeUnobstructed( + this IComponent origin, + IEntity other, + float range = InteractionRange, + CollisionGroup collisionMask = CollisionGroup.Impassable, + Ignored predicate = null, + bool ignoreInsideBlocker = false, + bool popup = false) + { + var originEntity = origin.Owner; + + return SharedInteractionSystem.InRangeUnobstructed(originEntity, other, range, collisionMask, predicate, + ignoreInsideBlocker, popup); + } + + public static bool InRangeUnobstructed( + this IComponent origin, + IComponent other, + float range = InteractionRange, + CollisionGroup collisionMask = CollisionGroup.Impassable, + Ignored predicate = null, + bool ignoreInsideBlocker = false, + bool popup = false) + { + var originEntity = origin.Owner; + + return SharedInteractionSystem.InRangeUnobstructed(originEntity, other, range, collisionMask, predicate, + ignoreInsideBlocker, popup); + } + + public static bool InRangeUnobstructed( + this IComponent origin, + IContainer other, + float range = InteractionRange, + CollisionGroup collisionMask = CollisionGroup.Impassable, + Ignored predicate = null, + bool ignoreInsideBlocker = false, + bool popup = false) + { + var originEntity = origin.Owner; + var otherEntity = other.Owner; + + return SharedInteractionSystem.InRangeUnobstructed(originEntity, otherEntity, range, collisionMask, predicate, + ignoreInsideBlocker, popup); + } + + public static bool InRangeUnobstructed( + this IComponent origin, + GridCoordinates other, + float range = InteractionRange, + CollisionGroup collisionMask = CollisionGroup.Impassable, + Ignored predicate = null, + bool ignoreInsideBlocker = false, + bool popup = false) + { + var originEntity = origin.Owner; + + return SharedInteractionSystem.InRangeUnobstructed(originEntity, other, range, collisionMask, predicate, + ignoreInsideBlocker, popup); + } + + public static bool InRangeUnobstructed( + this IComponent origin, + MapCoordinates other, + float range = InteractionRange, + CollisionGroup collisionMask = CollisionGroup.Impassable, + Ignored predicate = null, + bool ignoreInsideBlocker = false, + bool popup = false) + { + var originEntity = origin.Owner; + + return SharedInteractionSystem.InRangeUnobstructed(originEntity, other, range, collisionMask, predicate, + ignoreInsideBlocker, popup); + } + #endregion + + #region Containers + public static bool InRangeUnobstructed( + this IContainer origin, + IEntity other, + float range = InteractionRange, + CollisionGroup collisionMask = CollisionGroup.Impassable, + Ignored predicate = null, + bool ignoreInsideBlocker = false) + { + var originEntity = origin.Owner; + + return SharedInteractionSystem.InRangeUnobstructed(originEntity, other, range, collisionMask, predicate, + ignoreInsideBlocker); + } + + public static bool InRangeUnobstructed( + this IContainer origin, + IComponent other, + float range = InteractionRange, + CollisionGroup collisionMask = CollisionGroup.Impassable, + Ignored predicate = null, + bool ignoreInsideBlocker = false, + bool popup = false) + { + var originEntity = origin.Owner; + + return SharedInteractionSystem.InRangeUnobstructed(originEntity, other, range, collisionMask, predicate, + ignoreInsideBlocker, popup); + } + + public static bool InRangeUnobstructed( + this IContainer origin, + IContainer other, + float range = InteractionRange, + CollisionGroup collisionMask = CollisionGroup.Impassable, + Ignored predicate = null, + bool ignoreInsideBlocker = false, + bool popup = false) + { + var originEntity = origin.Owner; + var otherEntity = other.Owner; + + return SharedInteractionSystem.InRangeUnobstructed(originEntity, otherEntity, range, collisionMask, + predicate, ignoreInsideBlocker, popup); + } + + public static bool InRangeUnobstructed( + this IContainer origin, + GridCoordinates other, + float range = InteractionRange, + CollisionGroup collisionMask = CollisionGroup.Impassable, + Ignored predicate = null, + bool ignoreInsideBlocker = false, + bool popup = false) + { + var originEntity = origin.Owner; + + return SharedInteractionSystem.InRangeUnobstructed(originEntity, other, range, collisionMask, predicate, + ignoreInsideBlocker, popup); + } + + public static bool InRangeUnobstructed( + this IContainer origin, + MapCoordinates other, + float range = InteractionRange, + CollisionGroup collisionMask = CollisionGroup.Impassable, + Ignored predicate = null, + bool ignoreInsideBlocker = false, + bool popup = false) + { + var originEntity = origin.Owner; + + return SharedInteractionSystem.InRangeUnobstructed(originEntity, other, range, collisionMask, predicate, + ignoreInsideBlocker, popup); + } + #endregion + + #region GridCoordinates + public static bool InRangeUnobstructed( + this GridCoordinates origin, + IEntity other, + float range = InteractionRange, + CollisionGroup collisionMask = CollisionGroup.Impassable, + Ignored predicate = null, + bool ignoreInsideBlocker = false) + { + var mapManager = IoCManager.Resolve(); + var originPosition = origin.ToMap(mapManager); + var otherPosition = other.Transform.MapPosition; + + return SharedInteractionSystem.InRangeUnobstructed(originPosition, otherPosition, range, collisionMask, + predicate, ignoreInsideBlocker); + } + + public static bool InRangeUnobstructed( + this GridCoordinates origin, + IComponent other, + float range = InteractionRange, + CollisionGroup collisionMask = CollisionGroup.Impassable, + Ignored predicate = null, + bool ignoreInsideBlocker = false) + { + var mapManager = IoCManager.Resolve(); + var originPosition = origin.ToMap(mapManager); + var otherPosition = other.Owner.Transform.MapPosition; + + return SharedInteractionSystem.InRangeUnobstructed(originPosition, otherPosition, range, collisionMask, + predicate, ignoreInsideBlocker); + } + + public static bool InRangeUnobstructed( + this GridCoordinates origin, + IContainer other, + float range = InteractionRange, + CollisionGroup collisionMask = CollisionGroup.Impassable, + Ignored predicate = null, + bool ignoreInsideBlocker = false) + { + var mapManager = IoCManager.Resolve(); + var originPosition = origin.ToMap(mapManager); + var otherPosition = other.Owner.Transform.MapPosition; + + return SharedInteractionSystem.InRangeUnobstructed(originPosition, otherPosition, range, collisionMask, + predicate, ignoreInsideBlocker); + } + + public static bool InRangeUnobstructed( + this GridCoordinates origin, + GridCoordinates other, + float range = InteractionRange, + CollisionGroup collisionMask = CollisionGroup.Impassable, + Ignored predicate = null, + bool ignoreInsideBlocker = false) + { + var mapManager = IoCManager.Resolve(); + var originPosition = origin.ToMap(mapManager); + var otherPosition = other.ToMap(mapManager); + + return SharedInteractionSystem.InRangeUnobstructed(originPosition, otherPosition, range, collisionMask, + predicate, ignoreInsideBlocker); + } + + public static bool InRangeUnobstructed( + this GridCoordinates origin, + MapCoordinates other, + float range = InteractionRange, + CollisionGroup collisionMask = CollisionGroup.Impassable, + Ignored predicate = null, + bool ignoreInsideBlocker = false) + { + var mapManager = IoCManager.Resolve(); + var originPosition = origin.ToMap(mapManager); + + return SharedInteractionSystem.InRangeUnobstructed(originPosition, other, range, collisionMask, predicate, + ignoreInsideBlocker); + } + #endregion + + #region MapCoordinates + public static bool InRangeUnobstructed( + this MapCoordinates origin, + IEntity other, + float range = InteractionRange, + CollisionGroup collisionMask = CollisionGroup.Impassable, + Ignored predicate = null, + bool ignoreInsideBlocker = false) + { + var otherPosition = other.Transform.MapPosition; + + return SharedInteractionSystem.InRangeUnobstructed(origin, otherPosition, range, collisionMask, predicate, + ignoreInsideBlocker); + } + + public static bool InRangeUnobstructed( + this MapCoordinates origin, + IComponent other, + float range = InteractionRange, + CollisionGroup collisionMask = CollisionGroup.Impassable, + Ignored predicate = null, + bool ignoreInsideBlocker = false) + { + var otherPosition = other.Owner.Transform.MapPosition; + + return SharedInteractionSystem.InRangeUnobstructed(origin, otherPosition, range, collisionMask, predicate, + ignoreInsideBlocker); + } + + public static bool InRangeUnobstructed( + this MapCoordinates origin, + IContainer other, + float range = InteractionRange, + CollisionGroup collisionMask = CollisionGroup.Impassable, + Ignored predicate = null, + bool ignoreInsideBlocker = false) + { + var otherPosition = other.Owner.Transform.MapPosition; + + return SharedInteractionSystem.InRangeUnobstructed(origin, otherPosition, range, collisionMask, predicate, + ignoreInsideBlocker); + } + + public static bool InRangeUnobstructed( + this MapCoordinates origin, + GridCoordinates other, + float range = InteractionRange, + CollisionGroup collisionMask = CollisionGroup.Impassable, + Ignored predicate = null, + bool ignoreInsideBlocker = false) + { + var mapManager = IoCManager.Resolve(); + var otherPosition = other.ToMap(mapManager); + + return SharedInteractionSystem.InRangeUnobstructed(origin, otherPosition, range, collisionMask, predicate, + ignoreInsideBlocker); + } + + public static bool InRangeUnobstructed( + this MapCoordinates origin, + MapCoordinates other, + float range = InteractionRange, + CollisionGroup collisionMask = CollisionGroup.Impassable, + Ignored predicate = null, + bool ignoreInsideBlocker = false) + { + return SharedInteractionSystem.InRangeUnobstructed(origin, other, range, collisionMask, predicate, + ignoreInsideBlocker); + } + #endregion + + #region EventArgs + public static bool InRangeUnobstructed( + this ITargetedInteractEventArgs args, + float range = InteractionRange, + CollisionGroup collisionMask = CollisionGroup.Impassable, + Ignored predicate = null, + bool ignoreInsideBlocker = false, + bool popup = false) + { + return SharedInteractionSystem.InRangeUnobstructed(args, range, collisionMask, predicate, + ignoreInsideBlocker, popup); + } + + public static bool InRangeUnobstructed( + this DragDropEventArgs args, + float range = InteractionRange, + CollisionGroup collisionMask = CollisionGroup.Impassable, + Ignored predicate = null, + bool ignoreInsideBlocker = false, + bool popup = false) + { + return SharedInteractionSystem.InRangeUnobstructed(args, range, collisionMask, predicate, + ignoreInsideBlocker, popup); + } + + public static bool InRangeUnobstructed( + this AfterInteractEventArgs args, + float range = InteractionRange, + CollisionGroup collisionMask = CollisionGroup.Impassable, + Ignored predicate = null, + bool ignoreInsideBlocker = false, + bool popup = false) + { + return SharedInteractionSystem.InRangeUnobstructed(args, range, collisionMask, predicate, + ignoreInsideBlocker, popup); + } + #endregion + } +} From b83c8126d7d65689f04366f025d083d6a051fdbb Mon Sep 17 00:00:00 2001 From: DrSmugleaf Date: Sun, 30 Aug 2020 12:00:47 +0200 Subject: [PATCH 036/103] Change component tests to not use stationstation (#1963) --- Content.IntegrationTests/Tests/EntityTest.cs | 40 ++++++++++++++++--- .../NodeContainer/NodeGroups/IPipeNet.cs | 13 +++--- 2 files changed, 41 insertions(+), 12 deletions(-) diff --git a/Content.IntegrationTests/Tests/EntityTest.cs b/Content.IntegrationTests/Tests/EntityTest.cs index a7353a5634..4dccc44c22 100644 --- a/Content.IntegrationTests/Tests/EntityTest.cs +++ b/Content.IntegrationTests/Tests/EntityTest.cs @@ -121,18 +121,32 @@ namespace Content.IntegrationTests.Tests var mapManager = server.ResolveDependency(); var entityManager = server.ResolveDependency(); - var mapLoader = server.ResolveDependency(); var pauseManager = server.ResolveDependency(); var componentFactory = server.ResolveDependency(); + var tileDefinitionManager = server.ResolveDependency(); IMapGrid grid = default; server.Post(() => { - // Load test map + // Create a one tile grid to stave off the grid 0 monsters var mapId = mapManager.CreateMap(); + pauseManager.AddUninitializedMap(mapId); - grid = mapLoader.LoadBlueprint(mapId, "Maps/stationstation.yml"); + + var gridId = new GridId(1); + + if (!mapManager.TryGetGrid(gridId, out grid)) + { + grid = mapManager.CreateGrid(mapId, gridId); + } + + var tileDefinition = tileDefinitionManager["underplating"]; + var tile = new Tile(tileDefinition.TileId); + var coordinates = new GridCoordinates(0, 0, gridId); + + grid.SetTile(coordinates, tile); + pauseManager.DoMapInitialize(mapId); }); @@ -202,18 +216,32 @@ namespace Content.IntegrationTests.Tests var mapManager = server.ResolveDependency(); var entityManager = server.ResolveDependency(); - var mapLoader = server.ResolveDependency(); var pauseManager = server.ResolveDependency(); var componentFactory = server.ResolveDependency(); + var tileDefinitionManager = server.ResolveDependency(); IMapGrid grid = default; server.Post(() => { - // Load test map + // Create a one tile grid to stave off the grid 0 monsters var mapId = mapManager.CreateMap(); + pauseManager.AddUninitializedMap(mapId); - grid = mapLoader.LoadBlueprint(mapId, "Maps/stationstation.yml"); + + var gridId = new GridId(1); + + if (!mapManager.TryGetGrid(gridId, out grid)) + { + grid = mapManager.CreateGrid(mapId, gridId); + } + + var tileDefinition = tileDefinitionManager["underplating"]; + var tile = new Tile(tileDefinition.TileId); + var coordinates = new GridCoordinates(0, 0, gridId); + + grid.SetTile(coordinates, tile); + pauseManager.DoMapInitialize(mapId); }); diff --git a/Content.Server/GameObjects/Components/NodeContainer/NodeGroups/IPipeNet.cs b/Content.Server/GameObjects/Components/NodeContainer/NodeGroups/IPipeNet.cs index 75f5f147b1..aa3ed5f326 100644 --- a/Content.Server/GameObjects/Components/NodeContainer/NodeGroups/IPipeNet.cs +++ b/Content.Server/GameObjects/Components/NodeContainer/NodeGroups/IPipeNet.cs @@ -27,15 +27,16 @@ namespace Content.Server.GameObjects.Components.NodeContainer.NodeGroups [ViewVariables] private readonly List _pipes = new List(); - [ViewVariables] - private IGridAtmosphereComponent _gridAtmos; + [ViewVariables] private AtmosphereSystem _atmosphereSystem; + + [ViewVariables] private IGridAtmosphereComponent GridAtmos => _atmosphereSystem.GetGridAtmosphere(GridId); public override void Initialize(Node sourceNode) { base.Initialize(sourceNode); - _gridAtmos = EntitySystem.Get() - .GetGridAtmosphere(GridId); - _gridAtmos?.AddPipeNet(this); + + _atmosphereSystem = EntitySystem.Get(); + GridAtmos?.AddPipeNet(this); } public void Update() @@ -88,7 +89,7 @@ namespace Content.Server.GameObjects.Components.NodeContainer.NodeGroups private void RemoveFromGridAtmos() { - _gridAtmos.RemovePipeNet(this); + GridAtmos?.RemovePipeNet(this); } private class NullPipeNet : IPipeNet From 68ec6e6be5c15666e4e0ddfcecc7c72995e550f1 Mon Sep 17 00:00:00 2001 From: py01 <60152240+collinlunn@users.noreply.github.com> Date: Sun, 30 Aug 2020 18:13:15 -0600 Subject: [PATCH 037/103] Pipe Sprites & Visualizer (#1954) * Pipe sprites * pipe copyright * SharedPipeComponent * Pipe Visualizer draft * missing longitudinal pipe sprites * expanded rsi states * pipe prototype fixes * Fixed pipe visualizer * ConduitLayer enum * PipeVisualizer update * halfpipe sprites * yaml unneeded proto removal * PipeVisualizer uses its own RSI * Removes unused field from PipeVisualizer Co-authored-by: py01 --- .../Components/Atmos/PipeVisualizer.cs | 69 ++++++ .../Atmos/Piping/Pumps/BasePumpComponent.cs | 1 + .../NodeContainer/Nodes/PipeNode.cs | 58 +++--- .../Components/Atmos/SharedPipeComponent.cs | 74 +++++++ .../Entities/Constructible/Ground/pipes.yml | 13 +- .../Constructible/Atmos/pipe.rsi/meta.json | 196 ++++++++++++++++++ .../Atmos/pipe.rsi/pipeEast2.png | Bin 0 -> 217 bytes .../Atmos/pipe.rsi/pipeFourway1.png | Bin 0 -> 556 bytes .../Atmos/pipe.rsi/pipeFourway2.png | Bin 0 -> 538 bytes .../Atmos/pipe.rsi/pipeFourway3.png | Bin 0 -> 545 bytes .../Atmos/pipe.rsi/pipeLateral1.png | Bin 0 -> 273 bytes .../Atmos/pipe.rsi/pipeLateral2.png | Bin 0 -> 278 bytes .../Atmos/pipe.rsi/pipeLateral3.png | Bin 0 -> 278 bytes .../Atmos/pipe.rsi/pipeLongitudinal1.png | Bin 0 -> 329 bytes .../Atmos/pipe.rsi/pipeLongitudinal2.png | Bin 0 -> 326 bytes .../Atmos/pipe.rsi/pipeLongitudinal3.png | Bin 0 -> 321 bytes .../Atmos/pipe.rsi/pipeNEBend1.png | Bin 0 -> 265 bytes .../Atmos/pipe.rsi/pipeNEBend2.png | Bin 0 -> 255 bytes .../Atmos/pipe.rsi/pipeNEBend3.png | Bin 0 -> 222 bytes .../Atmos/pipe.rsi/pipeNWBend1.png | Bin 0 -> 317 bytes .../Atmos/pipe.rsi/pipeNWBend2.png | Bin 0 -> 347 bytes .../Atmos/pipe.rsi/pipeNWBend3.png | Bin 0 -> 324 bytes .../Atmos/pipe.rsi/pipeNorth2.png | Bin 0 -> 229 bytes .../Atmos/pipe.rsi/pipeSEBend1.png | Bin 0 -> 233 bytes .../Atmos/pipe.rsi/pipeSEBend2.png | Bin 0 -> 264 bytes .../Atmos/pipe.rsi/pipeSEBend3.png | Bin 0 -> 276 bytes .../Atmos/pipe.rsi/pipeSWBend1.png | Bin 0 -> 267 bytes .../Atmos/pipe.rsi/pipeSWBend2.png | Bin 0 -> 292 bytes .../Atmos/pipe.rsi/pipeSWBend3.png | Bin 0 -> 309 bytes .../Atmos/pipe.rsi/pipeSouth2.png | Bin 0 -> 278 bytes .../Atmos/pipe.rsi/pipeTEast1.png | Bin 0 -> 450 bytes .../Atmos/pipe.rsi/pipeTEast2.png | Bin 0 -> 450 bytes .../Atmos/pipe.rsi/pipeTEast3.png | Bin 0 -> 433 bytes .../Atmos/pipe.rsi/pipeTNorth1.png | Bin 0 -> 474 bytes .../Atmos/pipe.rsi/pipeTNorth2.png | Bin 0 -> 447 bytes .../Atmos/pipe.rsi/pipeTNorth3.png | Bin 0 -> 427 bytes .../Atmos/pipe.rsi/pipeTSouth1.png | Bin 0 -> 398 bytes .../Atmos/pipe.rsi/pipeTSouth2.png | Bin 0 -> 416 bytes .../Atmos/pipe.rsi/pipeTSouth3.png | Bin 0 -> 426 bytes .../Atmos/pipe.rsi/pipeTWest1.png | Bin 0 -> 449 bytes .../Atmos/pipe.rsi/pipeTWest2.png | Bin 0 -> 471 bytes .../Atmos/pipe.rsi/pipeTWest3.png | Bin 0 -> 479 bytes .../Atmos/pipe.rsi/pipeWest2.png | Bin 0 -> 236 bytes 43 files changed, 371 insertions(+), 40 deletions(-) create mode 100644 Content.Client/GameObjects/Components/Atmos/PipeVisualizer.cs create mode 100644 Content.Shared/GameObjects/Components/Atmos/SharedPipeComponent.cs create mode 100644 Resources/Textures/Constructible/Atmos/pipe.rsi/meta.json create mode 100644 Resources/Textures/Constructible/Atmos/pipe.rsi/pipeEast2.png create mode 100644 Resources/Textures/Constructible/Atmos/pipe.rsi/pipeFourway1.png create mode 100644 Resources/Textures/Constructible/Atmos/pipe.rsi/pipeFourway2.png create mode 100644 Resources/Textures/Constructible/Atmos/pipe.rsi/pipeFourway3.png create mode 100644 Resources/Textures/Constructible/Atmos/pipe.rsi/pipeLateral1.png create mode 100644 Resources/Textures/Constructible/Atmos/pipe.rsi/pipeLateral2.png create mode 100644 Resources/Textures/Constructible/Atmos/pipe.rsi/pipeLateral3.png create mode 100644 Resources/Textures/Constructible/Atmos/pipe.rsi/pipeLongitudinal1.png create mode 100644 Resources/Textures/Constructible/Atmos/pipe.rsi/pipeLongitudinal2.png create mode 100644 Resources/Textures/Constructible/Atmos/pipe.rsi/pipeLongitudinal3.png create mode 100644 Resources/Textures/Constructible/Atmos/pipe.rsi/pipeNEBend1.png create mode 100644 Resources/Textures/Constructible/Atmos/pipe.rsi/pipeNEBend2.png create mode 100644 Resources/Textures/Constructible/Atmos/pipe.rsi/pipeNEBend3.png create mode 100644 Resources/Textures/Constructible/Atmos/pipe.rsi/pipeNWBend1.png create mode 100644 Resources/Textures/Constructible/Atmos/pipe.rsi/pipeNWBend2.png create mode 100644 Resources/Textures/Constructible/Atmos/pipe.rsi/pipeNWBend3.png create mode 100644 Resources/Textures/Constructible/Atmos/pipe.rsi/pipeNorth2.png create mode 100644 Resources/Textures/Constructible/Atmos/pipe.rsi/pipeSEBend1.png create mode 100644 Resources/Textures/Constructible/Atmos/pipe.rsi/pipeSEBend2.png create mode 100644 Resources/Textures/Constructible/Atmos/pipe.rsi/pipeSEBend3.png create mode 100644 Resources/Textures/Constructible/Atmos/pipe.rsi/pipeSWBend1.png create mode 100644 Resources/Textures/Constructible/Atmos/pipe.rsi/pipeSWBend2.png create mode 100644 Resources/Textures/Constructible/Atmos/pipe.rsi/pipeSWBend3.png create mode 100644 Resources/Textures/Constructible/Atmos/pipe.rsi/pipeSouth2.png create mode 100644 Resources/Textures/Constructible/Atmos/pipe.rsi/pipeTEast1.png create mode 100644 Resources/Textures/Constructible/Atmos/pipe.rsi/pipeTEast2.png create mode 100644 Resources/Textures/Constructible/Atmos/pipe.rsi/pipeTEast3.png create mode 100644 Resources/Textures/Constructible/Atmos/pipe.rsi/pipeTNorth1.png create mode 100644 Resources/Textures/Constructible/Atmos/pipe.rsi/pipeTNorth2.png create mode 100644 Resources/Textures/Constructible/Atmos/pipe.rsi/pipeTNorth3.png create mode 100644 Resources/Textures/Constructible/Atmos/pipe.rsi/pipeTSouth1.png create mode 100644 Resources/Textures/Constructible/Atmos/pipe.rsi/pipeTSouth2.png create mode 100644 Resources/Textures/Constructible/Atmos/pipe.rsi/pipeTSouth3.png create mode 100644 Resources/Textures/Constructible/Atmos/pipe.rsi/pipeTWest1.png create mode 100644 Resources/Textures/Constructible/Atmos/pipe.rsi/pipeTWest2.png create mode 100644 Resources/Textures/Constructible/Atmos/pipe.rsi/pipeTWest3.png create mode 100644 Resources/Textures/Constructible/Atmos/pipe.rsi/pipeWest2.png diff --git a/Content.Client/GameObjects/Components/Atmos/PipeVisualizer.cs b/Content.Client/GameObjects/Components/Atmos/PipeVisualizer.cs new file mode 100644 index 0000000000..7d057e0766 --- /dev/null +++ b/Content.Client/GameObjects/Components/Atmos/PipeVisualizer.cs @@ -0,0 +1,69 @@ +using Content.Shared.GameObjects.Components.Atmos; +using JetBrains.Annotations; +using Robust.Client.GameObjects; +using Robust.Client.Graphics; +using Robust.Client.Interfaces.GameObjects.Components; +using Robust.Client.Interfaces.ResourceManagement; +using Robust.Client.ResourceManagement; +using Robust.Shared.GameObjects.Components.Renderable; +using Robust.Shared.IoC; +using Robust.Shared.Log; +using Robust.Shared.Utility; +using System; +using System.Collections.Generic; +using YamlDotNet.RepresentationModel; + +namespace Content.Client.GameObjects.Components.Atmos +{ + [UsedImplicitly] + public class PipeVisualizer : AppearanceVisualizer + { + private RSI _pipeRSI; + + public override void LoadData(YamlMappingNode node) + { + base.LoadData(node); + + var rsiString = node.GetNode("pipeRSI").ToString(); + var rsiPath = SharedSpriteComponent.TextureRoot / rsiString; + try + { + var resourceCache = IoCManager.Resolve(); + var resource = resourceCache.GetResource(rsiPath); + _pipeRSI = resource.RSI; + } + catch (Exception e) + { + Logger.ErrorS("go.pipevisualizer", "Unable to load RSI '{0}'. Trace:\n{1}", rsiPath, e); + } + } + + public override void OnChangeData(AppearanceComponent component) + { + base.OnChangeData(component); + + if (!component.Owner.TryGetComponent(out ISpriteComponent sprite)) + { + return; + } + if (!component.TryGetData(PipeVisuals.VisualState, out PipeVisualStateSet pipeVisualStateSet)) + { + return; + } + for (var i = 0; i < pipeVisualStateSet.PipeVisualStates.Length; i++) + { + var pipeVisualState = pipeVisualStateSet.PipeVisualStates[i]; + var rsiState = "pipe"; + rsiState += pipeVisualState.PipeDirection.ToString(); + rsiState += ((int) pipeVisualState.ConduitLayer).ToString(); + + var pipeLayerKey = "pipeLayer" + i.ToString(); + sprite.LayerMapReserveBlank(pipeLayerKey); + var currentPipeLayer = sprite.LayerMapGet(pipeLayerKey); + sprite.LayerSetRSI(currentPipeLayer, _pipeRSI); + sprite.LayerSetState(currentPipeLayer, rsiState); + sprite.LayerSetVisible(currentPipeLayer, true); + } + } + } +} diff --git a/Content.Server/GameObjects/Components/Atmos/Piping/Pumps/BasePumpComponent.cs b/Content.Server/GameObjects/Components/Atmos/Piping/Pumps/BasePumpComponent.cs index 0099549e84..23e9f63c33 100644 --- a/Content.Server/GameObjects/Components/Atmos/Piping/Pumps/BasePumpComponent.cs +++ b/Content.Server/GameObjects/Components/Atmos/Piping/Pumps/BasePumpComponent.cs @@ -1,6 +1,7 @@ using Content.Server.Atmos; using Content.Server.GameObjects.Components.NodeContainer; using Content.Server.GameObjects.Components.NodeContainer.Nodes; +using Content.Shared.GameObjects.Components.Atmos; using Robust.Shared.Log; using Robust.Shared.Serialization; using Robust.Shared.ViewVariables; diff --git a/Content.Server/GameObjects/Components/NodeContainer/Nodes/PipeNode.cs b/Content.Server/GameObjects/Components/NodeContainer/Nodes/PipeNode.cs index b35d16280f..ddd2d57c9a 100644 --- a/Content.Server/GameObjects/Components/NodeContainer/Nodes/PipeNode.cs +++ b/Content.Server/GameObjects/Components/NodeContainer/Nodes/PipeNode.cs @@ -1,7 +1,8 @@ using Content.Server.Atmos; using Content.Server.GameObjects.Components.NodeContainer.NodeGroups; using Content.Server.Interfaces; -using Content.Shared.Atmos; +using Content.Shared.GameObjects.Components.Atmos; +using Robust.Server.GameObjects; using Robust.Shared.GameObjects.Components.Transform; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Maths; @@ -23,6 +24,12 @@ namespace Content.Server.GameObjects.Components.NodeContainer.Nodes public PipeDirection PipeDirection => _pipeDirection; private PipeDirection _pipeDirection; + /// + /// Controls what visuals are applied in . + /// + public ConduitLayer ConduitLayer => _conduitLayer; + private ConduitLayer _conduitLayer; + [ViewVariables] private IPipeNet _pipeNet = PipeNet.NullNet; @@ -55,17 +62,24 @@ namespace Content.Server.GameObjects.Components.NodeContainer.Nodes [ViewVariables] public float Volume { get; private set; } + private AppearanceComponent _appearance; + + private PipeVisualState PipeVisualState => new PipeVisualState(PipeDirection, ConduitLayer); + public override void ExposeData(ObjectSerializer serializer) { base.ExposeData(serializer); serializer.DataField(ref _pipeDirection, "pipeDirection", PipeDirection.None); serializer.DataField(this, x => Volume, "volume", 10); + serializer.DataField(ref _conduitLayer, "conduitLayer", ConduitLayer.Two); } public override void Initialize(IEntity owner) { base.Initialize(owner); LocalAir = new GasMixture(Volume); + Owner.TryGetComponent(out _appearance); + UpdateAppearance(); } public void JoinPipeNet(IPipeNet pipeNet) @@ -128,6 +142,16 @@ namespace Content.Server.GameObjects.Components.NodeContainer.Nodes } } + private void UpdateAppearance() + { + var pipeVisualStates = Owner.GetComponent() + .Nodes + .OfType() + .Select(pipeNode => pipeNode.PipeVisualState) + .ToArray(); + _appearance?.SetData(PipeVisuals.VisualState, new PipeVisualStateSet(pipeVisualStates)); + } + private enum CardinalDirection { North = Direction.North, @@ -136,36 +160,4 @@ namespace Content.Server.GameObjects.Components.NodeContainer.Nodes West = Direction.West, } } - - public enum PipeDirection - { - None = 0, - - //Half of a pipe in a direction - North = 1 << 0, - South = 1 << 1, - West = 1 << 2, - East = 1 << 3, - - //Straight pipes - Longitudinal = North | South, - Lateral = West | East, - - //Bends - NWBend = North | West, - NEBend = North | East, - SWBend = South | West, - SEBend = South | East, - - //T-Junctions - TNorth = North | Lateral, - TSouth = South | Lateral, - TWest = West | Longitudinal, - TEast = East | Longitudinal, - - //Four way - FourWay = North | South | East | West, - - All = -1, - } } diff --git a/Content.Shared/GameObjects/Components/Atmos/SharedPipeComponent.cs b/Content.Shared/GameObjects/Components/Atmos/SharedPipeComponent.cs new file mode 100644 index 0000000000..f588dc44da --- /dev/null +++ b/Content.Shared/GameObjects/Components/Atmos/SharedPipeComponent.cs @@ -0,0 +1,74 @@ +using Robust.Shared.Serialization; +using System; + +namespace Content.Shared.GameObjects.Components.Atmos +{ + [Serializable, NetSerializable] + public enum PipeVisuals + { + VisualState + } + + [Serializable, NetSerializable] + public class PipeVisualStateSet + { + public readonly PipeVisualState[] PipeVisualStates; + + public PipeVisualStateSet(PipeVisualState[] pipeVisualStates) + { + PipeVisualStates = pipeVisualStates; + } + } + + [Serializable, NetSerializable] + public class PipeVisualState + { + public readonly PipeDirection PipeDirection; + public readonly ConduitLayer ConduitLayer; + + public PipeVisualState(PipeDirection pipeDirection, ConduitLayer conduitLayer) + { + PipeDirection = pipeDirection; + ConduitLayer = conduitLayer; + } + } + + public enum PipeDirection + { + None = 0, + + //Half of a pipe in a direction + North = 1 << 0, + South = 1 << 1, + West = 1 << 2, + East = 1 << 3, + + //Straight pipes + Longitudinal = North | South, + Lateral = West | East, + + //Bends + NWBend = North | West, + NEBend = North | East, + SWBend = South | West, + SEBend = South | East, + + //T-Junctions + TNorth = North | Lateral, + TSouth = South | Lateral, + TWest = West | Longitudinal, + TEast = East | Longitudinal, + + //Four way + Fourway = North | South | East | West, + + All = -1, + } + + public enum ConduitLayer + { + One = 1, + Two = 2, + Three = 3, + } +} diff --git a/Resources/Prototypes/Entities/Constructible/Ground/pipes.yml b/Resources/Prototypes/Entities/Constructible/Ground/pipes.yml index 5dcbab768c..da29191613 100644 --- a/Resources/Prototypes/Entities/Constructible/Ground/pipes.yml +++ b/Resources/Prototypes/Entities/Constructible/Ground/pipes.yml @@ -12,32 +12,31 @@ - type: Icon texture: Constructible/Power/eightdirwire.png - type: Sprite - sprite: Constructible/Power/hv_cable.rsi - type: Destructible thresholdvalue: 100 + - type: Appearance + visuals: + - type: PipeVisualizer + pipeRSI: Constructible/Atmos/pipe.rsi - type: entity parent: PipeBase id: FourwayPipe name: Fourway Pipe components: - - type: Sprite - state: hvcable_15 - type: NodeContainer nodes: - !type:PipeNode nodeGroupID: Pipe - pipeDirection: FourWay + pipeDirection: Fourway - type: entity parent: PipeBase id: LongitudinalPipe name: Longitudinal Pipe components: - - type: Sprite - state: hvcable_3 - type: NodeContainer nodes: - !type:PipeNode nodeGroupID: Pipe - pipeDirection: Longitudinal + pipeDirection: Longitudinal \ No newline at end of file diff --git a/Resources/Textures/Constructible/Atmos/pipe.rsi/meta.json b/Resources/Textures/Constructible/Atmos/pipe.rsi/meta.json new file mode 100644 index 0000000000..92a08111a2 --- /dev/null +++ b/Resources/Textures/Constructible/Atmos/pipe.rsi/meta.json @@ -0,0 +1,196 @@ +{ + "version":1, + "size":{ + "x":32, + "y":32 + }, + "license":"CC-BY-SA-3.0", + "copyright":"Taken from https://github.com/tgstation/tgstation at commit 57cd1d59ca019dd0e7811ac451f295f818e573da", + "states":[ + { + "name":"pipeEast2", + "directions":1, + "delays":[ [ 1.0 ] ] + }, + { + "name":"pipeNorth2", + "directions":1, + "delays":[ [ 1.0 ] ] + }, + { + "name":"pipeSouth2", + "directions":1, + "delays":[ [ 1.0 ] ] + }, + { + "name":"pipeWest2", + "directions":1, + "delays":[ [ 1.0 ] ] + }, + { + "name":"pipeFourway1", + "directions":1, + "delays":[ [ 1.0 ] ] + }, + { + "name":"pipeFourway2", + "directions":1, + "delays":[ [ 1.0 ] ] + }, + { + "name":"pipeFourway3", + "directions":1, + "delays":[ [ 1.0 ] ] + }, + { + "name":"pipeLateral1", + "directions":1, + "delays":[ [ 1.0 ] ] + }, + { + "name":"pipeLateral2", + "directions":1, + "delays":[ [ 1.0 ] ] + }, + { + "name":"pipeLateral3", + "directions":1, + "delays":[ [ 1.0 ] ] + }, + { + "name":"pipeLongitudinal1", + "directions":1, + "delays":[ [ 1.0 ] ] + }, + { + "name":"pipeLongitudinal2", + "directions":1, + "delays":[ [ 1.0 ] ] + }, + { + "name":"pipeLongitudinal3", + "directions":1, + "delays":[ [ 1.0 ] ] + }, + { + "name":"pipeNEBend1", + "directions":1, + "delays":[ [ 1.0 ] ] + }, + { + "name":"pipeNEBend2", + "directions":1, + "delays":[ [ 1.0 ] ] + }, + { + "name":"pipeNEBend3", + "directions":1, + "delays":[ [ 1.0 ] ] + }, + { + "name":"pipeNWBend1", + "directions":1, + "delays":[ [ 1.0 ] ] + }, + { + "name":"pipeNWBend2", + "directions":1, + "delays":[ [ 1.0 ] ] + }, + { + "name":"pipeNWBend3", + "directions":1, + "delays":[ [ 1.0 ] ] + }, + { + "name":"pipeSEBend1", + "directions":1, + "delays":[ [ 1.0 ] ] + }, + { + "name":"pipeSEBend2", + "directions":1, + "delays":[ [ 1.0 ] ] + }, + { + "name":"pipeSEBend3", + "directions":1, + "delays":[ [ 1.0 ] ] + }, + { + "name":"pipeSWBend1", + "directions":1, + "delays":[ [ 1.0 ] ] + }, + { + "name":"pipeSWBend2", + "directions":1, + "delays":[ [ 1.0 ] ] + }, + { + "name":"pipeSWBend3", + "directions":1, + "delays":[ [ 1.0 ] ] + }, + { + "name":"pipeTEast1", + "directions":1, + "delays":[ [ 1.0 ] ] + }, + { + "name":"pipeTEast2", + "directions":1, + "delays":[ [ 1.0 ] ] + }, + { + "name":"pipeTEast3", + "directions":1, + "delays":[ [ 1.0 ] ] + }, + { + "name":"pipeTNorth1", + "directions":1, + "delays":[ [ 1.0 ] ] + }, + { + "name":"pipeTNorth2", + "directions":1, + "delays":[ [ 1.0 ] ] + }, + { + "name":"pipeTNorth3", + "directions":1, + "delays":[ [ 1.0 ] ] + }, + { + "name":"pipeTSouth1", + "directions":1, + "delays":[ [ 1.0 ] ] + }, + { + "name":"pipeTSouth2", + "directions":1, + "delays":[ [ 1.0 ] ] + }, + { + "name":"pipeTSouth3", + "directions":1, + "delays":[ [ 1.0 ] ] + }, + { + "name":"pipeTWest1", + "directions":1, + "delays":[ [ 1.0 ] ] + }, + { + "name":"pipeTWest2", + "directions":1, + "delays":[ [ 1.0 ] ] + }, + { + "name":"pipeTWest3", + "directions":1, + "delays":[ [ 1.0 ] ] + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Constructible/Atmos/pipe.rsi/pipeEast2.png b/Resources/Textures/Constructible/Atmos/pipe.rsi/pipeEast2.png new file mode 100644 index 0000000000000000000000000000000000000000..a44e27011fb9326d40fc0c6046b276c406d6737d GIT binary patch literal 217 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJ1)eUBAr*7pUUK9*qQKMo&^~M7 z1>usb#T7FA*PW+@Ts|5wGxE%-LkA}0FSkiP(olTP@_VvTRKjgDY0LR;(i%$zlHa_R zP~LiN{ZH%a^fu`emdpuhdpFG7sKcFhtWc(dV{4cbM+ZmRw;1N%`}T7!JyJQZHa>Lb zvX{!g=LLp7Xq1e&zV*C=SLZdUwWiN1-9mqRyDq8k?+|d3*n7+J`JCUv;&ILPnZ}_? RFM)1l@O1TaS?83{1OTbgSWf@| literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Atmos/pipe.rsi/pipeFourway1.png b/Resources/Textures/Constructible/Atmos/pipe.rsi/pipeFourway1.png new file mode 100644 index 0000000000000000000000000000000000000000..3da5ae8a6a32ea666f601a0a7a8351c622869dcb GIT binary patch literal 556 zcmV+{0@MA8P)83=p=OXN850f-DIV3XhoNZ^Hj!FwRh zz#D_al2D1|u4?^XZ&lrpVwFlobvhk29*@=6*O#i*YAUVIJ(fueQ0lLqrfHAVy&d2u z$jbqAUH|rdIlz9u2Vl3`y$3)D0f3b9Df=K5K+`m&lqjW0lH~OONs&| ze2(F16MmN9lL?=d2}N4K&+;3`G287nwco8K(*g{`z_x9Q#Ueov;CUX~?e-FgO`&gDmsZ;`>R4QRv7LMa!+cty2fNr;&D*Rgxk)~;0brcE(08akZYDK+Xr&_H7 zP%IYD{(L@m zQ52o;4MGSsO(RJXgb-Kj$tMrIJrAVTf-nqex7!Sd!<&xW!vUm}L{ao`;hO=TZK(jq u7Jsc^8~A*y(Qga)4()O#T2*H{w8|sH$xM0000FA literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Atmos/pipe.rsi/pipeFourway2.png b/Resources/Textures/Constructible/Atmos/pipe.rsi/pipeFourway2.png new file mode 100644 index 0000000000000000000000000000000000000000..7c29562995d88e844986568c414a2eb691050f8d GIT binary patch literal 538 zcmV+#0_FXQP)69Bl zs5pI}d}*3;JRX%|=_*dPZR2?!rfCvI5n&i|JRVg-J*NTy`~6<60@Z5up+~t`EMnU> zo6UxHyN&C*IF7?=wPHS>14!GpIUElE2H^YtLpKINfbaVZ1_NBz#j-2_EX%@mU4kIM z^E`&bA^m>;$9T6HqC1ZBFm0t$0pRAd+wEvJo7C%d08G=o@0ZJEq?8CDkWzBFTo6K# zWf_G+;eK78OePNlESF0FCX)%BPKQ>j#df=8u~+~QMG*kg>GZF0bX_M+)34*-{rl01 z#Uf!C62~#?^%{UytHolmxSxk%2*7+kr&KDDBngILkR-`nHwYonG>t6F5JG(B!29Qb z(zhUvW4hfg1viF$63mq?6#^4pLZHS!EkmmRf7?8Z5E_1$)zE0aoe?`~zKrp!u6y$d!8z zM>Lll4+oqk4B?&knPJ{$-HiT?T^z|N49YXfztcaZE0kLs68}IW8890NAz- zz;3srTCGwpmjN&g!uNd?ML|_n;y6Z86p|!)%3RYlJkKKt0@mv_0JU0;`Fwtxd!7e? z@B8SwP8f#d^LfHBy!xfy@}2Rn1OHnGGJ6YxAfVN1F&d5TM($eygb;*bm|B;4Kk#D! zNs^Gy=TTKPRYlFbB~z4i_c}8GRaFr}Af+UZ|WqW}vK{g<8f{AT@Shg;itmx|1J&MDZ~ z@g-^PS3z%0`LDJ2nGWy}TqfG9gVsaEG-E%NZVHX2Hgp2hZ$Sx7xh0TtJZF z%Zqn=H||zm+7iUo_n1L&;We%_Ho=2;cQZy^|N5G<=v+YP3N3~N8TS=hMdxCR>z7ZF zQ@g+Q{j6)#mt}r>CdY8*jbUJP^y%%L?{EEPPh&GaY`_z6_4*Q*zc#s>fiA3Xl4qP; U+8%Xb0?6|Wp00i_>zopr0BQzrkpKVy literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Atmos/pipe.rsi/pipeLateral2.png b/Resources/Textures/Constructible/Atmos/pipe.rsi/pipeLateral2.png new file mode 100644 index 0000000000000000000000000000000000000000..aad6e9f0f6552842ef08d8f81ca99ea1518de52b GIT binary patch literal 278 zcmV+x0qOpUP)ZZQD>)RCN?vYo|ER^S}D*^*ZHLb?Cp*wOupa?{~}$RmI&=RZ>cr86rYTiIfr| z!t?p0l!Ch>A^;=0`)KU$TrL;fo%j2Vh|pRaecXKvAdko6>j`qs)LN;v0#Hh!)=JKK zXpZk`n%MXKYi-zl(Dc4?yG6&dI0&IUmc c1VI4s0lW!#hi}Xr=>Px#07*qoM6N<$g5ZmNFaQ7m literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Atmos/pipe.rsi/pipeLateral3.png b/Resources/Textures/Constructible/Atmos/pipe.rsi/pipeLateral3.png new file mode 100644 index 0000000000000000000000000000000000000000..e715454f7e8af26a5ed99de403a401fe93f6a52a GIT binary patch literal 278 zcmV+x0qOpUP)w2vm&S3lIz0fW>SLp7Tg}&v@7ntZstQ#_-}exapG}F{d8)IH<2a7v cIL^P|19x|LhZrqd0{{R307*qoM6N<$f;BdBtN;K2 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Atmos/pipe.rsi/pipeLongitudinal1.png b/Resources/Textures/Constructible/Atmos/pipe.rsi/pipeLongitudinal1.png new file mode 100644 index 0000000000000000000000000000000000000000..92bbfb07229c10359577f0320c362b068bdc0eeb GIT binary patch literal 329 zcmV-P0k-~$P)tm41~w|K`7LKsEc}NiN-h~aBRN=%3k3~?0U|Q=94qA1KemFN1Nx_)^)XIS!|jn zyF2qAg}VZ?%THC&b={lZ&j6ZYj5yEJ55UY2WBfgUssgw=-~#X|43A6S1u!$@oIjoT zIRF4KGl&Qx;s@Y%1ub|X1fLG5DoQCJqSwtI0RYz(Y}@8D35f_fXOvQW=Rn&DZUAl> zP*pH90Qk*;oHK|B`@Z`CG`WQ^rQ{dFloD#KUon3K(6*q6_}I$816(0yCr58oLMDO$Y-B^MIK_ zL;xUe4=^)`2*+{60JI1*VJRifgryYR_x)PD8=zf5RgL|SxO>bL48s5s!8neu#Jd4R z1k4;~!dCY4JYxV_gstKx{MLZo06AxrQsTa3s*3x*K}0coptT@u3Q|fC5vXe1IsUKs Y0|NAXo?wf37ytkO07*qoM6N<$f@zP0W&i*H literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Atmos/pipe.rsi/pipeLongitudinal3.png b/Resources/Textures/Constructible/Atmos/pipe.rsi/pipeLongitudinal3.png new file mode 100644 index 0000000000000000000000000000000000000000..3666086c91efa4fa1c2c2b437202513983a78f83 GIT binary patch literal 321 zcmV-H0lxl;P)v*$&WweyeV#2@H31i=ymM`t26zHURo^4%M+xOkJZL?)r z>`q+h1<({@#C2V_&vyqfGsGC*2dK3I_^p5oz&Bxdma-dwnSq(Vm3SQh07L{t1Xc9| zaBD#`UI@Xb0<~7;oIym7;<~rs^Z8&HhW7!82+WL}v+o=*yY&V9AAp+&YON3v0Pvdw z%nTyJaU4DXO>QPkDfyW&rG!$-qjB+yQ<7&bW4- T8>8L000000NkvXXu0mjfYe1z-3hs~G0iBhk5GQMsERdjA)nr{(&`CQwIGibL_mw%jV2_IJP6DYE3A zWGqboRegDUu*ln^}F1HdzC5$^VCmo zGB|In6x19#wNNH7blqzwmlKwc=Qz6rT-8!od)AplD)~>i@Ac9<-+3LpUd}wQ{m6T^ zr6OLMJcohY=S!8oR=cn~zi0QqEm5NFqhbwXL$ceU?_&JlfIedIboFyt=akR{0IsfO AjQ{`u literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Atmos/pipe.rsi/pipeNEBend3.png b/Resources/Textures/Constructible/Atmos/pipe.rsi/pipeNEBend3.png new file mode 100644 index 0000000000000000000000000000000000000000..f861f8b49ebb8d54f17df643aea05262ce7c5b56 GIT binary patch literal 222 zcmV<403rX0P)_*Dz+7tu)*1PcYleS3v>1Kmt@EBDO4xt?Ozz zXA=?oWZk1yz^^>O13Vz!wedX9v~BzLFSsRO7zR>Gs44(W(_G`*1Ga5rnkL3^B!mEf zs$ypJeUF*3?>iv`RFzQka1pVT(pPJ$2AmPE^B5zg6iO*{UB_`8*K?dV;Tvxrvl2HM^l_Gc1LM4X~MXSwR9)K0_6%Ck3R0yuzon$C^7|8D@wv z+Uaz%+wEqT%f<3Mx4Adp;N}cOgb)IU!vR%Y()VWqCd?KM{Cfc+vW);Uqw6}_wq+QG z-wQ}RFtJ$=tW7FG%D}9EaUAKo4q%%_1Q0?%M0h+N+X$H0Y!iC#F*A0%-R}i>@9Fy< zSSJI1?uSzp1!Y;THirIuKL2^4stm(`s*+{dD$W7?@pwd4F*El2Jt9KWG>FLi9H6SI zRmRX?uh)-_@Ao@(T`#(kB*th{l&VSyf#>sya}MX+y8(g4ohK5B#J}JL;&5Sund)O* P00000NkvXXu0mjfHdTp& literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Atmos/pipe.rsi/pipeNWBend2.png b/Resources/Textures/Constructible/Atmos/pipe.rsi/pipeNWBend2.png new file mode 100644 index 0000000000000000000000000000000000000000..f88805cd2752e899c2a73ce6bf53fd5015f0426a GIT binary patch literal 347 zcmV-h0i^zkP)Pj2f$jJ8X{f5oK!Wr@O1)Wi~xv89svL$1p2;b znx@YS5D~ohR8^J712fq?Fq6##F-AfN0C_wBUwuGC7=|H_fSGJ2bk3owY&M(E3vkZy zdcA=4H{enR$?Mw#{3YtCV8PyC=?0>fHw;nd1~cW52pYC002ovPDHLkV1k%xl1=~s literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Atmos/pipe.rsi/pipeNWBend3.png b/Resources/Textures/Constructible/Atmos/pipe.rsi/pipeNWBend3.png new file mode 100644 index 0000000000000000000000000000000000000000..36061210b829cc5a79bb756b6958642953178026 GIT binary patch literal 324 zcmV-K0lWT*P)^5mO1iF-rfDS0GC49%y-Q$2{d90LB;)5$1WmMqq=P zuMyB%Lqu@9-99g%wZ^)x0M4C&K3cE8k>@#zqBvcKx~^+@?|18;FPNEMzUr-=nUSXH zX>nbaP3cf+Y#~#k zZUx)=DMG=Fp-aE_b<}vh6KmMbdc5#RjFaHPt#0pazwz1BJI!#o!LvdunWy1=^aK^p dNh+S7n4fKOn9xvLR|j-AgQu&X%Q~loCICRvS;qhX literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Atmos/pipe.rsi/pipeSEBend1.png b/Resources/Textures/Constructible/Atmos/pipe.rsi/pipeSEBend1.png new file mode 100644 index 0000000000000000000000000000000000000000..568023bc17326a2bd84532682dfa292da205e4e7 GIT binary patch literal 233 zcmV z)+`{#XyZ86*dJQ5`7jLV`yMH!=L0@cN?6ww(=@dS0Dyhpv27dXd44`XL_iYDvLNSN zJiK?p-2&CGF6s9H*L48^NTTbyb^&GvlFtXIDpa+~>5BqL;yh1?NSh}Rc@MlF@`FYpp$WZO38dDamCIM0)P-&vOBdjVq%BEq_^9LG^~ zpKQsH_tnMK2|UjOfQaCn(-X)!BO>1mbX^BP-}hDF#R4fM;I9D{fw%VSx^x6yjH&uc z$_3uw+6!1L;GDyIkF`|=mJ5go_kClG(b)s<5vaWaYb_}yL_}v1{U<*`a!fn|9a>`m O0000>+DR0K-y=XvS~ z6o~59iVU3`M^KNJvaT0it9FW?~vzdPbn2&K^+FWC0XGt~f<^)sezLaenoe{*z-XfFKBh zAPB<0LwTON(D1sh#4QlFZ5tf!y3TP+&^V4k6PV{2#u)T{k7ZfdB;sKhPD4%8psFeu zW4L-h0@F184AgZEtu@NBWG@GR`0P!UQm!Zp9LI5qfI18KV&{U7g;zkScZ7%#MbZ5N z-xJvP{eFQoO<}D?mSybaK?2rVBuVnz4*0Qe+xCorhlu?f2ovzdS1cd^ya2ZHO8p5> RTMz&M002ovPDHLkV1i(-ZOi}w literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Atmos/pipe.rsi/pipeSWBend2.png b/Resources/Textures/Constructible/Atmos/pipe.rsi/pipeSWBend2.png new file mode 100644 index 0000000000000000000000000000000000000000..7ea0ed3efe66ea02591f871c50259e75e7972203 GIT binary patch literal 292 zcmV+<0o(qGP)=db=l__~pYqt?dO!Boc{4 zA~K>ZOV9bhaU6n^*L~k}@)(A}b0ow(&*TYg+XiC{#&N{H?<5I5O%tiS>pC<|17i#+ z{}EW0<>ye_wpiB{bzQT{0YFpEPfF>ls=|HWYyn9Lg<|hn4~Q-xk!4xDI}pZxo@X3^fDo+T09_yyb1xuSKq&>S_2)T0F5sNQ qbzSlHKsbV^o6uSd=Ukjc^iN)OL0tX@#x~ag0000&ht!S-ZTxCWkFR{UUkwZFrUOZcV$`PJWszm3UdH&W9R%LMFzn6PbdI z{GNcd_IZFT%b>MJp66b5WB^)gBuNr31J~G(;|K$Ai7~&eCIh&PeF8`dAcTOF^1Y6a z132ekj6s^FVE|$XV+gIaFvf&CM%NbvJ;z#WSZl*v!@ueUTtjRKn}bZ@00000NkvXX Hu0mjfGdq5h literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Atmos/pipe.rsi/pipeSouth2.png b/Resources/Textures/Constructible/Atmos/pipe.rsi/pipeSouth2.png new file mode 100644 index 0000000000000000000000000000000000000000..ba98a658412034f4c6fcd36e9921cc65eddb370f GIT binary patch literal 278 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=cRgJkLn`LHy>@zSi-Ca4#ZT;< zog5JpB{xnGTc~*ZOZ3NW#zxm7I;xo*o;Ky_FamWjFw`W@OOL*O^;_-s+}k;kVz1|} zoVNdWgMd@F%-s-if#fMSljHyFU&WNvbINl2xl690jL$2*CV6STmuXzhU>vNuG;=}x zYOMqr_oY)ze1l)x*oTKYczGT+*i+6KH~(*;jPKzu1+V2E%*md*c=jr$b{`MY_%H}89IhW8*vN-5Lp^~`FuGUM^sD5XqV%p)r0d07Ea02BZPKmkwy z{7V3l=1{NKKds*&2vXy+>Lty=aU43G4$Wqh^ZCqVG9d_pyz-}aKq+M`%X&X+tvMc# z&+7ny=XrFyUAEgTzVBmMmT?@1!{LC|8Yv}F6agTFz!-xNf^xY`9LE5kY(fa`_j@*g zMAd4QcDv1dK4&l(FdB^*4u_8x{Xv-lcDo&}>r$)L0H{wIzR1u;J2IE_W z<~GPdTsk6BmrQ(Uh{Z7*lxFP`~UAb(CKuzTrSM#^Y6}qPc~rn7AU2N z9AeD_bu(7h#-V=BMweSiaK#No!K)iwx!77Md91XKo zwpqbH%tl!9>jLjhKD-$w0Yi~e>Rzv>SF4pCkH=a{sh{byOab0a3HUfbm|Cb_um3u9 zaU4Hf|H~A>_kB8@4$Wqh^ZCqVG9ixRhkeE-Af?ofb|@42Q$JwZ;Lv-Hsp# zsMTr!R4Nq!8jS{?=aHrEao0bsFM+^zqUEl84tD2f1B zE|=VHH`eR*-P-?m542h>PNx&o>9p8;;N1xr`xYpr2*Z%sY(~G|f4a{Yz;#^!JkNWn z&luo(y#k>1Q$IrH0a=y-aJgJQ1IQ!9YvNt4 bKneH;=X8buZS$qC00000NkvXXu0mjfN>slR literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Atmos/pipe.rsi/pipeTNorth1.png b/Resources/Textures/Constructible/Atmos/pipe.rsi/pipeTNorth1.png new file mode 100644 index 0000000000000000000000000000000000000000..e082a773c521a04fe3e80e77f06a11c6195ce0aa GIT binary patch literal 474 zcmV<00VV#4P)zkWi9Dt+Gv&@>Gx zB}yr>Ec<7Z&x%pcFk0a1Dtsa19klFxhYeFey-h{OPG)?#nQX4>RP54l4 z6)+6rzw569TrL*?&gb)w0F)l=^XE5BQ{p(TtRZCC0^7FnJP*?}3B!=pYDFB!Rr!Bj z0f5u#R9ywS-R_HluIt#g&EarhG#cT$E{@}{-|yLMHUP@DZK5dp$Sg^cR{-DlUmgZQ zfbaWEr&CwHqd@cKa_vrd60SondJu@DU&3e5y^ZDEi1_NW`1JJTbGUl_M5W=?ZYXDM8 z9LK>JLs^zT4^WmRT5BGU$4kYn0iI7FrF;*-caXOMyln`ddRqrP&-=3eIKbs{0pNT- zzYJjYh~K|_T5F1;u<~+jlEN?~j$?e^C(ANcs})62*jW9W4gj1^C%X=GyWLu&?7A*t z7;-oq7>!0KrHG=4{eI78vjH$+7?S7t-vJ~^QtM)xrX)$ibUH;TMGyo41VMmOiZo4$ zUsQ zX|-AiA#fIpMQwoHZU?}xIos{FinA;OV7XlW(aUihwAKil8Tj3Kp6A?dH$2bde!o}0 pYbj+F3n9Mj8#QXws8OT;TOVTLladQp=YaqK002ovPDHLkV1j&q!x;bo literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Atmos/pipe.rsi/pipeTNorth3.png b/Resources/Textures/Constructible/Atmos/pipe.rsi/pipeTNorth3.png new file mode 100644 index 0000000000000000000000000000000000000000..278065543805d59093a08c7e7d47f413d8167c6c GIT binary patch literal 427 zcmV;c0aX5pP)1u%DFqi&x+(+}Z&2_GxrQs3b*+0((Gv(BKo=gsRrLm<&>lh1+K^ccmh0mpGFB?m~7 zgz0q3Y&JtFMGyo41VMmOiX=&hA%wtnUE0g#^4(3lO<9(elLPGcdjLMJv)k<+{WMJh zSglsy>O~la2425V$8peFSFXUvJMddP%QA|h!1Fxr_d8l^px$v?EEbE!VzF5Mj290- VevZy+xB&nF002ovPDHLkV1nFl!yNzs literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Atmos/pipe.rsi/pipeTSouth1.png b/Resources/Textures/Constructible/Atmos/pipe.rsi/pipeTSouth1.png new file mode 100644 index 0000000000000000000000000000000000000000..04e434edcf583b539ae5311c4a885643c0c3b7a9 GIT binary patch literal 398 zcmV;90df9`P)XXsgTY`h{C9+H+ZsShNxfbtO;aq(!f_l9hXd#HxvA@lj1XY%i$27>`wYZ{FPLI_T$69B&N1JLjH0od(!xUPE@ z==FLx`B&t5j+F9x>yP_9&rwkn6*eYG0>E;)WH=n+x-R?up7nYS!0~vz=08DnIvrgU zT>gOPc?3Z~x7%g2*|1uz*lxEE{Q=9e$_2^_iUi|0F7101RaW3Q4q+JL`#wpMFr7|` zfkuR#u>tVl)~to6Q)H$9LcSB?1>(trh^yX7g_Z(lotUe_cR` s%AWl>fh@~jBJ!|6t@d6jrL0uo4MnYsg)Gj^82|tP07*qoM6N<$f&uKb_W%F@ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Atmos/pipe.rsi/pipeTSouth2.png b/Resources/Textures/Constructible/Atmos/pipe.rsi/pipeTSouth2.png new file mode 100644 index 0000000000000000000000000000000000000000..21517957ee65e2a4775e59d26b1b993db62d2697 GIT binary patch literal 416 zcmV;R0bl-!P)OP5lXBaof^a=DZvP>movdDe-q3q1ZsneqcaM4E#pqyv%w0000< KMNUMnLSTYQjhnF6pce8s z>@s2Yo0&ghp;W0--!5UArdCQ3$1z%K0B-j}h;%Kbq*|>KMG=N!U|AO1?UuvgaQ6Vm zasG{~(P)&Lem0xoc^=d0lzVxy;sC1K?E-K*osd$dm0s>I*R@&=Aq4yV9st*M0Z8(! z*K2IsP60Zd&Q<&ufbaV`>pv?DLjZi=r`PLY+culchQ(q5z;3rojKLZd&(be UhgK-)2><{907*qoM6N<$f@hS%E&u=k literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Atmos/pipe.rsi/pipeTWest1.png b/Resources/Textures/Constructible/Atmos/pipe.rsi/pipeTWest1.png new file mode 100644 index 0000000000000000000000000000000000000000..4711725c00f718863b516da82e5a9822933a6092 GIT binary patch literal 449 zcmV;y0Y3hTP)1v$8q zv)SNz9**PCZnv4w=M0BKUEUu6zVBZ(P9_sttrp|)m}awyZQEK+F97QGI)-7Ol)|#C z^J%ZuY5-KLRRGrO_3r>or_-AqyWI|e)oO)p+qkaFcDvON5QgD7uq=xtNia>5!C(MD z7=}2GL%CemZVq?c0wIL@{wtDF636l5>VW5Y^m;uCg#ydvk{}3(<5-vf^XowBTOg&R r(P%IljqrW{{4aPIz;EjX@B(-TD(#09_jH%d00000NkvXXu0mjfjk(6( literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Atmos/pipe.rsi/pipeTWest2.png b/Resources/Textures/Constructible/Atmos/pipe.rsi/pipeTWest2.png new file mode 100644 index 0000000000000000000000000000000000000000..bf87ae1f255953d5cdf98e443651ca6fde7b0a27 GIT binary patch literal 471 zcmV;|0Vw{7P)&Rh&%Al77Pe!1S=s7N#+$7 zd_3;uKA2qe6*<++Fz0tZ&Y3wgpkc1-s^M^`w%e_m&1TAR9HpZJ@JrVbAkT9EvMkfq zCkR*w=hN0u+ zy6&gqM^U7uRnc*3wOULj6B>;M$K#PO42hyhN9sSwz*k~lS(>JJp2zii#rJ(2$6+uS za5x-TEEYPkKLEz#G4StZvR<$0_xr3?D|)>iwry(%{RZ9E?49)j_6h%QwNtR`(s*05Iuh$I2`25;CoeluL?*nkTT#5l~Hk*$FO(RK? z!WrD}cL2`kGp1?cx-PfdEkD41zeh@ms;Z=E`mK~cv;Hc>Fo@$AUDuh<=K$<>J8avg z-EJ33ptQfhvMj0V`scY2f+&i9t`2yf$8jgpxy4^0z z<&x28gb*T^uk>bAR24u4Pyti`{|~^|P6!|SiysAeD$6n;{}!)wfage-cSfv+)87u} Vr8{6D!n^`#DJ&m;q*tI ztz`x_&E=o?=ACHXS@iZ=)5(zMyPYp-I&^)=WchGep4E{YO5^bf{3~ zN>pLF%Py(<*o4^Y^38LM*P2FUGhB(vTsyIN-*cPIaz;GOyZ7&FoXPkhF8J#1fA@CI k-1z?YdmC4f#rd_2jcc79uCv~c1UjF=)78&qol`;+03%{(U;qFB literal 0 HcmV?d00001 From 9d5278ab0dc280bb856d42a9d0bccec2f5e3f6fa Mon Sep 17 00:00:00 2001 From: py01 <60152240+collinlunn@users.noreply.github.com> Date: Sun, 30 Aug 2020 18:13:23 -0600 Subject: [PATCH 038/103] Volume and pressure pump (#1955) * PressurePump and VolumePump * VolumePump fix * PressurePump fix * volume pump simplification * Fixes GridAtmosphereComponent not updating pumps Co-authored-by: py01 --- Content.Client/IgnoredComponents.cs | 2 + .../Atmos/GridAtmosphereComponent.cs | 2 +- .../Atmos/Piping/Pumps/DebugPumpComponent.cs | 21 ------ .../Piping/Pumps/PressurePumpComponent.cs | 65 +++++++++++++++++++ .../Atmos/Piping/Pumps/VolumePumpComponent.cs | 46 +++++++++++++ .../Entities/Constructible/Ground/pumps.yml | 28 ++++++-- 6 files changed, 136 insertions(+), 28 deletions(-) delete mode 100644 Content.Server/GameObjects/Components/Atmos/Piping/Pumps/DebugPumpComponent.cs create mode 100644 Content.Server/GameObjects/Components/Atmos/Piping/Pumps/PressurePumpComponent.cs create mode 100644 Content.Server/GameObjects/Components/Atmos/Piping/Pumps/VolumePumpComponent.cs diff --git a/Content.Client/IgnoredComponents.cs b/Content.Client/IgnoredComponents.cs index d92e3d3e30..41b437d227 100644 --- a/Content.Client/IgnoredComponents.cs +++ b/Content.Client/IgnoredComponents.cs @@ -163,6 +163,8 @@ "AMEFuelContainer", "AMEShield", "DebugPump", + "PressurePump", + "VolumePump", "DebugVent", "DebugSiphon", "SignalReceiver", diff --git a/Content.Server/GameObjects/Components/Atmos/GridAtmosphereComponent.cs b/Content.Server/GameObjects/Components/Atmos/GridAtmosphereComponent.cs index fd56e9d34d..215243a877 100644 --- a/Content.Server/GameObjects/Components/Atmos/GridAtmosphereComponent.cs +++ b/Content.Server/GameObjects/Components/Atmos/GridAtmosphereComponent.cs @@ -755,7 +755,7 @@ namespace Content.Server.GameObjects.Components.Atmos _currentRunPipeNetDevice = new Queue(_pipeNetDevices); var number = 0; - while (_currentRunPipeNet.Count > 0) + while (_currentRunPipeNetDevice.Count > 0) { var device = _currentRunPipeNetDevice.Dequeue(); device.Update(); diff --git a/Content.Server/GameObjects/Components/Atmos/Piping/Pumps/DebugPumpComponent.cs b/Content.Server/GameObjects/Components/Atmos/Piping/Pumps/DebugPumpComponent.cs deleted file mode 100644 index dfddf21cab..0000000000 --- a/Content.Server/GameObjects/Components/Atmos/Piping/Pumps/DebugPumpComponent.cs +++ /dev/null @@ -1,21 +0,0 @@ -using Content.Server.Atmos; -using Robust.Shared.GameObjects; - -namespace Content.Server.GameObjects.Components.Atmos.Piping -{ - /// - /// Placeholder example of pump functionality. - /// - [RegisterComponent] - [ComponentReference(typeof(BasePumpComponent))] - public class DebugPumpComponent : BasePumpComponent - { - public override string Name => "DebugPump"; - - protected override void PumpGas(GasMixture inletGas, GasMixture outletGas) - { - outletGas.Merge(inletGas); - inletGas.Clear(); - } - } -} diff --git a/Content.Server/GameObjects/Components/Atmos/Piping/Pumps/PressurePumpComponent.cs b/Content.Server/GameObjects/Components/Atmos/Piping/Pumps/PressurePumpComponent.cs new file mode 100644 index 0000000000..53ee049b00 --- /dev/null +++ b/Content.Server/GameObjects/Components/Atmos/Piping/Pumps/PressurePumpComponent.cs @@ -0,0 +1,65 @@ +using Content.Server.Atmos; +using Robust.Shared.GameObjects; +using Robust.Shared.Serialization; +using Robust.Shared.ViewVariables; +using System; + +namespace Content.Server.GameObjects.Components.Atmos.Piping.Pumps +{ + [RegisterComponent] + [ComponentReference(typeof(BasePumpComponent))] + public class PressurePumpComponent : BasePumpComponent + { + public override string Name => "PressurePump"; + + /// + /// The pressure this pump will try to bring its oulet too. + /// + [ViewVariables(VVAccess.ReadWrite)] + public int PressurePumpTarget + { + get => _pressurePumpTarget; + set => _pressurePumpTarget = Math.Clamp(value, 0, MaxPressurePumpTarget); + } + private int _pressurePumpTarget; + + /// + /// Max value can be set to. + /// + [ViewVariables(VVAccess.ReadWrite)] + public int MaxPressurePumpTarget + { + get => _maxPressurePumpTarget; + set => Math.Max(value, 0); + } + private int _maxPressurePumpTarget; + + /// + /// Every upate, this pump will only increase the outlet pressure by this fraction of the amount needed to reach the . + /// + [ViewVariables(VVAccess.ReadWrite)] + public float TransferRatio + { + get => _transferRatio; + set => _transferRatio = Math.Clamp(value, 0, 1); + } + private float _transferRatio; + + public override void ExposeData(ObjectSerializer serializer) + { + base.ExposeData(serializer); + serializer.DataField(ref _pressurePumpTarget, "startingPressurePumpTarget", 0); + serializer.DataField(ref _maxPressurePumpTarget, "maxPressurePumpTarget", 100); + serializer.DataField(ref _transferRatio, "transferRatio", 0.5f); + } + + protected override void PumpGas(GasMixture inletGas, GasMixture outletGas) + { + var goalDiff = PressurePumpTarget - outletGas.Pressure; + var realGoalPressureDiff = goalDiff * TransferRatio; + var realTargetPressure = outletGas.Pressure + realGoalPressureDiff; + var realCappedTargetPressure = Math.Max(realTargetPressure, outletGas.Pressure); //no lowering the outlet's pressure + inletGas.PumpGasTo(outletGas, realCappedTargetPressure); + } + } +} diff --git a/Content.Server/GameObjects/Components/Atmos/Piping/Pumps/VolumePumpComponent.cs b/Content.Server/GameObjects/Components/Atmos/Piping/Pumps/VolumePumpComponent.cs new file mode 100644 index 0000000000..1787cce772 --- /dev/null +++ b/Content.Server/GameObjects/Components/Atmos/Piping/Pumps/VolumePumpComponent.cs @@ -0,0 +1,46 @@ +using Content.Server.Atmos; +using Content.Shared.Atmos; +using Robust.Shared.GameObjects; +using Robust.Shared.Serialization; +using Robust.Shared.ViewVariables; +using System; +using System.Diagnostics; + +namespace Content.Server.GameObjects.Components.Atmos.Piping.Pumps +{ + [RegisterComponent] + [ComponentReference(typeof(BasePumpComponent))] + public class VolumePumpComponent : BasePumpComponent + { + [ViewVariables(VVAccess.ReadWrite)] + public int VolumePumpRate + { + get => _volumePumpRate; + set => _volumePumpRate = Math.Clamp(value, 0, MaxVolumePumpRate); + } + private int _volumePumpRate; + + [ViewVariables(VVAccess.ReadWrite)] + public int MaxVolumePumpRate + { + get => _maxVolumePumpRate; + set => Math.Max(value, 0); + } + private int _maxVolumePumpRate; + + public override string Name => "VolumePump"; + + public override void ExposeData(ObjectSerializer serializer) + { + base.ExposeData(serializer); + serializer.DataField(ref _volumePumpRate, "startingVolumePumpRate", 0); + serializer.DataField(ref _maxVolumePumpRate, "maxVolumePumpRate", 100); + } + + protected override void PumpGas(GasMixture inletGas, GasMixture outletGas) + { + var volumeRatio = Math.Clamp(VolumePumpRate / inletGas.Volume, 0, 1); + outletGas.Merge(inletGas.RemoveRatio(volumeRatio)); + } + } +} diff --git a/Resources/Prototypes/Entities/Constructible/Ground/pumps.yml b/Resources/Prototypes/Entities/Constructible/Ground/pumps.yml index e3741e762e..d1f2ac0b5c 100644 --- a/Resources/Prototypes/Entities/Constructible/Ground/pumps.yml +++ b/Resources/Prototypes/Entities/Constructible/Ground/pumps.yml @@ -17,9 +17,9 @@ thresholdvalue: 100 - type: entity + abstract: true parent: PumpBase - id: NorthFromSouthPipePump - name: North from south pipe pump + id: NorthwardLongitudinalPump components: - type: Sprite state: mvcable_3 @@ -27,10 +27,26 @@ nodes: - !type:PipeNode nodeGroupID: Pipe - pipeDirection: North + pipeDirection: South - !type:PipeNode nodeGroupID: Pipe - pipeDirection: South - - type: DebugPump - outletDirection: North + pipeDirection: North + +- type: entity + parent: NorthwardLongitudinalPump + id: NorthwardLongitudinalVolumePump + name: Northward Longitudinal Volume Pump + components: + - type: VolumePump inletDirection: South + outletDirection: North + +- type: entity + parent: NorthwardLongitudinalPump + id: NorthwardLongitudinalPressurePump + name: Northward Longitudinal Pressure Pump + components: + - type: PressurePump + inletDirection: South + outletDirection: North + \ No newline at end of file From 178931e54b7ec24a2dfc4432d9b03c264947e2e9 Mon Sep 17 00:00:00 2001 From: py01 <60152240+collinlunn@users.noreply.github.com> Date: Mon, 31 Aug 2020 04:33:05 -0600 Subject: [PATCH 039/103] Pump visuals (#1960) * Pipe sprites * pipe copyright * SharedPipeComponent * Pipe Visualizer draft * missing longitudinal pipe sprites * expanded rsi states * pipe prototype fixes * Fixed pipe visualizer * PressurePump and VolumePump * VolumePump fix * PressurePump fix * Shared pump # Conflicts: # Content.Server/GameObjects/Components/Atmos/Piping/Pumps/BasePumpComponent.cs # Content.Server/GameObjects/Components/NodeContainer/Nodes/PipeNode.cs * PumpVisualizer Draft * ConduitLayer enum * PipeVisualizer update * halfpipe sprites * pumpvisualizer simplification * yaml unneeded proto removal * pump visualizer draft 2 * Pump overlays * pump rsi name * merge fix * PumpVisuals ConduitLayer * merge fix Co-authored-by: py01 --- .../Components/Atmos/PipeVisualizer.cs | 3 +- .../Components/Atmos/PumpVisualizer.cs | 70 ++++++++++++++++++ .../Atmos/Piping/Pumps/BasePumpComponent.cs | 11 +++ .../GameObjects/Atmos/SharedPumpComponent.cs | 29 ++++++++ .../Entities/Constructible/Ground/pumps.yml | 9 ++- .../Atmos/pressurepump.rsi/meta.json | 31 ++++++++ .../Atmos/pressurepump.rsi/pumpEast2West2.png | Bin 0 -> 281 bytes .../pressurepump.rsi/pumpNorth2South2.png | Bin 0 -> 332 bytes .../pressurepump.rsi/pumpSouth2North2.png | Bin 0 -> 320 bytes .../Atmos/pressurepump.rsi/pumpWest2East2.png | Bin 0 -> 272 bytes 10 files changed, 148 insertions(+), 5 deletions(-) create mode 100644 Content.Client/GameObjects/Components/Atmos/PumpVisualizer.cs create mode 100644 Content.Shared/GameObjects/Atmos/SharedPumpComponent.cs create mode 100644 Resources/Textures/Constructible/Atmos/pressurepump.rsi/meta.json create mode 100644 Resources/Textures/Constructible/Atmos/pressurepump.rsi/pumpEast2West2.png create mode 100644 Resources/Textures/Constructible/Atmos/pressurepump.rsi/pumpNorth2South2.png create mode 100644 Resources/Textures/Constructible/Atmos/pressurepump.rsi/pumpSouth2North2.png create mode 100644 Resources/Textures/Constructible/Atmos/pressurepump.rsi/pumpWest2East2.png diff --git a/Content.Client/GameObjects/Components/Atmos/PipeVisualizer.cs b/Content.Client/GameObjects/Components/Atmos/PipeVisualizer.cs index 7d057e0766..add360dcce 100644 --- a/Content.Client/GameObjects/Components/Atmos/PipeVisualizer.cs +++ b/Content.Client/GameObjects/Components/Atmos/PipeVisualizer.cs @@ -1,8 +1,8 @@ using Content.Shared.GameObjects.Components.Atmos; using JetBrains.Annotations; using Robust.Client.GameObjects; -using Robust.Client.Graphics; using Robust.Client.Interfaces.GameObjects.Components; +using Robust.Client.Graphics; using Robust.Client.Interfaces.ResourceManagement; using Robust.Client.ResourceManagement; using Robust.Shared.GameObjects.Components.Renderable; @@ -10,7 +10,6 @@ using Robust.Shared.IoC; using Robust.Shared.Log; using Robust.Shared.Utility; using System; -using System.Collections.Generic; using YamlDotNet.RepresentationModel; namespace Content.Client.GameObjects.Components.Atmos diff --git a/Content.Client/GameObjects/Components/Atmos/PumpVisualizer.cs b/Content.Client/GameObjects/Components/Atmos/PumpVisualizer.cs new file mode 100644 index 0000000000..42ea6bf6ea --- /dev/null +++ b/Content.Client/GameObjects/Components/Atmos/PumpVisualizer.cs @@ -0,0 +1,70 @@ +using Content.Shared.GameObjects.Atmos; +using JetBrains.Annotations; +using Robust.Client.GameObjects; +using Robust.Client.Graphics; +using Robust.Client.Interfaces.GameObjects.Components; +using Robust.Client.Interfaces.ResourceManagement; +using Robust.Client.ResourceManagement; +using Robust.Shared.GameObjects.Components.Renderable; +using Robust.Shared.IoC; +using Robust.Shared.Log; +using Robust.Shared.Utility; +using System; +using YamlDotNet.RepresentationModel; + +namespace Content.Client.GameObjects.Components.Disposal +{ + [UsedImplicitly] + public class PumpVisualizer : AppearanceVisualizer + { + private RSI _pumpRSI; + + public override void LoadData(YamlMappingNode node) + { + base.LoadData(node); + + var rsiString = node.GetNode("pumpRSI").ToString(); + var rsiPath = SharedSpriteComponent.TextureRoot / rsiString; + try + { + var resourceCache = IoCManager.Resolve(); + var resource = resourceCache.GetResource(rsiPath); + _pumpRSI = resource.RSI; + } + catch (Exception e) + { + Logger.ErrorS("go.pumpvisualizer", "Unable to load RSI '{0}'. Trace:\n{1}", rsiPath, e); + } + } + + public override void OnChangeData(AppearanceComponent component) + { + base.OnChangeData(component); + + if (!component.Owner.TryGetComponent(out ISpriteComponent sprite)) + { + return; + } + if (!component.TryGetData(PumpVisuals.VisualState, out PumpVisualState pumpVisualState)) + { + return; + } + var pumpBaseState = "pump"; + pumpBaseState += pumpVisualState.InletDirection.ToString(); + pumpBaseState += ((int) pumpVisualState.InletConduitLayer).ToString(); + pumpBaseState += pumpVisualState.OutletDirection.ToString(); + pumpBaseState += ((int) pumpVisualState.OutletConduitLayer).ToString(); + + sprite.LayerMapReserveBlank(Layer.PumpBase); + var basePumpLayer = sprite.LayerMapGet(Layer.PumpBase); + sprite.LayerSetRSI(basePumpLayer, _pumpRSI); + sprite.LayerSetState(basePumpLayer, pumpBaseState); + sprite.LayerSetVisible(basePumpLayer, true); + } + + private enum Layer + { + PumpBase + } + } +} diff --git a/Content.Server/GameObjects/Components/Atmos/Piping/Pumps/BasePumpComponent.cs b/Content.Server/GameObjects/Components/Atmos/Piping/Pumps/BasePumpComponent.cs index 23e9f63c33..1556c9a62c 100644 --- a/Content.Server/GameObjects/Components/Atmos/Piping/Pumps/BasePumpComponent.cs +++ b/Content.Server/GameObjects/Components/Atmos/Piping/Pumps/BasePumpComponent.cs @@ -2,6 +2,8 @@ using Content.Server.GameObjects.Components.NodeContainer; using Content.Server.GameObjects.Components.NodeContainer.Nodes; using Content.Shared.GameObjects.Components.Atmos; +using Content.Shared.GameObjects.Atmos; +using Robust.Server.GameObjects; using Robust.Shared.Log; using Robust.Shared.Serialization; using Robust.Shared.ViewVariables; @@ -32,6 +34,8 @@ namespace Content.Server.GameObjects.Components.Atmos.Piping [ViewVariables] private PipeNode _outletPipe; + private AppearanceComponent _appearance; + public override void ExposeData(ObjectSerializer serializer) { base.ExposeData(serializer); @@ -57,6 +61,8 @@ namespace Content.Server.GameObjects.Components.Atmos.Piping Logger.Error($"{typeof(BasePumpComponent)} on entity {Owner.Uid} could not find compatible {nameof(PipeNode)}s on its {nameof(NodeContainerComponent)}."); return; } + Owner.TryGetComponent(out _appearance); + UpdateAppearance(); } public override void Update() @@ -65,5 +71,10 @@ namespace Content.Server.GameObjects.Components.Atmos.Piping } protected abstract void PumpGas(GasMixture inletGas, GasMixture outletGas); + + private void UpdateAppearance() + { + _appearance?.SetData(PumpVisuals.VisualState, new PumpVisualState(_inletDirection, _outletDirection, _inletPipe.ConduitLayer, _outletPipe.ConduitLayer)); + } } } diff --git a/Content.Shared/GameObjects/Atmos/SharedPumpComponent.cs b/Content.Shared/GameObjects/Atmos/SharedPumpComponent.cs new file mode 100644 index 0000000000..d4f304e53e --- /dev/null +++ b/Content.Shared/GameObjects/Atmos/SharedPumpComponent.cs @@ -0,0 +1,29 @@ +using Content.Shared.GameObjects.Components.Atmos; +using Robust.Shared.Serialization; +using System; + +namespace Content.Shared.GameObjects.Atmos +{ + [Serializable, NetSerializable] + public enum PumpVisuals + { + VisualState + } + + [Serializable, NetSerializable] + public class PumpVisualState + { + public readonly PipeDirection InletDirection; + public readonly PipeDirection OutletDirection; + public readonly ConduitLayer InletConduitLayer; + public readonly ConduitLayer OutletConduitLayer; + + public PumpVisualState(PipeDirection inletDirection, PipeDirection outletDirection, ConduitLayer inletConduitLayer, ConduitLayer outletConduitLayer) + { + InletDirection = inletDirection; + OutletDirection = outletDirection; + InletConduitLayer = inletConduitLayer; + OutletConduitLayer = outletConduitLayer; + } + } +} diff --git a/Resources/Prototypes/Entities/Constructible/Ground/pumps.yml b/Resources/Prototypes/Entities/Constructible/Ground/pumps.yml index d1f2ac0b5c..ff727b63f6 100644 --- a/Resources/Prototypes/Entities/Constructible/Ground/pumps.yml +++ b/Resources/Prototypes/Entities/Constructible/Ground/pumps.yml @@ -12,7 +12,12 @@ - type: Icon texture: Constructible/Power/eightdirwire.png - type: Sprite - sprite: Constructible/Power/mv_cable.rsi + - type: Appearance + visuals: + - type: PipeVisualizer + pipeRSI: Constructible/Atmos/pipe.rsi + - type: PumpVisualizer + pumpRSI: Constructible/Atmos/pressurepump.rsi - type: Destructible thresholdvalue: 100 @@ -21,8 +26,6 @@ parent: PumpBase id: NorthwardLongitudinalPump components: - - type: Sprite - state: mvcable_3 - type: NodeContainer nodes: - !type:PipeNode diff --git a/Resources/Textures/Constructible/Atmos/pressurepump.rsi/meta.json b/Resources/Textures/Constructible/Atmos/pressurepump.rsi/meta.json new file mode 100644 index 0000000000..f950406db6 --- /dev/null +++ b/Resources/Textures/Constructible/Atmos/pressurepump.rsi/meta.json @@ -0,0 +1,31 @@ +{ + "version":1, + "size":{ + "x":32, + "y":32 + }, + "license":"CC-BY-SA-3.0", + "copyright":"Taken from https://github.com/tgstation/tgstation at commit 57cd1d59ca019dd0e7811ac451f295f818e573da", + "states":[ + { + "name":"pumpEast2West2", + "directions":1, + "delays":[ [ 1.0 ] ] + }, + { + "name":"pumpNorth2South2", + "directions":1, + "delays":[ [ 1.0 ] ] + }, + { + "name":"pumpSouth2North2", + "directions":1, + "delays":[ [ 1.0 ] ] + }, + { + "name":"pumpWest2East2", + "directions":1, + "delays":[ [ 1.0 ] ] + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Constructible/Atmos/pressurepump.rsi/pumpEast2West2.png b/Resources/Textures/Constructible/Atmos/pressurepump.rsi/pumpEast2West2.png new file mode 100644 index 0000000000000000000000000000000000000000..dc07973864d14a63d8a72dec3ff506bad1385d12 GIT binary patch literal 281 zcmV+!0p|XRP)FX16ey7>XLrl4*uP8W6Z z(EBY1$A@$h5-6pV`tNps35!UG&3f;n){Y)PM8e_l%zl3tm7k_5YKWWb#>v`nvUYV+ z5ediR3wfS1JBPKF**S`$V0I2;46}1oRrOtC{Td)mQ<5ZEZT|H5K$d0P8v{UH*8nt4 z13=rh0F-69sxfY_8_Ti~!p{YG?{}|n@8NR!F7f#&HCo>pB4XzF*ZCo41pw6o!A5&N_f0OP3BAdWG}?#VxH3Hh9P}TIf+c=mcJ!3wSUTWNZ+a8sfPbtRe2E zP8nLd_zhAB`bNS3^zrzG0FTGxaSWq`IOpc?nbw*#YjKEkZo)7G03=C*wr$Zg4T_>5 zNn9@toaltWn-Bnib(T@b&;{06_G<&y1b&^AR^M&$!=g@Hq?^$B`^>wKSl$W@Wj< z_k6^D+~aWgLRs#}e*qcJxp{hgF#ml_RwbNWeld`X^RZf)AP6u`6K<6v&sqEmPB6y6 enBC%gE|VX-$8A7IW5JyO0000MhJufhVp@HV6e(mw0t2B(Y?I` z05(~s8KW2YIy8=B7-L|qonD|}#w+u;%;W;w;}KC5p)5`yFm5;k|RD)&>Li%O_sfaMK0h0EMhvh3y95h7CXOY zn&D%Zc@LCQO8s|%w9y!|NPDMg66cB;Pd zNz;_Udz^C&-jgH=mrK3b*u%Ny;oN46;sLTOTh*$n04U26fTAb>I9f{_$9$eot0BTL zB#NR W>r71yHG6^p0000 Date: Mon, 31 Aug 2020 18:55:42 +0200 Subject: [PATCH 040/103] Adds click attacks --- .../EntitySystems/MeleeWeaponSystem.cs | 32 ++++- .../Combat/Melee/MeleeWeaponSpeedCon.cs | 2 +- .../Weapon/Melee/MeleeWeaponComponent.cs | 127 ++++++++++++------ .../EntitySystems/Click/InteractionSystem.cs | 30 +++-- .../EntitySystems/MeleeWeaponSystem.cs | 7 +- .../MeleeWeaponSystemMessages.cs | 18 ++- .../Components/Interaction/IAttack.cs | 17 ++- 7 files changed, 167 insertions(+), 66 deletions(-) diff --git a/Content.Client/GameObjects/EntitySystems/MeleeWeaponSystem.cs b/Content.Client/GameObjects/EntitySystems/MeleeWeaponSystem.cs index 1a4b1212ee..daefa7c8c9 100644 --- a/Content.Client/GameObjects/EntitySystems/MeleeWeaponSystem.cs +++ b/Content.Client/GameObjects/EntitySystems/MeleeWeaponSystem.cs @@ -21,7 +21,8 @@ namespace Content.Client.GameObjects.EntitySystems public override void Initialize() { - SubscribeNetworkEvent(PlayWeaponArc); + SubscribeNetworkEvent(PlayWeaponArc); + SubscribeNetworkEvent(PlayWeapon); } public override void FrameUpdate(float frameTime) @@ -34,7 +35,7 @@ namespace Content.Client.GameObjects.EntitySystems } } - private void PlayWeaponArc(PlayMeleeWeaponAnimationMessage msg) + private void PlayWeaponArc(PlayMeleeWeaponArcAnimationMessage msg) { if (!_prototypeManager.TryIndex(msg.ArcPrototype, out MeleeWeaponAnimationPrototype weaponArc)) { @@ -80,5 +81,32 @@ namespace Content.Client.GameObjects.EntitySystems }); } } + + private void PlayWeapon(PlayMeleeWeaponAnimationMessage msg) + { + var attacker = EntityManager.GetEntity(msg.Attacker); + + var lunge = attacker.EnsureComponent(); + lunge.SetData(msg.Angle); + + if (!EntityManager.TryGetEntity(msg.Hit, out var hitEntity) + || !hitEntity.TryGetComponent(out ISpriteComponent sprite)) + { + return; + } + + var originalColor = sprite.Color; + var newColor = Color.Red * originalColor; + sprite.Color = newColor; + + Timer.Spawn(100, () => + { + // Only reset back to the original color if something else didn't change the color in the mean time. + if (sprite.Color == newColor) + { + sprite.Color = originalColor; + } + }); + } } } diff --git a/Content.Server/AI/Utility/Considerations/Combat/Melee/MeleeWeaponSpeedCon.cs b/Content.Server/AI/Utility/Considerations/Combat/Melee/MeleeWeaponSpeedCon.cs index fc56a593f7..63e1bddd46 100644 --- a/Content.Server/AI/Utility/Considerations/Combat/Melee/MeleeWeaponSpeedCon.cs +++ b/Content.Server/AI/Utility/Considerations/Combat/Melee/MeleeWeaponSpeedCon.cs @@ -15,7 +15,7 @@ namespace Content.Server.AI.Utility.Considerations.Combat.Melee return 0.0f; } - return meleeWeaponComponent.CooldownTime / 10.0f; + return meleeWeaponComponent.ArcCooldownTime / 10.0f; } } } diff --git a/Content.Server/GameObjects/Components/Weapon/Melee/MeleeWeaponComponent.cs b/Content.Server/GameObjects/Components/Weapon/Melee/MeleeWeaponComponent.cs index ce4a5bf376..7f4f536b0f 100644 --- a/Content.Server/GameObjects/Components/Weapon/Melee/MeleeWeaponComponent.cs +++ b/Content.Server/GameObjects/Components/Weapon/Melee/MeleeWeaponComponent.cs @@ -29,53 +29,41 @@ namespace Content.Server.GameObjects.Components.Weapon.Melee public override string Name => "MeleeWeapon"; private TimeSpan _lastAttackTime; + private TimeSpan _cooldownEnd; - private int _damage; - private float _range; - private float _arcWidth; - private string _arc; private string _hitSound; - public float CooldownTime => _cooldownTime; - private float _cooldownTime = 1f; + private string _missSound; + public float ArcCooldownTime { get; private set; } = 1f; + public float CooldownTime { get; private set; } = 0.5f; [ViewVariables(VVAccess.ReadWrite)] - public string Arc - { - get => _arc; - set => _arc = value; - } + public string Arc { get; set; } [ViewVariables(VVAccess.ReadWrite)] - public float ArcWidth - { - get => _arcWidth; - set => _arcWidth = value; - } + public float ArcWidth { get; set; } [ViewVariables(VVAccess.ReadWrite)] - public float Range - { - get => _range; - set => _range = value; - } + public float Range { get; set; } [ViewVariables(VVAccess.ReadWrite)] - public int Damage - { - get => _damage; - set => _damage = value; - } + public int Damage { get; set; } + + [ViewVariables(VVAccess.ReadWrite)] + public DamageType DamageType { get; set; } public override void ExposeData(ObjectSerializer serializer) { base.ExposeData(serializer); - serializer.DataField(ref _damage, "damage", 5); - serializer.DataField(ref _range, "range", 1); - serializer.DataField(ref _arcWidth, "arcwidth", 90); - serializer.DataField(ref _arc, "arc", "default"); - serializer.DataField(ref _hitSound, "hitSound", "/Audio/Weapons/genhit1.ogg"); - serializer.DataField(ref _cooldownTime, "cooldownTime", 1f); + serializer.DataField(this, x => x.Damage, "damage", 5); + serializer.DataField(this, x => x.Range, "range", 1); + serializer.DataField(this, x => x.ArcWidth, "arcwidth", 90); + serializer.DataField(this, x => x.Arc, "arc", "default"); + serializer.DataField(this, x => x._hitSound, "hitSound", "/Audio/Weapons/genhit1.ogg"); + serializer.DataField(this, x => x._missSound, "hitSound", "/Audio/Weapons/punchmiss.ogg"); + serializer.DataField(this, x => x.ArcCooldownTime, "arcCooldownTime", 1f); + serializer.DataField(this, x => x.CooldownTime, "cooldownTime", 1f); + serializer.DataField(this, x => x.DamageType, "damageType", DamageType.Blunt); } protected virtual bool OnHitEntities(IReadOnlyList entities, AttackEventArgs eventArgs) @@ -83,13 +71,15 @@ namespace Content.Server.GameObjects.Components.Weapon.Melee return true; } - void IAttack.Attack(AttackEventArgs eventArgs) + bool IAttack.WideAttack(AttackEventArgs eventArgs) { + if (!eventArgs.WideAttack) return true; + var curTime = IoCManager.Resolve().CurTime; - var span = curTime - _lastAttackTime; - if(span.TotalSeconds < _cooldownTime) { - return; - } + + if(curTime < _cooldownEnd) + return true; + var location = eventArgs.User.Transform.GridPosition; var angle = new Angle(eventArgs.ClickLocation.ToMapPos(_mapManager) - location.ToMapPos(_mapManager)); @@ -103,7 +93,7 @@ namespace Content.Server.GameObjects.Components.Weapon.Melee } else { - audioSystem.PlayFromEntity("/Audio/Weapons/punchmiss.ogg", eventArgs.User); + audioSystem.PlayFromEntity(_missSound, eventArgs.User); } var hitEntities = new List(); @@ -114,12 +104,12 @@ namespace Content.Server.GameObjects.Components.Weapon.Melee if (entity.TryGetComponent(out IDamageableComponent damageComponent)) { - damageComponent.ChangeDamage(DamageType.Blunt, Damage, false, Owner); + damageComponent.ChangeDamage(DamageType, Damage, false, Owner); hitEntities.Add(entity); } } - if(!OnHitEntities(hitEntities, eventArgs)) return; + if(!OnHitEntities(hitEntities, eventArgs)) return true; if (Arc != null) { @@ -127,13 +117,64 @@ namespace Content.Server.GameObjects.Components.Weapon.Melee sys.SendAnimation(Arc, angle, eventArgs.User, hitEntities); } - _lastAttackTime = IoCManager.Resolve().CurTime; + _lastAttackTime = curTime; + _cooldownEnd = _lastAttackTime + TimeSpan.FromSeconds(ArcCooldownTime); if (Owner.TryGetComponent(out ItemCooldownComponent cooldown)) { cooldown.CooldownStart = _lastAttackTime; - cooldown.CooldownEnd = _lastAttackTime + TimeSpan.FromSeconds(_cooldownTime); + cooldown.CooldownEnd = _cooldownEnd; } + + return true; + } + + bool IAttack.ClickAttack(AttackEventArgs eventArgs) + { + if (eventArgs.WideAttack) return false; + + var curTime = IoCManager.Resolve().CurTime; + + if(curTime < _cooldownEnd || !eventArgs.Target.IsValid()) + return true; + + var target = eventArgs.TargetEntity; + + var location = eventArgs.User.Transform.GridPosition; + var angle = new Angle(eventArgs.ClickLocation.ToMapPos(_mapManager) - location.ToMapPos(_mapManager)); + + var audioSystem = EntitySystem.Get(); + if (target != null) + { + audioSystem.PlayFromEntity( _hitSound, target); + } + else + { + audioSystem.PlayFromEntity(_missSound, eventArgs.User); + return true; + } + + if (target.TryGetComponent(out IDamageableComponent damageComponent)) + { + damageComponent.ChangeDamage(DamageType, Damage, false, Owner); + } + + if (!OnHitEntities(new[] {target}, eventArgs)) + return true; + + var sys = _entitySystemManager.GetEntitySystem(); + sys.SendAnimation(angle, eventArgs.User, target); + + _lastAttackTime = curTime; + _cooldownEnd = _lastAttackTime + TimeSpan.FromSeconds(CooldownTime); + + if (Owner.TryGetComponent(out ItemCooldownComponent cooldown)) + { + cooldown.CooldownStart = _lastAttackTime; + cooldown.CooldownEnd = _cooldownEnd; + } + + return true; } private HashSet ArcRayCast(Vector2 position, Angle angle, IEntity ignore) @@ -149,7 +190,7 @@ namespace Content.Server.GameObjects.Components.Weapon.Melee for (var i = 0; i < increments; i++) { var castAngle = new Angle(baseAngle + increment * i); - var res = _physicsManager.IntersectRay(mapId, new CollisionRay(position, castAngle.ToVec(), 23), _range, ignore).FirstOrDefault(); + var res = _physicsManager.IntersectRay(mapId, new CollisionRay(position, castAngle.ToVec(), 23), Range, ignore).FirstOrDefault(); if (res.HitEntity != null) { resSet.Add(res.HitEntity); diff --git a/Content.Server/GameObjects/EntitySystems/Click/InteractionSystem.cs b/Content.Server/GameObjects/EntitySystems/Click/InteractionSystem.cs index ddab046408..2fd492635f 100644 --- a/Content.Server/GameObjects/EntitySystems/Click/InteractionSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/Click/InteractionSystem.cs @@ -176,7 +176,7 @@ namespace Content.Server.GameObjects.EntitySystems.Click if (userEntity.TryGetComponent(out CombatModeComponent combatMode) && combatMode.IsInCombatMode) { - DoAttack(userEntity, coords); + DoAttack(userEntity, coords, true); } return true; @@ -198,7 +198,7 @@ namespace Content.Server.GameObjects.EntitySystems.Click if (entity.TryGetComponent(out CombatModeComponent combatMode) && combatMode.IsInCombatMode) { - DoAttack(entity, coords); + DoAttack(entity, coords, false); } else { @@ -229,7 +229,10 @@ namespace Content.Server.GameObjects.EntitySystems.Click return true; } - UserInteraction(userEntity, coords, uid); + if(userEntity.TryGetComponent(out CombatModeComponent combat) && combat.IsInCombatMode) + DoAttack(userEntity, coords, false, uid); + else + UserInteraction(userEntity, coords, uid); return true; } @@ -790,7 +793,7 @@ namespace Content.Server.GameObjects.EntitySystems.Click } } - private void DoAttack(IEntity player, GridCoordinates coordinates) + private void DoAttack(IEntity player, GridCoordinates coordinates, bool wideAttack, EntityUid target = default) { // Verify player is on the same map as the entity he clicked on if (_mapManager.GetGrid(coordinates.GridID).ParentMapId != player.Transform.MapID) @@ -800,12 +803,13 @@ namespace Content.Server.GameObjects.EntitySystems.Click return; } - if (!ActionBlockerSystem.CanAttack(player)) + if (!ActionBlockerSystem.CanAttack(player) || + (!wideAttack && !InRangeUnobstructed(player.Transform.MapPosition, coordinates.ToMap(_mapManager), ignoreInsideBlocker:true))) { return; } - var eventArgs = new AttackEventArgs(player, coordinates); + var eventArgs = new AttackEventArgs(player, coordinates, wideAttack, target); // Verify player has a hand, and find what object he is currently holding in his active hand if (player.TryGetComponent(out var hands)) @@ -814,22 +818,20 @@ namespace Content.Server.GameObjects.EntitySystems.Click if (item != null) { - var attacked = false; foreach (var attackComponent in item.GetAllComponents()) { - attackComponent.Attack(eventArgs); - attacked = true; - } - if (attacked) - { - return; + if(wideAttack ? attackComponent.WideAttack(eventArgs) : attackComponent.ClickAttack(eventArgs)) + return; } } } foreach (var attackComponent in player.GetAllComponents()) { - attackComponent.Attack(eventArgs); + if (wideAttack) + attackComponent.WideAttack(eventArgs); + else + attackComponent.ClickAttack(eventArgs); } } } diff --git a/Content.Server/GameObjects/EntitySystems/MeleeWeaponSystem.cs b/Content.Server/GameObjects/EntitySystems/MeleeWeaponSystem.cs index 82ba72537a..986a278535 100644 --- a/Content.Server/GameObjects/EntitySystems/MeleeWeaponSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/MeleeWeaponSystem.cs @@ -11,8 +11,13 @@ namespace Content.Server.GameObjects.EntitySystems { public void SendAnimation(string arc, Angle angle, IEntity attacker, IEnumerable hits) { - RaiseNetworkEvent(new MeleeWeaponSystemMessages.PlayMeleeWeaponAnimationMessage(arc, angle, attacker.Uid, + RaiseNetworkEvent(new MeleeWeaponSystemMessages.PlayMeleeWeaponArcAnimationMessage(arc, angle, attacker.Uid, hits.Select(e => e.Uid).ToList())); } + + public void SendAnimation(Angle angle, IEntity attacker, IEntity hit) + { + RaiseNetworkEvent(new MeleeWeaponSystemMessages.PlayMeleeWeaponAnimationMessage(angle, attacker.Uid, hit.Uid)); + } } } diff --git a/Content.Shared/GameObjects/EntitySystemMessages/MeleeWeaponSystemMessages.cs b/Content.Shared/GameObjects/EntitySystemMessages/MeleeWeaponSystemMessages.cs index 989defae06..849ba09936 100644 --- a/Content.Shared/GameObjects/EntitySystemMessages/MeleeWeaponSystemMessages.cs +++ b/Content.Shared/GameObjects/EntitySystemMessages/MeleeWeaponSystemMessages.cs @@ -9,9 +9,9 @@ namespace Content.Shared.GameObjects.EntitySystemMessages public static class MeleeWeaponSystemMessages { [Serializable, NetSerializable] - public sealed class PlayMeleeWeaponAnimationMessage : EntitySystemMessage + public sealed class PlayMeleeWeaponArcAnimationMessage : EntitySystemMessage { - public PlayMeleeWeaponAnimationMessage(string arcPrototype, Angle angle, EntityUid attacker, List hits) + public PlayMeleeWeaponArcAnimationMessage(string arcPrototype, Angle angle, EntityUid attacker, List hits) { ArcPrototype = arcPrototype; Angle = angle; @@ -24,5 +24,19 @@ namespace Content.Shared.GameObjects.EntitySystemMessages public EntityUid Attacker { get; } public List Hits { get; } } + + [Serializable, NetSerializable] + public sealed class PlayMeleeWeaponAnimationMessage : EntitySystemMessage + { + public PlayMeleeWeaponAnimationMessage(Angle angle, EntityUid attacker, EntityUid hit) + { + Attacker = attacker; + Hit = hit; + } + + public Angle Angle { get; } + public EntityUid Attacker { get; } + public EntityUid Hit { get; } + } } } diff --git a/Content.Shared/Interfaces/GameObjects/Components/Interaction/IAttack.cs b/Content.Shared/Interfaces/GameObjects/Components/Interaction/IAttack.cs index cf2950a519..218b403600 100644 --- a/Content.Shared/Interfaces/GameObjects/Components/Interaction/IAttack.cs +++ b/Content.Shared/Interfaces/GameObjects/Components/Interaction/IAttack.cs @@ -1,5 +1,9 @@ -using System; +#nullable enable +using System; +using Content.Shared.GameObjects.Components.Research; +using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; +using Robust.Shared.IoC; using Robust.Shared.Map; namespace Content.Shared.Interfaces.GameObjects.Components @@ -9,18 +13,25 @@ namespace Content.Shared.Interfaces.GameObjects.Components /// public interface IAttack { - void Attack(AttackEventArgs eventArgs); + // Redirects to ClickAttack by default. + bool WideAttack(AttackEventArgs eventArgs) => ClickAttack(eventArgs); + bool ClickAttack(AttackEventArgs eventArgs); } public class AttackEventArgs : EventArgs { - public AttackEventArgs(IEntity user, GridCoordinates clickLocation) + public AttackEventArgs(IEntity user, GridCoordinates clickLocation, bool wideAttack, EntityUid target = default) { User = user; ClickLocation = clickLocation; + WideAttack = wideAttack; + Target = target; } public IEntity User { get; } public GridCoordinates ClickLocation { get; } + public bool WideAttack { get; } + public EntityUid Target { get; } + public IEntity? TargetEntity => IoCManager.Resolve()?.GetEntity(Target) ?? null; } } From f41e39410dfb7cba5d7a337f927436bc28a7bb8a Mon Sep 17 00:00:00 2001 From: ancientpower Date: Mon, 31 Aug 2020 12:11:22 -0500 Subject: [PATCH 041/103] Tweaks damage types and classes (#1969) Co-authored-by: ancientpower --- Content.Server/Chat/ChatCommands.cs | 9 ++- .../Interfaces/GameObjects/ISuicideAct.cs | 11 ++-- Content.Shared/Damage/DamageClass.cs | 12 ++-- Content.Shared/Damage/DamageType.cs | 25 +++++--- .../Prototypes/Damage/damage_containers.yml | 1 + .../Prototypes/Damage/resistance_sets.yml | 64 +++++++++++++------ 6 files changed, 82 insertions(+), 40 deletions(-) diff --git a/Content.Server/Chat/ChatCommands.cs b/Content.Server/Chat/ChatCommands.cs index a309a344f0..302d0add91 100644 --- a/Content.Server/Chat/ChatCommands.cs +++ b/Content.Server/Chat/ChatCommands.cs @@ -139,12 +139,15 @@ namespace Content.Server.Chat damageableComponent.ChangeDamage(kind switch { SuicideKind.Blunt => DamageType.Blunt, + SuicideKind.Slash => DamageType.Slash, SuicideKind.Piercing => DamageType.Piercing, SuicideKind.Heat => DamageType.Heat, - SuicideKind.Disintegration => DamageType.Disintegration, - SuicideKind.Cellular => DamageType.Cellular, - SuicideKind.DNA => DamageType.DNA, + SuicideKind.Shock => DamageType.Shock, + SuicideKind.Cold => DamageType.Cold, + SuicideKind.Poison => DamageType.Poison, + SuicideKind.Radiation => DamageType.Radiation, SuicideKind.Asphyxiation => DamageType.Asphyxiation, + SuicideKind.Bloodloss => DamageType.Bloodloss, _ => DamageType.Blunt }, 500, diff --git a/Content.Server/Interfaces/GameObjects/ISuicideAct.cs b/Content.Server/Interfaces/GameObjects/ISuicideAct.cs index 78d0d9974f..a23353adac 100644 --- a/Content.Server/Interfaces/GameObjects/ISuicideAct.cs +++ b/Content.Server/Interfaces/GameObjects/ISuicideAct.cs @@ -14,12 +14,15 @@ namespace Content.Server.Interfaces.GameObjects //Damage type suicides Blunt, + Slash, Piercing, Heat, - Disintegration, - Cellular, - DNA, - Asphyxiation + Shock, + Cold, + Poison, + Radiation, + Asphyxiation, + Bloodloss } } diff --git a/Content.Shared/Damage/DamageClass.cs b/Content.Shared/Damage/DamageClass.cs index 393b999486..406dc8bb73 100644 --- a/Content.Shared/Damage/DamageClass.cs +++ b/Content.Shared/Damage/DamageClass.cs @@ -12,7 +12,8 @@ namespace Content.Shared.Damage Brute, Burn, Toxin, - Airloss + Airloss, + Genetic } public static class DamageClassExtensions @@ -20,10 +21,11 @@ namespace Content.Shared.Damage private static readonly ImmutableDictionary> ClassToType = new Dictionary> { - {DamageClass.Brute, new List {DamageType.Blunt, DamageType.Piercing}}, - {DamageClass.Burn, new List {DamageType.Heat, DamageType.Disintegration}}, - {DamageClass.Toxin, new List {DamageType.Cellular, DamageType.DNA}}, - {DamageClass.Airloss, new List {DamageType.Asphyxiation}} + {DamageClass.Brute, new List {DamageType.Blunt, DamageType.Slash, DamageType.Piercing}}, + {DamageClass.Burn, new List {DamageType.Heat, DamageType.Shock, DamageType.Cold}}, + {DamageClass.Toxin, new List {DamageType.Poison, DamageType.Radiation}}, + {DamageClass.Airloss, new List {DamageType.Asphyxiation, DamageType.Bloodloss}}, + {DamageClass.Genetic, new List {DamageType.Cellular}} }.ToImmutableDictionary(); public static List ToTypes(this DamageClass @class) diff --git a/Content.Shared/Damage/DamageType.cs b/Content.Shared/Damage/DamageType.cs index 96cfb2eecb..0de82925f7 100644 --- a/Content.Shared/Damage/DamageType.cs +++ b/Content.Shared/Damage/DamageType.cs @@ -10,12 +10,16 @@ namespace Content.Shared.Damage public enum DamageType { Blunt, + Slash, Piercing, Heat, - Disintegration, - Cellular, - DNA, - Asphyxiation + Shock, + Cold, + Poison, + Radiation, + Asphyxiation, + Bloodloss, + Cellular } public static class DamageTypeExtensions @@ -25,12 +29,17 @@ namespace Content.Shared.Damage new Dictionary { {DamageType.Blunt, DamageClass.Brute}, + {DamageType.Slash, DamageClass.Brute}, {DamageType.Piercing, DamageClass.Brute}, {DamageType.Heat, DamageClass.Burn}, - {DamageType.Disintegration, DamageClass.Burn}, - {DamageType.Cellular, DamageClass.Toxin}, - {DamageType.DNA, DamageClass.Toxin}, - {DamageType.Asphyxiation, DamageClass.Airloss} + {DamageType.Shock, DamageClass.Burn}, + {DamageType.Cold, DamageClass.Burn}, + {DamageType.Poison, DamageClass.Toxin}, + {DamageType.Radiation, DamageClass.Toxin}, + {DamageType.Asphyxiation, DamageClass.Airloss}, + {DamageType.Bloodloss, DamageClass.Airloss}, + {DamageType.Cellular, DamageClass.Genetic } + }.ToImmutableDictionary(); public static DamageClass ToClass(this DamageType type) diff --git a/Resources/Prototypes/Damage/damage_containers.yml b/Resources/Prototypes/Damage/damage_containers.yml index bb950b47f1..5fad0c557c 100644 --- a/Resources/Prototypes/Damage/damage_containers.yml +++ b/Resources/Prototypes/Damage/damage_containers.yml @@ -5,6 +5,7 @@ - Burn - Toxin - Airloss + - Genetic - type: damageContainer id: metallicDamageContainer diff --git a/Resources/Prototypes/Damage/resistance_sets.yml b/Resources/Prototypes/Damage/resistance_sets.yml index 5b829d48df..47fe96ef92 100644 --- a/Resources/Prototypes/Damage/resistance_sets.yml +++ b/Resources/Prototypes/Damage/resistance_sets.yml @@ -2,55 +2,79 @@ id: defaultResistances coefficients: Blunt: 1.0 + Slash: 1.0 Piercing: 1.0 Heat: 1.0 - Disintegration: 1.0 - Cellular: 1.0 - DNA: 1.0 + Shock: 1.0 + Cold: 1.0 + Poison: 1.0 + Radiation: 1.0 Asphyxiation: 1.0 + Bloodloss: 1.0 + Cellular: 1.0 flatReductions: Blunt: 0 + Slash: 0 Piercing: 0 Heat: 0 - Disintegration: 0 + Shock: 0 + Cold: 0 + Poison: 0 + Radiation: 0 + Asphyxiation: 0 + Bloodloss: 0 Cellular: 0 - DNA: 0 - Asphyxiation: 0 - type: resistanceSet id: dionaResistances coefficients: Blunt: 0.5 + Slash: 1.2 Piercing: 0.7 Heat: 1.8 - Disintegration: 1.8 - Cellular: 1.0 - DNA: 1.0 + Shock: 0.5 + Cold: 1.5 + Poison: 0.8 + Radiation: 0 Asphyxiation: 1.0 + Bloodloss: 1.0 + Cellular: 1.0 flatReductions: Blunt: 0 + Slash: 0 Piercing: 0 Heat: 0 - Disintegration: 0 - Cellular: 0 - DNA: 0 + Shock: 0 + Cold: 0 + Poison: 0 + Radiation: 0 Asphyxiation: 0 + Bloodloss: 0 + Cellular: 0 - type: resistanceSet id: metallicResistances coefficients: Blunt: 0.7 + Slash: 0.5 Piercing: 0.7 Heat: 1.0 - Disintegration: 1.0 - Cellular: 0.0 - DNA: 0.0 - Asphyxiation: 0.0 + Shock: 1.2 + Cold: 0 + Poison: 0 + Radiation: 0 + Asphyxiation: 0 + Bloodloss: 0 + Cellular: 0 flatReductions: Blunt: 0 + Slash: 0 Piercing: 0 Heat: 0 - Disintegration: 0 - Cellular: 0 - DNA: 0 - Asphyxiation: 0 \ No newline at end of file + Shock: 0 + Cold: 0 + Poison: 0 + Radiation: 0 + Asphyxiation: 0 + Bloodloss: 0 + Cellular: 0 \ No newline at end of file From b927fddf4c666a39c6e59f0cc6ab9650839c632c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Aguilera=20Puerto?= Date: Mon, 31 Aug 2020 19:32:06 +0200 Subject: [PATCH 042/103] Better click attack effect --- .../EntitySystems/MeleeWeaponSystem.cs | 32 ++----------------- .../Weapon/Melee/MeleeWeaponComponent.cs | 15 +++++++-- .../EntitySystems/MeleeWeaponSystem.cs | 7 +--- .../MeleeWeaponSystemMessages.cs | 18 ++--------- 4 files changed, 17 insertions(+), 55 deletions(-) diff --git a/Content.Client/GameObjects/EntitySystems/MeleeWeaponSystem.cs b/Content.Client/GameObjects/EntitySystems/MeleeWeaponSystem.cs index daefa7c8c9..1a4b1212ee 100644 --- a/Content.Client/GameObjects/EntitySystems/MeleeWeaponSystem.cs +++ b/Content.Client/GameObjects/EntitySystems/MeleeWeaponSystem.cs @@ -21,8 +21,7 @@ namespace Content.Client.GameObjects.EntitySystems public override void Initialize() { - SubscribeNetworkEvent(PlayWeaponArc); - SubscribeNetworkEvent(PlayWeapon); + SubscribeNetworkEvent(PlayWeaponArc); } public override void FrameUpdate(float frameTime) @@ -35,7 +34,7 @@ namespace Content.Client.GameObjects.EntitySystems } } - private void PlayWeaponArc(PlayMeleeWeaponArcAnimationMessage msg) + private void PlayWeaponArc(PlayMeleeWeaponAnimationMessage msg) { if (!_prototypeManager.TryIndex(msg.ArcPrototype, out MeleeWeaponAnimationPrototype weaponArc)) { @@ -81,32 +80,5 @@ namespace Content.Client.GameObjects.EntitySystems }); } } - - private void PlayWeapon(PlayMeleeWeaponAnimationMessage msg) - { - var attacker = EntityManager.GetEntity(msg.Attacker); - - var lunge = attacker.EnsureComponent(); - lunge.SetData(msg.Angle); - - if (!EntityManager.TryGetEntity(msg.Hit, out var hitEntity) - || !hitEntity.TryGetComponent(out ISpriteComponent sprite)) - { - return; - } - - var originalColor = sprite.Color; - var newColor = Color.Red * originalColor; - sprite.Color = newColor; - - Timer.Spawn(100, () => - { - // Only reset back to the original color if something else didn't change the color in the mean time. - if (sprite.Color == newColor) - { - sprite.Color = originalColor; - } - }); - } } } diff --git a/Content.Server/GameObjects/Components/Weapon/Melee/MeleeWeaponComponent.cs b/Content.Server/GameObjects/Components/Weapon/Melee/MeleeWeaponComponent.cs index 7f4f536b0f..06d4338b7c 100644 --- a/Content.Server/GameObjects/Components/Weapon/Melee/MeleeWeaponComponent.cs +++ b/Content.Server/GameObjects/Components/Weapon/Melee/MeleeWeaponComponent.cs @@ -36,6 +36,9 @@ namespace Content.Server.GameObjects.Components.Weapon.Melee public float ArcCooldownTime { get; private set; } = 1f; public float CooldownTime { get; private set; } = 0.5f; + [ViewVariables(VVAccess.ReadWrite)] + public string ClickArc { get; set; } + [ViewVariables(VVAccess.ReadWrite)] public string Arc { get; set; } @@ -59,6 +62,7 @@ namespace Content.Server.GameObjects.Components.Weapon.Melee serializer.DataField(this, x => x.Range, "range", 1); serializer.DataField(this, x => x.ArcWidth, "arcwidth", 90); serializer.DataField(this, x => x.Arc, "arc", "default"); + serializer.DataField(this, x => x.ClickArc, "clickArc", "punch"); serializer.DataField(this, x => x._hitSound, "hitSound", "/Audio/Weapons/genhit1.ogg"); serializer.DataField(this, x => x._missSound, "hitSound", "/Audio/Weapons/punchmiss.ogg"); serializer.DataField(this, x => x.ArcCooldownTime, "arcCooldownTime", 1f); @@ -159,11 +163,16 @@ namespace Content.Server.GameObjects.Components.Weapon.Melee damageComponent.ChangeDamage(DamageType, Damage, false, Owner); } - if (!OnHitEntities(new[] {target}, eventArgs)) + var targets = new[] {target}; + + if (!OnHitEntities(targets, eventArgs)) return true; - var sys = _entitySystemManager.GetEntitySystem(); - sys.SendAnimation(angle, eventArgs.User, target); + if (ClickArc != null) + { + var sys = _entitySystemManager.GetEntitySystem(); + sys.SendAnimation(ClickArc, angle, eventArgs.User, targets); + } _lastAttackTime = curTime; _cooldownEnd = _lastAttackTime + TimeSpan.FromSeconds(CooldownTime); diff --git a/Content.Server/GameObjects/EntitySystems/MeleeWeaponSystem.cs b/Content.Server/GameObjects/EntitySystems/MeleeWeaponSystem.cs index 986a278535..82ba72537a 100644 --- a/Content.Server/GameObjects/EntitySystems/MeleeWeaponSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/MeleeWeaponSystem.cs @@ -11,13 +11,8 @@ namespace Content.Server.GameObjects.EntitySystems { public void SendAnimation(string arc, Angle angle, IEntity attacker, IEnumerable hits) { - RaiseNetworkEvent(new MeleeWeaponSystemMessages.PlayMeleeWeaponArcAnimationMessage(arc, angle, attacker.Uid, + RaiseNetworkEvent(new MeleeWeaponSystemMessages.PlayMeleeWeaponAnimationMessage(arc, angle, attacker.Uid, hits.Select(e => e.Uid).ToList())); } - - public void SendAnimation(Angle angle, IEntity attacker, IEntity hit) - { - RaiseNetworkEvent(new MeleeWeaponSystemMessages.PlayMeleeWeaponAnimationMessage(angle, attacker.Uid, hit.Uid)); - } } } diff --git a/Content.Shared/GameObjects/EntitySystemMessages/MeleeWeaponSystemMessages.cs b/Content.Shared/GameObjects/EntitySystemMessages/MeleeWeaponSystemMessages.cs index 849ba09936..989defae06 100644 --- a/Content.Shared/GameObjects/EntitySystemMessages/MeleeWeaponSystemMessages.cs +++ b/Content.Shared/GameObjects/EntitySystemMessages/MeleeWeaponSystemMessages.cs @@ -9,9 +9,9 @@ namespace Content.Shared.GameObjects.EntitySystemMessages public static class MeleeWeaponSystemMessages { [Serializable, NetSerializable] - public sealed class PlayMeleeWeaponArcAnimationMessage : EntitySystemMessage + public sealed class PlayMeleeWeaponAnimationMessage : EntitySystemMessage { - public PlayMeleeWeaponArcAnimationMessage(string arcPrototype, Angle angle, EntityUid attacker, List hits) + public PlayMeleeWeaponAnimationMessage(string arcPrototype, Angle angle, EntityUid attacker, List hits) { ArcPrototype = arcPrototype; Angle = angle; @@ -24,19 +24,5 @@ namespace Content.Shared.GameObjects.EntitySystemMessages public EntityUid Attacker { get; } public List Hits { get; } } - - [Serializable, NetSerializable] - public sealed class PlayMeleeWeaponAnimationMessage : EntitySystemMessage - { - public PlayMeleeWeaponAnimationMessage(Angle angle, EntityUid attacker, EntityUid hit) - { - Attacker = attacker; - Hit = hit; - } - - public Angle Angle { get; } - public EntityUid Attacker { get; } - public EntityUid Hit { get; } - } } } From 391444c8796f0a5d3e61b9a17a70d453227ecd9d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Aguilera=20Puerto?= Date: Mon, 31 Aug 2020 20:54:33 +0200 Subject: [PATCH 043/103] Add an effect that shows the item you're using to attack with when attacking --- .../EntitySystems/MeleeWeaponSystem.cs | 27 ++++++++++++++++++- .../Weapon/Melee/MeleeWeaponComponent.cs | 15 +++++++---- .../EntitySystems/MeleeWeaponSystem.cs | 6 ++--- .../MeleeWeaponSystemMessages.cs | 6 ++++- .../Components/Interaction/IAttack.cs | 2 +- 5 files changed, 45 insertions(+), 11 deletions(-) diff --git a/Content.Client/GameObjects/EntitySystems/MeleeWeaponSystem.cs b/Content.Client/GameObjects/EntitySystems/MeleeWeaponSystem.cs index 1a4b1212ee..83a8950ba1 100644 --- a/Content.Client/GameObjects/EntitySystems/MeleeWeaponSystem.cs +++ b/Content.Client/GameObjects/EntitySystems/MeleeWeaponSystem.cs @@ -1,10 +1,14 @@ -using Content.Client.GameObjects.Components.Mobs; +using System; +using Content.Client.GameObjects.Components.Mobs; using Content.Client.GameObjects.Components.Weapons.Melee; using Content.Shared.GameObjects.Components.Weapons.Melee; using JetBrains.Annotations; +using Robust.Client.GameObjects; using Robust.Client.Interfaces.GameObjects.Components; using Robust.Shared.GameObjects; +using Robust.Shared.GameObjects.EntitySystemMessages; using Robust.Shared.GameObjects.Systems; +using Robust.Shared.Interfaces.Timing; using Robust.Shared.IoC; using Robust.Shared.Log; using Robust.Shared.Maths; @@ -18,6 +22,7 @@ namespace Content.Client.GameObjects.EntitySystems public sealed class MeleeWeaponSystem : EntitySystem { [Dependency] private readonly IPrototypeManager _prototypeManager = default!; + [Dependency] private readonly IGameTiming _gameTiming = default!; public override void Initialize() { @@ -53,6 +58,26 @@ namespace Content.Client.GameObjects.EntitySystems var weaponArcAnimation = entity.GetComponent(); weaponArcAnimation.SetData(weaponArc, msg.Angle, attacker); + // Due to ISpriteComponent limitations, weapons that don't use an RSI won't have this effect. + if (EntityManager.TryGetEntity(msg.Source, out var source) && msg.TextureEffect && source.TryGetComponent(out ISpriteComponent sourceSprite) + && sourceSprite.BaseRSI?.Path != null) + { + var sys = Get(); + var curTime = _gameTiming.CurTime; + var effect = new EffectSystemMessage + { + EffectSprite = sourceSprite.BaseRSI.Path.ToString(), + RsiState = sourceSprite.LayerGetState(0).Name, + Coordinates = attacker.Transform.GridPosition, + Color = Vector4.Multiply(new Vector4(255, 255, 255, 125), 1.0f), + ColorDelta = Vector4.Multiply(new Vector4(0, 0, 0, -10), 1.0f), + Velocity = msg.Angle.ToVec(), + Acceleration = msg.Angle.ToVec() * 5f, + Born = curTime, + DeathTime = curTime.Add(TimeSpan.FromMilliseconds(300f)), + }; + sys.CreateEffect(effect); + } foreach (var uid in msg.Hits) { diff --git a/Content.Server/GameObjects/Components/Weapon/Melee/MeleeWeaponComponent.cs b/Content.Server/GameObjects/Components/Weapon/Melee/MeleeWeaponComponent.cs index 06d4338b7c..b3c402e800 100644 --- a/Content.Server/GameObjects/Components/Weapon/Melee/MeleeWeaponComponent.cs +++ b/Content.Server/GameObjects/Components/Weapon/Melee/MeleeWeaponComponent.cs @@ -17,6 +17,8 @@ using Robust.Shared.Serialization; using Robust.Shared.ViewVariables; using Content.Shared.Damage; using Content.Shared.Interfaces.GameObjects.Components; +using Robust.Server.GameObjects; +using Robust.Shared.GameObjects.EntitySystemMessages; namespace Content.Server.GameObjects.Components.Weapon.Melee { @@ -24,7 +26,6 @@ namespace Content.Server.GameObjects.Components.Weapon.Melee public class MeleeWeaponComponent : Component, IAttack { [Dependency] private readonly IMapManager _mapManager = default!; - [Dependency] private readonly IEntitySystemManager _entitySystemManager = default!; [Dependency] private readonly IPhysicsManager _physicsManager = default!; public override string Name => "MeleeWeapon"; @@ -54,6 +55,9 @@ namespace Content.Server.GameObjects.Components.Weapon.Melee [ViewVariables(VVAccess.ReadWrite)] public DamageType DamageType { get; set; } + [ViewVariables(VVAccess.ReadWrite)] + public bool ClickAttackEffect { get; set; } + public override void ExposeData(ObjectSerializer serializer) { base.ExposeData(serializer); @@ -68,6 +72,7 @@ namespace Content.Server.GameObjects.Components.Weapon.Melee serializer.DataField(this, x => x.ArcCooldownTime, "arcCooldownTime", 1f); serializer.DataField(this, x => x.CooldownTime, "cooldownTime", 1f); serializer.DataField(this, x => x.DamageType, "damageType", DamageType.Blunt); + serializer.DataField(this, x => x.ClickAttackEffect, "clickAttackEffect", true); } protected virtual bool OnHitEntities(IReadOnlyList entities, AttackEventArgs eventArgs) @@ -117,8 +122,8 @@ namespace Content.Server.GameObjects.Components.Weapon.Melee if (Arc != null) { - var sys = _entitySystemManager.GetEntitySystem(); - sys.SendAnimation(Arc, angle, eventArgs.User, hitEntities); + var sys = EntitySystem.Get(); + sys.SendAnimation(Arc, angle, eventArgs.User, Owner, hitEntities); } _lastAttackTime = curTime; @@ -170,8 +175,8 @@ namespace Content.Server.GameObjects.Components.Weapon.Melee if (ClickArc != null) { - var sys = _entitySystemManager.GetEntitySystem(); - sys.SendAnimation(ClickArc, angle, eventArgs.User, targets); + var sys = EntitySystem.Get(); + sys.SendAnimation(ClickArc, angle, eventArgs.User, Owner, targets, ClickAttackEffect); } _lastAttackTime = curTime; diff --git a/Content.Server/GameObjects/EntitySystems/MeleeWeaponSystem.cs b/Content.Server/GameObjects/EntitySystems/MeleeWeaponSystem.cs index 82ba72537a..0613f1ec58 100644 --- a/Content.Server/GameObjects/EntitySystems/MeleeWeaponSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/MeleeWeaponSystem.cs @@ -9,10 +9,10 @@ namespace Content.Server.GameObjects.EntitySystems { public sealed class MeleeWeaponSystem : EntitySystem { - public void SendAnimation(string arc, Angle angle, IEntity attacker, IEnumerable hits) + public void SendAnimation(string arc, Angle angle, IEntity attacker, IEntity source, IEnumerable hits, bool textureEffect = false) { - RaiseNetworkEvent(new MeleeWeaponSystemMessages.PlayMeleeWeaponAnimationMessage(arc, angle, attacker.Uid, - hits.Select(e => e.Uid).ToList())); + RaiseNetworkEvent(new MeleeWeaponSystemMessages.PlayMeleeWeaponAnimationMessage(arc, angle, attacker.Uid, source.Uid, + hits.Select(e => e.Uid).ToList(), textureEffect)); } } } diff --git a/Content.Shared/GameObjects/EntitySystemMessages/MeleeWeaponSystemMessages.cs b/Content.Shared/GameObjects/EntitySystemMessages/MeleeWeaponSystemMessages.cs index 989defae06..2f1bd231fa 100644 --- a/Content.Shared/GameObjects/EntitySystemMessages/MeleeWeaponSystemMessages.cs +++ b/Content.Shared/GameObjects/EntitySystemMessages/MeleeWeaponSystemMessages.cs @@ -11,18 +11,22 @@ namespace Content.Shared.GameObjects.EntitySystemMessages [Serializable, NetSerializable] public sealed class PlayMeleeWeaponAnimationMessage : EntitySystemMessage { - public PlayMeleeWeaponAnimationMessage(string arcPrototype, Angle angle, EntityUid attacker, List hits) + public PlayMeleeWeaponAnimationMessage(string arcPrototype, Angle angle, EntityUid attacker, EntityUid source, List hits, bool textureEffect = false) { ArcPrototype = arcPrototype; Angle = angle; Attacker = attacker; + Source = source; Hits = hits; + TextureEffect = textureEffect; } public string ArcPrototype { get; } public Angle Angle { get; } public EntityUid Attacker { get; } + public EntityUid Source { get; } public List Hits { get; } + public bool TextureEffect { get; } } } } diff --git a/Content.Shared/Interfaces/GameObjects/Components/Interaction/IAttack.cs b/Content.Shared/Interfaces/GameObjects/Components/Interaction/IAttack.cs index 218b403600..48bf6a3e5a 100644 --- a/Content.Shared/Interfaces/GameObjects/Components/Interaction/IAttack.cs +++ b/Content.Shared/Interfaces/GameObjects/Components/Interaction/IAttack.cs @@ -32,6 +32,6 @@ namespace Content.Shared.Interfaces.GameObjects.Components public GridCoordinates ClickLocation { get; } public bool WideAttack { get; } public EntityUid Target { get; } - public IEntity? TargetEntity => IoCManager.Resolve()?.GetEntity(Target) ?? null; + public IEntity? TargetEntity => Target.IsValid() ? IoCManager.Resolve()?.GetEntity(Target) ?? null : null; } } From 4d43a15cba9ba2851d6b740ea072175fbef3582e Mon Sep 17 00:00:00 2001 From: py01 <60152240+collinlunn@users.noreply.github.com> Date: Mon, 31 Aug 2020 16:29:53 -0600 Subject: [PATCH 044/103] Pump enabled animation (#1973) * Pump enabled animation * naming fixes Co-authored-by: py01 --- .../Components/Atmos/PumpVisualizer.cs | 19 +++++++++++++++-- .../Atmos/Piping/Pumps/BasePumpComponent.cs | 20 +++++++++++++++++- .../GameObjects/Atmos/SharedPumpComponent.cs | 4 +++- .../Atmos/pressurepump.rsi/meta.json | 20 ++++++++++++++++++ .../pumpEnabledEast2West2.png | Bin 0 -> 386 bytes .../pumpEnabledNorth2South2.png | Bin 0 -> 896 bytes .../pumpEnabledSouth2North2.png | Bin 0 -> 823 bytes .../pumpEnabledWest2East2.png | Bin 0 -> 408 bytes 8 files changed, 59 insertions(+), 4 deletions(-) create mode 100644 Resources/Textures/Constructible/Atmos/pressurepump.rsi/pumpEnabledEast2West2.png create mode 100644 Resources/Textures/Constructible/Atmos/pressurepump.rsi/pumpEnabledNorth2South2.png create mode 100644 Resources/Textures/Constructible/Atmos/pressurepump.rsi/pumpEnabledSouth2North2.png create mode 100644 Resources/Textures/Constructible/Atmos/pressurepump.rsi/pumpEnabledWest2East2.png diff --git a/Content.Client/GameObjects/Components/Atmos/PumpVisualizer.cs b/Content.Client/GameObjects/Components/Atmos/PumpVisualizer.cs index 42ea6bf6ea..a4b8c9d3dd 100644 --- a/Content.Client/GameObjects/Components/Atmos/PumpVisualizer.cs +++ b/Content.Client/GameObjects/Components/Atmos/PumpVisualizer.cs @@ -12,7 +12,7 @@ using Robust.Shared.Utility; using System; using YamlDotNet.RepresentationModel; -namespace Content.Client.GameObjects.Components.Disposal +namespace Content.Client.GameObjects.Components.Atmos { [UsedImplicitly] public class PumpVisualizer : AppearanceVisualizer @@ -60,11 +60,26 @@ namespace Content.Client.GameObjects.Components.Disposal sprite.LayerSetRSI(basePumpLayer, _pumpRSI); sprite.LayerSetState(basePumpLayer, pumpBaseState); sprite.LayerSetVisible(basePumpLayer, true); + + + + var pumpEnabledAnimationState = "pumpEnabled"; + pumpEnabledAnimationState += pumpVisualState.InletDirection.ToString(); + pumpEnabledAnimationState += ((int) pumpVisualState.InletConduitLayer).ToString(); + pumpEnabledAnimationState += pumpVisualState.OutletDirection.ToString(); + pumpEnabledAnimationState += ((int) pumpVisualState.OutletConduitLayer).ToString(); + + sprite.LayerMapReserveBlank(Layer.PumpEnabled); + var pumpEnabledAnimationLayer = sprite.LayerMapGet(Layer.PumpEnabled); + sprite.LayerSetRSI(pumpEnabledAnimationLayer, _pumpRSI); + sprite.LayerSetState(pumpEnabledAnimationLayer, pumpEnabledAnimationState); + sprite.LayerSetVisible(pumpEnabledAnimationLayer, pumpVisualState.PumpEnabled); } private enum Layer { - PumpBase + PumpBase, + PumpEnabled, } } } diff --git a/Content.Server/GameObjects/Components/Atmos/Piping/Pumps/BasePumpComponent.cs b/Content.Server/GameObjects/Components/Atmos/Piping/Pumps/BasePumpComponent.cs index 1556c9a62c..24a44ae7d8 100644 --- a/Content.Server/GameObjects/Components/Atmos/Piping/Pumps/BasePumpComponent.cs +++ b/Content.Server/GameObjects/Components/Atmos/Piping/Pumps/BasePumpComponent.cs @@ -16,6 +16,21 @@ namespace Content.Server.GameObjects.Components.Atmos.Piping /// public abstract class BasePumpComponent : PipeNetDeviceComponent { + /// + /// If the pump is currently pumping. + /// + [ViewVariables(VVAccess.ReadWrite)] + public bool PumpEnabled + { + get => _pumpEnabled; + set + { + _pumpEnabled = value; + UpdateAppearance(); + } + } + private bool _pumpEnabled = true; + /// /// Needs to be same as that of a on this entity. /// @@ -67,6 +82,9 @@ namespace Content.Server.GameObjects.Components.Atmos.Piping public override void Update() { + if (!PumpEnabled) + return; + PumpGas(_inletPipe.Air, _outletPipe.Air); } @@ -74,7 +92,7 @@ namespace Content.Server.GameObjects.Components.Atmos.Piping private void UpdateAppearance() { - _appearance?.SetData(PumpVisuals.VisualState, new PumpVisualState(_inletDirection, _outletDirection, _inletPipe.ConduitLayer, _outletPipe.ConduitLayer)); + _appearance?.SetData(PumpVisuals.VisualState, new PumpVisualState(_inletDirection, _outletDirection, _inletPipe.ConduitLayer, _outletPipe.ConduitLayer, PumpEnabled)); } } } diff --git a/Content.Shared/GameObjects/Atmos/SharedPumpComponent.cs b/Content.Shared/GameObjects/Atmos/SharedPumpComponent.cs index d4f304e53e..8546d9d071 100644 --- a/Content.Shared/GameObjects/Atmos/SharedPumpComponent.cs +++ b/Content.Shared/GameObjects/Atmos/SharedPumpComponent.cs @@ -17,13 +17,15 @@ namespace Content.Shared.GameObjects.Atmos public readonly PipeDirection OutletDirection; public readonly ConduitLayer InletConduitLayer; public readonly ConduitLayer OutletConduitLayer; + public readonly bool PumpEnabled; - public PumpVisualState(PipeDirection inletDirection, PipeDirection outletDirection, ConduitLayer inletConduitLayer, ConduitLayer outletConduitLayer) + public PumpVisualState(PipeDirection inletDirection, PipeDirection outletDirection, ConduitLayer inletConduitLayer, ConduitLayer outletConduitLayer, bool pumpEnabled) { InletDirection = inletDirection; OutletDirection = outletDirection; InletConduitLayer = inletConduitLayer; OutletConduitLayer = outletConduitLayer; + PumpEnabled = pumpEnabled; } } } diff --git a/Resources/Textures/Constructible/Atmos/pressurepump.rsi/meta.json b/Resources/Textures/Constructible/Atmos/pressurepump.rsi/meta.json index f950406db6..d8390a7ef9 100644 --- a/Resources/Textures/Constructible/Atmos/pressurepump.rsi/meta.json +++ b/Resources/Textures/Constructible/Atmos/pressurepump.rsi/meta.json @@ -26,6 +26,26 @@ "name":"pumpWest2East2", "directions":1, "delays":[ [ 1.0 ] ] + }, + { + "name":"pumpEnabledEast2West2", + "directions":1, + "delays":[ [ 0.1, 0.1, 0.1, 0.1, 0.1 ] ] + }, + { + "name":"pumpEnabledNorth2South2", + "directions":1, + "delays":[ [ 0.1, 0.1, 0.1, 0.1, 0.1 ] ] + }, + { + "name":"pumpEnabledSouth2North2", + "directions":1, + "delays":[ [ 0.1, 0.1, 0.1, 0.1, 0.1 ] ] + }, + { + "name":"pumpEnabledWest2East2", + "directions":1, + "delays":[ [ 0.1, 0.1, 0.1, 0.1, 0.1 ] ] } ] } \ No newline at end of file diff --git a/Resources/Textures/Constructible/Atmos/pressurepump.rsi/pumpEnabledEast2West2.png b/Resources/Textures/Constructible/Atmos/pressurepump.rsi/pumpEnabledEast2West2.png new file mode 100644 index 0000000000000000000000000000000000000000..4e2d4e1a78786d3372963633e23c250f811a52b8 GIT binary patch literal 386 zcmV-|0e$|7P)423lEn_^Lh2nzX)P`F0t5xUlH5*~uDZ9-&A~}nlhwOaADTmmqk&jFatW&lj5Qveo=MPWRJOV4)?s5#%ipfk#sBuSDaNs=T gk|arzBuUrd2NkDIlq4hyo*E2Pr2AjCl_MI4g%9`|hf`;3MAeShiWkw5%?03n1B zLI@#*5MQ;iJftW}`#rzqhZIF=^!4=t00svKv9z>=N~MC?*;!xy341NS zowX4&Jp~g}fC^}pBx@OF=`|A=H=zQk1U3KjyG&rkgn9(1fIa^J>w}t+gze5FZyC(t zJdB_Qcf^L(otKlpsKM>DVg2CC=ePmuFfsAx1_Zd8V9VbdH<0571mJjgp%>3Fhx5>k zBpmNK^x^|4`9@HKch5obqRv%^`2fsxKO&(`=!x@O4Y230BNBQFJyDjFKZQu>I`qUN zt~$&IFf=v?+wDNERN-oXJ^v_dcNn?S1xfk0VY~Clm9kuQm=7Rzxd3$~iukb%R|BjH zsa{0YEo9d^6pTp72lHkDcMF!}Kw#!MERH z_Iv&|MNt~JVmBNA`eBOleQZKnIOP+v2Qa^JG=RAsMS8`wv;Xp$zXuRP2qAyuv!S8K5hPyg0^4aJ zzsp4EV+4s4a`HuCK7g^~LvTlIl&<7N_S1a+t0B0ZHcDURE@7lm_6@);2R{gKdb zvhzh@-VYea9^5e>FJnGmUcN}QAFx}=o{yKE|6h>(;$`O(LU_@BfMm2EKnNj(Nb(Em WAlmf$*F6OQ0000v`iU!nDso+o?+Qvl`9HN7zfpmBv4ubXE>pPg7-}C~>{a@a_H}8Xc03n1B z-D)58hizc#mqsS^bf^3B_v`775JI@lFpRe3t07+l48v$&9vfym37wLEfEqqIc?Djt z7dtyGJbV74-E20=cU0Y+|JN(PFpPFMJdXbUqwo#*(BtVvI6Us!OzgCL(hBf+dXZS4 z2iAcR0J*+6r5Q4hrx%IAc>uu37?7*GpFfwlKF06;l3gFqmFLZLto zS5f}Tn?F;2uO**+5svny;s0pD3N0vgfGQn51=HWcf_0TC{|!w4BP>|ol-eN=Ke?gh4(*U-C)P&N1AU%H- zz$%ae;<>{N`S+ZI6cEo{Bez3d0e0anYKU=xnbRiEwwsZ%PS#v6 z(9?}P0I}mX1~$TMHDY$`48j9H*lNUdAzuS@?GC2OS3a=j>q1@uNplbp-!|I}Oqwqd z@jX;cDn)j?T&ZdRG&DuIiMR&Tl=cS~L6I5&^7oSX7 zbbb1Bzxi(?KJOJz*nKx{>+G{`leXM{uj;w`uHU3Dl~ylb*IfI3{N=L!jn!w<`6Vpo z2Vby1$qw-al&n}}l$UU&jc?84zYSZ~PBuSw;@P^D{pV->`myQyubTAJWpc+PZtgg@ wedlZ2{rY$KB_zHxvmKK&Fz|DP8gT3(`&-dCrt Date: Tue, 1 Sep 2020 01:36:49 +0300 Subject: [PATCH 045/103] Moved the uplink creation code to the PresetSuspicion.Start method to ensure uplink created when we give the traitor role (#1974) Moved the starting TC balance to cvars --- .../GamePresets/PresetSuspicion.cs | 33 +++++++++++++++++++ Content.Server/GameTicking/GameTicker.cs | 11 ------- 2 files changed, 33 insertions(+), 11 deletions(-) diff --git a/Content.Server/GameTicking/GamePresets/PresetSuspicion.cs b/Content.Server/GameTicking/GamePresets/PresetSuspicion.cs index eb192dbea6..4569668edc 100644 --- a/Content.Server/GameTicking/GamePresets/PresetSuspicion.cs +++ b/Content.Server/GameTicking/GamePresets/PresetSuspicion.cs @@ -9,9 +9,14 @@ using Robust.Shared.Prototypes; using Robust.Shared.Random; using System.Collections.Generic; using System.Linq; +using Content.Server.GameObjects.Components.GUI; +using Content.Server.GameObjects.Components.Items.Storage; +using Content.Server.GameObjects.Components.PDA; using Content.Server.GameObjects.Components.Suspicion; using Content.Server.Mobs.Roles; using Content.Server.Mobs.Roles.Suspicion; +using Content.Shared.GameObjects.Components.Inventory; +using Content.Shared.GameObjects.Components.PDA; using Content.Shared.Roles; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.Configuration; @@ -32,6 +37,9 @@ namespace Content.Server.GameTicking.GamePresets public int MinTraitors { get; set; } public int PlayersPerTraitor { get; set; } + public int TraitorStartingBalance { get; set; } + + public override bool DisallowLateJoin => true; private static string TraitorID = "SuspicionTraitor"; @@ -42,6 +50,7 @@ namespace Content.Server.GameTicking.GamePresets cfg.RegisterCVar("game.suspicion_min_players", 5); cfg.RegisterCVar("game.suspicion_min_traitors", 2); cfg.RegisterCVar("game.suspicion_players_per_traitor", 5); + cfg.RegisterCVar("game.suspicion_starting_balance", 20); } public override bool Start(IReadOnlyList readyPlayers, bool force = false) @@ -49,6 +58,7 @@ namespace Content.Server.GameTicking.GamePresets MinPlayers = _cfg.GetCVar("game.suspicion_min_players"); MinTraitors = _cfg.GetCVar("game.suspicion_min_traitors"); PlayersPerTraitor = _cfg.GetCVar("game.suspicion_players_per_traitor"); + TraitorStartingBalance = _cfg.GetCVar("game.suspicion_starting_balance"); if (!force && readyPlayers.Count < MinPlayers) { @@ -109,6 +119,28 @@ namespace Content.Server.GameTicking.GamePresets var traitorRole = new SuspicionTraitorRole(mind, antagPrototype); mind.AddRole(traitorRole); traitors.Add(traitorRole); + // creadth: we need to create uplink for the antag. + // PDA should be in place already, so we just need to + // initiate uplink account. + var uplinkAccount = + new UplinkAccount(mind.OwnedEntity.Uid, + TraitorStartingBalance); + var inventory = mind.OwnedEntity.GetComponent(); + if (!inventory.TryGetSlotItem(EquipmentSlotDefines.Slots.IDCARD, out ItemComponent pdaItem)) + { + continue; + } + + var pda = pdaItem.Owner; + + var pdaComponent = pda.GetComponent(); + if (pdaComponent.IdSlotEmpty) + { + continue; + } + + pdaComponent.InitUplinkAccount(uplinkAccount); + } foreach (var player in list) @@ -127,6 +159,7 @@ namespace Content.Server.GameTicking.GamePresets return true; } + public override string ModeTitle => "Suspicion"; public override string Description => "Suspicion on the Space Station. There are traitors on board... Can you kill them before they kill you?"; } diff --git a/Content.Server/GameTicking/GameTicker.cs b/Content.Server/GameTicking/GameTicker.cs index 19383c0f37..54407dca9a 100644 --- a/Content.Server/GameTicking/GameTicker.cs +++ b/Content.Server/GameTicking/GameTicker.cs @@ -861,17 +861,6 @@ namespace Content.Server.GameTicking var accessTags = access.Tags; accessTags.UnionWith(jobPrototype.Access); pdaComponent.SetPDAOwner(characterName); - var mindComponent = mob.GetComponent(); - if (mindComponent.HasMind) //Redundancy checks. - { - if (mindComponent.Mind.AllRoles.Any(role => role.Antagonist)) //Give antags a new uplinkaccount. - { - var uplinkAccount = - new UplinkAccount(mob.Uid, - 20); //TODO: make me into a variable based on server pop or something. - pdaComponent.InitUplinkAccount(uplinkAccount); - } - } } private void AddManifestEntry(string characterName, string jobId) From c8b55714ccf12b4a43bb0a2efd7dd2ad926d2161 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Aguilera=20Puerto?= Date: Tue, 1 Sep 2020 02:25:19 +0200 Subject: [PATCH 046/103] Increase barotrauma timer to 3 seconds. --- Content.Server/GameObjects/EntitySystems/BarotraumaSystem.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Content.Server/GameObjects/EntitySystems/BarotraumaSystem.cs b/Content.Server/GameObjects/EntitySystems/BarotraumaSystem.cs index 2210afb488..d607c3d984 100644 --- a/Content.Server/GameObjects/EntitySystems/BarotraumaSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/BarotraumaSystem.cs @@ -7,7 +7,7 @@ namespace Content.Server.GameObjects.EntitySystems [UsedImplicitly] public class BarotraumaSystem : EntitySystem { - private const float TimePerUpdate = 0.5f; + private const float TimePerUpdate = 3f; private float _timer = 0f; From 3fb4adeb0f288dd6d3a9b67678519f3d9db4f93f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Aguilera=20Puerto?= Date: Tue, 1 Sep 2020 02:35:13 +0200 Subject: [PATCH 047/103] Update submodule. --- RobustToolbox | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RobustToolbox b/RobustToolbox index 6ffe2e1750..c5573c0d33 160000 --- a/RobustToolbox +++ b/RobustToolbox @@ -1 +1 @@ -Subproject commit 6ffe2e1750a2fc2fd30664b0ea393dc4325f5143 +Subproject commit c5573c0d333b1f50b740b48e135d202fe7158d42 From fdd61d1c94cb5d7bfd3d9d6ea9cbee1483625229 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Aguilera=20Puerto?= Date: Tue, 1 Sep 2020 03:08:32 +0200 Subject: [PATCH 048/103] Fix instrument crash when you put an instrument in Urist's hands --- .../Components/Instruments/InstrumentComponent.cs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Content.Server/GameObjects/Components/Instruments/InstrumentComponent.cs b/Content.Server/GameObjects/Components/Instruments/InstrumentComponent.cs index 3af194ba8d..9947e7d1e9 100644 --- a/Content.Server/GameObjects/Components/Instruments/InstrumentComponent.cs +++ b/Content.Server/GameObjects/Components/Instruments/InstrumentComponent.cs @@ -246,9 +246,12 @@ namespace Content.Server.GameObjects.Components.Instruments public void HandSelected(HandSelectedEventArgs eventArgs) { - var session = eventArgs.User?.GetComponent()?.playerSession; + if (eventArgs.User == null || !eventArgs.User.TryGetComponent(out BasicActorComponent? actor)) + return; - if (session == null) return; + var session = actor.playerSession; + + if (session.Status != SessionStatus.InGame) return; InstrumentPlayer = session; } From ae03c633cf6018756a3a90ba1d7f7564fb046f74 Mon Sep 17 00:00:00 2001 From: Swept Date: Tue, 1 Sep 2020 10:24:12 +0000 Subject: [PATCH 049/103] Adds Duffelbags. And Mime, Botany and Chemistry backpacks. (#1982) * Sprite added * Duffel prototypes * Updates the surgery tools to ID standards * Revert "Updates the surgery tools to ID standards" This reverts commit a9997ea979230e090793f85c1e779c5d0a0f2217. * Adds a filled surgical duffelbag * Adds Mime, Botany and Chemistry backpack --- .../Entities/Clothing/Back/backpacks.yml | 47 ++++++ .../Entities/Clothing/Back/duffel.yml | 137 ++++++++++++++++++ .../botany.rsi/equipped-BACKPACK.png | Bin 0 -> 785 bytes .../Back/Backpacks/botany.rsi/icon.png | Bin 0 -> 535 bytes .../Back/Backpacks/botany.rsi/inhand-left.png | Bin 0 -> 644 bytes .../Backpacks/botany.rsi/inhand-right.png | Bin 0 -> 606 bytes .../Back/Backpacks/botany.rsi/meta.json | 27 ++++ .../chemistry.rsi/equipped-BACKPACK.png | Bin 0 -> 672 bytes .../Back/Backpacks/chemistry.rsi/icon.png | Bin 0 -> 485 bytes .../Backpacks/chemistry.rsi/inhand-left.png | Bin 0 -> 560 bytes .../Backpacks/chemistry.rsi/inhand-right.png | Bin 0 -> 580 bytes .../Back/Backpacks/chemistry.rsi/meta.json | 27 ++++ .../Backpacks/mime.rsi/equipped-BACKPACK.png | Bin 0 -> 606 bytes .../Clothing/Back/Backpacks/mime.rsi/icon.png | Bin 0 -> 572 bytes .../Back/Backpacks/mime.rsi/inhand-left.png | Bin 0 -> 397 bytes .../Back/Backpacks/mime.rsi/inhand-right.png | Bin 0 -> 389 bytes .../Back/Backpacks/mime.rsi/meta.json | 27 ++++ .../Duffels/duffel.rsi/equipped-BACKPACK.png | Bin 0 -> 714 bytes .../Clothing/Back/Duffels/duffel.rsi/icon.png | Bin 0 -> 444 bytes .../Back/Duffels/duffel.rsi/inhand-left.png | Bin 0 -> 576 bytes .../Back/Duffels/duffel.rsi/inhand-right.png | Bin 0 -> 557 bytes .../Back/Duffels/duffel.rsi/meta.json | 27 ++++ .../duffel_cap.rsi/equipped-BACKPACK.png | Bin 0 -> 769 bytes .../Back/Duffels/duffel_cap.rsi/icon.png | Bin 0 -> 471 bytes .../Duffels/duffel_cap.rsi/inhand-left.png | Bin 0 -> 582 bytes .../Duffels/duffel_cap.rsi/inhand-right.png | Bin 0 -> 550 bytes .../Back/Duffels/duffel_cap.rsi/meta.json | 27 ++++ .../duffel_clown.rsi/equipped-BACKPACK.png | Bin 0 -> 887 bytes .../Back/Duffels/duffel_clown.rsi/icon.png | Bin 0 -> 543 bytes .../Duffels/duffel_clown.rsi/inhand-left.png | Bin 0 -> 616 bytes .../Duffels/duffel_clown.rsi/inhand-right.png | Bin 0 -> 583 bytes .../Back/Duffels/duffel_clown.rsi/meta.json | 27 ++++ .../duffel_eng.rsi/equipped-BACKPACK.png | Bin 0 -> 764 bytes .../Back/Duffels/duffel_eng.rsi/icon.png | Bin 0 -> 503 bytes .../Duffels/duffel_eng.rsi/inhand-left.png | Bin 0 -> 589 bytes .../Duffels/duffel_eng.rsi/inhand-right.png | Bin 0 -> 584 bytes .../Back/Duffels/duffel_eng.rsi/meta.json | 27 ++++ .../duffel_med.rsi/equipped-BACKPACK.png | Bin 0 -> 795 bytes .../Back/Duffels/duffel_med.rsi/icon.png | Bin 0 -> 524 bytes .../Duffels/duffel_med.rsi/inhand-left.png | Bin 0 -> 541 bytes .../Duffels/duffel_med.rsi/inhand-right.png | Bin 0 -> 551 bytes .../Back/Duffels/duffel_med.rsi/meta.json | 27 ++++ .../duffel_sec.rsi/equipped-BACKPACK.png | Bin 0 -> 743 bytes .../Back/Duffels/duffel_sec.rsi/icon.png | Bin 0 -> 466 bytes .../Duffels/duffel_sec.rsi/inhand-left.png | Bin 0 -> 566 bytes .../Duffels/duffel_sec.rsi/inhand-right.png | Bin 0 -> 574 bytes .../Back/Duffels/duffel_sec.rsi/meta.json | 27 ++++ .../duffel_syn.rsi/equipped-BACKPACK.png | Bin 0 -> 746 bytes .../Back/Duffels/duffel_syn.rsi/icon.png | Bin 0 -> 425 bytes .../Duffels/duffel_syn.rsi/inhand-left.png | Bin 0 -> 509 bytes .../Duffels/duffel_syn.rsi/inhand-right.png | Bin 0 -> 497 bytes .../Back/Duffels/duffel_syn.rsi/meta.json | 27 ++++ 52 files changed, 454 insertions(+) create mode 100644 Resources/Prototypes/Entities/Clothing/Back/duffel.yml create mode 100644 Resources/Textures/Clothing/Back/Backpacks/botany.rsi/equipped-BACKPACK.png create mode 100644 Resources/Textures/Clothing/Back/Backpacks/botany.rsi/icon.png create mode 100644 Resources/Textures/Clothing/Back/Backpacks/botany.rsi/inhand-left.png create mode 100644 Resources/Textures/Clothing/Back/Backpacks/botany.rsi/inhand-right.png create mode 100644 Resources/Textures/Clothing/Back/Backpacks/botany.rsi/meta.json create mode 100644 Resources/Textures/Clothing/Back/Backpacks/chemistry.rsi/equipped-BACKPACK.png create mode 100644 Resources/Textures/Clothing/Back/Backpacks/chemistry.rsi/icon.png create mode 100644 Resources/Textures/Clothing/Back/Backpacks/chemistry.rsi/inhand-left.png create mode 100644 Resources/Textures/Clothing/Back/Backpacks/chemistry.rsi/inhand-right.png create mode 100644 Resources/Textures/Clothing/Back/Backpacks/chemistry.rsi/meta.json create mode 100644 Resources/Textures/Clothing/Back/Backpacks/mime.rsi/equipped-BACKPACK.png create mode 100644 Resources/Textures/Clothing/Back/Backpacks/mime.rsi/icon.png create mode 100644 Resources/Textures/Clothing/Back/Backpacks/mime.rsi/inhand-left.png create mode 100644 Resources/Textures/Clothing/Back/Backpacks/mime.rsi/inhand-right.png create mode 100644 Resources/Textures/Clothing/Back/Backpacks/mime.rsi/meta.json create mode 100644 Resources/Textures/Clothing/Back/Duffels/duffel.rsi/equipped-BACKPACK.png create mode 100644 Resources/Textures/Clothing/Back/Duffels/duffel.rsi/icon.png create mode 100644 Resources/Textures/Clothing/Back/Duffels/duffel.rsi/inhand-left.png create mode 100644 Resources/Textures/Clothing/Back/Duffels/duffel.rsi/inhand-right.png create mode 100644 Resources/Textures/Clothing/Back/Duffels/duffel.rsi/meta.json create mode 100644 Resources/Textures/Clothing/Back/Duffels/duffel_cap.rsi/equipped-BACKPACK.png create mode 100644 Resources/Textures/Clothing/Back/Duffels/duffel_cap.rsi/icon.png create mode 100644 Resources/Textures/Clothing/Back/Duffels/duffel_cap.rsi/inhand-left.png create mode 100644 Resources/Textures/Clothing/Back/Duffels/duffel_cap.rsi/inhand-right.png create mode 100644 Resources/Textures/Clothing/Back/Duffels/duffel_cap.rsi/meta.json create mode 100644 Resources/Textures/Clothing/Back/Duffels/duffel_clown.rsi/equipped-BACKPACK.png create mode 100644 Resources/Textures/Clothing/Back/Duffels/duffel_clown.rsi/icon.png create mode 100644 Resources/Textures/Clothing/Back/Duffels/duffel_clown.rsi/inhand-left.png create mode 100644 Resources/Textures/Clothing/Back/Duffels/duffel_clown.rsi/inhand-right.png create mode 100644 Resources/Textures/Clothing/Back/Duffels/duffel_clown.rsi/meta.json create mode 100644 Resources/Textures/Clothing/Back/Duffels/duffel_eng.rsi/equipped-BACKPACK.png create mode 100644 Resources/Textures/Clothing/Back/Duffels/duffel_eng.rsi/icon.png create mode 100644 Resources/Textures/Clothing/Back/Duffels/duffel_eng.rsi/inhand-left.png create mode 100644 Resources/Textures/Clothing/Back/Duffels/duffel_eng.rsi/inhand-right.png create mode 100644 Resources/Textures/Clothing/Back/Duffels/duffel_eng.rsi/meta.json create mode 100644 Resources/Textures/Clothing/Back/Duffels/duffel_med.rsi/equipped-BACKPACK.png create mode 100644 Resources/Textures/Clothing/Back/Duffels/duffel_med.rsi/icon.png create mode 100644 Resources/Textures/Clothing/Back/Duffels/duffel_med.rsi/inhand-left.png create mode 100644 Resources/Textures/Clothing/Back/Duffels/duffel_med.rsi/inhand-right.png create mode 100644 Resources/Textures/Clothing/Back/Duffels/duffel_med.rsi/meta.json create mode 100644 Resources/Textures/Clothing/Back/Duffels/duffel_sec.rsi/equipped-BACKPACK.png create mode 100644 Resources/Textures/Clothing/Back/Duffels/duffel_sec.rsi/icon.png create mode 100644 Resources/Textures/Clothing/Back/Duffels/duffel_sec.rsi/inhand-left.png create mode 100644 Resources/Textures/Clothing/Back/Duffels/duffel_sec.rsi/inhand-right.png create mode 100644 Resources/Textures/Clothing/Back/Duffels/duffel_sec.rsi/meta.json create mode 100644 Resources/Textures/Clothing/Back/Duffels/duffel_syn.rsi/equipped-BACKPACK.png create mode 100644 Resources/Textures/Clothing/Back/Duffels/duffel_syn.rsi/icon.png create mode 100644 Resources/Textures/Clothing/Back/Duffels/duffel_syn.rsi/inhand-left.png create mode 100644 Resources/Textures/Clothing/Back/Duffels/duffel_syn.rsi/inhand-right.png create mode 100644 Resources/Textures/Clothing/Back/Duffels/duffel_syn.rsi/meta.json diff --git a/Resources/Prototypes/Entities/Clothing/Back/backpacks.yml b/Resources/Prototypes/Entities/Clothing/Back/backpacks.yml index a861d66e27..2b37556c7c 100644 --- a/Resources/Prototypes/Entities/Clothing/Back/backpacks.yml +++ b/Resources/Prototypes/Entities/Clothing/Back/backpacks.yml @@ -100,6 +100,53 @@ sprite: Clothing/Back/Backpacks/captain.rsi HeldPrefix: captain +# Inhands/On mob aren't working until I refactor this file -Swept + +- type: entity + parent: BackpackClothing + id: BackpackMime + name: mime backpack + description: + components: + - type: Sprite + sprite: Clothing/Back/Backpacks/mime.rsi + state: icon + - type: Icon + sprite: Clothing/Back/Backpacks/mime.rsi + state: icon + - type: Clothing + sprite: Clothing/Back/Backpacks/mime.rsi + +- type: entity + parent: BackpackClothing + id: BackpackChemistry + name: chemistry backpack + description: + components: + - type: Sprite + sprite: Clothing/Back/Backpacks/chemistry.rsi + state: icon + - type: Icon + sprite: Clothing/Back/Backpacks/chemistry.rsi + state: icon + - type: Clothing + sprite: Clothing/Back/Backpacks/chemistry.rsi + +- type: entity + parent: BackpackClothing + id: BackpackBotany + name: botany backpack + description: + components: + - type: Sprite + sprite: Clothing/Back/Backpacks/botany.rsi + state: icon + - type: Icon + sprite: Clothing/Back/Backpacks/botany.rsi + state: icon + - type: Clothing + sprite: Clothing/Back/Backpacks/botany.rsi + - type: entity parent: BackpackClothing id: BackpackHolding diff --git a/Resources/Prototypes/Entities/Clothing/Back/duffel.yml b/Resources/Prototypes/Entities/Clothing/Back/duffel.yml new file mode 100644 index 0000000000..40e8edb4fc --- /dev/null +++ b/Resources/Prototypes/Entities/Clothing/Back/duffel.yml @@ -0,0 +1,137 @@ +- type: entity + parent: Clothing + id: Duffelbag + name: duffelbag + description: "A large duffel bag for holding extra things." + components: + - type: Sprite + sprite: Clothing/Back/Duffels/duffel.rsi + state: icon + - type: Icon + sprite: Clothing/Back/Duffels/duffel.rsi + state: icon + - type: Clothing + sprite: Clothing/Back/Duffels/duffel.rsi + size: 9999 + QuickEquip: false + Slots: + - back + - type: Storage + capacity: 100 + +- type: entity + parent: Duffelbag + id: DuffelbagEngineering + name: engineering duffelbag + description: + components: + - type: Sprite + sprite: Clothing/Back/Duffels/duffel_eng.rsi + state: icon + - type: Icon + sprite: Clothing/Back/Duffels/duffel_eng.rsi + state: icon + - type: Clothing + sprite: Clothing/Back/Duffels/duffel_eng.rsi + +- type: entity + parent: Duffelbag + id: DuffelbagMedical + name: medical duffelbag + description: "A large duffel bag for holding extra medical supplies." + components: + - type: Sprite + sprite: Clothing/Back/Duffels/duffel_med.rsi + state: icon + - type: Icon + sprite: Clothing/Back/Duffels/duffel_med.rsi + state: icon + - type: Clothing + sprite: Clothing/Back/Duffels/duffel_med.rsi + +- type: entity + parent: Duffelbag + id: DuffelbagCaptain + name: captain duffelbag + description: "A large duffel bag for holding extra captainly goods." + components: + - type: Sprite + sprite: Clothing/Back/Duffels/duffel_cap.rsi + state: icon + - type: Icon + sprite: Clothing/Back/Duffels/duffel_cap.rsi + state: icon + - type: Clothing + sprite: Clothing/Back/Duffels/duffel_cap.rsi + +- type: entity + parent: Duffelbag + id: DuffelbagClown + name: clown duffelbag + description: + components: + - type: Sprite + sprite: Clothing/Back/Duffels/duffel_clown.rsi + state: icon + - type: Icon + sprite: Clothing/Back/Duffels/duffel_clown.rsi + state: icon + - type: Clothing + sprite: Clothing/Back/Duffels/duffel_clown.rsi + +- type: entity + parent: Duffelbag + id: DuffelbagSecurity + name: security duffelbag + description: + components: + - type: Sprite + sprite: Clothing/Back/Duffels/duffel_sec.rsi + state: icon + - type: Icon + sprite: Clothing/Back/Duffels/duffel_sec.rsi + state: icon + - type: Clothing + sprite: Clothing/Back/Duffels/duffel_sec.rsi + +- type: entity + parent: Duffelbag + id: DuffelbagSyndicate + name: syndicate duffelbag + description: + components: + - type: Sprite + sprite: Clothing/Back/Duffels/duffel_syn.rsi + state: icon + - type: Icon + sprite: Clothing/Back/Duffels/duffel_syn.rsi + state: icon + - type: Clothing + sprite: Clothing/Back/Duffels/duffel_syn.rsi + +# FILLED + +- type: entity + parent: Duffelbag + id: DuffelbagSurgeryFilled + name: surgical duffelbag + description: "A large duffel bag for holding extra medical supplies - this one seems to be designed for holding surgical tools." + components: + - type: Sprite + sprite: Clothing/Back/Duffels/duffel_med.rsi + state: icon + - type: Icon + sprite: Clothing/Back/Duffels/duffel_med.rsi + state: icon + - type: Clothing + sprite: Clothing/Back/Duffels/duffel_med.rsi + - type: StorageFill + contents: + - hemostat + - bone_saw + - drill + - cautery + - retractor + - scalpel + - type: Storage + capacity: 30 diff --git a/Resources/Textures/Clothing/Back/Backpacks/botany.rsi/equipped-BACKPACK.png b/Resources/Textures/Clothing/Back/Backpacks/botany.rsi/equipped-BACKPACK.png new file mode 100644 index 0000000000000000000000000000000000000000..0f412e233838cdd28d8fcea1ef1bd0c053e51538 GIT binary patch literal 785 zcmV+s1Md8ZP)p41zgN|8Cp;IZH8k`Cp zLJgs0DAXUI5c>`q4zUF4P-rkxxDM%iTKF$ZK1&@>Iek>~!POXMb$E(!pQe~(<_wm9hogh@|YQ0E>X zv$2l(%`JC7-?n#uVt-F=%)UwhH@~?Bbxg&`U=)|vrMhIu>Z{Lym(xE00P2_u0Jyv^ z)ot^B8Bz(TUjOa)cWQ0>z59G*FzPn1eo@jZAg=6qe$BMnf0Oj2h0Mk}>~kB3r{COW zpWDc6tV2&)(ql>o&F=*?O+#GSi4@C=4r2_reGkC#dx1vn+yf9o2qAKE8{;}a^4@p}B9$}a%bQnX*GyqkDger+3W*?eH=K0YJuh$JEK z1+^z%IK4vYqEMIJVtLW&Mp48|fP!efpc6!o1`LmA? zn+EGfNxYTDxyyS?kuv~ze(V_I)fJHoSP8zRF+FJ^mp?!*e}G}#Z0hG#p|CKa+M2#%W53G#WZoHS zaldc9lVDpM8u#7$000z`Q>Y@CLG#|6;&cfR_&Ew60H9KBqV`%LIYDwjB^CHNrUR8~ zlS)Ywuo4L4{wmpB2@rU5k+s)~mUma4fB*mp#S+LzBU%wkyj-9#GX!jemj-UWdO{;O zUBW>AUGmBF9xxr?f{uaWp;%%dE+38P#Bo6fu=>RiqK{{(wL{Wq!Nj(9sk=vrcBwes}tLMiM|FpA?t^9q7VW@cv79x;joktobJFSd1Hp-5;{~UU34xuI0#OcF-Yi8H?s!B$-yZ%b#Mt- z9J=)%D5Qe~IiiqahYr$|!gHv19t~9Q?stXg_cI*{{NC?=Jl+lO3lI?z5fKp)5fM>V zy?#;8L(SY6%GZYSH6YWtp?qEQD)TV_L-~58b);8XM_QusuwHzql5R>CGnB8LdKKr> z6P!;^;MA))-0F(dGZ$>ZPJg>4Rmf1j4x1c~P5}V+z1uJsY)q7|f9yWIk+hyuuVOel z#pK&is?8Z<0|4-=Q9IVKovHcw%P*~OAb9^Bd%M~Dj1wDx<$5SL?qJYqV`+T@0HWtK zja#mV!>ukJzkY*Y97we}Bhj|JO0Qqk?~3;U0OiFp07Q*Hn0~_3N7F=W_4-Bq)n3E# z*(9o!rp}*;9fGYFZvkAqe5qifR4}7Kg#V?fS1On@zey4sfaQ7^blM2U0S-nxI2i39 z7zY@1+OS+NRn3=c%h7Xrv7EZjRYbQ_&8z6kpFPXt@42v*Ex{zJ9fRH*pQo0W=#M?cH-nyRw^0000#v4N0>4c*W=j<*zrDKNR{u93&R1pdFJp|AbEuU{VN@IHWuh=_=Yh=_=YHaR*j z3EeepOIfWlkm>lsbo|0Jpzc-F)GGrWbgslf=c*7*kT+}FdT*yKPDXvWd%IXfGc2MR z+`U~Cp$Ya*ZR>gy8(=!Vuy<+zfN?O#IG8Vk=e-G+-^ciL@&)5yer*%(To(wa{e8vC zbv{)a9?H$T81}l$`u|JatBCf%5vJpd_Q3h)y6#nSy8~q1?SUg+oIMeyQEhk%OIEAe@Rm0U0Ny;? zPyKxAHm-XWF&XvO5`6Ao6NL_|bHL_|~^MVc8OmNm7r; zH+g$<52oXbR?|hR>E7r`v9iI3n9L2(IWsUB_0ej&N@HeffXbO#vRtY2 z0h{QY8CcJK!*tFJtmak~H`BqP&Y6MuxxZ!Dc=hO=l3bad0Xk;};_-j{x>Oc7Qv-C) s48(KGU8h3kZKQipkC+@I9=4I%A0S6P;YlmGw#07*qoM6N<$g59DanE(I) literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Back/Backpacks/botany.rsi/meta.json b/Resources/Textures/Clothing/Back/Backpacks/botany.rsi/meta.json new file mode 100644 index 0000000000..e84a910cb3 --- /dev/null +++ b/Resources/Textures/Clothing/Back/Backpacks/botany.rsi/meta.json @@ -0,0 +1,27 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/547852588166c8e091b441e4e67169e156bb09c1", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon", + "directions": 1 + }, + { + "name": "equipped-BACKPACK", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Clothing/Back/Backpacks/chemistry.rsi/equipped-BACKPACK.png b/Resources/Textures/Clothing/Back/Backpacks/chemistry.rsi/equipped-BACKPACK.png new file mode 100644 index 0000000000000000000000000000000000000000..9f10db67a9054117c74fd89bca781bcd54187a90 GIT binary patch literal 672 zcmV;R0$=@!P)5QaaaJ_5b=xJi0J$f^)hA&=rHH9kds0eb8MVT5o&p?m zg-c%`lY`laq!@c44xyS)vcNm5ncu@MyYeh3ilQirq9{r(5+R$|pEG{D-4=Uo690`; z@L^7;VcO5@;kgPa68~`21_n%P$Yl^b*na*U$lE`7hod$U4V>avigvV4v$Aa4%XoO} z*BHaJhEyA1jCr`K4VcytV~lhB!Xp3xA9$Bxv+a4KWCJFX3Dw42$09ydf$`1Q*=OMq z@ES12FuP8_@1L~jcDwAKv;df0!`|MWv(KGM0KnzvAI#3u&magM-LHe&6nG_!z9pC^ z_e>^h`EnZpL*O>Uc1x-AAK?6VypeqwyEO%#{`tAum*6}FvX&XIhbMly8zF#xzt7Rp z(bD$g19yMUYqt1^T@Jl3c=8po!`~a0vj=z-KSJ6!t$*4F2T5sr5JgcGMNt$*Q4~c{ z6h%>#|AxYEQN>3(^$Q<6{MgD4c|q0pvR(5fX;s@`DjC zPz}l=D|Q%$BGFuXj=q((!A?Dd9(3-)YyoT3U?Uvl)=+$XLv)RnF zZ?hb=Dt5Ek{OusG(ai9R$fM^bHDzx*0>rV|2`zxDd!2@!5XN`CGuM2Ylb>G+lFhmn7Kl_Z6T1G5MYj;E#Nw zDEc{pAP96>cRJLs@acnuVCny+K4`3fl(LWQpG_64dO(Pzv-2wyLZrjM z*z>w?6VM)oiw7vIunuMWd=sKQD%+Sx?G|Vc%@CMny4C1CmGj$T<|{ILVf{nUGqe-e z-?~<(0E%T*N?oe0Ifa|6DF%@3YdFCtstHZP(M b9sV3&HI$(i>rlTm00000NkvXXu0mjf!r|C^ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Back/Backpacks/chemistry.rsi/inhand-left.png b/Resources/Textures/Clothing/Back/Backpacks/chemistry.rsi/inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..d9b52e3dd8f9278e49a12b3aaa50f7424efaa344 GIT binary patch literal 560 zcmV-00?+-4P)3`zbE3}ysRkH;`7<_Cy~h=_=Yh=_ANi>$NGQP4#zy>JDgANRk1@7#L%aWWbl7RaCwG+M#?} zA;}aQ?NJ+mwN{c0z-@2w7DzH+$}VVANVBa`KCOUn!118f>5$q0j4|gX7Y{iW4>^ES zEaonA1?AH$OUhAI&Y6A!%V83=a?oQ42|A!Dp*Zc71{h$^weUL9v-2nj5 zZ0qwG&}{3$voS&l=UV+WZE6Gfbp3hKvp@N|cz$^PZY`GTSHOFZ5W?W+y`Nlfv)KTc zXX|&aG>geS#Qw+!Yt>DStHJSkT5fKp)5fKs5zaaMdeU^N{CB__P#wU2?V|DkV`ya&)CM3QA?0C(W?N&9BuAfS7C~(Q$K9!kE*CH- z%`Af20Qz}=If4v*npp(Zd_YVdVC=g9oh-sEpTQ}40Im9C-~B4KnNGL$%EL;lc#16b9fwLG~^_1K~^_jKWLJ9HIx1VHcSU@AWx^07=V27s%opgq%EdZ3SMzUa}Wp z2StX3n2ZV2mJR$LV8EcLr-w&E8u$PrA|fIpA|fIp+Qr?&wVlJhVsgFSCylvwo=ESQwit$J`uDW{ZjNrE2Ps)tR^`{Wzk0ne`*odF<(fDi(m0n$|V$T|aH z{BMHAOnsQIw*XQ~*BJolZw>aV;8M!7F2Z^V;CEGoGB?2@cncter~(1#PKW4DhnwI+ zh_o3e^!1a(Vy3WO0_z9h%b#IzzPA9@+A7cku$ZaFe`{^>#8askXFKQbpTBwM2X_Df zl)2fw1IpYquAQUp#i?@+Ett0eKdygzZwg&&+e=sPHC79L1&X48wYKpqisIlTPodtW z^Z7hD?<#cB-NVVh&6kM2HMn{T-`BS7yp1tuohuO$5fKp)5fKs5<+!At0iWQxz%G~C zGvE_lfV%l0%Q9qHcGBbWx?dq>%;*BN*)#C`sxN1p3vve=1Q0XtQTv)A;cAyi{&tCO3Kp-p0z@0MSV(1+Uf>=dGQ zK$|@S$BG}d1AwY$U^E)N8ynxIO381$oZuJIeg&e>&fD%8sJ}K^Yo7a40{;O|E%w7- Sl!!V20000t)Mw$1W*I^0hCffa|)I0bJL8TA&`N^59EFFpmGj^n%G`V$|LzDJ8NjgJoHF?UrRB%Q8qQ zjr%k%!0B`{Y9GR{KmR^;A@q40A2kEC-EUQUZsH?nfTmRUCC9h`U(K?t$~B8Y_0WUYs&4*Q#U>&mA|fIpA|fLCT#cTjMp1No3VS>r0pOKSfE&>} z)6?nn*0x%$y5|^0(SKXfLWtYZIY39nT*``nTr1_lCrP5xG`;KeD~nK$ou;WulBAy^ z=)nWH4ZcYduk; sP`>Yf%=Fi;Ik$Rukcfzgi0B*m3ySh?@A|o26#xJL07*qoM6N<$g0+++Bme*a literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Back/Backpacks/mime.rsi/icon.png b/Resources/Textures/Clothing/Back/Backpacks/mime.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..7ad80206d8ca092c49c5edc258bded0ce6f2c8d2 GIT binary patch literal 572 zcmV-C0>k}@P)`U3d^nmiT?&c8*= z8EO$Q*x(vU>?LIJ-r+jLCu~WUWH*#T^#h~xJ@4sx?)(ZFGBPs$cSM|MS(XNPe0t#C z8~C-3*qtWp7y-HbcZSDZjZntASmWq~T>FIPzE|=r+=>dTAvkL$!l}f1I^E?1P zfB6K!*5(doeO!o*xOB4}00_r%v@tH1%S-Fe&n{-CG0@d&HR<-eiW57Xju~oWyv#f> zuLJAXW7Y#2(1!W(JZ8S%@B3>^5B(|HaU90iYkYO{jg#Y3evW^jlv*$~#sI@n4=E*+$s~<; zx&Q{(b&*nXcYDpj;gN4@j1LZvkW%8hF0EE8)$Spo2kyOrxVybx_%CpBd`fBiEyGcd zLNU*9)br=oA$3xKTCJu5q?94ebzOj!cE56fV32uMHO|QRXZQ`3c03wNb|a|(0000< KMNUMnLSTY^&I#H8 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Back/Backpacks/mime.rsi/inhand-left.png b/Resources/Textures/Clothing/Back/Backpacks/mime.rsi/inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..f4318242ca4e1822e81aa58d10440351140eabeb GIT binary patch literal 397 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7T#lEU<~neaSW-L^Y+%k+-3(6mJ2sE z+;v9(=$qDf4?r@uzUCM z^je+=AC5eJcH8FDoXYnM#>@+T#*FBiPDskTA*aNsVEE9DG} z`9DaX(PR3`_~qW|deeJ1H@^JOwD;S``Mrlg(-#=WHpRh##{=EO(Epor#0)v^s)78&qol`;+0GqtKIRF3v literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Back/Backpacks/mime.rsi/inhand-right.png b/Resources/Textures/Clothing/Back/Backpacks/mime.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..083cf6092fec08e8e56e516b16cffa7308356fe5 GIT binary patch literal 389 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7T#lEVD#~HaSW-L^Y+%>+#?1&tO;5k zFLO6Fvpo=4$&(>ARq}YP+6N;a!4HcpHYv?d4Q9G`eNH{Y$Hw&4hMhn&AVA@Gwf;59 zth1kE=6+q8rkFM@bJn?MyUy-fcjV0T{|4{(8f;#n)*ZJd^Ipluz*!s4)~K!T=y;J| z<>O*&{?PwkkZ{>|hBP&$Mce!5XIHKHUNt4nd-HqEye1cy`R^y$$~pSpOJbf={AA8; z+xJtStvUHCYL{ekjn0gD`lpM`9xpXfzgYh5l6G_rlM_cjYiZzKv#u?YmZs-Fe{+5H zUsl4{80Ja_hv#myByW6vzkK7`z;w1*8|O$~xK)1j^d>NU4jD@97zbo{g2leD;jfjF}Z%;!C3|w#}V(|Nd69 ceLtO<<9QGMuHNUoa|y^!Pgg&ebxsLQ0JuA=LjV8( literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Back/Backpacks/mime.rsi/meta.json b/Resources/Textures/Clothing/Back/Backpacks/mime.rsi/meta.json new file mode 100644 index 0000000000..e84a910cb3 --- /dev/null +++ b/Resources/Textures/Clothing/Back/Backpacks/mime.rsi/meta.json @@ -0,0 +1,27 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/547852588166c8e091b441e4e67169e156bb09c1", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon", + "directions": 1 + }, + { + "name": "equipped-BACKPACK", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Clothing/Back/Duffels/duffel.rsi/equipped-BACKPACK.png b/Resources/Textures/Clothing/Back/Duffels/duffel.rsi/equipped-BACKPACK.png new file mode 100644 index 0000000000000000000000000000000000000000..11d050d33cfc095930966648fd7f93107e59a573 GIT binary patch literal 714 zcmV;*0yX`KP)_ol7=~dOhGDe4zC0Ck+n^$)Ea(Ed+4tS_fyd25@fN%< zOrIMXDP`e#o_ecz{`DKXs1rtE2(|ESJkt4PEFJ!Ksx%xer{U?Klo>+Xiq|gK6}Eo;5&K!c=NdqfOH9 z!yu7UHz2#?X%sc6xlh&pa=8HLmivV9MyQUlzH}3oWdXRVft=8l!G8u#HzFn^N%Bed zmSy#dJ}{61RQedxV%@==JNur#3#!V-ayY{<48t%C!!QiPFbwm*(yE=LwxCu&KCoG@ z0ZiWwZi3qKK^P+a^Rv9)rd_7}K(!x#I2;!0OXqe%)sF3UTTt7)&9um57IEQ?*wK_$X2rb zmJ_roAcQEdI^Kf!$yK16O6zP^sda#qvY_H&SynlVyC+n;<2YV4sbG-V;FKyD`b>h> z0qQ}dF$bSRq1sqIL{&%aaI`9!HVgfW$mkAg6a8wzR#Uo4qXOsw*LBNcLRGbiDUQnM z-a$4BA>g_$fZIDl?RY#%64r7R}JEcC%BUTmj#IAx%^9&2?STHw;7B7K=sKCaDF&*B1alk|edF zk47p`QeE|5ApHruI3ABMO%qv`wLUkSO>OrcB5=FiMBn%Q;nrgWE|-hwbIx03+UT=- zsQ{&P^8R)|(aLk66v^`(j^otCWR$VH-46D1)?c6rW2|<%F~*efmSq8eh^3THR^e>W z5e)!{qjfQAVuMvUE8=L~ny2&TilcS0KODsS_x`8XZC4c!g8Ax2F3Ym|eNhzH zY&J-e1k>phr_-t49s~iBBmn^DD}pamnvw`99`4U>uTEYvQ<_Kt&MC_hyWI|DSz>cpu z@vnF6k1|)QmFQDIEG!)l-P7}(_ZVYLCmj#nXD9E=lzt3~O2xRG#a7X?IH*QWLfs^GL<0Ri*U34fUnf17eTB5 zl8q3TczKz}ag4!WfH;mD=ZF>Hn!%eg#&n*Z?@&D4pKZiYN@2NN*1ZUMo+IoXyqRJ* zsl{U9u4#n0#w~ggTGLv)>Qznhmg7nFBHW}pUsZXDUIft=nWlr&f8Za|u`^p(Kwhi> O0000NklI` zs--O^lL+JY6hf~ne}xsY~D2k=L$E*gkQe4_ELBYa1U@EIexv00000NkvXXu0mjfv*rT4 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Back/Duffels/duffel.rsi/meta.json b/Resources/Textures/Clothing/Back/Duffels/duffel.rsi/meta.json new file mode 100644 index 0000000000..e84a910cb3 --- /dev/null +++ b/Resources/Textures/Clothing/Back/Duffels/duffel.rsi/meta.json @@ -0,0 +1,27 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/547852588166c8e091b441e4e67169e156bb09c1", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon", + "directions": 1 + }, + { + "name": "equipped-BACKPACK", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Clothing/Back/Duffels/duffel_cap.rsi/equipped-BACKPACK.png b/Resources/Textures/Clothing/Back/Duffels/duffel_cap.rsi/equipped-BACKPACK.png new file mode 100644 index 0000000000000000000000000000000000000000..bbdf579a9405c11c6b8f13329a96a259b528ef86 GIT binary patch literal 769 zcmV+c1OEJpP)I z@$9oqPdGX$@=<3}Fg-7AnAhOdi<)|fUw!=o&-0ANd6lYFIa0l-;nTM(2sK2-$N__v zUpPEIz|l!D*QLO`2De@p(R;XGIX-?K8jrQN3Se#-0MNa?mX7eB9*xI|wU*sFv%Qpl5>lBtbptYJ`CCzgy7oo1_Xj@##9R9UIa@0FZq)I1G`NpY~_4-n^H`qom8UY4P4_EJ(X2LF)ju z5ow!+&$Li&TyLTZBGilPK@iZ_;j`!=)LldEA^{dQ1L2#ZPz8t+Dre_1sHg)6kwvSF z?iw=kyJb|)&H-%R5o(_Ty>1(o>M87!gYokab0t9T8q8~O=9XpfQ+o-**ysQeJ);b? zEBH^3vR^Pt?||{2p<~Lprk+E5XjCt|OGt zWW}xRA_xHLIw)1^Aj1LD+B*En2Z}qp()#S&Qnd~M0Z)P}5I(`+?iA-|mpD8+o{8BN zkl_FTU=&QLfKf2_2oDIc>(8Tc(Ct|3}GLzn^y4kJcYKo zzmh&cKW{L4cu(*dvbkI*>V&>GjXIo&`MIRuOXX|1L@gS?Y!{YVI7hyg3+$%F%@h0Q z3XdX$w~eBrVVo^*V0b~e>lRAJ+Osk;vgM5^78PGuKqMnWR#c&2`38e}zACUxD^&mh N002ovPDHLkV1m(K(1QQ~ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Back/Duffels/duffel_cap.rsi/inhand-left.png b/Resources/Textures/Clothing/Back/Duffels/duffel_cap.rsi/inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..b723b23bce9e07798da0cba43d32d5e110caa3bc GIT binary patch literal 582 zcmV-M0=fN(P)OH+>R=(gEv&6h(D$d$KB)~VOReHad7MA{^#y&72`Y&XtMJeAq+ zG#OJ4B`!drQZsXlE8%jldxG;{M<^~VVSeq~$a(<5ju=}JY?*9XMo72SV8o=J8HG}S zC{t%Ge7ZQo)L9FAn?GooY?O0Apw~SKkJll9VG5ZzI3T3np`1|*m74JfZR9?#M;@oa zPTXAo0|5AgHvas+vX1>!=Fk0Y>Q#Ui=9OIICF8KY3f`q!}V2A|fIpA|fIp@*X7Z8+fySF|&FRsP_ir-2YEH2CEl= zI?>Oo8|MB!Kz1Rb`UdV7A!_~U@u77dwAW)^dclysMJjG2qu~4c&uK8RI2k*m1p!KP+Mf;4lb|2f7QMs UysGT-`~Uy|07*qoM6N<$f}y<(+W-In literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Back/Duffels/duffel_cap.rsi/inhand-right.png b/Resources/Textures/Clothing/Back/Duffels/duffel_cap.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..912d2a7bb38918491d1195dc85d36264e9d8f520 GIT binary patch literal 550 zcmV+>0@?kEP) zT^fM%tcrM(%9oApy#ur1W;O>PXMS;fxyg`m5Zq*qF1nGrR#~*^%GqU|IRMwECx|yS ztbf!HZ)&~-^Ml*0wnsoeUBcH!0sV9dTe}4e^#R`NPfG>#o7=4BIiY5fhLR`(_`e8F zoI?Qq&ac6@1|?CH`XUH8%R07D%_NO>qce5eo1}NEXg502?L07j8+4sj%_MDie%^YS zILT@`GIkARoq1t2yX;wsh=_=Yh=_=Yh{7dIH3PFa{@XarH3N3$hL)*jKxFZ98;adZ zS!xC*C&5b#*9Tbfqh>%%!sr9r(FdT*ay0;9tr@W6`UnWRW(M#EPn98FX=N04L2>MkN^Mx07*qoM6N<$f;$rU)c^nh literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Back/Duffels/duffel_cap.rsi/meta.json b/Resources/Textures/Clothing/Back/Duffels/duffel_cap.rsi/meta.json new file mode 100644 index 0000000000..e84a910cb3 --- /dev/null +++ b/Resources/Textures/Clothing/Back/Duffels/duffel_cap.rsi/meta.json @@ -0,0 +1,27 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/547852588166c8e091b441e4e67169e156bb09c1", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon", + "directions": 1 + }, + { + "name": "equipped-BACKPACK", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Clothing/Back/Duffels/duffel_clown.rsi/equipped-BACKPACK.png b/Resources/Textures/Clothing/Back/Duffels/duffel_clown.rsi/equipped-BACKPACK.png new file mode 100644 index 0000000000000000000000000000000000000000..781ad572bf62c5f0e83531f01e175b554e91a9dc GIT binary patch literal 887 zcmV--1Bm>IP)oic5o)qL1YL7N`_AD zoFQOhsL4>e#3)+`1R7^iXt)ltWIM=KWIM9mz7GsWw(frS?!D9L-UC4p1VIo4L5QY; znzn>KOcW+6leaxxBj|e)yVI>1F@lLIS9LO{HaE)`Wb(FZ6dSRdiEn@z#$JBsc|{E3 z8DIyERi^I+CWAWJ+Yt3+ur7< zifXl5BgMW?Y9iux5()vp-u%GL@&ya$OO%Q^R`yrMYH#w7!7*kd3fJkMFKy8Uhmm4` zKIz%}nj2mRm7z90yKAP9mW2!bF8LJ|aN=Q$>73Dr>KXtxvzC`=j2-W(aWASoT55Cu4HnpJB3To;`@CV<~ zQNGlJ8Mim1Zy$Ip-aa<8`?DVmzNf>fR*l>nJoIa9uNgyUA0qMs{@`m?Gd%acgT@)t zF@m3$4Dmp9l@4kL`ocGa!3O9YJ+~@e)^+zweN?H5<7@S`56c}4j^EBrg`WlV&#u?- zt9tnVw@|E-+@ctfl`j3tDS+ntG)J$Gyo&?!2jL!IqWl}y53kV{U5xGd@c?7Hj<)Es zet7L&u+Rp1L1b>wPd^XkAi=dDMoq#)v_~3XZ*LC(dq4N6iO-2)qU?RIhQQZ8jL0=0 zsK|imOzalw(W^zG`sl490Z%i;Tm$fSQ2=FA?^b1G2mQN45~VUxeRMRIiaE-rw}JD= z5=Q7w(BB4UPHkMLMmphqDsY_S2uu*>!iAsq}VEKLln6NSXKkq zN#Q!F1ncld=eB(p=(Vgd3WxgMqB?~M^Rfuu*ZMEK)e3?j2!b$q{sQ>SNSNwZ-ogL? N002ovPDHLkV1n9Iqm2Ln literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Back/Duffels/duffel_clown.rsi/icon.png b/Resources/Textures/Clothing/Back/Duffels/duffel_clown.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..d69734dc8a0104b5fd3c8ed20b47a0ddcc8bcf1b GIT binary patch literal 543 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 bPQSnhnq^0@M;(@b00000NkvXXu0mjff=>g+ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Back/Duffels/duffel_eng.rsi/inhand-right.png b/Resources/Textures/Clothing/Back/Duffels/duffel_eng.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..06599a1245a313dec0a115e13bb81da018aa2796 GIT binary patch literal 584 zcmV-O0=NB%P)=*Ji})YK3Jg|#&4 z5Yf;eL0(kU+YoP^cAj^3dav+&K+rqi_nv#-`yt*JAR;0nA|fIpA|g8r)BPgo3~qVJ zs@W~fr$Pb%igzE_yLi)Nhg0Ld0D#ql7u$9!@S3$|rQGqM0S#eY!{PNi0AP0~3;-w? zRfKg7_mxjqod-dbMg-tKYoC0RPld$F#?Vj0jG-fA`J#2Xb$coff|sm4t!`vCJ=|*3 zj&sV|Z~!hVM@VERF~2y2M0T<*!P>!V);_0|CtEj`PlG5JRcx=D^@o;HzB9Ye`g2ai zV^NWucmVKw5wvSuFsj(U9Yb>BLFtPi;4W*;!gwqy&aO(Dyc;xfT#n%Es-)b`1HX4N z$#d3tEb6%P&DN{LO;+2HacZdQ%uCkns%Ir4A|fIpA|fIp>Mq?>Gth|Zzm2=OX240) z&??mo$Si(t!|~y$Dm4T3li;V8>jUhxqh>%(g7tx|^#SOAIUWJ^E-OdK<#Nz<9j0kw ze)Qb09D(sP06_3H19B38Q(yXXJOz%+5v(mgPrqY#$|jm0@sDiv@yge6h{ z48xFQSw`M2P&J)Belm&mor7!FdncEXpLHW0@a?FNndvD2K=aF%6NuyUi^$KC;s{U_ zh1s?Z(==nDKqtyS^6a|8hR`^Un{(tIRMu^fiZ@L%e+d6|F`clN0wM>qxW)h)&4L4dQHb>$e(p zEH^h|Juj7+6E`4+VT{BLs;0BX;v9hgtNrfYA%J+f&$*k1xKRz-k5aJ!;K~g=2ysdM zXE5qUBnsW$8M?hQ=X0r8NHqIEN-2;PJh-#9s&no8kDs?E036X}Nd`|41VIo4K@bE% z5ClQoMnWAYiAPYMKE8u2%K)-J4fcZ{%iFe%H*Y^U*HbwzbJyX;FCB-53AYY+&p^=q zk&eYBNpd2}XFty%@b4C#C~6GD&;alVuJ0Up*4_=nkZjw|B?!DO>6M1PlS`*$9^?Yw z0Pq`mF*0cdCQGERVY_ zX-VFJoYC7v!r_RpG z>JO4VaKxyZ?hKqU#yZw%px&V!B2Fp@_4sk;`251@7Yx%o5c$v0xYy%vl2(Es2!bH; Z{3`1rxtLS+hWB4V0Lnp#l!tQO=IogylK81k4jHTD9~s$0060Etf^@`lDlV!L?TG; zo_T8ONx}VQ#rx_Eb|U@KO6_@#W1!TbXt|zRSO!E09SiLWB?-0K1A#bLVcm#dtWm z2PYRe%x!rWXhkG=(`K`H`bRwi_ny)7s06++_JKETSrfIfwqOC~(T!aw2 zUazxxrBd0F1 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Back/Duffels/duffel_med.rsi/inhand-left.png b/Resources/Textures/Clothing/Back/Duffels/duffel_med.rsi/inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..1be16c33e41588450c783e895f163e5cb74cb4c8 GIT binary patch literal 541 zcmV+&0^JU@>joK*`lB5K6r^-Hn zJD{gzEayoOwB_8}w;vGt0wN+JA|fIpA|g_h=XvHDG6A5%4D)^806>;y0DvS(DxT*V z$8i7vaU7pK-o8xIbO8XjjF5bijYb2j)e7BiH(&K_dA{8-g*cR%Bne~6TZO9`1cB-G zdfWHY>GWq2c9us`WG#X%({)|y8F0f0d1(z9F{NkjL%9U@3BwSM;~>j2j7B3`CL6T? zhfe?XdQHo8UANF2f1+GZK@gbtw-p|r?{{_{_}q!*atQ!f%r}@XUaeyv%4FXIXkpEI z$JCp5)@|ZAt~Bc%^V`nbGSB%cy_jabWBsx6+j`b#PC>7xZNkSMd0XbW86qMgA|fIp zA|fL49~A8yxZ1y%S-l9gL$Xmm3Wvma4L00000NkvXXu0mjf!RGC^ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Back/Duffels/duffel_med.rsi/inhand-right.png b/Resources/Textures/Clothing/Back/Duffels/duffel_med.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..0cedf53f5c5a87cd46b6b056312c45878ab7c88d GIT binary patch literal 551 zcmV+?0@(eDP)i*<1;i9^Q5>lSdb)GP<#L+XHbLS(0qppf<&zf*`x&3se_ia zrG-MT$@5D{pyjSl@A^XMA0Q$kA|fIpA|j$F?RMKQIzw7nvR0xN3L$&|@H`Kz)vBU8 zGzB}W$t;Vf59*-Cd1~3c* zp68*}YCR=f-g>=WrmV38007hJH1t_YiRE$`I<$17GN;XYJ}0b3$8T8g04^87sK!!C z{Cxl7?P)z~%fcq#y zk|dB)dex^!5zx00Y=*<3iH0T|Rm~R8&1MEmR zRW#V%{{8lLw7gb4XD^T*pWi!)27BJu)&AGh({_BKM&1V+EQE^a>ZQvNLIBuCgEm4_ zTAv1e7a~5SX^J#W&38Q$H1$5vQUur>qf8CCtsA%ZHGLE8DC^4L48t%C!!QiPFbu;m z%>PQQ?Ie2(>W7pV?LNn6vZbca1tb9e5}EsTw#%HGqKAF>NXo%_H|PvdeH%f)yw+nL zhW5s(av8yETRe&)BTNt2SiPW{4DtW1W=<2MY=*8U|lfohvksPt|pYFg0lwfwVn&wP&)-qS`VsT9yri> zv#FF-m;yv(iiZ%w^x`fFTW=}lpez+y=?$(=SPNX<_r+-dy8w3C_-qSX$FkyGTM!Yc z55Qb5158d30j@EMbgt67GK};hD9>}#hcB85&IvsOET>ZlA)H5NoU=fhrU-%nuk$(b zJO^zy&ec_45RqEm-fjyZuy>ZAj7kG^)syd%EX&M!!8*t0y#EZHtM@gRq$|TP48t(} Z@((G;C~FgA1ONa4002ovPDHLkV1n!tRVV-e literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Back/Duffels/duffel_sec.rsi/icon.png b/Resources/Textures/Clothing/Back/Duffels/duffel_sec.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..0b20edf42bb7c86e4fae43847841bbda014c8919 GIT binary patch literal 466 zcmV;@0WJQCP)As=6o9`L2MLjLcX0C@f?J)O`WIX)1>L0JE?tEFhHe!~$0GDc_!BaCZVnD^6+|2Y z>0omtlDkB)bjb&Sm%EquzB|H$f`WpAf`8`bl8@^3dT82PtyUM+Jgd1$z_w??YU_EP zE>^8p34(y#ZkJi~G}rfiW1o_(xs(#66jDk6Hk%Eu>r$)Lbl&4^rsMZ+SH~y0p-JM_ z)?5fdBq4-28kb6}*K33j2qF0D_o)CC;Au9~>+#%nyPderOo8YG%juNyc&yhNjfRfP z<+6T0heIS4Bo)2ZYPC$I^9jiL9DvbilxTWwi~HXVu9m0?Du;d$Km1r z?)d(@KAB7sw|5nR!{MOgX0w^tdw%@@;APl5r)0LkcDvQ_a=A>E=}o7oll45O2g@KD zK&XIk&r8gKAP92LfhbogMb-D2r}WDu0Ow6Y*L49BlduC}nt+u7gdI3*wx`j7aA2sD zX%yW=MBY=x#U=1&_%2tmxV^F^#*net)I7Ir{R z%pj#m*6gqRqo=SN-q%UCpGG4wHr4|~L_|bHL_|bHq^~H7+P9Di00A@181rC|&bc6p zqINQw?6(=2y$1ORCG2jHVHm=DkHunvPnVbYX$*F|9cHr`y!Y5{w*ZbiiI+0Jk}q2C zFk?)cW!ZkaEK7Lrkt7MeS&OSYf3m+Qiq1*s%Cy!}Ct$<~DXo2W{|CIIXR=Wy;5l_& zK4H}DbU^;)A=6fT#y3op_A{*WPc4(r9kJ8l|!$yK648CY<3O! z*elo5M2b? z)8RbN+xdKs@pz2sbc!s?p4_Gk>@LD!{eXX|PZxnU0n8%AF<4y$+5`+yUU-BoS2o^3G2pC-iYDMPMgUc)M8{@z-ez7oW!(qlK=n! literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Back/Duffels/duffel_sec.rsi/inhand-right.png b/Resources/Textures/Clothing/Back/Duffels/duffel_sec.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..fb686d390e200fd1311000ce8f9890dd6a93b5cc GIT binary patch literal 574 zcmV-E0>S->P)>H(2JQxfxo6R7EfaiGtfGgj}z1EoRI<)OOan%Ol(J^ZytHWP7Pi&w2{Gi=#4 z1BVJX#^dqnZo6gI4A}maQn7s%)pzbuEW2jFuEe7It<}>Tiyw~Q6>%62nfgN;VgLXD M07*qoM6N<$f>V9_MgRZ+ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Back/Duffels/duffel_sec.rsi/meta.json b/Resources/Textures/Clothing/Back/Duffels/duffel_sec.rsi/meta.json new file mode 100644 index 0000000000..e84a910cb3 --- /dev/null +++ b/Resources/Textures/Clothing/Back/Duffels/duffel_sec.rsi/meta.json @@ -0,0 +1,27 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/547852588166c8e091b441e4e67169e156bb09c1", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon", + "directions": 1 + }, + { + "name": "equipped-BACKPACK", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Clothing/Back/Duffels/duffel_syn.rsi/equipped-BACKPACK.png b/Resources/Textures/Clothing/Back/Duffels/duffel_syn.rsi/equipped-BACKPACK.png new file mode 100644 index 0000000000000000000000000000000000000000..3ef2c5cbbdd7f4a5c558e44a75eb11844e9df850 GIT binary patch literal 746 zcmVLu~AUgJ$O&Zxtj2E}zoRUc@v5GtduhrR}548YM1QiQg2{u zi0F`I8L})ZerAl_RDGZ$2dLbVOoOW2<3!g(IE*{mp56h*Zn zXl;wjhgUyv$WtR_MNo5WLZtxG`tu+t?Y)O#Xe3E8hzOqNi6lu%9hm2N(K4^=Q(P55 z-uQaz#oyY2xhFDLnR}H8jfOx~<1vooySqSEzv`?~(`IR@0GxAiK6$k5z7D|?zITk% zG&Qcdpz$R5Rq?xfx}Zt*<-=FyENRpmT=+inJO|%wE}ZdbaL&d1bPC4U#UZLPN(DH# zj1082tgC@e73tjpb=3zhC+xBzEvXD77eRTR7eU{IcxVUwH4Fh9&kiugY8OMb0+^|O-_cfpEaS#N~<7csG*`pSL>$YcEc2o4;SOw}LkK$?Q z!Zb}WnM`mv92(E7)e67M<$VP%mx~^6x7+^KLj=y}vmU>0HjOe(ba{HKfKqCdBuNE8 z_kpX3?gNIH4c!NJJB-K8pIfI_Kt#9QjmR1QUW-*qjp8`&)uI6aLWpY6!WwZLS3-!! zJgt8&Aw(sm)YoNMcKX|y;!zY~yy*s2H)UKzQKZMV;++L-GA>+2Jsy)k$2^zv TbFRvB00000NkvXXu0mjft(v-G literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Back/Duffels/duffel_syn.rsi/inhand-left.png b/Resources/Textures/Clothing/Back/Duffels/duffel_syn.rsi/inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..299d95f318f3e109c014e05dea8a6c2b70686fe6 GIT binary patch literal 509 zcmV)W2>9bh2va*<*PIZferJ^DQa`CjD{~Lkc zq@i5SX?}o+h=_=Yh=_=YQfaN@CDa6fOtRSbNqX8cpF$VMb9L5-|*K4tw(nNYd?V%_>pVz87+nPyvBQN}GdECG z6}Hq})3 z#2$e literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Back/Duffels/duffel_syn.rsi/inhand-right.png b/Resources/Textures/Clothing/Back/Duffels/duffel_syn.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..8b7063fa6d70713ea91d93b01a93555fc00146e0 GIT binary patch literal 497 zcmV-=H6b9hmj76+=*lOFggF0=FkTOTeL2`zaDJ|`iyGSSPHsVlWM+yTI5f?VDvdsM7 zj197np9h1EK7fdbh=_=Yh=_=~NGYqaGYsXDb=FrP&+}QkV4mll>q6j~b>6l3ZNJAO zfR8A`Gf?f60sy?E>2dq-ejzqOIc9AdAf>F7Qq973977#fo)m1hA5|eX!6oZMU$I@1 zbZ#%p^8X3%%$D_H16HdQlu}qOm(6W81+H1GcYrYl+wB&{7<|Vu4gg-$^qPD(=bE)? zfDi)47<@(%4gkKMp3Ziz3zubyq9}rV2-b#XJ=v(WuCgpU``Bv}LLkesAWy!XT?m22 zVu8(OGc2#x+IsSR?}uba*3Pcj7KVD|Yk#wco|TA*h=_=Yh=_=2TBbBJaLM4Gji)>_ zU^DOAA*7iBd4pqE8xYFOK>H%Rd#v3%AJFBVGXwQSs84h-=>Wb$lshRlj`I9^A#T nX9ns!(RbZReS72Z!wviZ*MSC5LX|l)00000NkvXXu0mjf6(Qod literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Back/Duffels/duffel_syn.rsi/meta.json b/Resources/Textures/Clothing/Back/Duffels/duffel_syn.rsi/meta.json new file mode 100644 index 0000000000..e84a910cb3 --- /dev/null +++ b/Resources/Textures/Clothing/Back/Duffels/duffel_syn.rsi/meta.json @@ -0,0 +1,27 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/547852588166c8e091b441e4e67169e156bb09c1", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon", + "directions": 1 + }, + { + "name": "equipped-BACKPACK", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} From a937e67d38c830149c636d4649aaf0dd0e758ee3 Mon Sep 17 00:00:00 2001 From: DrSmugleaf Date: Tue, 1 Sep 2020 12:24:28 +0200 Subject: [PATCH 050/103] Add delete entities with prototype id command (#1983) * Add delete entities with prototype id command * Add command to groups * Add feedback and lowercasing --- .../Administration/DeleteEntitiesWithId.cs | 39 +++++++++++++++++++ Resources/Groups/groups.yml | 2 + 2 files changed, 41 insertions(+) create mode 100644 Content.Server/Administration/DeleteEntitiesWithId.cs diff --git a/Content.Server/Administration/DeleteEntitiesWithId.cs b/Content.Server/Administration/DeleteEntitiesWithId.cs new file mode 100644 index 0000000000..b2f3448167 --- /dev/null +++ b/Content.Server/Administration/DeleteEntitiesWithId.cs @@ -0,0 +1,39 @@ +#nullable enable +using Robust.Server.Interfaces.Console; +using Robust.Server.Interfaces.Player; +using Robust.Shared.GameObjects; +using Robust.Shared.Interfaces.GameObjects; +using Robust.Shared.IoC; + +namespace Content.Server.Administration +{ + public class DeleteEntitiesWithId : IClientCommand + { + public string Command => "deleteewi"; + public string Description => "Deletes entities with the specified prototype ID."; + public string Help => $"Usage: {Command} "; + + public void Execute(IConsoleShell shell, IPlayerSession? player, string[] args) + { + if (args.Length != 1) + { + shell.SendText(player, Help); + return; + } + + var id = args[0].ToLower(); + var entityManager = IoCManager.Resolve(); + var query = new PredicateEntityQuery(e => e.Prototype?.ID.ToLower() == id); + var entities = entityManager.GetEntities(query); + var i = 0; + + foreach (var entity in entities) + { + entity.Delete(); + i++; + } + + shell.SendText(player, $"Deleted all entities with id {id}. Occurrences: {i}"); + } + } +} diff --git a/Resources/Groups/groups.yml b/Resources/Groups/groups.yml index a2bf42796c..f166b7f1c9 100644 --- a/Resources/Groups/groups.yml +++ b/Resources/Groups/groups.yml @@ -105,6 +105,7 @@ - adddamageflag - removedamageflag - godmode + - deleteewi CanViewVar: true CanAdminPlace: true CanAdminMenu: true @@ -203,6 +204,7 @@ - adddamageflag - removedamageflag - godmode + - deleteewi CanViewVar: true CanAdminPlace: true CanScript: true From 14259ed9205df20609f7df46412ac0368e6a2729 Mon Sep 17 00:00:00 2001 From: DrSmugleaf Date: Tue, 1 Sep 2020 12:29:58 +0200 Subject: [PATCH 051/103] Change EntityTest.SpawnTest to not use stationstation (#1984) --- Content.IntegrationTests/Tests/EntityTest.cs | 30 ++++++++++++++++---- 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/Content.IntegrationTests/Tests/EntityTest.cs b/Content.IntegrationTests/Tests/EntityTest.cs index 4dccc44c22..958621c562 100644 --- a/Content.IntegrationTests/Tests/EntityTest.cs +++ b/Content.IntegrationTests/Tests/EntityTest.cs @@ -25,11 +25,13 @@ namespace Content.IntegrationTests.Tests { var server = StartServerDummyTicker(); await server.WaitIdleAsync(); - var mapMan = server.ResolveDependency(); + + var mapManager = server.ResolveDependency(); var entityMan = server.ResolveDependency(); var prototypeMan = server.ResolveDependency(); - var mapLoader = server.ResolveDependency(); - var pauseMan = server.ResolveDependency(); + var pauseManager = server.ResolveDependency(); + var tileDefinitionManager = server.ResolveDependency(); + var prototypes = new List(); IMapGrid grid = default; IEntity testEntity; @@ -37,9 +39,25 @@ namespace Content.IntegrationTests.Tests //Build up test environment server.Post(() => { - var mapId = mapMan.CreateMap(); - pauseMan.AddUninitializedMap(mapId); - grid = mapLoader.LoadBlueprint(mapId, "Maps/stationstation.yml"); + // Create a one tile grid to stave off the grid 0 monsters + var mapId = mapManager.CreateMap(); + + pauseManager.AddUninitializedMap(mapId); + + var gridId = new GridId(1); + + if (!mapManager.TryGetGrid(gridId, out grid)) + { + grid = mapManager.CreateGrid(mapId, gridId); + } + + var tileDefinition = tileDefinitionManager["underplating"]; + var tile = new Tile(tileDefinition.TileId); + var coordinates = new GridCoordinates(0, 0, gridId); + + grid.SetTile(coordinates, tile); + + pauseManager.DoMapInitialize(mapId); }); server.Assert(() => From 8f9ed2f562eeb2e1971c991090bf3c923b7ead17 Mon Sep 17 00:00:00 2001 From: DrSmugleaf Date: Tue, 1 Sep 2020 12:34:53 +0200 Subject: [PATCH 052/103] Replace usages of ISharedNotifyManager and IServerNotifyManager with extension methods (#1965) * Replace usages of ISharedNotifyManager and IServerNotifyManager with extension methods * Remove redundant code --- .../UserInterface/Suspicion/SuspicionGui.cs | 2 +- Content.Server/Atmos/GasSprayerComponent.cs | 6 +- .../Body/Surgery/BiologicalSurgeryData.cs | 14 ++--- Content.Server/Chat/ChatCommands.cs | 2 - .../Access/IdCardConsoleComponent.cs | 7 +-- .../ActionBlocking/CuffableComponent.cs | 23 +++----- .../ActionBlocking/HandcuffComponent.cs | 25 ++++---- .../Components/Atmos/GasAnalyzerComponent.cs | 12 ++-- .../Body/DroppedBodyPartComponent.cs | 14 ++--- .../Body/DroppedMechanismComponent.cs | 13 ++-- .../Components/Body/SurgeryToolComponent.cs | 11 +--- .../Components/Buckle/BuckleComponent.cs | 59 ++++++++----------- .../Chemistry/ChemMasterComponent.cs | 23 +++----- .../Components/Chemistry/InjectorComponent.cs | 25 +++----- .../Components/Chemistry/PourableComponent.cs | 11 +--- .../Chemistry/ReagentDispenserComponent.cs | 25 +++----- .../Conveyor/ConveyorSwitchComponent.cs | 2 +- .../Disposal/DisposalRouterComponent.cs | 7 +-- .../Disposal/DisposalTaggerComponent.cs | 7 +-- .../Disposal/DisposalUnitComponent.cs | 12 ++-- .../Components/Doors/AirlockComponent.cs | 7 +-- .../Components/Fluids/SprayComponent.cs | 5 +- .../Components/GUI/InventoryComponent.cs | 6 +- .../Components/GUI/StrippableComponent.cs | 36 +++++------ .../Gravity/GravityGeneratorComponent.cs | 6 +- .../Instruments/InstrumentComponent.cs | 10 ++-- .../Interactable/HandheldLightComponent.cs | 7 +-- .../Interactable/WelderComponent.cs | 12 ++-- .../Items/Clothing/ClothingComponent.cs | 7 +-- .../Components/Items/RCD/RCDAmmoComponent.cs | 10 +--- .../Components/Items/RCD/RCDComponent.cs | 24 ++++---- .../Storage/SecureEntityStorageComponent.cs | 3 +- .../Components/Kitchen/MicrowaveComponent.cs | 17 ++---- .../MachineLinking/SignalReceiverComponent.cs | 2 +- .../Mobs/ServerStatusEffectsComponent.cs | 2 +- .../Components/Movement/ClimbableComponent.cs | 2 +- .../Components/Nutrition/DrinkComponent.cs | 8 +-- .../Components/Nutrition/FoodComponent.cs | 4 +- .../Power/AME/AMEControllerComponent.cs | 23 +++----- .../Components/Power/AME/AMEPartComponent.cs | 7 +-- .../PoweredLightComponent.cs | 4 +- .../GameObjects/Components/RadioComponent.cs | 6 +- .../Rotatable/FlippableComponent.cs | 7 +-- .../Rotatable/RotatableComponent.cs | 9 +-- .../Components/Stack/StackComponent.cs | 12 ++-- .../Components/Weapon/Melee/FlashComponent.cs | 5 +- .../Weapon/Melee/StunbatonComponent.cs | 5 +- .../Ranged/ServerRangedWeaponComponent.cs | 2 +- .../GameObjects/Components/WiresComponent.cs | 21 +++---- .../GameObjects/EntitySystems/HandsSystem.cs | 13 ++-- .../EntitySystems/PointingSystem.cs | 2 +- .../EntitySystems/SharedInteractionSystem.cs | 8 +-- .../Interfaces/ISharedNotifyManager.cs | 30 +++++++++- 53 files changed, 247 insertions(+), 375 deletions(-) diff --git a/Content.Client/UserInterface/Suspicion/SuspicionGui.cs b/Content.Client/UserInterface/Suspicion/SuspicionGui.cs index e466eb8074..5d8c5361b8 100644 --- a/Content.Client/UserInterface/Suspicion/SuspicionGui.cs +++ b/Content.Client/UserInterface/Suspicion/SuspicionGui.cs @@ -66,7 +66,7 @@ namespace Content.Client.UserInterface.Suspicion _ => throw new ArgumentException($"Invalid number of allies: {role.Allies.Count}") }; - role.Owner.PopupMessage(role.Owner, message); + role.Owner.PopupMessage(message); } private bool TryGetComponent(out SuspicionRoleComponent suspicion) diff --git a/Content.Server/Atmos/GasSprayerComponent.cs b/Content.Server/Atmos/GasSprayerComponent.cs index b8460f91dd..7bcb9361d9 100644 --- a/Content.Server/Atmos/GasSprayerComponent.cs +++ b/Content.Server/Atmos/GasSprayerComponent.cs @@ -1,7 +1,7 @@ using Content.Server.GameObjects.Components.Chemistry; -using Content.Server.Interfaces; using Content.Shared.Chemistry; using Content.Shared.GameObjects.Components; +using Content.Shared.Interfaces; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.GameObjects; using Robust.Server.GameObjects.EntitySystems; @@ -13,13 +13,11 @@ using Robust.Shared.Localization; using Robust.Shared.Maths; using Robust.Shared.Serialization; - namespace Content.Server.Atmos { [RegisterComponent] public class GasSprayerComponent : Component, IAfterInteract { - [Dependency] private readonly IServerNotifyManager _notifyManager = default!; [Dependency] private readonly IServerEntityManager _serverEntityManager = default!; //TODO: create a function that can create a gas based on a solution mix @@ -48,7 +46,7 @@ namespace Content.Server.Atmos if (tank.Solution.GetReagentQuantity(_fuelType) == 0) { - _notifyManager.PopupMessage(Owner, eventArgs.User, + Owner.PopupMessage(eventArgs.User, Loc.GetString("{0:theName} is out of {1}!", Owner, _fuelName)); } else diff --git a/Content.Server/Body/Surgery/BiologicalSurgeryData.cs b/Content.Server/Body/Surgery/BiologicalSurgeryData.cs index f1bff3a145..fb8769f116 100644 --- a/Content.Server/Body/Surgery/BiologicalSurgeryData.cs +++ b/Content.Server/Body/Surgery/BiologicalSurgeryData.cs @@ -131,7 +131,7 @@ namespace Content.Server.Body.Surgery private void OpenSkinSurgery(IBodyPartContainer container, ISurgeon surgeon, IEntity performer) { - performer.PopupMessage(performer, Loc.GetString("Cut open the skin...")); + performer.PopupMessage(Loc.GetString("Cut open the skin...")); // TODO do_after: Delay _skinOpened = true; @@ -139,7 +139,7 @@ namespace Content.Server.Body.Surgery private void ClampVesselsSurgery(IBodyPartContainer container, ISurgeon surgeon, IEntity performer) { - performer.PopupMessage(performer, Loc.GetString("Clamp the vessels...")); + performer.PopupMessage(Loc.GetString("Clamp the vessels...")); // TODO do_after: Delay _vesselsClamped = true; @@ -147,7 +147,7 @@ namespace Content.Server.Body.Surgery private void RetractSkinSurgery(IBodyPartContainer container, ISurgeon surgeon, IEntity performer) { - performer.PopupMessage(performer, Loc.GetString("Retract the skin...")); + performer.PopupMessage(Loc.GetString("Retract the skin...")); // TODO do_after: Delay _skinRetracted = true; @@ -155,7 +155,7 @@ namespace Content.Server.Body.Surgery private void CauterizeIncisionSurgery(IBodyPartContainer container, ISurgeon surgeon, IEntity performer) { - performer.PopupMessage(performer, Loc.GetString("Cauterize the incision...")); + performer.PopupMessage(Loc.GetString("Cauterize the incision...")); // TODO do_after: Delay _skinOpened = false; @@ -193,7 +193,7 @@ namespace Content.Server.Body.Surgery return; } - performer.PopupMessage(performer, Loc.GetString("Loosen the organ...")); + performer.PopupMessage(Loc.GetString("Loosen the organ...")); // TODO do_after: Delay _disconnectedOrgans.Add(target); @@ -224,7 +224,7 @@ namespace Content.Server.Body.Surgery return; } - performer.PopupMessage(performer, Loc.GetString("Remove the organ...")); + performer.PopupMessage(Loc.GetString("Remove the organ...")); // TODO do_after: Delay Parent.TryDropMechanism(performer, target, out _); @@ -240,7 +240,7 @@ namespace Content.Server.Body.Surgery } var bmTarget = (BodyManagerComponent) container; - performer.PopupMessage(performer, Loc.GetString("Saw off the limb!")); + performer.PopupMessage(Loc.GetString("Saw off the limb!")); // TODO do_after: Delay bmTarget.DisconnectBodyPart(Parent, true); diff --git a/Content.Server/Chat/ChatCommands.cs b/Content.Server/Chat/ChatCommands.cs index 302d0add91..5359402df3 100644 --- a/Content.Server/Chat/ChatCommands.cs +++ b/Content.Server/Chat/ChatCommands.cs @@ -5,7 +5,6 @@ using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.GameObjects.Components.Observer; using Content.Server.Interfaces.Chat; using Content.Server.Interfaces.GameObjects; -using Content.Server.Interfaces; using Content.Server.Observer; using Content.Server.Players; using Content.Server.Utility; @@ -120,7 +119,6 @@ namespace Content.Server.Chat internal class SuicideCommand : IClientCommand { [Dependency] private readonly IPlayerManager _playerManager = default!; - [Dependency] private readonly IServerNotifyManager _notifyManager = default!; public string Command => "suicide"; diff --git a/Content.Server/GameObjects/Components/Access/IdCardConsoleComponent.cs b/Content.Server/GameObjects/Components/Access/IdCardConsoleComponent.cs index 1183e461b2..83fd5e207f 100644 --- a/Content.Server/GameObjects/Components/Access/IdCardConsoleComponent.cs +++ b/Content.Server/GameObjects/Components/Access/IdCardConsoleComponent.cs @@ -2,11 +2,11 @@ using System.Collections.Generic; using System.Linq; using Content.Server.GameObjects.Components.Items.Storage; -using Content.Server.Interfaces; using Content.Server.Interfaces.GameObjects.Components.Items; using Content.Server.Utility; using Content.Shared.Access; using Content.Shared.GameObjects.Components.Access; +using Content.Shared.Interfaces; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.GameObjects.Components.Container; using Robust.Server.GameObjects.Components.UserInterface; @@ -25,7 +25,6 @@ namespace Content.Server.GameObjects.Components.Access [ComponentReference(typeof(IActivate))] public class IdCardConsoleComponent : SharedIdCardConsoleComponent, IActivate { - [Dependency] private readonly IServerNotifyManager _notifyManager = default!; [Dependency] private readonly IPrototypeManager _prototypeManager = default!; private ContainerSlot _privilegedIdContainer = default!; @@ -132,7 +131,7 @@ namespace Content.Server.GameObjects.Components.Access { if (!user.TryGetComponent(out IHandsComponent? hands)) { - _notifyManager.PopupMessage(Owner.Transform.GridPosition, user, Loc.GetString("You have no hands.")); + Owner.PopupMessage(user, Loc.GetString("You have no hands.")); return; } @@ -161,7 +160,7 @@ namespace Content.Server.GameObjects.Components.Access if (!hands.Drop(hands.ActiveHand, container)) { - _notifyManager.PopupMessage(Owner.Transform.GridPosition, user, Loc.GetString("You can't let go of the ID card!")); + Owner.PopupMessage(user, Loc.GetString("You can't let go of the ID card!")); return; } UpdateUserInterface(); diff --git a/Content.Server/GameObjects/Components/ActionBlocking/CuffableComponent.cs b/Content.Server/GameObjects/Components/ActionBlocking/CuffableComponent.cs index 890d2d576f..79473ac91c 100644 --- a/Content.Server/GameObjects/Components/ActionBlocking/CuffableComponent.cs +++ b/Content.Server/GameObjects/Components/ActionBlocking/CuffableComponent.cs @@ -4,7 +4,6 @@ using Content.Shared.Interfaces; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; -using Robust.Shared.IoC; using Robust.Shared.Localization; using Content.Server.GameObjects.EntitySystems.DoAfter; using Robust.Shared.ViewVariables; @@ -22,7 +21,6 @@ using Robust.Shared.Maths; using System; using System.Collections.Generic; using Content.Shared.Utility; -using Serilog; using Content.Server.GameObjects.Components.GUI; namespace Content.Server.GameObjects.Components.ActionBlocking @@ -30,9 +28,6 @@ namespace Content.Server.GameObjects.Components.ActionBlocking [RegisterComponent] public class CuffableComponent : SharedCuffableComponent { - [Dependency] - private readonly ISharedNotifyManager _notifyManager; - /// /// How many of this entity's hands are currently cuffed. /// @@ -231,13 +226,13 @@ namespace Content.Server.GameObjects.Components.ActionBlocking if (!isOwner && !ActionBlockerSystem.CanInteract(user)) { - user.PopupMessage(user, Loc.GetString("You can't do that!")); + user.PopupMessage(Loc.GetString("You can't do that!")); return; } if (!isOwner && user.InRangeUnobstructed(Owner, _interactRange)) { - user.PopupMessage(user, Loc.GetString("You are too far away to remove the cuffs.")); + user.PopupMessage(Loc.GetString("You are too far away to remove the cuffs.")); return; } @@ -247,7 +242,7 @@ namespace Content.Server.GameObjects.Components.ActionBlocking return; } - user.PopupMessage(user, Loc.GetString("You start removing the cuffs.")); + user.PopupMessage(Loc.GetString("You start removing the cuffs.")); var audio = EntitySystem.Get(); audio.PlayFromEntity(isOwner ? cuff.StartBreakoutSound : cuff.StartUncuffSound, Owner); @@ -292,29 +287,29 @@ namespace Content.Server.GameObjects.Components.ActionBlocking if (CuffedHandCount == 0) { - _notifyManager.PopupMessage(user, user, Loc.GetString("You successfully remove the cuffs.")); + user.PopupMessage(Loc.GetString("You successfully remove the cuffs.")); if (!isOwner) { - _notifyManager.PopupMessage(user, Owner, Loc.GetString("{0:theName} uncuffs your hands.", user)); + user.PopupMessage(Owner, Loc.GetString("{0:theName} uncuffs your hands.", user)); } } else { if (!isOwner) { - _notifyManager.PopupMessage(user, user, Loc.GetString("You successfully remove the cuffs. {0} of {1:theName}'s hands remain cuffed.", CuffedHandCount, user)); - _notifyManager.PopupMessage(user, Owner, Loc.GetString("{0:theName} removes your cuffs. {1} of your hands remain cuffed.", user, CuffedHandCount)); + user.PopupMessage(Loc.GetString("You successfully remove the cuffs. {0} of {1:theName}'s hands remain cuffed.", CuffedHandCount, user)); + user.PopupMessage(Owner, Loc.GetString("{0:theName} removes your cuffs. {1} of your hands remain cuffed.", user, CuffedHandCount)); } else { - _notifyManager.PopupMessage(user, user, Loc.GetString("You successfully remove the cuffs. {0} of your hands remain cuffed.", CuffedHandCount)); + user.PopupMessage(Loc.GetString("You successfully remove the cuffs. {0} of your hands remain cuffed.", CuffedHandCount)); } } } else { - _notifyManager.PopupMessage(user, user, Loc.GetString("You fail to remove the cuffs.")); + user.PopupMessage(Loc.GetString("You fail to remove the cuffs.")); } return; diff --git a/Content.Server/GameObjects/Components/ActionBlocking/HandcuffComponent.cs b/Content.Server/GameObjects/Components/ActionBlocking/HandcuffComponent.cs index 2f7d8e6aab..8b6f64d098 100644 --- a/Content.Server/GameObjects/Components/ActionBlocking/HandcuffComponent.cs +++ b/Content.Server/GameObjects/Components/ActionBlocking/HandcuffComponent.cs @@ -23,9 +23,6 @@ namespace Content.Server.GameObjects.Components.ActionBlocking [RegisterComponent] public class HandcuffComponent : SharedHandcuffComponent, IAfterInteract { - [Dependency] - private readonly ISharedNotifyManager _notifyManager; - /// /// The time it takes to apply a to an entity. /// @@ -161,36 +158,36 @@ namespace Content.Server.GameObjects.Components.ActionBlocking if (eventArgs.Target == eventArgs.User) { - _notifyManager.PopupMessage(eventArgs.User, eventArgs.User, Loc.GetString("You can't cuff yourself!")); + eventArgs.User.PopupMessage(Loc.GetString("You can't cuff yourself!")); return; } if (Broken) { - _notifyManager.PopupMessage(eventArgs.User, eventArgs.User, Loc.GetString("The cuffs are broken!")); + eventArgs.User.PopupMessage(Loc.GetString("The cuffs are broken!")); return; } if (!eventArgs.Target.TryGetComponent(out var hands)) { - _notifyManager.PopupMessage(eventArgs.User, eventArgs.User, Loc.GetString("{0:theName} has no hands!", eventArgs.Target)); + eventArgs.User.PopupMessage(Loc.GetString("{0:theName} has no hands!", eventArgs.Target)); return; } if (cuffed.CuffedHandCount == hands.Count) { - _notifyManager.PopupMessage(eventArgs.User, eventArgs.User, Loc.GetString("{0:theName} has no free hands to handcuff!", eventArgs.Target)); + eventArgs.User.PopupMessage(Loc.GetString("{0:theName} has no free hands to handcuff!", eventArgs.Target)); return; } if (!eventArgs.InRangeUnobstructed(_interactRange, ignoreInsideBlocker: true)) { - _notifyManager.PopupMessage(eventArgs.User, eventArgs.User, Loc.GetString("You are too far away to use the cuffs!")); + eventArgs.User.PopupMessage(Loc.GetString("You are too far away to use the cuffs!")); return; } - _notifyManager.PopupMessage(eventArgs.User, eventArgs.User, Loc.GetString("You start cuffing {0:theName}.", eventArgs.Target)); - _notifyManager.PopupMessage(eventArgs.User, eventArgs.Target, Loc.GetString("{0:theName} starts cuffing you!", eventArgs.User)); + eventArgs.User.PopupMessage(Loc.GetString("You start cuffing {0:theName}.", eventArgs.Target)); + eventArgs.User.PopupMessage(eventArgs.Target, Loc.GetString("{0:theName} starts cuffing you!", eventArgs.User)); _audioSystem.PlayFromEntity(StartCuffSound, Owner); TryUpdateCuff(eventArgs.User, eventArgs.Target, cuffed); @@ -222,8 +219,8 @@ namespace Content.Server.GameObjects.Components.ActionBlocking if (result != DoAfterStatus.Cancelled) { _audioSystem.PlayFromEntity(EndCuffSound, Owner); - _notifyManager.PopupMessage(user, user, Loc.GetString("You successfully cuff {0:theName}.", target)); - _notifyManager.PopupMessage(target, target, Loc.GetString("You have been cuffed by {0:theName}!", user)); + user.PopupMessage(Loc.GetString("You successfully cuff {0:theName}.", target)); + target.PopupMessage(Loc.GetString("You have been cuffed by {0:theName}!", user)); if (user.TryGetComponent(out var hands)) { @@ -237,8 +234,8 @@ namespace Content.Server.GameObjects.Components.ActionBlocking } else { - user.PopupMessage(user, Loc.GetString("You were interrupted while cuffing {0:theName}!", target)); - target.PopupMessage(target, Loc.GetString("You interrupt {0:theName} while they are cuffing you!", user)); + user.PopupMessage(Loc.GetString("You were interrupted while cuffing {0:theName}!", target)); + target.PopupMessage(Loc.GetString("You interrupt {0:theName} while they are cuffing you!", user)); } } } diff --git a/Content.Server/GameObjects/Components/Atmos/GasAnalyzerComponent.cs b/Content.Server/GameObjects/Components/Atmos/GasAnalyzerComponent.cs index 9c4c0c44d9..58ba7c67eb 100644 --- a/Content.Server/GameObjects/Components/Atmos/GasAnalyzerComponent.cs +++ b/Content.Server/GameObjects/Components/Atmos/GasAnalyzerComponent.cs @@ -1,12 +1,12 @@ #nullable enable using System.Collections.Generic; using Content.Server.GameObjects.EntitySystems; -using Content.Server.Interfaces; using Content.Server.Interfaces.GameObjects.Components.Items; using Content.Server.Utility; using Content.Shared.Atmos; using Content.Shared.GameObjects.Components; using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.Interfaces; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.GameObjects.Components.UserInterface; using Robust.Server.Interfaces.GameObjects; @@ -24,7 +24,6 @@ namespace Content.Server.GameObjects.Components.Atmos [RegisterComponent] public class GasAnalyzerComponent : SharedGasAnalyzerComponent, IAfterInteract, IDropped, IUse { - [Dependency] private readonly IServerNotifyManager _notifyManager = default!; [Dependency] private readonly IMapManager _mapManager = default!; private GasAnalyzerDanger _pressureDanger; @@ -207,17 +206,14 @@ namespace Content.Server.GameObjects.Components.Atmos if (!player.TryGetComponent(out IHandsComponent? handsComponent)) { - _notifyManager.PopupMessage(Owner.Transform.GridPosition, player, - Loc.GetString("You have no hands.")); + Owner.PopupMessage(player, Loc.GetString("You have no hands.")); return; } var activeHandEntity = handsComponent.GetActiveHand?.Owner; if (activeHandEntity == null || !activeHandEntity.TryGetComponent(out GasAnalyzerComponent? gasAnalyzer)) { - _notifyManager.PopupMessage(serverMsg.Session.AttachedEntity, - serverMsg.Session.AttachedEntity, - Loc.GetString("You need a Gas Analyzer in your hand!")); + serverMsg.Session.AttachedEntity.PopupMessage(Loc.GetString("You need a Gas Analyzer in your hand!")); return; } @@ -231,7 +227,7 @@ namespace Content.Server.GameObjects.Components.Atmos { if (!eventArgs.CanReach) { - _notifyManager.PopupMessage(eventArgs.User, eventArgs.User, Loc.GetString("You can't reach there!")); + eventArgs.User.PopupMessage(Loc.GetString("You can't reach there!")); return; } diff --git a/Content.Server/GameObjects/Components/Body/DroppedBodyPartComponent.cs b/Content.Server/GameObjects/Components/Body/DroppedBodyPartComponent.cs index d917459671..8c16794a4f 100644 --- a/Content.Server/GameObjects/Components/Body/DroppedBodyPartComponent.cs +++ b/Content.Server/GameObjects/Components/Body/DroppedBodyPartComponent.cs @@ -1,18 +1,17 @@ #nullable enable using System.Collections.Generic; using System.Linq; -using Content.Shared.Interfaces; using Content.Shared.Interfaces.GameObjects.Components; using Content.Server.Body; using Content.Server.Utility; using Content.Shared.Body.Surgery; +using Content.Shared.Interfaces; using Robust.Server.GameObjects; using Robust.Server.GameObjects.Components.UserInterface; using Robust.Server.Interfaces.GameObjects; using Robust.Server.Interfaces.Player; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; -using Robust.Shared.IoC; using Robust.Shared.Localization; using Robust.Shared.ViewVariables; @@ -24,8 +23,6 @@ namespace Content.Server.GameObjects.Components.Body [RegisterComponent] public class DroppedBodyPartComponent : Component, IAfterInteract, IBodyPartContainer { - [Dependency] private readonly ISharedNotifyManager _sharedNotifyManager = default!; - private readonly Dictionary _optionsCache = new Dictionary(); private BodyManagerComponent? _bodyManagerComponentCache; private int _idHash; @@ -121,7 +118,7 @@ namespace Content.Server.GameObjects.Components.Body } else // If surgery cannot be performed, show message saying so. { - _sharedNotifyManager.PopupMessage(eventArgs.Target, eventArgs.User, + eventArgs.Target.PopupMessage(eventArgs.User, Loc.GetString("You see no way to install {0:theName}.", Owner)); } } @@ -147,7 +144,7 @@ namespace Content.Server.GameObjects.Components.Body // TODO: sanity checks to see whether user is in range, user is still able-bodied, target is still the same, etc etc if (!_optionsCache.TryGetValue(key, out var targetObject)) { - _sharedNotifyManager.PopupMessage(_bodyManagerComponentCache.Owner, _performerCache, + _bodyManagerComponentCache.Owner.PopupMessage(_performerCache, Loc.GetString("You see no useful way to attach {0:theName} anymore.", Owner)); } @@ -163,10 +160,7 @@ namespace Content.Server.GameObjects.Components.Body message = Loc.GetString("You can't attach it!"); } - _sharedNotifyManager.PopupMessage( - _bodyManagerComponentCache.Owner, - _performerCache, - message); + _bodyManagerComponentCache.Owner.PopupMessage(_performerCache, message); } private void OpenSurgeryUI(IPlayerSession session) diff --git a/Content.Server/GameObjects/Components/Body/DroppedMechanismComponent.cs b/Content.Server/GameObjects/Components/Body/DroppedMechanismComponent.cs index 939222ed2e..bc79929d38 100644 --- a/Content.Server/GameObjects/Components/Body/DroppedMechanismComponent.cs +++ b/Content.Server/GameObjects/Components/Body/DroppedMechanismComponent.cs @@ -28,7 +28,6 @@ namespace Content.Server.GameObjects.Components.Body [RegisterComponent] public class DroppedMechanismComponent : Component, IAfterInteract { - [Dependency] private readonly ISharedNotifyManager _sharedNotifyManager = default!; [Dependency] private readonly IPrototypeManager _prototypeManager = default!; public sealed override string Name => "DroppedMechanism"; @@ -67,8 +66,7 @@ namespace Content.Server.GameObjects.Components.Body if (!droppedBodyPart.ContainedBodyPart.TryInstallDroppedMechanism(this)) { - _sharedNotifyManager.PopupMessage(eventArgs.Target, eventArgs.User, - Loc.GetString("You can't fit it in!")); + eventArgs.Target.PopupMessage(eventArgs.User, Loc.GetString("You can't fit it in!")); } } } @@ -141,7 +139,7 @@ namespace Content.Server.GameObjects.Components.Body } else // If surgery cannot be performed, show message saying so. { - _sharedNotifyManager.PopupMessage(eventArgs.Target, eventArgs.User, + eventArgs.Target.PopupMessage(eventArgs.User, Loc.GetString("You see no way to install the {0}.", Owner.Name)); } } @@ -167,7 +165,7 @@ namespace Content.Server.GameObjects.Components.Body // TODO: sanity checks to see whether user is in range, user is still able-bodied, target is still the same, etc etc if (!_optionsCache.TryGetValue(key, out var targetObject)) { - _sharedNotifyManager.PopupMessage(_bodyManagerComponentCache.Owner, _performerCache, + _bodyManagerComponentCache.Owner.PopupMessage(_performerCache, Loc.GetString("You see no useful way to use the {0} anymore.", Owner.Name)); return; } @@ -177,10 +175,7 @@ namespace Content.Server.GameObjects.Components.Body ? Loc.GetString("You jam the {0} inside {1:them}.", ContainedMechanism.Name, _performerCache) : Loc.GetString("You can't fit it in!"); - _sharedNotifyManager.PopupMessage( - _bodyManagerComponentCache.Owner, - _performerCache, - message); + _bodyManagerComponentCache.Owner.PopupMessage(_performerCache, message); // TODO: {1:theName} } diff --git a/Content.Server/GameObjects/Components/Body/SurgeryToolComponent.cs b/Content.Server/GameObjects/Components/Body/SurgeryToolComponent.cs index 0c937b5a12..35057f7381 100644 --- a/Content.Server/GameObjects/Components/Body/SurgeryToolComponent.cs +++ b/Content.Server/GameObjects/Components/Body/SurgeryToolComponent.cs @@ -16,7 +16,6 @@ using Robust.Server.Interfaces.GameObjects; using Robust.Server.Interfaces.Player; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; -using Robust.Shared.IoC; using Robust.Shared.Localization; using Robust.Shared.Log; using Robust.Shared.Serialization; @@ -34,8 +33,6 @@ namespace Content.Server.GameObjects.Components.Body [RegisterComponent] public class SurgeryToolComponent : Component, ISurgeon, IAfterInteract { - [Dependency] private readonly ISharedNotifyManager _sharedNotifyManager = default!; - public override string Name => "SurgeryTool"; public override uint? NetID => ContentNetIDs.SURGERY; @@ -259,9 +256,7 @@ namespace Content.Server.GameObjects.Components.Body return; } - _sharedNotifyManager.PopupMessage( - _bodyManagerComponentCache.Owner, - _performerCache, + _bodyManagerComponentCache.Owner.PopupMessage(_performerCache, Loc.GetString("You see no useful way to use {0:theName}.", Owner)); } @@ -272,9 +267,7 @@ namespace Content.Server.GameObjects.Components.Body return; } - _sharedNotifyManager.PopupMessage( - _bodyManagerComponentCache.Owner, - _performerCache, + _bodyManagerComponentCache.Owner.PopupMessage(_performerCache, Loc.GetString("You see no useful way to use {0:theName} anymore.", Owner)); } diff --git a/Content.Server/GameObjects/Components/Buckle/BuckleComponent.cs b/Content.Server/GameObjects/Components/Buckle/BuckleComponent.cs index e46b2c576b..275cf751bd 100644 --- a/Content.Server/GameObjects/Components/Buckle/BuckleComponent.cs +++ b/Content.Server/GameObjects/Components/Buckle/BuckleComponent.cs @@ -6,12 +6,12 @@ using Content.Server.GameObjects.Components.Mobs; using Content.Server.GameObjects.Components.Mobs.State; using Content.Server.GameObjects.Components.Strap; using Content.Server.GameObjects.EntitySystems; -using Content.Server.Interfaces; using Content.Shared.GameObjects.Components.Buckle; using Content.Shared.GameObjects.Components.Mobs; using Content.Shared.GameObjects.Components.Strap; using Content.Shared.GameObjects.EntitySystems; using Content.Shared.GameObjects.Verbs; +using Content.Shared.Interfaces; using Content.Shared.Interfaces.GameObjects.Components; using Content.Shared.Utility; using Robust.Server.GameObjects; @@ -38,7 +38,6 @@ namespace Content.Server.GameObjects.Components.Buckle [Dependency] private readonly IEntityManager _entityManager = default!; [Dependency] private readonly IEntitySystemManager _entitySystem = default!; [Dependency] private readonly IGameTiming _gameTiming = default!; - [Dependency] private readonly IServerNotifyManager _notifyManager = default!; [Dependency] private readonly IMapManager _mapManager = default!; private int _size; @@ -174,18 +173,16 @@ namespace Content.Server.GameObjects.Components.Buckle if (!ActionBlockerSystem.CanInteract(user)) { - _notifyManager.PopupMessage(user, user, - Loc.GetString("You can't do that!")); - + user.PopupMessage(Loc.GetString("You can't do that!")); return false; } if (!to.TryGetComponent(out strap)) { - _notifyManager.PopupMessage(Owner, user, - Loc.GetString(Owner == user - ? "You can't buckle yourself there!" - : "You can't buckle {0:them} there!", Owner)); + var message = Loc.GetString(Owner == user + ? "You can't buckle yourself there!" + : "You can't buckle {0:them} there!", Owner); + Owner.PopupMessage(user, message); return false; } @@ -195,8 +192,7 @@ namespace Content.Server.GameObjects.Components.Buckle if (!Owner.InRangeUnobstructed(strap, _range, predicate: Ignored, popup: true)) { - _notifyManager.PopupMessage(strap.Owner, user, - Loc.GetString("You can't reach there!")); + strap.Owner.PopupMessage(user, Loc.GetString("You can't reach there!")); return false; } @@ -208,7 +204,7 @@ namespace Content.Server.GameObjects.Components.Buckle if (!ContainerHelpers.TryGetContainer(strap.Owner, out var strapContainer) || ownerContainer != strapContainer) { - _notifyManager.PopupMessage(strap.Owner, user, Loc.GetString("You can't reach there!")); + strap.Owner.PopupMessage(user, Loc.GetString("You can't reach there!")); return false; } @@ -216,18 +212,16 @@ namespace Content.Server.GameObjects.Components.Buckle if (!user.HasComponent()) { - _notifyManager.PopupMessage(user, user, - Loc.GetString("You don't have hands!")); - + user.PopupMessage(Loc.GetString("You don't have hands!")); return false; } if (Buckled) { - _notifyManager.PopupMessage(Owner, user, - Loc.GetString(Owner == user - ? "You are already buckled in!" - : "{0:They} are already buckled in!", Owner)); + var message = Loc.GetString(Owner == user + ? "You are already buckled in!" + : "{0:They} are already buckled in!", Owner); + Owner.PopupMessage(user, message); return false; } @@ -237,10 +231,10 @@ namespace Content.Server.GameObjects.Components.Buckle { if (parent == user.Transform) { - _notifyManager.PopupMessage(Owner, user, - Loc.GetString(Owner == user - ? "You can't buckle yourself there!" - : "You can't buckle {0:them} there!", Owner)); + var message = Loc.GetString(Owner == user + ? "You can't buckle yourself there!" + : "You can't buckle {0:them} there!", Owner); + Owner.PopupMessage(user, message); return false; } @@ -250,10 +244,10 @@ namespace Content.Server.GameObjects.Components.Buckle if (!strap.HasSpace(this)) { - _notifyManager.PopupMessage(Owner, user, - Loc.GetString(Owner == user - ? "You can't fit there!" - : "{0:They} can't fit there!", Owner)); + var message = Loc.GetString(Owner == user + ? "You can't fit there!" + : "{0:They} can't fit there!", Owner); + Owner.PopupMessage(user, message); return false; } @@ -284,10 +278,10 @@ namespace Content.Server.GameObjects.Components.Buckle if (!strap.TryAdd(this)) { - _notifyManager.PopupMessage(Owner, user, - Loc.GetString(Owner == user - ? "You can't buckle yourself there!" - : "You can't buckle {0:them} there!", Owner)); + var message = Loc.GetString(Owner == user + ? "You can't buckle yourself there!" + : "You can't buckle {0:them} there!", Owner); + Owner.PopupMessage(user, message); return false; } @@ -338,8 +332,7 @@ namespace Content.Server.GameObjects.Components.Buckle if (!ActionBlockerSystem.CanInteract(user)) { - _notifyManager.PopupMessage(user, user, - Loc.GetString("You can't do that!")); + user.PopupMessage(Loc.GetString("You can't do that!")); return false; } diff --git a/Content.Server/GameObjects/Components/Chemistry/ChemMasterComponent.cs b/Content.Server/GameObjects/Components/Chemistry/ChemMasterComponent.cs index c3a7dc4764..208392e4c6 100644 --- a/Content.Server/GameObjects/Components/Chemistry/ChemMasterComponent.cs +++ b/Content.Server/GameObjects/Components/Chemistry/ChemMasterComponent.cs @@ -7,12 +7,12 @@ using Content.Server.GameObjects.Components.GUI; using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.GameObjects.Components.Power.ApcNetComponents; using Content.Server.GameObjects.EntitySystems; -using Content.Server.Interfaces; using Content.Server.Interfaces.GameObjects.Components.Items; using Content.Server.Utility; using Content.Shared.Chemistry; using Content.Shared.GameObjects.Components.Chemistry.ChemMaster; using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.Interfaces; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.GameObjects.Components.Container; using Robust.Server.GameObjects.Components.UserInterface; @@ -43,8 +43,6 @@ namespace Content.Server.GameObjects.Components.Chemistry [ComponentReference(typeof(IInteractUsing))] public class ChemMasterComponent : SharedChemMasterComponent, IActivate, IInteractUsing, ISolutionChange { - [Dependency] private readonly IServerNotifyManager _notifyManager = default!; - [ViewVariables] private ContainerSlot _beakerContainer = default!; [ViewVariables] private string _packPrototypeId = ""; @@ -367,8 +365,7 @@ namespace Content.Server.GameObjects.Components.Chemistry if (!args.User.TryGetComponent(out IHandsComponent? hands)) { - _notifyManager.PopupMessage(Owner.Transform.GridPosition, args.User, - Loc.GetString("You have no hands.")); + Owner.PopupMessage(args.User, Loc.GetString("You have no hands.")); return; } @@ -390,15 +387,13 @@ namespace Content.Server.GameObjects.Components.Chemistry { if (!args.User.TryGetComponent(out IHandsComponent? hands)) { - _notifyManager.PopupMessage(Owner.Transform.GridPosition, args.User, - Loc.GetString("You have no hands.")); + Owner.PopupMessage(args.User, Loc.GetString("You have no hands.")); return true; } if (hands.GetActiveHand == null) { - _notifyManager.PopupMessage(Owner.Transform.GridPosition, args.User, - Loc.GetString("You have nothing on your hand.")); + Owner.PopupMessage(args.User, Loc.GetString("You have nothing on your hand.")); return false; } @@ -407,14 +402,12 @@ namespace Content.Server.GameObjects.Components.Chemistry { if (HasBeaker) { - _notifyManager.PopupMessage(Owner.Transform.GridPosition, args.User, - Loc.GetString("This ChemMaster already has a container in it.")); + Owner.PopupMessage(args.User, Loc.GetString("This ChemMaster already has a container in it.")); } else if ((solution.Capabilities & SolutionCaps.FitsInDispenser) == 0) //Close enough to a chem master... { //If it can't fit in the chem master, don't put it in. For example, buckets and mop buckets can't fit. - _notifyManager.PopupMessage(Owner.Transform.GridPosition, args.User, - Loc.GetString("That can't fit in the ChemMaster.")); + Owner.PopupMessage(args.User, Loc.GetString("That can't fit in the ChemMaster.")); } else { @@ -424,8 +417,7 @@ namespace Content.Server.GameObjects.Components.Chemistry } else { - _notifyManager.PopupMessage(Owner.Transform.GridPosition, args.User, - Loc.GetString("You can't put this in the ChemMaster.")); + Owner.PopupMessage(args.User, Loc.GetString("You can't put this in the ChemMaster.")); } return true; @@ -435,7 +427,6 @@ namespace Content.Server.GameObjects.Components.Chemistry private void ClickSound() { - EntitySystem.Get().PlayFromEntity("/Audio/Machines/machine_switch.ogg", Owner, AudioParams.Default.WithVolume(-2f)); } } diff --git a/Content.Server/GameObjects/Components/Chemistry/InjectorComponent.cs b/Content.Server/GameObjects/Components/Chemistry/InjectorComponent.cs index d081e498a9..d315ffcceb 100644 --- a/Content.Server/GameObjects/Components/Chemistry/InjectorComponent.cs +++ b/Content.Server/GameObjects/Components/Chemistry/InjectorComponent.cs @@ -1,14 +1,13 @@ #nullable enable using System; using Content.Server.GameObjects.Components.Body.Circulatory; -using Content.Server.Interfaces; using Content.Shared.Chemistry; using Content.Shared.GameObjects.Components.Chemistry; +using Content.Shared.Interfaces; using Content.Shared.Interfaces.GameObjects.Components; using Content.Shared.Utility; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; -using Robust.Shared.IoC; using Robust.Shared.Localization; using Robust.Shared.Serialization; using Robust.Shared.ViewVariables; @@ -23,8 +22,6 @@ namespace Content.Server.GameObjects.Components.Chemistry [RegisterComponent] public class InjectorComponent : SharedInjectorComponent, IAfterInteract, IUse { - [Dependency] private readonly IServerNotifyManager _notifyManager = default!; - /// /// Whether or not the injector is able to draw from containers or if it's a single use /// device that can only inject. @@ -100,7 +97,7 @@ namespace Content.Server.GameObjects.Components.Chemistry throw new ArgumentOutOfRangeException(); } - _notifyManager.PopupMessage(Owner, user, Loc.GetString(msg)); + Owner.PopupMessage(user, Loc.GetString(msg)); Dirty(); } @@ -165,8 +162,7 @@ namespace Content.Server.GameObjects.Components.Chemistry var realTransferAmount = ReagentUnit.Min(_transferAmount, targetBloodstream.EmptyVolume); if (realTransferAmount <= 0) { - _notifyManager.PopupMessage(Owner.Transform.GridPosition, user, - Loc.GetString("Container full.")); + Owner.PopupMessage(user, Loc.GetString("Container full.")); return; } @@ -177,8 +173,7 @@ namespace Content.Server.GameObjects.Components.Chemistry return; } - _notifyManager.PopupMessage(Owner.Transform.GridPosition, user, - Loc.GetString("Injected {0}u", removedSolution.TotalVolume)); + Owner.PopupMessage(user, Loc.GetString("Injected {0}u", removedSolution.TotalVolume)); Dirty(); } @@ -194,8 +189,7 @@ namespace Content.Server.GameObjects.Components.Chemistry var realTransferAmount = ReagentUnit.Min(_transferAmount, targetSolution.EmptyVolume); if (realTransferAmount <= 0) { - _notifyManager.PopupMessage(Owner.Transform.GridPosition, user, - Loc.GetString("Container full.")); + Owner.PopupMessage(user, Loc.GetString("Container full.")); return; } @@ -206,8 +200,7 @@ namespace Content.Server.GameObjects.Components.Chemistry return; } - _notifyManager.PopupMessage(Owner.Transform.GridPosition, user, - Loc.GetString("Injected {0}u", removedSolution.TotalVolume)); + Owner.PopupMessage(user, Loc.GetString("Injected {0}u", removedSolution.TotalVolume)); Dirty(); } @@ -223,8 +216,7 @@ namespace Content.Server.GameObjects.Components.Chemistry var realTransferAmount = ReagentUnit.Min(_transferAmount, targetSolution.CurrentVolume); if (realTransferAmount <= 0) { - _notifyManager.PopupMessage(Owner.Transform.GridPosition, user, - Loc.GetString("Container empty")); + Owner.PopupMessage(user, Loc.GetString("Container empty")); return; } @@ -235,8 +227,7 @@ namespace Content.Server.GameObjects.Components.Chemistry return; } - _notifyManager.PopupMessage(Owner.Transform.GridPosition, user, - Loc.GetString("Drew {0}u", removedSolution.TotalVolume)); + Owner.PopupMessage(user, Loc.GetString("Drew {0}u", removedSolution.TotalVolume)); Dirty(); } diff --git a/Content.Server/GameObjects/Components/Chemistry/PourableComponent.cs b/Content.Server/GameObjects/Components/Chemistry/PourableComponent.cs index 1a507f2bcb..7f23b562df 100644 --- a/Content.Server/GameObjects/Components/Chemistry/PourableComponent.cs +++ b/Content.Server/GameObjects/Components/Chemistry/PourableComponent.cs @@ -1,9 +1,8 @@ using System.Threading.Tasks; -using Content.Server.Interfaces; using Content.Shared.Chemistry; +using Content.Shared.Interfaces; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Shared.GameObjects; -using Robust.Shared.IoC; using Robust.Shared.Localization; using Robust.Shared.Serialization; using Robust.Shared.ViewVariables; @@ -19,8 +18,6 @@ namespace Content.Server.GameObjects.Components.Chemistry [RegisterComponent] class PourableComponent : Component, IInteractUsing { - [Dependency] private readonly IServerNotifyManager _notifyManager = default!; - public override string Name => "Pourable"; private ReagentUnit _transferAmount; @@ -87,8 +84,7 @@ namespace Content.Server.GameObjects.Components.Chemistry var realTransferAmount = ReagentUnit.Min(fromPourable.TransferAmount, toSolution.EmptyVolume); if (realTransferAmount <= 0) //Special message if container is full { - _notifyManager.PopupMessage(Owner.Transform.GridPosition, eventArgs.User, - Loc.GetString("Container is full")); + Owner.PopupMessage(eventArgs.User, Loc.GetString("Container is full")); return false; } @@ -97,8 +93,7 @@ namespace Content.Server.GameObjects.Components.Chemistry if (!toSolution.TryAddSolution(removedSolution)) return false; - _notifyManager.PopupMessage(Owner.Transform.GridPosition, eventArgs.User, - Loc.GetString("Transferred {0}u", removedSolution.TotalVolume)); + Owner.PopupMessage(eventArgs.User, Loc.GetString("Transferred {0}u", removedSolution.TotalVolume)); return true; } diff --git a/Content.Server/GameObjects/Components/Chemistry/ReagentDispenserComponent.cs b/Content.Server/GameObjects/Components/Chemistry/ReagentDispenserComponent.cs index 3ec235caf7..24c29dfac2 100644 --- a/Content.Server/GameObjects/Components/Chemistry/ReagentDispenserComponent.cs +++ b/Content.Server/GameObjects/Components/Chemistry/ReagentDispenserComponent.cs @@ -6,12 +6,12 @@ using Content.Server.GameObjects.Components.GUI; using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.GameObjects.Components.Power.ApcNetComponents; using Content.Server.GameObjects.EntitySystems; -using Content.Server.Interfaces; using Content.Server.Interfaces.GameObjects.Components.Items; using Content.Server.Utility; using Content.Shared.Chemistry; using Content.Shared.GameObjects.Components.Chemistry.ReagentDispenser; using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.Interfaces; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.GameObjects.Components.Container; using Robust.Server.GameObjects.Components.UserInterface; @@ -40,8 +40,6 @@ namespace Content.Server.GameObjects.Components.Chemistry [ComponentReference(typeof(IInteractUsing))] public class ReagentDispenserComponent : SharedReagentDispenserComponent, IActivate, IInteractUsing, ISolutionChange { - [Dependency] private readonly IServerNotifyManager _notifyManager = default!; - [ViewVariables] private ContainerSlot _beakerContainer = default!; [ViewVariables] private string _packPrototypeId = ""; @@ -280,8 +278,7 @@ namespace Content.Server.GameObjects.Components.Chemistry if (!args.User.TryGetComponent(out IHandsComponent? hands)) { - _notifyManager.PopupMessage(Owner.Transform.GridPosition, args.User, - Loc.GetString("You have no hands.")); + Owner.PopupMessage(args.User, Loc.GetString("You have no hands.")); return; } @@ -303,15 +300,13 @@ namespace Content.Server.GameObjects.Components.Chemistry { if (!args.User.TryGetComponent(out IHandsComponent? hands)) { - _notifyManager.PopupMessage(Owner.Transform.GridPosition, args.User, - Loc.GetString("You have no hands.")); + Owner.PopupMessage(args.User, Loc.GetString("You have no hands.")); return true; } if (hands.GetActiveHand == null) { - _notifyManager.PopupMessage(Owner.Transform.GridPosition, args.User, - Loc.GetString("You have nothing on your hand.")); + Owner.PopupMessage(args.User, Loc.GetString("You have nothing on your hand.")); return false; } @@ -320,14 +315,12 @@ namespace Content.Server.GameObjects.Components.Chemistry { if (HasBeaker) { - _notifyManager.PopupMessage(Owner.Transform.GridPosition, args.User, - Loc.GetString("This dispenser already has a container in it.")); + Owner.PopupMessage(args.User, Loc.GetString("This dispenser already has a container in it.")); } else if ((solution.Capabilities & SolutionCaps.FitsInDispenser) == 0) { //If it can't fit in the dispenser, don't put it in. For example, buckets and mop buckets can't fit. - _notifyManager.PopupMessage(Owner.Transform.GridPosition, args.User, - Loc.GetString("That can't fit in the dispenser.")); + Owner.PopupMessage(args.User, Loc.GetString("That can't fit in the dispenser.")); } else { @@ -337,8 +330,7 @@ namespace Content.Server.GameObjects.Components.Chemistry } else { - _notifyManager.PopupMessage(Owner.Transform.GridPosition, args.User, - Loc.GetString("You can't put this in the dispenser.")); + Owner.PopupMessage(args.User, Loc.GetString("You can't put this in the dispenser.")); } return true; @@ -348,11 +340,8 @@ namespace Content.Server.GameObjects.Components.Chemistry private void ClickSound() { - EntitySystem.Get().PlayFromEntity("/Audio/Machines/machine_switch.ogg", Owner, AudioParams.Default.WithVolume(-2f)); } - - } } diff --git a/Content.Server/GameObjects/Components/Conveyor/ConveyorSwitchComponent.cs b/Content.Server/GameObjects/Components/Conveyor/ConveyorSwitchComponent.cs index ae5e2c3aa1..48edea9ccd 100644 --- a/Content.Server/GameObjects/Components/Conveyor/ConveyorSwitchComponent.cs +++ b/Content.Server/GameObjects/Components/Conveyor/ConveyorSwitchComponent.cs @@ -81,7 +81,7 @@ namespace Content.Server.GameObjects.Components.Conveyor } _group.AddConveyor(conveyor); - user?.PopupMessage(user, Loc.GetString("Conveyor linked.")); + user?.PopupMessage(Loc.GetString("Conveyor linked.")); } /// diff --git a/Content.Server/GameObjects/Components/Disposal/DisposalRouterComponent.cs b/Content.Server/GameObjects/Components/Disposal/DisposalRouterComponent.cs index 6cf6689e75..b615510c93 100644 --- a/Content.Server/GameObjects/Components/Disposal/DisposalRouterComponent.cs +++ b/Content.Server/GameObjects/Components/Disposal/DisposalRouterComponent.cs @@ -1,5 +1,4 @@ #nullable enable -using Content.Server.Interfaces; using Content.Server.Interfaces.GameObjects.Components.Items; using Content.Shared.GameObjects.EntitySystems; using Content.Shared.Interfaces.GameObjects.Components; @@ -11,13 +10,13 @@ using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Components; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; -using Robust.Shared.IoC; using Robust.Shared.Localization; using Robust.Shared.Maths; using Robust.Shared.ViewVariables; using System; using System.Collections.Generic; using Content.Server.Utility; +using Content.Shared.Interfaces; using static Content.Shared.GameObjects.Components.Disposal.SharedDisposalRouterComponent; namespace Content.Server.GameObjects.Components.Disposal @@ -27,7 +26,6 @@ namespace Content.Server.GameObjects.Components.Disposal [ComponentReference(typeof(IDisposalTubeComponent))] public class DisposalRouterComponent : DisposalJunctionComponent, IActivate { - [Dependency] private readonly IServerNotifyManager _notifyManager = default!; public override string Name => "DisposalRouter"; [ViewVariables] @@ -160,8 +158,7 @@ namespace Content.Server.GameObjects.Components.Disposal if (!args.User.TryGetComponent(out IHandsComponent? hands)) { - _notifyManager.PopupMessage(Owner.Transform.GridPosition, args.User, - Loc.GetString("You have no hands.")); + Owner.PopupMessage(args.User, Loc.GetString("You have no hands.")); return; } diff --git a/Content.Server/GameObjects/Components/Disposal/DisposalTaggerComponent.cs b/Content.Server/GameObjects/Components/Disposal/DisposalTaggerComponent.cs index 76d913e2cf..ce14df749d 100644 --- a/Content.Server/GameObjects/Components/Disposal/DisposalTaggerComponent.cs +++ b/Content.Server/GameObjects/Components/Disposal/DisposalTaggerComponent.cs @@ -1,8 +1,8 @@ #nullable enable -using Content.Server.Interfaces; using Content.Server.Interfaces.GameObjects.Components.Items; using Content.Server.Utility; using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.Interfaces; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.GameObjects.Components.UserInterface; using Robust.Server.GameObjects.EntitySystems; @@ -12,7 +12,6 @@ using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Components; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; -using Robust.Shared.IoC; using Robust.Shared.Localization; using Robust.Shared.Maths; using Robust.Shared.ViewVariables; @@ -25,7 +24,6 @@ namespace Content.Server.GameObjects.Components.Disposal [ComponentReference(typeof(IDisposalTubeComponent))] public class DisposalTaggerComponent : DisposalTransitComponent, IActivate { - [Dependency] private readonly IServerNotifyManager _notifyManager = default!; public override string Name => "DisposalTagger"; [ViewVariables(VVAccess.ReadWrite)] @@ -128,8 +126,7 @@ namespace Content.Server.GameObjects.Components.Disposal if (!args.User.TryGetComponent(out IHandsComponent? hands)) { - _notifyManager.PopupMessage(Owner.Transform.GridPosition, args.User, - Loc.GetString("You have no hands.")); + Owner.PopupMessage(args.User, Loc.GetString("You have no hands.")); return; } diff --git a/Content.Server/GameObjects/Components/Disposal/DisposalUnitComponent.cs b/Content.Server/GameObjects/Components/Disposal/DisposalUnitComponent.cs index ad43b62def..634a55b002 100644 --- a/Content.Server/GameObjects/Components/Disposal/DisposalUnitComponent.cs +++ b/Content.Server/GameObjects/Components/Disposal/DisposalUnitComponent.cs @@ -8,13 +8,13 @@ using Content.Server.GameObjects.Components.GUI; using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.GameObjects.Components.Power.ApcNetComponents; using Content.Server.GameObjects.EntitySystems.DoAfter; -using Content.Server.Interfaces; using Content.Server.Interfaces.GameObjects.Components.Items; using Content.Server.Utility; using Content.Shared.GameObjects.Components.Body; using Content.Shared.GameObjects.Components.Disposal; using Content.Shared.GameObjects.EntitySystems; using Content.Shared.GameObjects.Verbs; +using Content.Shared.Interfaces; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.GameObjects; using Robust.Server.GameObjects.Components.Container; @@ -43,7 +43,6 @@ namespace Content.Server.GameObjects.Components.Disposal [ComponentReference(typeof(IInteractUsing))] public class DisposalUnitComponent : SharedDisposalUnitComponent, IInteractHand, IInteractUsing, IDragDropOn { - [Dependency] private readonly IServerNotifyManager _notifyManager = default!; [Dependency] private readonly IGameTiming _gameTiming = default!; public override string Name => "DisposalUnit"; @@ -614,15 +613,13 @@ namespace Content.Server.GameObjects.Components.Disposal { if (!ActionBlockerSystem.CanInteract(eventArgs.User)) { - _notifyManager.PopupMessage(Owner.Transform.GridPosition, eventArgs.User, - Loc.GetString("You can't do that!")); + Owner.PopupMessage(eventArgs.User, Loc.GetString("You can't do that!")); return false; } if (ContainerHelpers.IsInContainer(eventArgs.User)) { - _notifyManager.PopupMessage(Owner.Transform.GridPosition, eventArgs.User, - Loc.GetString("You can't reach there!")); + Owner.PopupMessage(eventArgs.User, Loc.GetString("You can't reach there!")); return false; } @@ -633,8 +630,7 @@ namespace Content.Server.GameObjects.Components.Disposal if (!eventArgs.User.HasComponent()) { - _notifyManager.PopupMessage(Owner.Transform.GridPosition, eventArgs.User, - Loc.GetString("You have no hands!")); + Owner.PopupMessage(eventArgs.User, Loc.GetString("You have no hands!")); return false; } diff --git a/Content.Server/GameObjects/Components/Doors/AirlockComponent.cs b/Content.Server/GameObjects/Components/Doors/AirlockComponent.cs index ab58e2461c..64652f456f 100644 --- a/Content.Server/GameObjects/Components/Doors/AirlockComponent.cs +++ b/Content.Server/GameObjects/Components/Doors/AirlockComponent.cs @@ -8,6 +8,7 @@ using Content.Server.GameObjects.Components.VendingMachines; using Content.Server.Interfaces; using Content.Shared.GameObjects.Components.Doors; using Content.Shared.GameObjects.Components.Interactable; +using Content.Shared.Interfaces; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.GameObjects; using Robust.Server.GameObjects.EntitySystems; @@ -438,16 +439,14 @@ namespace Content.Server.GameObjects.Components.Doors { if (IsBolted()) { - var notify = IoCManager.Resolve(); - notify.PopupMessage(Owner, eventArgs.User, + Owner.PopupMessage(eventArgs.User, Loc.GetString("The airlock's bolts prevent it from being forced!")); return false; } if (IsPowered()) { - var notify = IoCManager.Resolve(); - notify.PopupMessage(Owner, eventArgs.User, Loc.GetString("The powered motors block your efforts!")); + Owner.PopupMessage(eventArgs.User, Loc.GetString("The powered motors block your efforts!")); return false; } diff --git a/Content.Server/GameObjects/Components/Fluids/SprayComponent.cs b/Content.Server/GameObjects/Components/Fluids/SprayComponent.cs index e10ae9c7df..598bb16a6a 100644 --- a/Content.Server/GameObjects/Components/Fluids/SprayComponent.cs +++ b/Content.Server/GameObjects/Components/Fluids/SprayComponent.cs @@ -1,6 +1,6 @@ using Content.Server.GameObjects.Components.Chemistry; -using Content.Server.Interfaces; using Content.Shared.Chemistry; +using Content.Shared.Interfaces; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.GameObjects.EntitySystems; using Robust.Server.Interfaces.GameObjects; @@ -17,7 +17,6 @@ namespace Content.Server.GameObjects.Components.Fluids [RegisterComponent] class SprayComponent : Component, IAfterInteract { - [Dependency] private readonly IServerNotifyManager _notifyManager = default!; [Dependency] private readonly IServerEntityManager _serverEntityManager = default!; public override string Name => "Spray"; @@ -71,7 +70,7 @@ namespace Content.Server.GameObjects.Components.Fluids { if (CurrentVolume <= 0) { - _notifyManager.PopupMessage(Owner, eventArgs.User, Loc.GetString("It's empty!")); + Owner.PopupMessage(eventArgs.User, Loc.GetString("It's empty!")); return; } diff --git a/Content.Server/GameObjects/Components/GUI/InventoryComponent.cs b/Content.Server/GameObjects/Components/GUI/InventoryComponent.cs index bc58b80601..13353f664d 100644 --- a/Content.Server/GameObjects/Components/GUI/InventoryComponent.cs +++ b/Content.Server/GameObjects/Components/GUI/InventoryComponent.cs @@ -3,12 +3,11 @@ using System.Collections.Generic; using System.Linq; using Content.Server.GameObjects.Components.Items.Clothing; using Content.Server.GameObjects.Components.Items.Storage; -using Content.Server.GameObjects.EntitySystems; using Content.Server.GameObjects.EntitySystems.Click; -using Content.Server.Interfaces; using Content.Server.Interfaces.GameObjects; using Content.Shared.GameObjects.Components.Inventory; using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.Interfaces; using Robust.Server.GameObjects.Components.Container; using Robust.Shared.Containers; using Robust.Shared.GameObjects; @@ -29,7 +28,6 @@ namespace Content.Server.GameObjects.Components.GUI public class InventoryComponent : SharedInventoryComponent, IExAct, IEffectBlocker, IPressureProtection { [Dependency] private readonly IEntitySystemManager _entitySystemManager = default!; - [Dependency] private readonly IServerNotifyManager _serverNotifyManager = default!; [ViewVariables] private readonly Dictionary _slotContainers = new Dictionary(); @@ -432,7 +430,7 @@ namespace Content.Server.GameObjects.Components.GUI hands.PutInHand(clothing); if (reason != null) - _serverNotifyManager.PopupMessageCursor(Owner, reason); + Owner.PopupMessageCursor(reason); } } break; diff --git a/Content.Server/GameObjects/Components/GUI/StrippableComponent.cs b/Content.Server/GameObjects/Components/GUI/StrippableComponent.cs index fc54344448..d43600f803 100644 --- a/Content.Server/GameObjects/Components/GUI/StrippableComponent.cs +++ b/Content.Server/GameObjects/Components/GUI/StrippableComponent.cs @@ -1,15 +1,14 @@ #nullable enable using System.Collections.Generic; -using System.Linq; using System.Threading; using Content.Server.GameObjects.Components.ActionBlocking; using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.GameObjects.EntitySystems.DoAfter; -using Content.Server.Interfaces; using Content.Server.Utility; using Content.Shared.GameObjects.Components.GUI; using Content.Shared.GameObjects.EntitySystems; using Content.Shared.GameObjects.Verbs; +using Content.Shared.Interfaces; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.GameObjects.Components.UserInterface; using Robust.Server.Interfaces.GameObjects; @@ -17,7 +16,6 @@ using Robust.Server.Interfaces.Player; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; -using Robust.Shared.IoC; using Robust.Shared.Localization; using Robust.Shared.ViewVariables; using static Content.Shared.GameObjects.Components.Inventory.EquipmentSlotDefines; @@ -27,11 +25,9 @@ namespace Content.Server.GameObjects.Components.GUI [RegisterComponent] public sealed class StrippableComponent : SharedStrippableComponent, IDragDrop { - [Dependency] private readonly IServerNotifyManager _notifyManager = default!; - public const float StripDelay = 2f; - [ViewVariables] + [ViewVariables] private BoundUserInterface? UserInterface => Owner.GetUIOrNull(StrippingUiKey.Key); public override void Initialize() @@ -46,7 +42,7 @@ namespace Content.Server.GameObjects.Components.GUI Owner.EnsureComponent(); Owner.EnsureComponent(); Owner.EnsureComponent(); - + if (Owner.TryGetComponent(out CuffableComponent? cuffed)) { cuffed.OnCuffedStateChanged += UpdateSubscribed; @@ -104,7 +100,7 @@ namespace Content.Server.GameObjects.Components.GUI private Dictionary GetHandcuffs() { var dictionary = new Dictionary(); - + if (!Owner.TryGetComponent(out CuffableComponent? cuffed)) { return dictionary; @@ -173,13 +169,13 @@ namespace Content.Server.GameObjects.Components.GUI if (item == null) { - _notifyManager.PopupMessageCursor(user, Loc.GetString("You aren't holding anything!")); + user.PopupMessageCursor(Loc.GetString("You aren't holding anything!")); return false; } if (!userHands.CanDrop(userHands.ActiveHand!)) { - _notifyManager.PopupMessageCursor(user, Loc.GetString("You can't drop that!")); + user.PopupMessageCursor(Loc.GetString("You can't drop that!")); return false; } @@ -188,13 +184,13 @@ namespace Content.Server.GameObjects.Components.GUI if (inventory.TryGetSlotItem(slot, out ItemComponent _)) { - _notifyManager.PopupMessageCursor(user, Loc.GetString("{0:They} already {0:have} something there!", Owner)); + user.PopupMessageCursor(Loc.GetString("{0:They} already {0:have} something there!", Owner)); return false; } if (!inventory.CanEquip(slot, item, false)) { - _notifyManager.PopupMessageCursor(user, Loc.GetString("{0:They} cannot equip that there!", Owner)); + user.PopupMessageCursor(Loc.GetString("{0:They} cannot equip that there!", Owner)); return false; } @@ -238,13 +234,13 @@ namespace Content.Server.GameObjects.Components.GUI if (item == null) { - _notifyManager.PopupMessageCursor(user, Loc.GetString("You aren't holding anything!")); + user.PopupMessageCursor(Loc.GetString("You aren't holding anything!")); return false; } if (!userHands.CanDrop(userHands.ActiveHand!)) { - _notifyManager.PopupMessageCursor(user, Loc.GetString("You can't drop that!")); + user.PopupMessageCursor(Loc.GetString("You can't drop that!")); return false; } @@ -253,13 +249,13 @@ namespace Content.Server.GameObjects.Components.GUI if (hands.TryGetItem(hand, out var _)) { - _notifyManager.PopupMessageCursor(user, Loc.GetString("{0:They} already {0:have} something there!", Owner)); + user.PopupMessageCursor(Loc.GetString("{0:They} already {0:have} something there!", Owner)); return false; } if (!hands.CanPutInHand(item, hand, false)) { - _notifyManager.PopupMessageCursor(user, Loc.GetString("{0:They} cannot put that there!", Owner)); + user.PopupMessageCursor(Loc.GetString("{0:They} cannot put that there!", Owner)); return false; } @@ -304,13 +300,13 @@ namespace Content.Server.GameObjects.Components.GUI if (!inventory.TryGetSlotItem(slot, out ItemComponent itemToTake)) { - _notifyManager.PopupMessageCursor(user, Loc.GetString("{0:They} {0:have} nothing there!", Owner)); + user.PopupMessageCursor(Loc.GetString("{0:They} {0:have} nothing there!", Owner)); return false; } if (!inventory.CanUnequip(slot, false)) { - _notifyManager.PopupMessageCursor(user, Loc.GetString("{0:They} cannot unequip that!", Owner)); + user.PopupMessageCursor(Loc.GetString("{0:They} cannot unequip that!", Owner)); return false; } @@ -355,13 +351,13 @@ namespace Content.Server.GameObjects.Components.GUI if (!hands.TryGetItem(hand, out var heldItem)) { - _notifyManager.PopupMessageCursor(user, Loc.GetString("{0:They} {0:have} nothing there!", Owner)); + user.PopupMessageCursor(Loc.GetString("{0:They} {0:have} nothing there!", Owner)); return false; } if (!hands.CanDrop(hand, false)) { - _notifyManager.PopupMessageCursor(user, Loc.GetString("{0:They} cannot drop that!", Owner)); + user.PopupMessageCursor(Loc.GetString("{0:They} cannot drop that!", Owner)); return false; } diff --git a/Content.Server/GameObjects/Components/Gravity/GravityGeneratorComponent.cs b/Content.Server/GameObjects/Components/Gravity/GravityGeneratorComponent.cs index 3a766f985a..8ae70d4317 100644 --- a/Content.Server/GameObjects/Components/Gravity/GravityGeneratorComponent.cs +++ b/Content.Server/GameObjects/Components/Gravity/GravityGeneratorComponent.cs @@ -8,6 +8,7 @@ using Content.Server.Utility; using Content.Shared.GameObjects.Components.Gravity; using Content.Shared.GameObjects.Components.Interactable; using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.Interfaces; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.GameObjects; using Robust.Server.GameObjects.Components.UserInterface; @@ -111,9 +112,8 @@ namespace Content.Server.GameObjects.Components.Gravity breakable.FixAllDamage(); _intact = true; - var notifyManager = IoCManager.Resolve(); - - notifyManager.PopupMessage(Owner, eventArgs.User, Loc.GetString("You repair {0:theName} with {1:theName}", Owner, eventArgs.Using)); + Owner.PopupMessage(eventArgs.User, + Loc.GetString("You repair {0:theName} with {1:theName}", Owner, eventArgs.Using)); return true; } diff --git a/Content.Server/GameObjects/Components/Instruments/InstrumentComponent.cs b/Content.Server/GameObjects/Components/Instruments/InstrumentComponent.cs index 9947e7d1e9..8383d5b157 100644 --- a/Content.Server/GameObjects/Components/Instruments/InstrumentComponent.cs +++ b/Content.Server/GameObjects/Components/Instruments/InstrumentComponent.cs @@ -3,11 +3,10 @@ using System; using System.Linq; using Content.Server.GameObjects.Components.Mobs; using Content.Server.GameObjects.EntitySystems; -using Content.Server.Interfaces; -using Content.Server.Mobs; using Content.Server.Utility; using Content.Shared.GameObjects.Components.Instruments; using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.Interfaces; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.GameObjects; using Robust.Server.GameObjects.Components.UserInterface; @@ -38,7 +37,6 @@ namespace Content.Server.GameObjects.Components.Instruments IUse, IThrown { - [Dependency] private readonly IServerNotifyManager _notifyManager = default!; [Dependency] private readonly IGameTiming _gameTiming = default!; private static readonly TimeSpan OneSecAgo = TimeSpan.FromSeconds(-1); @@ -166,11 +164,11 @@ namespace Content.Server.GameObjects.Components.Instruments switch (_laggedBatches) { case (int) (MaxMidiLaggedBatches * (1 / 3d)) + 1: - _notifyManager.PopupMessage(Owner, InstrumentPlayer.AttachedEntity, + Owner.PopupMessage(InstrumentPlayer.AttachedEntity, "Your fingers are beginning to a cramp a little!"); break; case (int) (MaxMidiLaggedBatches * (2 / 3d)) + 1: - _notifyManager.PopupMessage(Owner, InstrumentPlayer.AttachedEntity, + Owner.PopupMessage(InstrumentPlayer.AttachedEntity, "Your fingers are seriously cramping up!"); break; } @@ -333,7 +331,7 @@ namespace Content.Server.GameObjects.Components.Instruments InstrumentPlayer = null; - _notifyManager.PopupMessage(Owner, mob, "Your fingers cramp up from playing!"); + Owner.PopupMessage(mob, "Your fingers cramp up from playing!"); } _timer += delta; diff --git a/Content.Server/GameObjects/Components/Interactable/HandheldLightComponent.cs b/Content.Server/GameObjects/Components/Interactable/HandheldLightComponent.cs index 6e607ae9c8..588200c738 100644 --- a/Content.Server/GameObjects/Components/Interactable/HandheldLightComponent.cs +++ b/Content.Server/GameObjects/Components/Interactable/HandheldLightComponent.cs @@ -17,7 +17,6 @@ using Robust.Server.Interfaces.GameObjects; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; -using Robust.Shared.IoC; using Robust.Shared.Localization; using Robust.Shared.Utility; using Robust.Shared.ViewVariables; @@ -31,8 +30,6 @@ namespace Content.Server.GameObjects.Components.Interactable internal sealed class HandheldLightComponent : SharedHandheldLightComponent, IUse, IExamine, IInteractUsing, IMapInit { - [Dependency] private readonly ISharedNotifyManager _notifyManager = default!; - [ViewVariables(VVAccess.ReadWrite)] public float Wattage { get; set; } = 10; [ViewVariables] private ContainerSlot _cellContainer = default!; @@ -152,7 +149,7 @@ namespace Content.Server.GameObjects.Components.Interactable { EntitySystem.Get().PlayFromEntity("/Audio/Machines/button.ogg", Owner); - _notifyManager.PopupMessage(Owner, user, Loc.GetString("Cell missing...")); + Owner.PopupMessage(user, Loc.GetString("Cell missing...")); return; } @@ -162,7 +159,7 @@ namespace Content.Server.GameObjects.Components.Interactable if (Wattage > cell.CurrentCharge) { EntitySystem.Get().PlayFromEntity("/Audio/Machines/button.ogg", Owner); - _notifyManager.PopupMessage(Owner, user, Loc.GetString("Dead cell...")); + Owner.PopupMessage(user, Loc.GetString("Dead cell...")); return; } diff --git a/Content.Server/GameObjects/Components/Interactable/WelderComponent.cs b/Content.Server/GameObjects/Components/Interactable/WelderComponent.cs index 8987084e21..68a347f8d5 100644 --- a/Content.Server/GameObjects/Components/Interactable/WelderComponent.cs +++ b/Content.Server/GameObjects/Components/Interactable/WelderComponent.cs @@ -5,7 +5,6 @@ using Content.Server.Atmos; using Content.Server.GameObjects.Components.Chemistry; using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.GameObjects.EntitySystems; -using Content.Server.Interfaces; using Content.Server.Interfaces.Chat; using Content.Server.Interfaces.GameObjects; using Content.Server.Utility; @@ -15,7 +14,6 @@ using Content.Shared.GameObjects.Components.Interactable; using Content.Shared.Interfaces.GameObjects.Components; using Content.Shared.Interfaces; using Robust.Server.GameObjects; -using Robust.Server.Interfaces.Player; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.IoC; @@ -33,8 +31,6 @@ namespace Content.Server.GameObjects.Components.Interactable public class WelderComponent : ToolComponent, IExamine, IUse, ISuicideAct, ISolutionChange { [Dependency] private readonly IEntitySystemManager _entitySystemManager = default!; - [Dependency] private readonly IServerNotifyManager _notifyManager = default!; - [Dependency] private readonly IPlayerManager _playerManager = default!; public override string Name => "Welder"; public override uint? NetID => ContentNetIDs.WELDER; @@ -108,7 +104,7 @@ namespace Content.Server.GameObjects.Components.Interactable if (!CanWeld(DefaultFuelCost)) { - _notifyManager.PopupMessage(target, user, "Can't weld!"); + target.PopupMessage(user, "Can't weld!"); return false; } @@ -137,13 +133,13 @@ namespace Content.Server.GameObjects.Components.Interactable { if (!WelderLit) { - if(!silent) _notifyManager.PopupMessage(Owner, user, Loc.GetString("The welder is turned off!")); + if(!silent) Owner.PopupMessage(user, Loc.GetString("The welder is turned off!")); return false; } if (!CanWeld(value)) { - if(!silent) _notifyManager.PopupMessage(Owner, user, Loc.GetString("The welder does not have enough fuel for that!")); + if(!silent) Owner.PopupMessage(user, Loc.GetString("The welder does not have enough fuel for that!")); return false; } @@ -192,7 +188,7 @@ namespace Content.Server.GameObjects.Components.Interactable if (!CanLitWelder()) { - _notifyManager.PopupMessage(Owner, user, Loc.GetString("The welder has no fuel left!")); + Owner.PopupMessage(user, Loc.GetString("The welder has no fuel left!")); return false; } diff --git a/Content.Server/GameObjects/Components/Items/Clothing/ClothingComponent.cs b/Content.Server/GameObjects/Components/Items/Clothing/ClothingComponent.cs index c8fe5b8b78..e0920a2773 100644 --- a/Content.Server/GameObjects/Components/Items/Clothing/ClothingComponent.cs +++ b/Content.Server/GameObjects/Components/Items/Clothing/ClothingComponent.cs @@ -2,13 +2,12 @@ using System.Collections.Generic; using Content.Server.GameObjects.Components.GUI; using Content.Server.GameObjects.Components.Items.Storage; -using Content.Server.Interfaces; using Content.Shared.GameObjects; using Content.Shared.GameObjects.Components.Items; +using Content.Shared.Interfaces; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; -using Robust.Shared.IoC; using Robust.Shared.Serialization; using static Content.Shared.GameObjects.Components.Inventory.EquipmentSlotDefines; @@ -20,8 +19,6 @@ namespace Content.Server.GameObjects.Components.Items.Clothing [ComponentReference(typeof(IItemComponent))] public class ClothingComponent : ItemComponent, IUse { - [Dependency] private readonly IServerNotifyManager _serverNotifyManager = default!; - public override string Name => "Clothing"; public override uint? NetID => ContentNetIDs.CLOTHING; @@ -112,7 +109,7 @@ namespace Content.Server.GameObjects.Components.Items.Clothing if (!inv.Equip(slot, this, true, out var reason)) { if (reason != null) - _serverNotifyManager.PopupMessage(Owner, user, reason); + Owner.PopupMessage(user, reason); return false; } diff --git a/Content.Server/GameObjects/Components/Items/RCD/RCDAmmoComponent.cs b/Content.Server/GameObjects/Components/Items/RCD/RCDAmmoComponent.cs index 3cb63d1aa2..728d5a6a09 100644 --- a/Content.Server/GameObjects/Components/Items/RCD/RCDAmmoComponent.cs +++ b/Content.Server/GameObjects/Components/Items/RCD/RCDAmmoComponent.cs @@ -1,10 +1,9 @@ using System; -using Content.Server.Interfaces; using Content.Server.Interfaces.GameObjects.Components.Items; using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.Interfaces; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Shared.GameObjects; -using Robust.Shared.IoC; using Robust.Shared.Localization; using Robust.Shared.Serialization; using Robust.Shared.Utility; @@ -15,8 +14,6 @@ namespace Content.Server.GameObjects.Components.Items.RCD [RegisterComponent] public class RCDAmmoComponent : Component, IAfterInteract, IExamine { - [Dependency] private IServerNotifyManager _serverNotifyManager = default!; - public override string Name => "RCDAmmo"; //How much ammo we refill @@ -43,17 +40,16 @@ namespace Content.Server.GameObjects.Components.Items.RCD if (rcdComponent.maxAmmo - rcdComponent._ammo < refillAmmo) { - _serverNotifyManager.PopupMessage(rcdComponent.Owner, eventArgs.User, "The RCD is full!"); + rcdComponent.Owner.PopupMessage(eventArgs.User, Loc.GetString("The RCD is full!")); return; } rcdComponent._ammo = Math.Min(rcdComponent.maxAmmo, rcdComponent._ammo + refillAmmo); - _serverNotifyManager.PopupMessage(rcdComponent.Owner, eventArgs.User, "You refill the RCD."); + rcdComponent.Owner.PopupMessage(eventArgs.User, Loc.GetString("You refill the RCD.")); //Deleting a held item causes a lot of errors hands.Drop(Owner, false); Owner.Delete(); - } } } diff --git a/Content.Server/GameObjects/Components/Items/RCD/RCDComponent.cs b/Content.Server/GameObjects/Components/Items/RCD/RCDComponent.cs index d8194508e4..b685db4f10 100644 --- a/Content.Server/GameObjects/Components/Items/RCD/RCDComponent.cs +++ b/Content.Server/GameObjects/Components/Items/RCD/RCDComponent.cs @@ -1,9 +1,8 @@ using System; using System.Threading; using Content.Server.GameObjects.EntitySystems.DoAfter; -using Content.Server.Interfaces; -using Content.Server.Utility; using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.Interfaces; using Content.Shared.Interfaces.GameObjects.Components; using Content.Shared.Maps; using Content.Shared.Utility; @@ -30,7 +29,6 @@ namespace Content.Server.GameObjects.Components.Items.RCD [Dependency] private readonly IEntitySystemManager _entitySystemManager = default!; [Dependency] private readonly IMapManager _mapManager = default!; [Dependency] private readonly IServerEntityManager _serverEntityManager = default!; - [Dependency] private readonly IServerNotifyManager _serverNotifyManager = default!; public override string Name => "RCD"; private RcdMode _mode = 0; //What mode are we on? Can be floors, walls, deconstruct. @@ -86,12 +84,12 @@ namespace Content.Server.GameObjects.Components.Items.RCD int mode = (int) _mode; //Firstly, cast our RCDmode mode to an int (enums are backed by ints anyway by default) mode = (++mode) % _modes.Length; //Then, do a rollover on the value so it doesnt hit an invalid state _mode = (RcdMode) mode; //Finally, cast the newly acquired int mode to an RCDmode so we can use it. - _serverNotifyManager.PopupMessage(Owner, eventArgs.User, $"The RCD is now set to {this._mode} mode."); //Prints an overhead message above the RCD + Owner.PopupMessage(eventArgs.User, Loc.GetString("The RCD is now set to {0} mode.", _mode)); //Prints an overhead message above the RCD } public void Examine(FormattedMessage message, bool inDetailsRange) { - message.AddMarkup(Loc.GetString("It's currently on {0} mode, and holds {1} charges.",_mode.ToString(), this._ammo)); + message.AddMarkup(Loc.GetString("It's currently on {0} mode, and holds {1} charges.",_mode.ToString(), _ammo)); } public async void AfterInteract(AfterInteractEventArgs eventArgs) @@ -159,7 +157,7 @@ namespace Content.Server.GameObjects.Components.Items.RCD //Less expensive checks first. Failing those ones, we need to check that the tile isn't obstructed. if (_ammo <= 0) { - _serverNotifyManager.PopupMessage(Owner, eventArgs.User, $"The RCD is out of ammo!"); + Owner.PopupMessage(eventArgs.User, Loc.GetString("The RCD is out of ammo!")); return false; } @@ -180,7 +178,7 @@ namespace Content.Server.GameObjects.Components.Items.RCD case RcdMode.Floors: if (!tile.Tile.IsEmpty) { - _serverNotifyManager.PopupMessage(Owner, eventArgs.User, $"You can only build a floor on space!"); + Owner.PopupMessage(eventArgs.User, Loc.GetString("You can only build a floor on space!")); return false; } @@ -195,13 +193,13 @@ namespace Content.Server.GameObjects.Components.Items.RCD //They tried to decon a turf but the turf is blocked if (eventArgs.Target == null && tile.IsBlockedTurf(true)) { - _serverNotifyManager.PopupMessage(Owner, eventArgs.User, $"That tile is obstructed!"); + Owner.PopupMessage(eventArgs.User, Loc.GetString("That tile is obstructed!")); return false; } //They tried to decon a non-turf but it's not in the whitelist if (eventArgs.Target != null && !eventArgs.Target.TryGetComponent(out RCDDeconstructWhitelist rcd_decon)) { - _serverNotifyManager.PopupMessage(Owner, eventArgs.User, $"You can't deconstruct that!"); + Owner.PopupMessage(eventArgs.User, Loc.GetString("You can't deconstruct that!")); return false; } @@ -210,25 +208,25 @@ namespace Content.Server.GameObjects.Components.Items.RCD case RcdMode.Walls: if (tile.Tile.IsEmpty) { - _serverNotifyManager.PopupMessage(Owner, eventArgs.User, $"Cannot build a wall on space!"); + Owner.PopupMessage(eventArgs.User, Loc.GetString("You cannot build a wall on space!")); return false; } if (tile.IsBlockedTurf(true)) { - _serverNotifyManager.PopupMessage(Owner, eventArgs.User, $"That tile is obstructed!"); + Owner.PopupMessage(eventArgs.User, Loc.GetString("That tile is obstructed!")); return false; } return true; case RcdMode.Airlock: if (tile.Tile.IsEmpty) { - _serverNotifyManager.PopupMessage(Owner, eventArgs.User, $"Cannot build an airlock on space!"); + Owner.PopupMessage(eventArgs.User, Loc.GetString("Cannot build an airlock on space!")); return false; } if (tile.IsBlockedTurf(true)) { - _serverNotifyManager.PopupMessage(Owner, eventArgs.User, $"That tile is obstructed!"); + Owner.PopupMessage(eventArgs.User, Loc.GetString("That tile is obstructed!")); return false; } return true; diff --git a/Content.Server/GameObjects/Components/Items/Storage/SecureEntityStorageComponent.cs b/Content.Server/GameObjects/Components/Items/Storage/SecureEntityStorageComponent.cs index dca9f41cc8..8b7f3b939c 100644 --- a/Content.Server/GameObjects/Components/Items/Storage/SecureEntityStorageComponent.cs +++ b/Content.Server/GameObjects/Components/Items/Storage/SecureEntityStorageComponent.cs @@ -126,8 +126,7 @@ namespace Content.Server.GameObjects.Components.Items.Storage { if (!reader.IsAllowed(user)) { - IoCManager.Resolve() - .PopupMessage(Owner, user, Loc.GetString("Access denied")); + Owner.PopupMessage(user, Loc.GetString("Access denied")); return true; } } diff --git a/Content.Server/GameObjects/Components/Kitchen/MicrowaveComponent.cs b/Content.Server/GameObjects/Components/Kitchen/MicrowaveComponent.cs index c7ec8a84f1..56258a27f7 100644 --- a/Content.Server/GameObjects/Components/Kitchen/MicrowaveComponent.cs +++ b/Content.Server/GameObjects/Components/Kitchen/MicrowaveComponent.cs @@ -12,7 +12,6 @@ using Content.Server.GameObjects.Components.GUI; using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.GameObjects.Components.Power.ApcNetComponents; using Content.Server.GameObjects.EntitySystems; -using Content.Server.Interfaces; using Content.Server.Interfaces.Chat; using Content.Server.Interfaces.GameObjects; using Content.Server.Utility; @@ -27,7 +26,6 @@ using Robust.Server.GameObjects.Components.Container; using Robust.Server.GameObjects.Components.UserInterface; using Robust.Server.GameObjects.EntitySystems; using Robust.Server.Interfaces.GameObjects; -using Robust.Server.Interfaces.Player; using Robust.Shared.Audio; using Robust.Shared.GameObjects.Systems; using Content.Shared.GameObjects.Components.Body; @@ -44,8 +42,6 @@ namespace Content.Server.GameObjects.Components.Kitchen { [Dependency] private readonly IEntityManager _entityManager = default!; [Dependency] private readonly RecipeManager _recipeManager = default!; - [Dependency] private readonly IServerNotifyManager _notifyManager = default!; - [Dependency] private readonly IPlayerManager _playerManager = default!; #region YAMLSERIALIZE private int _cookTimeDefault; @@ -206,8 +202,7 @@ namespace Content.Server.GameObjects.Components.Kitchen { if (!Powered) { - _notifyManager.PopupMessage(Owner.Transform.GridPosition, eventArgs.User, - Loc.GetString("It has no power!")); + Owner.PopupMessage(eventArgs.User, Loc.GetString("It has no power!")); return false; } @@ -215,7 +210,7 @@ namespace Content.Server.GameObjects.Components.Kitchen if (itemEntity == null) { - eventArgs.User.PopupMessage(eventArgs.User, Loc.GetString("You have no active hand!")); + eventArgs.User.PopupMessage(Loc.GetString("You have no active hand!")); return false; } @@ -236,8 +231,7 @@ namespace Content.Server.GameObjects.Components.Kitchen var realTransferAmount = ReagentUnit.Min(attackPourable.TransferAmount, solution.EmptyVolume); if (realTransferAmount <= 0) //Special message if container is full { - _notifyManager.PopupMessage(Owner.Transform.GridPosition, eventArgs.User, - Loc.GetString("Container is full")); + Owner.PopupMessage(eventArgs.User, Loc.GetString("Container is full")); return false; } @@ -248,15 +242,14 @@ namespace Content.Server.GameObjects.Components.Kitchen return false; } - _notifyManager.PopupMessage(Owner.Transform.GridPosition, eventArgs.User, - Loc.GetString("Transferred {0}u", removedSolution.TotalVolume)); + Owner.PopupMessage(eventArgs.User, Loc.GetString("Transferred {0}u", removedSolution.TotalVolume)); return true; } if (!itemEntity.TryGetComponent(typeof(ItemComponent), out var food)) { - _notifyManager.PopupMessage(Owner, eventArgs.User, "That won't work!"); + Owner.PopupMessage(eventArgs.User, "That won't work!"); return false; } diff --git a/Content.Server/GameObjects/Components/MachineLinking/SignalReceiverComponent.cs b/Content.Server/GameObjects/Components/MachineLinking/SignalReceiverComponent.cs index c1e274862a..fcd03af914 100644 --- a/Content.Server/GameObjects/Components/MachineLinking/SignalReceiverComponent.cs +++ b/Content.Server/GameObjects/Components/MachineLinking/SignalReceiverComponent.cs @@ -63,7 +63,7 @@ namespace Content.Server.GameObjects.Components.MachineLinking { if (transmitter == null) { - user.PopupMessage(user, Loc.GetString("Signal not set.")); + user.PopupMessage(Loc.GetString("Signal not set.")); return false; } diff --git a/Content.Server/GameObjects/Components/Mobs/ServerStatusEffectsComponent.cs b/Content.Server/GameObjects/Components/Mobs/ServerStatusEffectsComponent.cs index a0fb2d8166..221246867e 100644 --- a/Content.Server/GameObjects/Components/Mobs/ServerStatusEffectsComponent.cs +++ b/Content.Server/GameObjects/Components/Mobs/ServerStatusEffectsComponent.cs @@ -115,7 +115,7 @@ namespace Content.Server.GameObjects.Components.Mobs hands.StopPull(); break; default: - player.PopupMessage(player, msg.Effect.ToString()); + player.PopupMessage(msg.Effect.ToString()); break; } diff --git a/Content.Server/GameObjects/Components/Movement/ClimbableComponent.cs b/Content.Server/GameObjects/Components/Movement/ClimbableComponent.cs index cf7f44b432..aafe33baf4 100644 --- a/Content.Server/GameObjects/Components/Movement/ClimbableComponent.cs +++ b/Content.Server/GameObjects/Components/Movement/ClimbableComponent.cs @@ -73,7 +73,7 @@ namespace Content.Server.GameObjects.Components.Movement canVault = CanVault(eventArgs.User, eventArgs.Dropped, eventArgs.Target, out reason); if (!canVault) - eventArgs.User.PopupMessage(eventArgs.User, reason); + eventArgs.User.PopupMessage(reason); return canVault; } diff --git a/Content.Server/GameObjects/Components/Nutrition/DrinkComponent.cs b/Content.Server/GameObjects/Components/Nutrition/DrinkComponent.cs index 73e7efaf20..194f671221 100644 --- a/Content.Server/GameObjects/Components/Nutrition/DrinkComponent.cs +++ b/Content.Server/GameObjects/Components/Nutrition/DrinkComponent.cs @@ -130,13 +130,13 @@ namespace Content.Server.GameObjects.Components.Nutrition if (!Opened) { - target.PopupMessage(target, Loc.GetString("Open it first!")); + target.PopupMessage(Loc.GetString("Open it first!")); return false; } if (_contents.CurrentVolume.Float() <= 0) { - target.PopupMessage(target, Loc.GetString("It's empty!")); + target.PopupMessage(Loc.GetString("It's empty!")); return false; } @@ -151,14 +151,14 @@ namespace Content.Server.GameObjects.Components.Nutrition { if (_useSound == null) return false; EntitySystem.Get().PlayFromEntity(_useSound, target, AudioParams.Default.WithVolume(-2f)); - target.PopupMessage(target, Loc.GetString("Slurp")); + target.PopupMessage(Loc.GetString("Slurp")); UpdateAppearance(); return true; } //Stomach was full or can't handle whatever solution we have. _contents.TryAddSolution(split); - target.PopupMessage(target, Loc.GetString("You've had enough {0}!", Owner.Name)); + target.PopupMessage(Loc.GetString("You've had enough {0}!", Owner.Name)); return false; } diff --git a/Content.Server/GameObjects/Components/Nutrition/FoodComponent.cs b/Content.Server/GameObjects/Components/Nutrition/FoodComponent.cs index 6604f0ea1e..b346108d1e 100644 --- a/Content.Server/GameObjects/Components/Nutrition/FoodComponent.cs +++ b/Content.Server/GameObjects/Components/Nutrition/FoodComponent.cs @@ -90,7 +90,7 @@ namespace Content.Server.GameObjects.Components.Nutrition { if (_utensilsNeeded != UtensilType.None) { - eventArgs.User.PopupMessage(eventArgs.User, Loc.GetString("You need to use a {0} to eat that!", _utensilsNeeded)); + eventArgs.User.PopupMessage(Loc.GetString("You need to use a {0} to eat that!", _utensilsNeeded)); return false; } @@ -122,7 +122,7 @@ namespace Content.Server.GameObjects.Components.Nutrition if (UsesRemaining <= 0) { - user.PopupMessage(user, Loc.GetString("{0:TheName} is empty!", Owner)); + user.PopupMessage(Loc.GetString("{0:TheName} is empty!", Owner)); return false; } diff --git a/Content.Server/GameObjects/Components/Power/AME/AMEControllerComponent.cs b/Content.Server/GameObjects/Components/Power/AME/AMEControllerComponent.cs index b8a768d728..f372ea3142 100644 --- a/Content.Server/GameObjects/Components/Power/AME/AMEControllerComponent.cs +++ b/Content.Server/GameObjects/Components/Power/AME/AMEControllerComponent.cs @@ -5,7 +5,6 @@ using Content.Server.GameObjects.Components.NodeContainer; using Content.Server.GameObjects.Components.NodeContainer.NodeGroups; using Content.Server.GameObjects.Components.Power.ApcNetComponents; using Content.Server.GameObjects.Components.Power.PowerNetComponents; -using Content.Server.Interfaces; using Content.Server.Interfaces.GameObjects.Components.Items; using Content.Server.Utility; using Content.Shared.GameObjects.Components.Power.AME; @@ -20,11 +19,11 @@ using Robust.Shared.Audio; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; -using Robust.Shared.IoC; using Robust.Shared.Localization; using Robust.Shared.ViewVariables; using System.Linq; using System.Threading.Tasks; +using Content.Shared.Interfaces; namespace Content.Server.GameObjects.Components.Power.AME { @@ -33,8 +32,6 @@ namespace Content.Server.GameObjects.Components.Power.AME [ComponentReference(typeof(IInteractUsing))] public class AMEControllerComponent : SharedAMEControllerComponent, IActivate, IInteractUsing { - [Dependency] private readonly IServerNotifyManager _notifyManager = default!; - [ViewVariables] private BoundUserInterface? UserInterface => Owner.GetUIOrNull(AMEControllerUiKey.Key); [ViewVariables] private bool _injecting; [ViewVariables] public int InjectionAmount; @@ -117,8 +114,7 @@ namespace Content.Server.GameObjects.Components.Power.AME if (!args.User.TryGetComponent(out IHandsComponent? hands)) { - _notifyManager.PopupMessage(Owner.Transform.GridPosition, args.User, - Loc.GetString("You have no hands.")); + Owner.PopupMessage(args.User, Loc.GetString("You have no hands.")); return; } @@ -328,15 +324,13 @@ namespace Content.Server.GameObjects.Components.Power.AME { if (!args.User.TryGetComponent(out IHandsComponent? hands)) { - _notifyManager.PopupMessage(Owner.Transform.GridPosition, args.User, - Loc.GetString("You have no hands.")); + Owner.PopupMessage(args.User, Loc.GetString("You have no hands.")); return true; } if (hands.GetActiveHand == null) { - _notifyManager.PopupMessage(Owner.Transform.GridPosition, args.User, - Loc.GetString("You have nothing on your hand.")); + Owner.PopupMessage(args.User, Loc.GetString("You have nothing on your hand.")); return false; } @@ -345,22 +339,19 @@ namespace Content.Server.GameObjects.Components.Power.AME { if (HasJar) { - _notifyManager.PopupMessage(Owner.Transform.GridPosition, args.User, - Loc.GetString("The controller already has a jar loaded.")); + Owner.PopupMessage(args.User, Loc.GetString("The controller already has a jar loaded.")); } else { _jarSlot.Insert(activeHandEntity); - _notifyManager.PopupMessage(Owner.Transform.GridPosition, args.User, - Loc.GetString("You insert the jar into the fuel slot.")); + Owner.PopupMessage(args.User, Loc.GetString("You insert the jar into the fuel slot.")); UpdateUserInterface(); } } else { - _notifyManager.PopupMessage(Owner.Transform.GridPosition, args.User, - Loc.GetString("You can't put that in the controller...")); + Owner.PopupMessage(args.User, Loc.GetString("You can't put that in the controller...")); } return true; diff --git a/Content.Server/GameObjects/Components/Power/AME/AMEPartComponent.cs b/Content.Server/GameObjects/Components/Power/AME/AMEPartComponent.cs index 45d951d203..9c07e21943 100644 --- a/Content.Server/GameObjects/Components/Power/AME/AMEPartComponent.cs +++ b/Content.Server/GameObjects/Components/Power/AME/AMEPartComponent.cs @@ -1,5 +1,4 @@ using Content.Server.GameObjects.Components.Interactable; -using Content.Server.Interfaces; using Content.Server.Interfaces.GameObjects.Components.Items; using Content.Shared.GameObjects.Components.Interactable; using Content.Shared.Interfaces.GameObjects.Components; @@ -10,6 +9,7 @@ using Robust.Shared.Interfaces.Map; using Robust.Shared.IoC; using Robust.Shared.Localization; using System.Threading.Tasks; +using Content.Shared.Interfaces; namespace Content.Server.GameObjects.Components.Power.AME { @@ -19,15 +19,14 @@ namespace Content.Server.GameObjects.Components.Power.AME { [Dependency] private readonly IMapManager _mapManager = default!; [Dependency] private readonly IServerEntityManager _serverEntityManager = default!; - [Dependency] private readonly IServerNotifyManager _notifyManager = default!; + public override string Name => "AMEPart"; async Task IInteractUsing.InteractUsing(InteractUsingEventArgs args) { if (!args.User.TryGetComponent(out IHandsComponent hands)) { - _notifyManager.PopupMessage(Owner.Transform.GridPosition, args.User, - Loc.GetString("You have no hands.")); + Owner.PopupMessage(args.User, Loc.GetString("You have no hands.")); return true; } diff --git a/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverUsers/PoweredLightComponent.cs b/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverUsers/PoweredLightComponent.cs index 0b8890964b..31cfdf5934 100644 --- a/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverUsers/PoweredLightComponent.cs +++ b/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverUsers/PoweredLightComponent.cs @@ -4,7 +4,6 @@ using Content.Server.GameObjects.Components.GUI; using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.GameObjects.Components.Mobs; using Content.Server.GameObjects.EntitySystems; -using Content.Server.Interfaces; using Content.Shared.GameObjects.Components.Damage; using Content.Shared.Damage; using Content.Shared.Interfaces.GameObjects.Components; @@ -63,8 +62,7 @@ namespace Content.Server.GameObjects.Components.Power.ApcNetComponents.PowerRece case BeginDeconstructCompMsg msg: if (!msg.BlockDeconstruct && !(_lightBulbContainer.ContainedEntity is null)) { - var notifyManager = IoCManager.Resolve(); - notifyManager.PopupMessage(Owner, msg.User, "Remove the bulb."); + Owner.PopupMessage(msg.User, Loc.GetString("Remove the bulb.")); msg.BlockDeconstruct = true; } break; diff --git a/Content.Server/GameObjects/Components/RadioComponent.cs b/Content.Server/GameObjects/Components/RadioComponent.cs index c2df969c05..df927c9c28 100644 --- a/Content.Server/GameObjects/Components/RadioComponent.cs +++ b/Content.Server/GameObjects/Components/RadioComponent.cs @@ -1,6 +1,7 @@ using Content.Server.GameObjects.EntitySystems; using Content.Server.Interfaces; using Content.Server.Interfaces.Chat; +using Content.Shared.Interfaces; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; @@ -13,7 +14,6 @@ namespace Content.Server.GameObjects.Components class RadioComponent : Component, IUse, IListen { [Dependency] private readonly IEntitySystemManager _entitySystemManager = default!; - [Dependency] private readonly IServerNotifyManager _notifyManager = default!; public override string Name => "Radio"; @@ -60,11 +60,11 @@ namespace Content.Server.GameObjects.Components RadioOn = !RadioOn; if(RadioOn) { - _notifyManager.PopupMessage(Owner, eventArgs.User, "The radio is now on."); + Owner.PopupMessage(eventArgs.User, "The radio is now on."); } else { - _notifyManager.PopupMessage(Owner, eventArgs.User, "The radio is now off."); + Owner.PopupMessage(eventArgs.User, "The radio is now off."); } return true; } diff --git a/Content.Server/GameObjects/Components/Rotatable/FlippableComponent.cs b/Content.Server/GameObjects/Components/Rotatable/FlippableComponent.cs index 43bd0ac6c2..4ebead529b 100644 --- a/Content.Server/GameObjects/Components/Rotatable/FlippableComponent.cs +++ b/Content.Server/GameObjects/Components/Rotatable/FlippableComponent.cs @@ -1,11 +1,10 @@ #nullable enable -using Content.Server.Interfaces; using Content.Shared.GameObjects.EntitySystems; using Content.Shared.GameObjects.Verbs; +using Content.Shared.Interfaces; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Components; using Robust.Shared.Interfaces.GameObjects; -using Robust.Shared.IoC; using Robust.Shared.Localization; using Robust.Shared.Serialization; @@ -14,8 +13,6 @@ namespace Content.Server.GameObjects.Components.Rotatable [RegisterComponent] public class FlippableComponent : Component { - [Dependency] private readonly IServerNotifyManager _notifyManager = default!; - public override string Name => "Flippable"; private string? _entity; @@ -25,7 +22,7 @@ namespace Content.Server.GameObjects.Components.Rotatable if (Owner.TryGetComponent(out ICollidableComponent? collidable) && collidable.Anchored) { - _notifyManager.PopupMessage(Owner.Transform.GridPosition, user, Loc.GetString("It's stuck.")); + Owner.PopupMessage(user, Loc.GetString("It's stuck.")); return; } diff --git a/Content.Server/GameObjects/Components/Rotatable/RotatableComponent.cs b/Content.Server/GameObjects/Components/Rotatable/RotatableComponent.cs index 6534dfe9b6..a3160b6fd8 100644 --- a/Content.Server/GameObjects/Components/Rotatable/RotatableComponent.cs +++ b/Content.Server/GameObjects/Components/Rotatable/RotatableComponent.cs @@ -1,10 +1,9 @@ -using Content.Server.Interfaces; -using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.GameObjects.EntitySystems; using Content.Shared.GameObjects.Verbs; +using Content.Shared.Interfaces; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Components; using Robust.Shared.Interfaces.GameObjects; -using Robust.Shared.IoC; using Robust.Shared.Localization; using Robust.Shared.Maths; @@ -13,8 +12,6 @@ namespace Content.Server.GameObjects.Components.Rotatable [RegisterComponent] public class RotatableComponent : Component { - [Dependency] private readonly IServerNotifyManager _notifyManager = default!; - public override string Name => "Rotatable"; private void TryRotate(IEntity user, Angle angle) @@ -23,7 +20,7 @@ namespace Content.Server.GameObjects.Components.Rotatable { if (collidable.Anchored) { - _notifyManager.PopupMessage(Owner.Transform.GridPosition, user, Loc.GetString("It's stuck.")); + Owner.PopupMessage(user, Loc.GetString("It's stuck.")); return; } } diff --git a/Content.Server/GameObjects/Components/Stack/StackComponent.cs b/Content.Server/GameObjects/Components/Stack/StackComponent.cs index b6c5d37b9b..a32ee539e3 100644 --- a/Content.Server/GameObjects/Components/Stack/StackComponent.cs +++ b/Content.Server/GameObjects/Components/Stack/StackComponent.cs @@ -5,7 +5,6 @@ using Content.Shared.GameObjects.EntitySystems; using Content.Shared.Interfaces; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Shared.GameObjects; -using Robust.Shared.IoC; using Robust.Shared.Localization; using Robust.Shared.Map; using Robust.Shared.Timers; @@ -19,8 +18,6 @@ namespace Content.Server.GameObjects.Components.Stack [RegisterComponent] public class StackComponent : SharedStackComponent, IInteractUsing, IExamine { - [Dependency] private readonly ISharedNotifyManager _sharedNotifyManager = default!; - private bool _throwIndividually = false; public override int Count @@ -82,20 +79,19 @@ namespace Content.Server.GameObjects.Components.Stack if (toTransfer > 0) { - _sharedNotifyManager.PopupMessage(popupPos, eventArgs.User, $"+{toTransfer}"); + popupPos.PopupMessage(eventArgs.User, $"+{toTransfer}"); if (stack.AvailableSpace == 0) { - - Timer.Spawn(300, () => _sharedNotifyManager.PopupMessage(popupPos, eventArgs.User, "Stack is now full.")); + Timer.Spawn(300, () => popupPos.PopupMessage(eventArgs.User, "Stack is now full.")); } + return true; } else if (toTransfer == 0 && stack.AvailableSpace == 0) { - _sharedNotifyManager.PopupMessage(popupPos, eventArgs.User, "Stack is already full."); + popupPos.PopupMessage(eventArgs.User, "Stack is already full."); } - } return false; diff --git a/Content.Server/GameObjects/Components/Weapon/Melee/FlashComponent.cs b/Content.Server/GameObjects/Components/Weapon/Melee/FlashComponent.cs index 104e20924d..580d1282ca 100644 --- a/Content.Server/GameObjects/Components/Weapon/Melee/FlashComponent.cs +++ b/Content.Server/GameObjects/Components/Weapon/Melee/FlashComponent.cs @@ -23,7 +23,6 @@ namespace Content.Server.GameObjects.Components.Weapon.Melee public class FlashComponent : MeleeWeaponComponent, IUse, IExamine { [Dependency] private readonly IEntityManager _entityManager = default!; - [Dependency] private readonly ISharedNotifyManager _notifyManager = default!; public override string Name => "Flash"; @@ -101,7 +100,7 @@ namespace Content.Server.GameObjects.Components.Weapon.Melee { sprite.LayerSetState(0, "burnt"); - _notifyManager.PopupMessage(Owner, user, Loc.GetString("The flash burns out!")); + Owner.PopupMessage(user, Loc.GetString("The flash burns out!")); } else if (!_flashing) { @@ -155,7 +154,7 @@ namespace Content.Server.GameObjects.Components.Weapon.Melee if (entity != user) { - _notifyManager.PopupMessage(user, entity, Loc.GetString("{0:TheName} blinds you with {1:theName}", user, Owner)); + user.PopupMessage(entity, Loc.GetString("{0:TheName} blinds you with {1:theName}", user, Owner)); } } diff --git a/Content.Server/GameObjects/Components/Weapon/Melee/StunbatonComponent.cs b/Content.Server/GameObjects/Components/Weapon/Melee/StunbatonComponent.cs index 15bbd862c8..18e3e5c764 100644 --- a/Content.Server/GameObjects/Components/Weapon/Melee/StunbatonComponent.cs +++ b/Content.Server/GameObjects/Components/Weapon/Melee/StunbatonComponent.cs @@ -31,7 +31,6 @@ namespace Content.Server.GameObjects.Components.Weapon.Melee public class StunbatonComponent : MeleeWeaponComponent, IUse, IExamine, IMapInit, IInteractUsing { [Dependency] private readonly IRobustRandom _robustRandom = default!; - [Dependency] private readonly ISharedNotifyManager _notifyManager = default!; public override string Name => "Stunbaton"; @@ -165,14 +164,14 @@ namespace Content.Server.GameObjects.Components.Weapon.Melee { EntitySystem.Get().PlayAtCoords("/Audio/Machines/button.ogg", Owner.Transform.GridPosition, AudioHelpers.WithVariation(0.25f)); - _notifyManager.PopupMessage(Owner, user, Loc.GetString("Cell missing...")); + Owner.PopupMessage(user, Loc.GetString("Cell missing...")); return; } if (cell.CurrentCharge < EnergyPerUse) { EntitySystem.Get().PlayAtCoords("/Audio/Machines/button.ogg", Owner.Transform.GridPosition, AudioHelpers.WithVariation(0.25f)); - _notifyManager.PopupMessage(Owner, user, Loc.GetString("Dead cell...")); + Owner.PopupMessage(user, Loc.GetString("Dead cell...")); return; } diff --git a/Content.Server/GameObjects/Components/Weapon/Ranged/ServerRangedWeaponComponent.cs b/Content.Server/GameObjects/Components/Weapon/Ranged/ServerRangedWeaponComponent.cs index 5c8370b7e8..d852fe0b7b 100644 --- a/Content.Server/GameObjects/Components/Weapon/Ranged/ServerRangedWeaponComponent.cs +++ b/Content.Server/GameObjects/Components/Weapon/Ranged/ServerRangedWeaponComponent.cs @@ -178,7 +178,7 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged stun.Paralyze(3f); } - user.PopupMessage(user, Loc.GetString("The gun blows up in your face!")); + user.PopupMessage(Loc.GetString("The gun blows up in your face!")); Owner.Delete(); return; diff --git a/Content.Server/GameObjects/Components/WiresComponent.cs b/Content.Server/GameObjects/Components/WiresComponent.cs index 3ad387a7ba..31edce94c6 100644 --- a/Content.Server/GameObjects/Components/WiresComponent.cs +++ b/Content.Server/GameObjects/Components/WiresComponent.cs @@ -6,12 +6,12 @@ using System.Threading.Tasks; using Content.Server.GameObjects.Components.Interactable; using Content.Server.GameObjects.Components.VendingMachines; using Content.Server.GameObjects.EntitySystems; -using Content.Server.Interfaces; using Content.Server.Interfaces.GameObjects.Components.Items; using Content.Server.Utility; using Content.Shared.GameObjects.Components; using Content.Shared.GameObjects.Components.Interactable; using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.Interfaces; using Content.Shared.Interfaces.GameObjects.Components; using Content.Shared.Utility; using JetBrains.Annotations; @@ -36,7 +36,6 @@ namespace Content.Server.GameObjects.Components public class WiresComponent : SharedWiresComponent, IInteractUsing, IExamine, IMapInit { [Dependency] private readonly IRobustRandom _random = default!; - [Dependency] private readonly IServerNotifyManager _notifyManager = default!; private AudioSystem _audioSystem = default!; @@ -384,15 +383,13 @@ namespace Content.Server.GameObjects.Components if (!player.TryGetComponent(out IHandsComponent? handsComponent)) { - _notifyManager.PopupMessage(Owner.Transform.GridPosition, player, - Loc.GetString("You have no hands.")); + Owner.PopupMessage(player, Loc.GetString("You have no hands.")); return; } if (!player.InRangeUnobstructed(Owner)) { - _notifyManager.PopupMessage(Owner.Transform.GridPosition, player, - Loc.GetString("You can't reach there!")); + Owner.PopupMessage(player, Loc.GetString("You can't reach there!")); return; } @@ -405,8 +402,7 @@ namespace Content.Server.GameObjects.Components case WiresAction.Cut: if (tool == null || !tool.HasQuality(ToolQuality.Cutting)) { - _notifyManager.PopupMessageCursor(player, - Loc.GetString("You need to hold a wirecutter in your hand!")); + player.PopupMessageCursor(Loc.GetString("You need to hold a wirecutter in your hand!")); return; } @@ -417,8 +413,7 @@ namespace Content.Server.GameObjects.Components case WiresAction.Mend: if (tool == null || !tool.HasQuality(ToolQuality.Cutting)) { - _notifyManager.PopupMessageCursor(player, - Loc.GetString("You need to hold a wirecutter in your hand!")); + player.PopupMessageCursor(Loc.GetString("You need to hold a wirecutter in your hand!")); return; } @@ -429,15 +424,13 @@ namespace Content.Server.GameObjects.Components case WiresAction.Pulse: if (tool == null || !tool.HasQuality(ToolQuality.Multitool)) { - _notifyManager.PopupMessageCursor(player, - Loc.GetString("You need to hold a multitool in your hand!")); + player.PopupMessageCursor(Loc.GetString("You need to hold a multitool in your hand!")); return; } if (wire.IsCut) { - _notifyManager.PopupMessageCursor(player, - Loc.GetString("You can't pulse a wire that's been cut!")); + player.PopupMessageCursor(Loc.GetString("You can't pulse a wire that's been cut!")); return; } diff --git a/Content.Server/GameObjects/EntitySystems/HandsSystem.cs b/Content.Server/GameObjects/EntitySystems/HandsSystem.cs index b5d521bac7..967335dcc5 100644 --- a/Content.Server/GameObjects/EntitySystems/HandsSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/HandsSystem.cs @@ -4,12 +4,12 @@ using Content.Server.GameObjects.Components.GUI; using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.GameObjects.Components.Stack; using Content.Server.GameObjects.EntitySystems.Click; -using Content.Server.Interfaces; using Content.Server.Interfaces.GameObjects.Components.Items; using Content.Server.Throw; using Content.Shared.GameObjects.Components.Inventory; using Content.Shared.GameObjects.EntitySystems; using Content.Shared.Input; +using Content.Shared.Interfaces; using JetBrains.Annotations; using Robust.Server.GameObjects.EntitySystemMessages; using Robust.Server.Interfaces.Player; @@ -28,7 +28,6 @@ namespace Content.Server.GameObjects.EntitySystems internal sealed class HandsSystem : EntitySystem { [Dependency] private readonly IMapManager _mapManager = default!; - [Dependency] private readonly IServerNotifyManager _notifyManager = default!; private const float ThrowForce = 1.5f; // Throwing force of mobs in Newtons @@ -202,9 +201,8 @@ namespace Content.Server.GameObjects.EntitySystems if (!inventoryComp.TryGetSlotItem(equipementSlot, out ItemComponent equipmentItem) || !equipmentItem.Owner.TryGetComponent(out var storageComponent)) { - _notifyManager.PopupMessage(plyEnt, plyEnt, - Loc.GetString("You have no {0} to take something out of!", - EquipmentSlotDefines.SlotNames[equipementSlot].ToLower())); + plyEnt.PopupMessage(Loc.GetString("You have no {0} to take something out of!", + EquipmentSlotDefines.SlotNames[equipementSlot].ToLower())); return; } @@ -218,9 +216,8 @@ namespace Content.Server.GameObjects.EntitySystems { if (storageComponent.StoredEntities.Count == 0) { - _notifyManager.PopupMessage(plyEnt, plyEnt, - Loc.GetString("There's nothing in your {0} to take out!", - EquipmentSlotDefines.SlotNames[equipementSlot].ToLower())); + plyEnt.PopupMessage(Loc.GetString("There's nothing in your {0} to take out!", + EquipmentSlotDefines.SlotNames[equipementSlot].ToLower())); } else { diff --git a/Content.Server/GameObjects/EntitySystems/PointingSystem.cs b/Content.Server/GameObjects/EntitySystems/PointingSystem.cs index 26d34004f4..d271d0a052 100644 --- a/Content.Server/GameObjects/EntitySystems/PointingSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/PointingSystem.cs @@ -102,7 +102,7 @@ namespace Content.Server.GameObjects.EntitySystems if (!InRange(coords, player.Transform.GridPosition)) { - player.PopupMessage(player, Loc.GetString("You can't reach there!")); + player.PopupMessage(Loc.GetString("You can't reach there!")); return false; } diff --git a/Content.Shared/GameObjects/EntitySystems/SharedInteractionSystem.cs b/Content.Shared/GameObjects/EntitySystems/SharedInteractionSystem.cs index e795676e78..87bff6af83 100644 --- a/Content.Shared/GameObjects/EntitySystems/SharedInteractionSystem.cs +++ b/Content.Shared/GameObjects/EntitySystems/SharedInteractionSystem.cs @@ -188,7 +188,7 @@ namespace Content.Shared.GameObjects.EntitySystems if (!inRange && popup) { var message = Loc.GetString("You can't reach there!"); - origin.PopupMessage(origin, message); + origin.PopupMessage(message); } return inRange; @@ -244,7 +244,7 @@ namespace Content.Shared.GameObjects.EntitySystems if (!inRange && popup) { var message = Loc.GetString("You can't reach there!"); - origin.PopupMessage(origin, message); + origin.PopupMessage(message); } return inRange; @@ -300,7 +300,7 @@ namespace Content.Shared.GameObjects.EntitySystems if (!inRange && popup) { var message = Loc.GetString("You can't reach there!"); - origin.PopupMessage(origin, message); + origin.PopupMessage(message); } return inRange; @@ -355,7 +355,7 @@ namespace Content.Shared.GameObjects.EntitySystems if (!inRange && popup) { var message = Loc.GetString("You can't reach there!"); - origin.PopupMessage(origin, message); + origin.PopupMessage(message); } return inRange; diff --git a/Content.Shared/Interfaces/ISharedNotifyManager.cs b/Content.Shared/Interfaces/ISharedNotifyManager.cs index c7d6adcd4f..3948945d74 100644 --- a/Content.Shared/Interfaces/ISharedNotifyManager.cs +++ b/Content.Shared/Interfaces/ISharedNotifyManager.cs @@ -33,7 +33,7 @@ namespace Content.Shared.Interfaces void PopupMessageCursor(IEntity viewer, string message); } - public static class NotifyManagerExt + public static class SharedNotifyExtensions { /// /// Pops up a message at the location of for @@ -44,7 +44,8 @@ namespace Content.Shared.Interfaces /// The message to show. public static void PopupMessage(this IEntity source, IEntity viewer, string message) { - IoCManager.Resolve().PopupMessage(source, viewer, message); + var notifyManager = IoCManager.Resolve(); + notifyManager.PopupMessage(source, viewer, message); } /// @@ -56,5 +57,30 @@ namespace Content.Shared.Interfaces { viewer.PopupMessage(viewer, message); } + + /// + /// Makes a string of text float up from a location on a grid. + /// + /// Location on a grid that the message floats up from. + /// The client attached entity that the message is being sent to. + /// Text contents of the message. + public static void PopupMessage(this GridCoordinates coordinates, IEntity viewer, string message) + { + var notifyManager = IoCManager.Resolve(); + notifyManager.PopupMessage(coordinates, viewer, message); + } + + /// + /// Makes a string of text float up from a client's cursor. + /// + /// + /// The client attached entity that the message is being sent to. + /// + /// Text contents of the message. + public static void PopupMessageCursor(this IEntity viewer, string message) + { + var notifyManager = IoCManager.Resolve(); + notifyManager.PopupMessageCursor(viewer, message); + } } } From 111ad63dce2a18a87fec69a0319ce2b2b3968daa Mon Sep 17 00:00:00 2001 From: Swept Date: Tue, 1 Sep 2020 10:44:48 +0000 Subject: [PATCH 053/103] Installing a new power infrastructure for Saltern. (#1559) * Removes all deprecated wires, generators and apcs * Removes all deprecated power entities * Updates to master * Map g2g * Map new power system and some materials * Remove old power entities from stationstation * Removes deprecated shit AGAIN * Remove outdated wires from stationstation Co-authored-by: Julian Giebel Co-authored-by: juliangiebel Co-authored-by: DrSmugleaf --- Resources/Maps/saltern.yml | 59040 +++++++++------- Resources/Maps/stationstation.yml | 10483 +-- .../Entities/Constructible/Ground/wires.yml | 14 - .../Constructible/Power/debug_power.yml | 126 + .../Power/{power.yml => power_base.yml} | 174 +- .../Constructible/Power/saltern_power.yml | 44 + 6 files changed, 38986 insertions(+), 30895 deletions(-) create mode 100644 Resources/Prototypes/Entities/Constructible/Power/debug_power.yml rename Resources/Prototypes/Entities/Constructible/Power/{power.yml => power_base.yml} (53%) create mode 100644 Resources/Prototypes/Entities/Constructible/Power/saltern_power.yml diff --git a/Resources/Maps/saltern.yml b/Resources/Maps/saltern.yml index 146f642c62..5e2bba579f 100644 --- a/Resources/Maps/saltern.yml +++ b/Resources/Maps/saltern.yml @@ -84,7 +84,7 @@ grids: - ind: "1,0" tiles: OwAAADsAAAA7AAAAPgAAAD0AAAA6AAAAOgAAADoAAAA+AAAAOAAAADgAAAA4AAAAOAAAADgAAAA+AAAAOAAAADsAAAA7AAAAOwAAAD4AAAA9AAAAPQAAADoAAAA6AAAAPgAAADgAAAA4AAAAOAAAADgAAAA4AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAADoAAAA+AAAAPgAAAD4AAAA4AAAAOAAAADgAAAA4AAAAOAAAAD4AAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAPgAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAOAAAADgAAAA4AAAAOAAAADgAAAA+AAAAOAAAADgAAAA+AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAPgAAAD4AAAA+AAAAOgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA+AAAAPQAAAD0AAAA9AAAAPgAAADgAAAA4AAAAOAAAAD4AAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOgAAAD0AAAA6AAAAPQAAAD4AAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAAD4AAAA6AAAAOgAAADoAAAA6AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA+AAAAOgAAADoAAAA6AAAAPgAAADgAAAA4AAAAOAAAAD4AAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAPgAAADoAAAA6AAAAOgAAAD4AAAA4AAAAOAAAAD4AAAA+AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAAD4AAAA9AAAAPQAAAD0AAAA+AAAAOAAAADgAAAA6AAAAPgAAAD4AAAA+AAAAOgAAAD4AAAA6AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA4AAAAOgAAAD4AAAAAAAAAPgAAADoAAAA+AAAAOgAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAPgAAAA== - ind: "0,1" - tiles: PgAAADgAAAA4AAAAOAAAADgAAAA4AAAAPgAAADgAAAA4AAAAOAAAADgAAAA+AAAAPQAAADoAAAA+AAAAOgAAADoAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAPgAAAD0AAAA6AAAAPgAAAAAAAAA+AAAAOAAAADgAAAA4AAAAOAAAADgAAAA+AAAAOAAAADgAAAA4AAAAOAAAAD4AAAA9AAAAOgAAAD4AAAAAAAAAPgAAADgAAAA4AAAAOAAAADgAAAA4AAAAPgAAADgAAAA4AAAAOAAAADgAAAA+AAAAPQAAADoAAAA+AAAAAAAAADoAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOgAAAD0AAAA6AAAAPgAAAAAAAAA+AAAAOAAAADgAAAA4AAAAOAAAADgAAAA+AAAAOAAAADgAAAA4AAAAOAAAAD4AAAA6AAAAOgAAAD4AAAAAAAAAPgAAAD4AAAA4AAAAPgAAADgAAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAAAAAADIAAAA+AAAAOAAAADgAAAA4AAAAPgAAADwAAAA8AAAAPAAAADwAAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyAAAAMgAAADgAAAA4AAAAOAAAAD4AAAA8AAAAPAAAADwAAAA8AAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMgAAADIAAAA4AAAAOAAAADgAAAA4AAAAPAAAADwAAAA8AAAAPAAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIAAAA+AAAAOAAAADgAAAA4AAAAPgAAADwAAAA8AAAAPAAAADwAAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAPgAAADgAAAA4AAAAOAAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAPgAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + tiles: PgAAADgAAAA4AAAAOAAAADgAAAA4AAAAPgAAADgAAAA4AAAAOAAAADgAAAA+AAAAPQAAADoAAAA+AAAAOgAAADoAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAPgAAAD0AAAA6AAAAPgAAAAAAAAA+AAAAOAAAADgAAAA4AAAAOAAAADgAAAA+AAAAOAAAADgAAAA4AAAAOAAAAD4AAAA9AAAAOgAAAD4AAAAAAAAAPgAAADgAAAA4AAAAOAAAADgAAAA4AAAAPgAAADgAAAA4AAAAOAAAADgAAAA+AAAAPQAAADoAAAA+AAAAAAAAADoAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOgAAAD0AAAA6AAAAPgAAAAAAAAA+AAAAOAAAADgAAAA4AAAAOAAAADgAAAA+AAAAOAAAADgAAAA4AAAAOAAAAD4AAAA6AAAAOgAAAD4AAAAAAAAAPgAAAD4AAAA4AAAAPgAAADgAAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAOgAAAD4AAAA+AAAAAAAAADIAAAA+AAAAOAAAADgAAAA4AAAAPgAAADwAAAA8AAAAPAAAADwAAAA+AAAAOgAAADoAAAA6AAAAPgAAAAAAAAAyAAAAMgAAADgAAAA4AAAAOAAAAD4AAAA8AAAAPAAAADwAAAA8AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAAAAAAAMgAAADIAAAA4AAAAOAAAADgAAAA4AAAAPAAAADwAAAA8AAAAPAAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAAAAAADIAAAA+AAAAOAAAADgAAAA4AAAAPgAAADwAAAA8AAAAPAAAADwAAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAPgAAADgAAAA4AAAAOAAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAPgAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== - ind: "-2,0" tiles: PgAAADgAAAA4AAAAOAAAADgAAAA+AAAAOAAAADgAAAA4AAAAOAAAAD4AAAA4AAAAOAAAADgAAAA4AAAAOAAAAD4AAAA4AAAAOAAAADgAAAA4AAAAPgAAAD4AAAA4AAAAOAAAAD4AAAA+AAAAOAAAADgAAAA4AAAAOAAAADgAAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA4AAAAOAAAADgAAAA4AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAOAAAADgAAAA4AAAAOAAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAOgAAAD0AAAA+AAAAOAAAADgAAAA4AAAAPgAAAD4AAAA4AAAAOAAAAD4AAAA+AAAAOAAAADgAAAA+AAAAPQAAAD0AAAA6AAAAPgAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA+AAAAOAAAADgAAAA4AAAAPgAAAD0AAAA6AAAAOgAAAD4AAAA4AAAAOAAAADgAAAA4AAAAPgAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAAD4AAAA9AAAAOgAAADoAAAA+AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAAD4AAAA4AAAAOAAAADgAAAA+AAAAPQAAADoAAAA6AAAAPgAAADgAAAA4AAAAOAAAADgAAAA+AAAAOAAAADgAAAA+AAAAPgAAADoAAAA+AAAAPgAAAD0AAAA9AAAAOgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAADoAAAA9AAAAOgAAADoAAAA9AAAAOgAAADoAAAA6AAAAOgAAADoAAAA6AAAAOgAAADoAAAA6AAAAOgAAADoAAAA6AAAAPQAAAD0AAAA9AAAAPQAAADoAAAA9AAAAPQAAAD0AAAA9AAAAPQAAAD0AAAA9AAAAPQAAAD0AAAA9AAAAPQAAAD0AAAA+AAAAPgAAAD0AAAA6AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD0AAAA9AAAAOgAAAA== - ind: "1,-1" @@ -129,180 +129,8728 @@ grids: tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== entities: - uid: 0 - type: DisposalTrunk + type: SuspicionHitscanSpawner components: - - parent: 15 - pos: -29.5,11.5 + - parent: 857 + pos: -15.5,-11.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1 + type: SuspicionShotgunSpawner + components: + - parent: 857 + pos: -15.5,-14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2 + type: SuspicionShotgunMagazineSpawner + components: + - parent: 857 + pos: -23.5,-13.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3 + type: SuspicionPistolMagazineSpawner + components: + - parent: 857 + pos: -35.5,-0.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 4 + type: SuspicionRifleMagazineSpawner + components: + - parent: 857 + pos: -35.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 5 + type: SuspicionRifleMagazineSpawner + components: + - parent: 857 + pos: -35.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 6 + type: SuspicionShotgunMagazineSpawner + components: + - parent: 857 + pos: -35.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 7 + type: SuspicionShotgunMagazineSpawner + components: + - parent: 857 + pos: -35.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 8 + type: SuspicionGrenadesSpawner + components: + - parent: 857 + pos: -11.5,18.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 9 + type: SuspicionGrenadesSpawner + components: + - parent: 857 + pos: -11.5,19.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 10 + type: SuspicionGrenadesSpawner + components: + - parent: 857 + pos: -11.5,20.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 11 + type: SuspicionLaunchersSpawner + components: + - parent: 857 + pos: -12.5,18.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 12 + type: SuspicionSniperSpawner + components: + - parent: 857 + pos: -12.5,19.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 13 + type: SuspicionShotgunSpawner + components: + - parent: 857 + pos: -12.5,20.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 14 + type: SuspicionSMGSpawner + components: + - parent: 857 + pos: -13.5,20.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 15 + type: SuspicionRifleSpawner + components: + - parent: 857 + pos: -13.5,19.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 16 + type: SuspicionPistolSpawner + components: + - parent: 857 + pos: -13.5,18.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 17 + type: SuspicionRevolverSpawner + components: + - parent: 857 + pos: -14.5,19.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 18 + type: SuspicionHitscanSpawner + components: + - parent: 857 + pos: -14.5,18.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 19 + type: SuspicionPistolSpawner + components: + - parent: 857 + pos: -10.5,-0.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 20 + type: SuspicionPistolSpawner + components: + - parent: 857 + pos: -5.5,24.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 21 + type: SuspicionPistolMagazineSpawner + components: + - parent: 857 + pos: -31.5,13.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 22 + type: SuspicionPistolMagazineSpawner + components: + - parent: 857 + pos: -29.5,9.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 23 + type: SuspicionPistolMagazineSpawner + components: + - parent: 857 + pos: -9.5,6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 24 + type: SuspicionPistolMagazineSpawner + components: + - parent: 857 + pos: -10.5,1.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 25 + type: SuspicionPistolMagazineSpawner + components: + - parent: 857 + pos: -3.5,0.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 26 + type: SuspicionShotgunMagazineSpawner + components: + - parent: 857 + pos: -29.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 27 + type: SuspicionShotgunMagazineSpawner + components: + - parent: 857 + pos: -30.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 28 + type: SuspicionShotgunSpawner + components: + - parent: 857 + pos: -29.5,-5.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 29 + type: SuspicionRifleMagazineSpawner + components: + - parent: 857 + pos: -7.5,7.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 30 + type: SuspicionSMGSpawner + components: + - parent: 857 + pos: -7.5,8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 31 + type: SuspicionMagnumMagazineSpawner + components: + - parent: 857 + pos: 16.5,7.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 32 + type: SuspicionRevolverSpawner + components: + - parent: 857 + pos: 15.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 33 + type: SuspicionMagnumMagazineSpawner + components: + - parent: 857 + pos: 14.5,-2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 34 + type: SuspicionGrenadesSpawner + components: + - parent: 857 + pos: -8.5,-17.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 35 + type: SuspicionGrenadesSpawner + components: + - parent: 857 + pos: 0.5,-15.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 36 + type: SuspicionHitscanSpawner + components: + - parent: 857 + pos: 25.5,0.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 37 + type: SuspicionGrenadesSpawner + components: + - parent: 857 + pos: 18.5,1.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 38 + type: SuspicionGrenadesSpawner + components: + - parent: 857 + pos: 15.5,-0.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 39 + type: SuspicionRifleMagazineSpawner + components: + - parent: 857 + pos: -13.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 40 + type: SuspicionSniperSpawner + components: + - parent: 857 + pos: -8.5,-12.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 41 + type: SuspicionShotgunSpawner + components: + - parent: 857 + pos: -7.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 42 + type: SuspicionShotgunMagazineSpawner + components: + - parent: 857 + pos: -7.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 43 + type: SuspicionShotgunMagazineSpawner + components: + - parent: 857 + pos: -6.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 44 + type: FoodBananaCreamPie + components: + - parent: 857 + pos: -18.509874,-9.279623 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 45 + type: FoodBananaCreamPie + components: + - parent: 857 + pos: -18.947374,-9.467123 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 46 + type: FoodBanana + components: + - parent: 857 + pos: -19.463,-9.482748 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 47 + type: FoodBanana + components: + - parent: 857 + pos: -19.603624,-9.388998 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 48 + type: FoodBanana + components: + - parent: 857 + pos: -19.728624,-9.576498 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 49 + type: Poweredlight + components: + - parent: 857 + pos: -18.5,-7 rot: -1.5707963267948966 rad type: Transform - containers: - DisposalEntry: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 50 + type: Table + components: + - parent: 857 + pos: -19.5,-9.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 51 + type: bone_saw + components: + - parent: 857 + pos: 19.49593,-21.552101 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 52 + type: ShoesCoder + components: + - parent: 857 + pos: 47.437466,-6.6893435 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 53 + type: JawsOfLife + components: + - parent: 857 + pos: 39.53893,-0.77325034 + rot: -1.5707963267948966 rad + type: Transform + - useSound: /Audio/Items/jaws_pry.ogg + type: Tool + - anchored: False + type: Collidable +- uid: 54 + type: GlovesLatex + components: + - parent: 857 + pos: 22.086878,-4.4133806 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 55 + type: GlovesLatex + components: + - parent: 857 + pos: 21.618128,-4.4133806 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 56 + type: FoodMint + components: + - parent: 857 + pos: -2.776661,-3.3271997 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 57 + type: ToyPhazon + components: + - parent: 857 + pos: 9.449931,16.636608 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 58 + type: scalpel + components: + - parent: 857 + pos: 19.190952,-21.29313 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 59 + type: DrinkBottleRum + components: + - parent: 857 + pos: -15.694785,24.608267 + rot: -1.5707963267948966 rad + type: Transform + - caps: PourIn, PourOut, Injectable + type: Solution + - anchored: False + type: Collidable +- uid: 60 + type: DisgustingSweptSoup + components: + - parent: 857 + pos: -14.96041,24.545767 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 61 + type: retractor + components: + - parent: 857 + pos: 19.482815,-21.853302 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 62 + type: ToyMouse + components: + - parent: 857 + pos: 31.376545,-7.1625524 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 63 + type: SignSurgery + components: + - parent: 857 + pos: 18.296293,-18.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 64 + type: drill + components: + - parent: 857 + pos: 19.515043,-22.566078 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 65 + type: BedsheetMedical + components: + - parent: 857 + pos: 18.5,-20.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 66 + type: Bed + components: + - parent: 857 + pos: 18.5,-20.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 67 + type: hemostat + components: + - parent: 857 + pos: 19.655668,-21.300453 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 68 + type: LockerCursed + components: + - parent: 857 + pos: -8.5,-25.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - containers: + EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer - -- uid: 1 - type: DisposalBend +- uid: 69 + type: PowerCellRecharger components: - - parent: 15 - pos: -29.5,10.5 + - parent: 857 + pos: 39.5,-1.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - containers: + PowerCellCharger-powerCellContainer: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 70 + type: PlushieCarp + components: + - parent: 857 + pos: -4.7375913,-3.3900535 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 71 + type: SuspicionPistolSpawner + components: + - parent: 857 + pos: 8.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 72 + type: ToolboxGoldFilled + components: + - parent: 857 + pos: -3.454914,18.643616 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - containers: + storagebase: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 73 + type: DrinkGoldenCup + components: + - parent: 857 + pos: -3.470539,16.956116 + rot: -1.5707963267948966 rad + type: Transform + - caps: PourIn, PourOut, Injectable + type: Solution + - anchored: False + type: Collidable +- uid: 74 + type: GoldStack + components: + - parent: 857 + pos: -2.579914,16.362366 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 75 + type: GoldStack + components: + - parent: 857 + pos: -2.439289,16.72174 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 76 + type: GoldStack + components: + - parent: 857 + pos: -2.283039,16.518616 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 77 + type: GoldStack + components: + - parent: 857 + pos: -2.798664,16.424866 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 78 + type: GoldStack + components: + - parent: 857 + pos: -2.611164,16.549866 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 79 + type: GoldStack + components: + - parent: 857 + pos: -2.673664,16.72174 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 80 + type: GoldStack + components: + - parent: 857 + pos: -2.861164,16.72174 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 81 + type: GoldStack + components: + - parent: 857 + pos: -3.064289,16.53424 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 82 + type: Bling + components: + - parent: 857 + pos: -2.861164,18.612366 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 83 + type: Bling + components: + - parent: 857 + pos: -2.564289,18.643616 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 84 + type: Table + components: + - parent: 857 + pos: -3.5,16.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 85 + type: Table + components: + - parent: 857 + pos: -2.5,16.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 86 + type: Table + components: + - parent: 857 + pos: -2.5,18.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 87 + type: Table + components: + - parent: 857 + pos: -3.5,18.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 88 + type: ReinforcedWindow + components: + - parent: 857 + pos: 28.5,14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 89 + type: ReinforcedWindow + components: + - parent: 857 + pos: 27.5,14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 90 + type: ReinforcedWindow + components: + - parent: 857 + pos: 26.5,14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 91 + type: LowWall + components: + - parent: 857 + pos: 28.5,14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 92 + type: LowWall + components: + - parent: 857 + pos: 27.5,14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 93 + type: LowWall + components: + - parent: 857 + pos: 26.5,14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 94 + type: solid_wall + components: + - parent: 857 + pos: -22.5,-16.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 95 + type: solid_wall + components: + - parent: 857 + pos: -23.5,-16.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 96 + type: solid_wall + components: + - parent: 857 + pos: -24.5,-16.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 97 + type: solid_wall + components: + - parent: 857 + pos: -25.5,-16.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 98 + type: solid_wall + components: + - parent: 857 + pos: -25.5,-15.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 99 + type: solid_wall + components: + - parent: 857 + pos: -25.5,-14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 100 + type: solid_wall + components: + - parent: 857 + pos: -25.5,-13.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 101 + type: solid_wall + components: + - parent: 857 + pos: -25.5,-12.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 102 + type: Brutepack + components: + - parent: 857 + pos: 6.839255,-3.3712535 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 103 + type: MaskJoy + components: + - parent: 857 + pos: -9.360208,-25.487799 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 104 + type: RCD + components: + - parent: 857 + pos: 29.55875,-4.333219 + type: Transform + - anchored: False + type: Collidable +- uid: 105 + type: RCD + components: + - parent: 857 + pos: 29.4025,-4.489469 + type: Transform + - anchored: False + type: Collidable +- uid: 106 + type: WeldingFuelTank + components: + - parent: 857 + pos: -1.5,-11.5 + type: Transform + - anchored: False + type: Collidable +- uid: 107 + type: WaterTankFull + components: + - parent: 857 + pos: 0.5,-11.5 + type: Transform + - anchored: False + type: Collidable +- uid: 108 + type: Basketball + components: + - parent: 857 + pos: -1.5183675,-6.4951944 + type: Transform + - anchored: False + type: Collidable +- uid: 109 + type: SignSomethingOld2 + components: + - parent: 857 + pos: 24.996767,-0.60842 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 110 + type: SignSomethingOld + components: + - parent: 857 + pos: 17.158585,-23.619913 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 111 + type: SignAtmos + components: + - parent: 857 + pos: 31.498556,7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 112 + type: Paper + components: + - parent: 857 + pos: 8.379866,25.982151 + type: Transform + - anchored: False + type: Collidable +- uid: 113 + type: DrinkHotCoffee + components: + - parent: 857 + pos: 8.661116,25.513401 + type: Transform + - caps: PourIn, PourOut, Injectable + type: Solution + - anchored: False + type: Collidable +- uid: 114 + type: RandHandTele + components: + - parent: 857 + pos: 8.379866,26.654026 + type: Transform + - anchored: False + type: Collidable +- uid: 115 + type: FlashlightLantern + components: + - parent: 857 + pos: 30.248352,-4.36431 + type: Transform + - anchored: False + type: Collidable + - containers: + flashlight_cell_container: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 116 + type: FlashlightLantern + components: + - parent: 857 + pos: 30.545227,-4.17681 + type: Transform + - anchored: False + type: Collidable + - containers: + flashlight_cell_container: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 117 + type: HatHardhatYellow + components: + - parent: 857 + pos: 31.357727,-4.36431 + type: Transform + - anchored: False + type: Collidable +- uid: 118 + type: HatHardhatWhite + components: + - parent: 857 + pos: 31.623352,-4.14556 + type: Transform + - anchored: False + type: Collidable +- uid: 119 + type: HatHardhatRed + components: + - parent: 857 + pos: 31.201477,-4.05181 + type: Transform + - anchored: False + type: Collidable +- uid: 120 + type: S + components: + - parent: 857 + pos: -9.816995,-25.23114 + type: Transform + - anchored: False + type: Collidable +- uid: 121 + type: Chair + components: + - parent: 857 + pos: 10.5,1.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 122 + type: Chair + components: + - parent: 857 + pos: 9.5,1.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 123 + type: Chair + components: + - parent: 857 + pos: 8.5,1.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 124 + type: Stunbaton + components: + - parent: 857 + pos: -14.484581,20.641253 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - containers: + stunbaton_cell_container: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 125 + type: Stunbaton + components: + - parent: 857 + pos: -14.609581,20.969378 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - containers: + stunbaton_cell_container: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 126 + type: PowerCellSmallStandard + components: + - parent: 127 + type: Transform + - anchored: False + type: Collidable +- uid: 127 + type: TaserGun + components: + - parent: 857 + pos: -14.515831,21.735003 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - containers: + BatteryBarrel-powercell-container: + entities: + - 126 + type: Content.Server.GameObjects.ContainerSlot + BatteryBarrel-ammo-container: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 128 + type: PowerCellSmallStandard + components: + - parent: 129 + type: Transform + - anchored: False + type: Collidable +- uid: 129 + type: TaserGun + components: + - parent: 857 + pos: -13.672081,21.719378 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - containers: + BatteryBarrel-powercell-container: + entities: + - 128 + type: Content.Server.GameObjects.ContainerSlot + BatteryBarrel-ammo-container: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 130 + type: Table + components: + - parent: 857 + pos: -14.5,20.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 131 + type: Table + components: + - parent: 857 + pos: -13.5,21.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 132 + type: Table + components: + - parent: 857 + pos: -14.5,21.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 133 + type: SignEngineering + components: + - parent: 857 + pos: 30.305984,-0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 134 + type: Poweredlight + components: + - parent: 857 + pos: 41.000477,14 + rot: -1.5707963267948966 rad + type: Transform + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 135 + type: Poweredlight + components: + - parent: 857 + pos: -10,13.5 + type: Transform + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 136 + type: Poweredlight + components: + - parent: 857 + pos: 49.53657,5 + rot: -1.5707963267948966 rad + type: Transform + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 137 + type: PlaqueZum + components: + - parent: 857 + pos: 33.498077,11.399912 rot: 1.5707963267948966 rad type: Transform - - containers: - DisposalBend: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 2 - type: DisposalBend + - deadThreshold: 100 + type: Destructible +- uid: 138 + type: SignDirectionalEng components: - - parent: 15 - pos: -28.5,10.5 + - parent: 857 + pos: 5.987236,6.2578936 + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 139 + type: SignBridge + components: + - parent: 857 + pos: 5.6507263,22.5 + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 140 + type: Poweredlight + components: + - parent: 857 + pos: -25.939785,7 + type: Transform + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 141 + type: Poweredlight + components: + - parent: 857 + pos: -15.231159,-17 rot: -1.5707963267948966 rad type: Transform - containers: - DisposalBend: - type: Robust.Server.GameObjects.Components.Container.Container + light_bulb: + type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer - -- uid: 3 +- uid: 142 + type: SignRND + components: + - parent: 857 + pos: -5.506548,-18.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 143 + type: SignMedical + components: + - parent: 857 + pos: 6.500677,2.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 144 + type: SignGravity + components: + - parent: 857 + pos: 48.325787,-1.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 145 + type: SignToolStorage + components: + - parent: 857 + pos: -26.694574,6.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 146 + type: Poweredlight + components: + - parent: 857 + pos: 28.73304,7 + rot: -1.5707963267948966 rad + type: Transform + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 147 + type: SignEVA + components: + - parent: 857 + pos: 10.691145,6.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 148 + type: SignChem + components: + - parent: 857 + pos: 14.317627,-3.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 149 + type: SignCargoDock + components: + - parent: 857 + pos: 18.501179,14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 150 + type: solid_wall + components: + - parent: 857 + pos: 24.5,14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 151 + type: solid_wall + components: + - parent: 857 + pos: 18.5,14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 152 + type: LowWall + components: + - parent: 857 + pos: 21.5,15.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 153 + type: LowWall + components: + - parent: 857 + pos: 21.5,16.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 154 + type: SignDirectionalEvac + components: + - parent: 857 + pos: -20.488556,6.5 + rot: 1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 155 + type: SignDirectionalSupply + components: + - parent: 857 + pos: -25.704908,7.5 + rot: 1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 156 + type: AirlockMaintCargo + components: + - parent: 857 + pos: -24.5,-12.5 + type: Transform +- uid: 157 + type: ConveyorBelt + components: + - parent: 857 + pos: -23.5,-13.5 + type: Transform +- uid: 158 + type: LargeBeaker + components: + - parent: 857 + pos: 18.611881,1.2455455 + rot: 3.141592653589793 rad + type: Transform + - anchored: False + type: Collidable +- uid: 159 + type: Beaker + components: + - parent: 857 + pos: 18.361881,1.6674205 + rot: 3.141592653589793 rad + type: Transform + - anchored: False + type: Collidable +- uid: 160 type: DisposalBend components: - - parent: 15 - pos: -8.5,-14.5 + - parent: 857 + pos: 17.5,-0.5 type: Transform + - deadThreshold: 100 + type: Breakable - containers: DisposalBend: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer - -- uid: 4 - type: DisposalPipe +- uid: 161 + type: DisposalBend components: - - parent: 15 - pos: -7.5,-14.5 + - parent: 857 + pos: 17.5,-1.5 rot: 3.141592653589793 rad type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalBend: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 162 + type: DisposalPipe + components: + - parent: 857 + pos: 16.5,-1.5 + type: Transform + - deadThreshold: 100 + type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer - -- uid: 5 - type: DisposalPipe +- uid: 163 + type: ConveyorSwitch components: - - parent: 15 - pos: -6.5,-14.5 + - parent: 857 + pos: -23.467268,-14.347846 rot: 3.141592653589793 rad type: Transform + - conveyors: [] + switches: [] + type: ConveyorSwitch +- uid: 164 + type: DisposalJunctionFlipped + components: + - parent: 857 + pos: 34.5,3.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalJunction: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 165 + type: DisposalJunction + components: + - parent: 857 + pos: 24.5,3.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalJunction: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 166 + type: DisposalJunction + components: + - parent: 857 + pos: 12.5,-1.5 + rot: 1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalJunction: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 167 + type: DisposalJunctionFlipped + components: + - parent: 857 + pos: 12.5,3.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalJunction: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 168 + type: DisposalJunction + components: + - parent: 857 + pos: 2.5,17.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalJunction: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 169 + type: DisposalJunctionFlipped + components: + - parent: 857 + pos: 2.5,11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalJunction: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 170 + type: DisposalJunctionFlipped + components: + - parent: 857 + pos: -10.5,-15.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalJunction: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 171 + type: DisposalJunction + components: + - parent: 857 + pos: -17.5,-15.5 + rot: 1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalJunction: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 172 + type: DisposalYJunction + components: + - parent: 857 + pos: -23.5,-10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalJunction: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 173 + type: DisposalJunctionFlipped + components: + - parent: 857 + pos: -27.5,-10.5 + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalJunction: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 174 + type: DisposalJunction + components: + - parent: 857 + pos: -28.5,3.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalJunction: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 175 + type: DisposalJunction + components: + - parent: 857 + pos: -22.5,3.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalJunction: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 176 + type: DisposalJunctionFlipped + components: + - parent: 857 + pos: -12.5,3.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalJunction: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 177 + type: DisposalJunctionFlipped + components: + - parent: 857 + pos: 0.5,3.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalJunction: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 178 + type: DisposalJunction + components: + - parent: 857 + pos: 2.5,3.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalJunction: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 179 + type: DisposalJunctionFlipped + components: + - parent: 857 + pos: 3.5,3.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalJunction: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 180 + type: DisposalPipe + components: + - parent: 857 + pos: -17.5,-14.5 + rot: 1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer - -- uid: 6 +- uid: 181 + type: DisposalPipe + components: + - parent: 857 + pos: -17.5,-13.5 + rot: 1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 182 + type: DisposalPipe + components: + - parent: 857 + pos: -17.5,-12.5 + rot: 1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 183 + type: DisposalPipe + components: + - parent: 857 + pos: -17.5,-11.5 + rot: 1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 184 type: DisposalTrunk components: - - parent: 15 - pos: -5.5,-14.5 - rot: 3.141592653589793 rad + - parent: 857 + pos: -17.5,-22.5 + rot: 1.5707963267948966 rad type: Transform + - deadThreshold: 100 + type: Breakable - containers: DisposalEntry: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer - -- uid: 7 +- uid: 185 type: DisposalUnit components: - - parent: 15 - pos: -5.5,-14.5 - rot: -1.5707963267948966 rad + - parent: 857 + pos: -17.5,-22.5 + rot: 3.141592653589793 rad type: Transform - + - deadThreshold: 100 + type: Destructible - containers: DisposalUnit: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 8 +- uid: 186 type: DisposalPipe components: - - parent: 15 - pos: -9.5,-15.5 + - parent: 857 + pos: -16.5,-15.5 + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 187 + type: DisposalPipe + components: + - parent: 857 + pos: -28.5,5.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 188 + type: DisposalPipe + components: + - parent: 857 + pos: -28.5,6.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 189 + type: DisposalPipe + components: + - parent: 857 + pos: -28.5,7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 190 + type: DisposalPipe + components: + - parent: 857 + pos: -28.5,8.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 191 + type: DisposalPipe + components: + - parent: 857 + pos: -28.5,9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 192 + type: VendingMachineYouTool + components: + - parent: 857 + pos: -28.5,11.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 193 + type: DisposalUnit + components: + - parent: 857 + pos: -29.5,11.5 + rot: -1.5707963267948966 rad + type: Transform + + - deadThreshold: 100 + type: Destructible + - containers: + DisposalUnit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 194 + type: DisposalBend + components: + - parent: 857 + pos: -8.5,-15.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalBend: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 195 + type: DisposalPipe + components: + - parent: 857 + pos: -17.5,-16.5 + rot: 1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 196 + type: DisposalPipe + components: + - parent: 857 + pos: 0.5,17.5 + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 197 + type: DisposalPipe + components: + - parent: 857 + pos: -0.5,17.5 + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 198 + type: DisposalPipe + components: + - parent: 857 + pos: -1.5,17.5 + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 199 + type: DisposalPipe + components: + - parent: 857 + pos: -2.5,17.5 + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 200 + type: DisposalPipe + components: + - parent: 857 + pos: -3.5,17.5 + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 201 + type: DisposalPipe + components: + - parent: 857 + pos: -4.5,17.5 + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 202 + type: DisposalTrunk + components: + - parent: 857 + pos: -5.5,17.5 + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalEntry: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 203 + type: DisposalUnit + components: + - parent: 857 + pos: -5.5,17.5 + rot: -1.5707963267948966 rad + type: Transform + + - deadThreshold: 100 + type: Destructible + - containers: + DisposalUnit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 204 + type: DisposalPipe + components: + - parent: 857 + pos: -17.5,-17.5 + rot: 1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 205 + type: DisposalPipe + components: + - parent: 857 + pos: 4.5,11.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 206 + type: DisposalPipe + components: + - parent: 857 + pos: 5.5,11.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 207 + type: DisposalTrunk + components: + - parent: 857 + pos: 6.5,11.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalEntry: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 208 + type: DisposalUnit + components: + - parent: 857 + pos: 6.5,11.5 + rot: 3.141592653589793 rad + type: Transform + + - deadThreshold: 100 + type: Destructible + - containers: + DisposalUnit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 209 + type: DisposalPipe + components: + - parent: 857 + pos: -17.5,-18.5 + rot: 1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 210 + type: DisposalPipe + components: + - parent: 857 + pos: 24.5,5.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 211 + type: DisposalPipe + components: + - parent: 857 + pos: 24.5,6.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 212 + type: DisposalPipe + components: + - parent: 857 + pos: 24.5,7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 213 + type: DisposalTrunk + components: + - parent: 857 + pos: 24.5,8.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalEntry: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 214 + type: DisposalUnit + components: + - parent: 857 + pos: 24.5,8.5 + rot: -1.5707963267948966 rad + type: Transform + + - deadThreshold: 100 + type: Destructible + - containers: + DisposalUnit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 215 + type: DisposalPipe + components: + - parent: 857 + pos: 13.5,-1.5 + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 216 + type: DisposalPipe + components: + - parent: 857 + pos: 14.5,-1.5 + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 217 + type: DisposalPipe + components: + - parent: 857 + pos: 15.5,-1.5 + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 218 + type: DisposalPipe + components: + - parent: 857 + pos: -17.5,-19.5 + rot: 1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 219 + type: Recycler + components: + - parent: 857 + pos: -21.5,-13.5 + type: Transform +- uid: 220 + type: DisposalPipe + components: + - parent: 857 + pos: -17.5,-20.5 + rot: 1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 221 + type: DisposalPipe + components: + - parent: 857 + pos: 34.5,1.5 + rot: 1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 222 + type: DisposalPipe + components: + - parent: 857 + pos: 34.5,0.5 + rot: 1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 223 + type: DisposalPipe + components: + - parent: 857 + pos: 34.5,-0.5 + rot: 1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 224 + type: DisposalPipe + components: + - parent: 857 + pos: 34.5,-1.5 + rot: 1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 225 + type: DisposalPipe + components: + - parent: 857 + pos: 34.5,-2.5 + rot: 1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 226 + type: DisposalPipe + components: + - parent: 857 + pos: 34.5,-3.5 + rot: 1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 227 + type: DisposalTrunk + components: + - parent: 857 + pos: 34.5,-4.5 + rot: 1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalEntry: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 228 + type: DisposalUnit + components: + - parent: 857 + pos: 34.5,-4.5 + rot: 3.141592653589793 rad + type: Transform + + - deadThreshold: 100 + type: Destructible + - containers: + DisposalUnit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 229 + type: DisposalPipe + components: + - parent: 857 + pos: 30.5,3.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 230 + type: DisposalPipe + components: + - parent: 857 + pos: 36.5,3.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 231 + type: DisposalPipe + components: + - parent: 857 + pos: 35.5,3.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 232 + type: DisposalPipe + components: + - parent: 857 + pos: 34.5,2.5 + rot: 1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 233 + type: DisposalPipe + components: + - parent: 857 + pos: 33.5,3.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 234 + type: DisposalPipe + components: + - parent: 857 + pos: 32.5,3.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 235 + type: DisposalPipe + components: + - parent: 857 + pos: 31.5,3.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 236 + type: DisposalBend + components: + - parent: 857 + pos: 37.5,3.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalBend: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 237 + type: DisposalPipe + components: + - parent: 857 + pos: 37.5,4.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 238 + type: DisposalPipe + components: + - parent: 857 + pos: 37.5,5.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 239 + type: DisposalTrunk + components: + - parent: 857 + pos: 37.5,6.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalEntry: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 240 + type: DisposalUnit + components: + - parent: 857 + pos: 37.5,6.5 + rot: -1.5707963267948966 rad + type: Transform + + - deadThreshold: 100 + type: Destructible + - containers: + DisposalUnit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 241 + type: DisposalBend + components: + - parent: 857 + pos: 2.5,29.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalBend: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 242 + type: DisposalPipe + components: + - parent: 857 + pos: 2.5,5.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 243 + type: DisposalPipe + components: + - parent: 857 + pos: 2.5,6.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 244 + type: DisposalPipe + components: + - parent: 857 + pos: 2.5,7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 245 + type: DisposalPipe + components: + - parent: 857 + pos: 2.5,8.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 246 + type: DisposalPipe + components: + - parent: 857 + pos: 2.5,9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 247 + type: DisposalPipe + components: + - parent: 857 + pos: 2.5,10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 248 + type: DisposalPipe + components: + - parent: 857 + pos: 3.5,11.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 249 + type: DisposalPipe + components: + - parent: 857 + pos: 2.5,12.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 250 + type: DisposalPipe + components: + - parent: 857 + pos: 2.5,13.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 251 + type: DisposalPipe + components: + - parent: 857 + pos: 2.5,14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 252 + type: DisposalPipe + components: + - parent: 857 + pos: 2.5,15.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 253 + type: DisposalPipe + components: + - parent: 857 + pos: 2.5,16.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 254 + type: DisposalPipe + components: + - parent: 857 + pos: 1.5,17.5 + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 255 + type: DisposalPipe + components: + - parent: 857 + pos: 2.5,18.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 256 + type: DisposalPipe + components: + - parent: 857 + pos: 2.5,19.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 257 + type: DisposalPipe + components: + - parent: 857 + pos: 2.5,20.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 258 + type: DisposalPipe + components: + - parent: 857 + pos: 2.5,21.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 259 + type: DisposalPipe + components: + - parent: 857 + pos: 2.5,22.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 260 + type: DisposalPipe + components: + - parent: 857 + pos: 2.5,23.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 261 + type: DisposalPipe + components: + - parent: 857 + pos: 2.5,24.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 262 + type: DisposalPipe + components: + - parent: 857 + pos: 2.5,25.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 263 + type: DisposalPipe + components: + - parent: 857 + pos: 2.5,26.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 264 + type: DisposalPipe + components: + - parent: 857 + pos: 2.5,27.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 265 + type: Window + components: + - parent: 857 + pos: 37.5,1.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 266 + type: DisposalPipe + components: + - parent: 857 + pos: 2.5,28.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 267 + type: DisposalPipe + components: + - parent: 857 + pos: -17.5,-21.5 + rot: 1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 268 + type: DisposalPipe + components: + - parent: 857 + pos: 1.5,29.5 + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 269 + type: DisposalPipe + components: + - parent: 857 + pos: 0.5,29.5 + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 270 + type: DisposalPipe + components: + - parent: 857 + pos: -0.5,29.5 + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 271 + type: DisposalPipe + components: + - parent: 857 + pos: -1.5,29.5 + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 272 + type: DisposalTrunk + components: + - parent: 857 + pos: -2.5,29.5 + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalEntry: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 273 + type: DisposalUnit + components: + - parent: 857 + pos: -2.5,29.5 + rot: 3.141592653589793 rad + type: Transform + + - deadThreshold: 100 + type: Destructible + - containers: + DisposalUnit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 274 + type: DisposalPipe + components: + - parent: 857 + pos: -18.5,-10.5 + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 275 + type: DisposalPipe + components: + - parent: 857 + pos: 3.5,-8.5 + rot: 1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 276 + type: DisposalPipe + components: + - parent: 857 + pos: 3.5,-7.5 + rot: 1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 277 + type: DisposalPipe + components: + - parent: 857 + pos: 3.5,-6.5 + rot: 1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 278 + type: DisposalPipe + components: + - parent: 857 + pos: 3.5,-5.5 + rot: 1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 279 + type: DisposalPipe + components: + - parent: 857 + pos: 3.5,-4.5 + rot: 1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 280 + type: DisposalPipe + components: + - parent: 857 + pos: 3.5,-3.5 + rot: 1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 281 + type: DisposalPipe + components: + - parent: 857 + pos: 3.5,-2.5 + rot: 1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 282 + type: DisposalPipe + components: + - parent: 857 + pos: 3.5,-1.5 + rot: 1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 283 + type: DisposalPipe + components: + - parent: 857 + pos: 3.5,-0.5 + rot: 1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 284 + type: DisposalPipe + components: + - parent: 857 + pos: 3.5,0.5 + rot: 1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 285 + type: DisposalPipe + components: + - parent: 857 + pos: 3.5,1.5 + rot: 1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 286 + type: DisposalPipe + components: + - parent: 857 + pos: 3.5,2.5 + rot: 1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 287 + type: DisposalPipe + components: + - parent: 857 + pos: 3.5,-10.5 + rot: 1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 288 + type: DisposalBend + components: + - parent: 857 + pos: 3.5,-11.5 + rot: 1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalBend: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 289 + type: DisposalPipe + components: + - parent: 857 + pos: 5.5,-11.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 290 + type: DisposalPipe + components: + - parent: 857 + pos: 6.5,-11.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 291 + type: DisposalPipe + components: + - parent: 857 + pos: 7.5,-11.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 292 + type: DisposalPipe + components: + - parent: 857 + pos: 8.5,-11.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 293 + type: DisposalPipe + components: + - parent: 857 + pos: 4.5,-11.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 294 + type: DisposalPipe + components: + - parent: 857 + pos: 9.5,-11.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 295 + type: DisposalPipe + components: + - parent: 857 + pos: 10.5,-11.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 296 + type: DisposalTrunk + components: + - parent: 857 + pos: 11.5,-11.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalEntry: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 297 + type: DisposalUnit + components: + - parent: 857 + pos: 11.5,-11.5 + rot: 3.141592653589793 rad + type: Transform + + - deadThreshold: 100 + type: Destructible + - containers: + DisposalUnit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 298 + type: DisposalPipe + components: + - parent: 857 + pos: -19.5,-10.5 + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 299 + type: DisposalPipe + components: + - parent: 857 + pos: 12.5,1.5 + rot: 1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 300 + type: DisposalPipe + components: + - parent: 857 + pos: 12.5,0.5 + rot: 1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 301 + type: DisposalPipe + components: + - parent: 857 + pos: 12.5,-0.5 + rot: 1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 302 + type: ConveyorBelt + components: + - parent: 857 + pos: -22.5,-13.5 + type: Transform +- uid: 303 + type: DisposalTrunk + components: + - parent: 857 + pos: 12.5,-2.5 + rot: 1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalEntry: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 304 + type: DisposalUnit + components: + - parent: 857 + pos: 12.5,-2.5 + rot: 3.141592653589793 rad + type: Transform + + - deadThreshold: 100 + type: Destructible + - containers: + DisposalUnit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 305 + type: Window + components: + - parent: 857 + pos: 36.5,-0.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 306 + type: Window + components: + - parent: 857 + pos: 34.5,1.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 307 + type: DisposalPipe + components: + - parent: 857 + pos: 5.5,3.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 308 + type: DisposalPipe + components: + - parent: 857 + pos: 6.5,3.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 309 + type: DisposalPipe + components: + - parent: 857 + pos: 7.5,3.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 310 + type: DisposalPipe + components: + - parent: 857 + pos: 8.5,3.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 311 + type: DisposalPipe + components: + - parent: 857 + pos: 9.5,3.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 312 + type: DisposalPipe + components: + - parent: 857 + pos: 10.5,3.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 313 + type: DisposalPipe + components: + - parent: 857 + pos: 11.5,3.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 314 + type: DisposalPipe + components: + - parent: 857 + pos: 12.5,2.5 + rot: 1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 315 + type: DisposalPipe + components: + - parent: 857 + pos: 13.5,3.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 316 + type: DisposalPipe + components: + - parent: 857 + pos: 14.5,3.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 317 + type: DisposalPipe + components: + - parent: 857 + pos: 15.5,3.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 318 + type: DisposalPipe + components: + - parent: 857 + pos: 16.5,3.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 319 + type: DisposalPipe + components: + - parent: 857 + pos: 17.5,3.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 320 + type: DisposalPipe + components: + - parent: 857 + pos: 18.5,3.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 321 + type: DisposalPipe + components: + - parent: 857 + pos: 19.5,3.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 322 + type: DisposalPipe + components: + - parent: 857 + pos: 20.5,3.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 323 + type: DisposalPipe + components: + - parent: 857 + pos: 21.5,3.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 324 + type: DisposalPipe + components: + - parent: 857 + pos: 22.5,3.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 325 + type: DisposalPipe + components: + - parent: 857 + pos: 23.5,3.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 326 + type: DisposalPipe + components: + - parent: 857 + pos: 24.5,4.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 327 + type: DisposalPipe + components: + - parent: 857 + pos: 25.5,3.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 328 + type: DisposalPipe + components: + - parent: 857 + pos: 26.5,3.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 329 + type: DisposalPipe + components: + - parent: 857 + pos: 27.5,3.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 330 + type: DisposalPipe + components: + - parent: 857 + pos: 28.5,3.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 331 + type: DisposalPipe + components: + - parent: 857 + pos: 29.5,3.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 332 + type: DisposalPipe + components: + - parent: 857 + pos: 4.5,3.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 333 + type: DisposalPipe + components: + - parent: 857 + pos: 3.5,-9.5 + rot: 1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 334 + type: DisposalPipe + components: + - parent: 857 + pos: 2.5,4.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 335 + type: DisposalPipe + components: + - parent: 857 + pos: -20.5,-10.5 + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 336 + type: DisposalTrunk + components: + - parent: 857 + pos: 0.5,1.5 + rot: 1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalEntry: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 337 + type: DisposalUnit + components: + - parent: 857 + pos: 0.5,1.5 + rot: -1.5707963267948966 rad + type: Transform + + - deadThreshold: 100 + type: Destructible + - containers: + DisposalUnit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 338 + type: DisposalPipe + components: + - parent: 857 + pos: -27.5,-9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 339 + type: DisposalTrunk + components: + - parent: 857 + pos: -27.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalEntry: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 340 + type: DisposalPipe + components: + - parent: 857 + pos: -21.5,-10.5 + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 341 + type: DisposalPipe + components: + - parent: 857 + pos: -12.5,2.5 + rot: 1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 342 + type: DisposalTrunk + components: + - parent: 857 + pos: -12.5,1.5 + rot: 1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalEntry: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 343 + type: DisposalPipe + components: + - parent: 857 + pos: -22.5,-10.5 + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 344 + type: DisposalPipe + components: + - parent: 857 + pos: -23.5,-12.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 345 + type: DisposalPipe + components: + - parent: 857 + pos: -23.5,-11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 346 + type: DisposalBend + components: + - parent: 857 + pos: -32.5,3.5 + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalBend: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 347 + type: DisposalPipe + components: + - parent: 857 + pos: -22.5,4.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 348 + type: DisposalPipe + components: + - parent: 857 + pos: -22.5,5.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 349 + type: DisposalTrunk + components: + - parent: 857 + pos: -22.5,6.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalEntry: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 350 + type: DisposalBend + components: + - parent: 857 + pos: -17.5,-10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalBend: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 351 + type: DisposalPipe + components: + - parent: 857 + pos: -7.5,3.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 352 + type: DisposalPipe + components: + - parent: 857 + pos: -6.5,3.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 353 + type: DisposalPipe + components: + - parent: 857 + pos: -5.5,3.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 354 + type: DisposalPipe + components: + - parent: 857 + pos: -4.5,3.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 355 + type: DisposalPipe + components: + - parent: 857 + pos: -3.5,3.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 356 + type: DisposalPipe + components: + - parent: 857 + pos: -2.5,3.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 357 + type: DisposalPipe + components: + - parent: 857 + pos: -1.5,3.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 358 + type: DisposalPipe + components: + - parent: 857 + pos: -0.5,3.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 359 + type: DisposalPipe + components: + - parent: 857 + pos: 0.5,2.5 + rot: 1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 360 + type: DisposalPipe + components: + - parent: 857 + pos: 1.5,3.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 361 + type: DisposalPipe + components: + - parent: 857 + pos: -8.5,3.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 362 + type: DisposalPipe + components: + - parent: 857 + pos: -9.5,3.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 363 + type: DisposalPipe + components: + - parent: 857 + pos: -10.5,3.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 364 + type: DisposalPipe + components: + - parent: 857 + pos: -11.5,3.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 365 + type: DisposalUnit + components: + - parent: 857 + pos: -12.5,1.5 + rot: -1.5707963267948966 rad + type: Transform + + - deadThreshold: 100 + type: Destructible + - containers: + DisposalUnit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 366 + type: DisposalPipe + components: + - parent: 857 + pos: -13.5,3.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 367 + type: DisposalPipe + components: + - parent: 857 + pos: -14.5,3.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 368 + type: DisposalPipe + components: + - parent: 857 + pos: -15.5,3.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 369 + type: DisposalPipe + components: + - parent: 857 + pos: -16.5,3.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 370 + type: DisposalPipe + components: + - parent: 857 + pos: -17.5,3.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 371 + type: DisposalPipe + components: + - parent: 857 + pos: -18.5,3.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 372 + type: DisposalPipe + components: + - parent: 857 + pos: -19.5,3.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 373 + type: DisposalPipe + components: + - parent: 857 + pos: -20.5,3.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 374 + type: DisposalPipe + components: + - parent: 857 + pos: -21.5,3.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 375 + type: DisposalUnit + components: + - parent: 857 + pos: -22.5,6.5 + rot: 3.141592653589793 rad + type: Transform + + - deadThreshold: 100 + type: Destructible + - containers: + DisposalUnit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 376 + type: DisposalPipe + components: + - parent: 857 + pos: -23.5,3.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 377 + type: DisposalPipe + components: + - parent: 857 + pos: -24.5,3.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 378 + type: DisposalPipe + components: + - parent: 857 + pos: -25.5,3.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 379 + type: DisposalPipe + components: + - parent: 857 + pos: -26.5,3.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 380 + type: DisposalPipe + components: + - parent: 857 + pos: -27.5,3.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 381 + type: DisposalPipe + components: + - parent: 857 + pos: -28.5,4.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 382 + type: DisposalPipe + components: + - parent: 857 + pos: -29.5,3.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 383 + type: DisposalPipe + components: + - parent: 857 + pos: -30.5,3.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 384 + type: DisposalPipe + components: + - parent: 857 + pos: -31.5,3.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 385 + type: DisposalPipe + components: + - parent: 857 + pos: -32.5,2.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 386 + type: DisposalPipe + components: + - parent: 857 + pos: -32.5,1.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 387 + type: DisposalPipe + components: + - parent: 857 + pos: -32.5,0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 388 + type: DisposalPipe + components: + - parent: 857 + pos: -32.5,-0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 389 + type: DisposalPipe + components: + - parent: 857 + pos: -32.5,-1.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 390 + type: DisposalPipe + components: + - parent: 857 + pos: -32.5,-2.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 391 + type: DisposalPipe + components: + - parent: 857 + pos: -32.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 392 + type: DisposalPipe + components: + - parent: 857 + pos: -32.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 393 + type: DisposalPipe + components: + - parent: 857 + pos: -32.5,-5.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 394 + type: DisposalPipe + components: + - parent: 857 + pos: -32.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 395 + type: DisposalPipe + components: + - parent: 857 + pos: -32.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 396 + type: DisposalPipe + components: + - parent: 857 + pos: -32.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 397 + type: DisposalPipe + components: + - parent: 857 + pos: -32.5,-9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 398 + type: DisposalBend + components: + - parent: 857 + pos: -32.5,-10.5 + rot: 1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalBend: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 399 + type: DisposalPipe + components: + - parent: 857 + pos: -31.5,-10.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 400 + type: DisposalPipe + components: + - parent: 857 + pos: -30.5,-10.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 401 + type: DisposalPipe + components: + - parent: 857 + pos: -29.5,-10.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 402 + type: DisposalPipe + components: + - parent: 857 + pos: -28.5,-10.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 403 + type: DisposalUnit + components: + - parent: 857 + pos: -27.5,-8.5 + rot: 1.5707963267948966 rad + type: Transform + + - deadThreshold: 100 + type: Destructible + - containers: + DisposalUnit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 404 + type: DisposalPipe + components: + - parent: 857 + pos: -26.5,-10.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 405 + type: DisposalPipe + components: + - parent: 857 + pos: -25.5,-10.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 406 + type: DisposalPipe + components: + - parent: 857 + pos: -24.5,-10.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 407 + type: DisposalUnit + components: + - parent: 857 + pos: -10.5,-17.5 + rot: -1.5707963267948966 rad + type: Transform + + - deadThreshold: 100 + type: Destructible + - containers: + DisposalUnit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 408 + type: AirlockMaintCommon + components: + - parent: 857 + pos: -24.5,-12.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 409 + type: Window + components: + - parent: 857 + pos: 32.5,1.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 410 + type: ReinforcedWindow + components: + - parent: 857 + pos: 30.5,4.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 411 + type: solid_wall + components: + - parent: 857 + pos: -23.5,-12.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 412 + type: solid_wall + components: + - parent: 857 + pos: -22.5,-12.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 413 + type: solid_wall + components: + - parent: 857 + pos: -21.5,-12.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 414 + type: solid_wall + components: + - parent: 857 + pos: -20.5,-12.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 415 + type: solid_wall + components: + - parent: 857 + pos: -19.5,-12.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 416 + type: solid_wall + components: + - parent: 857 + pos: -19.5,-13.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 417 + type: solid_wall + components: + - parent: 857 + pos: -19.5,-14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 418 + type: solid_wall + components: + - parent: 857 + pos: -19.5,-15.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 419 + type: TrashSpawner + components: + - parent: 857 + pos: 9.5,13.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 420 + type: TrashSpawner + components: + - parent: 857 + pos: 12.5,15.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 421 + type: TrashSpawner + components: + - parent: 857 + pos: 13.5,19.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 422 + type: TrashSpawner + components: + - parent: 857 + pos: 1.5,16.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 423 + type: TrashSpawner + components: + - parent: 857 + pos: 4.5,9.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 424 + type: TrashSpawner + components: + - parent: 857 + pos: -22.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 425 + type: TrashSpawner + components: + - parent: 857 + pos: -25.5,0.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 426 + type: TrashSpawner + components: + - parent: 857 + pos: -17.5,3.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 427 + type: TrashSpawner + components: + - parent: 857 + pos: -8.5,-1.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 428 + type: TrashSpawner + components: + - parent: 857 + pos: -1.5,-0.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 429 + type: TrashSpawner + components: + - parent: 857 + pos: -7.5,5.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 430 + type: TrashSpawner + components: + - parent: 857 + pos: 19.5,3.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 431 + type: TrashSpawner + components: + - parent: 857 + pos: 25.5,6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 432 + type: TrashSpawner + components: + - parent: 857 + pos: 6.5,1.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 433 + type: TrashSpawner + components: + - parent: 857 + pos: 12.5,7.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 434 + type: TrashSpawner + components: + - parent: 857 + pos: 12.5,12.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 435 + type: TrashSpawner + components: + - parent: 857 + pos: 24.5,11.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 436 + type: TrashSpawner + components: + - parent: 857 + pos: 27.5,13.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 437 + type: TrashSpawner + components: + - parent: 857 + pos: 26.5,10.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 438 + type: TrashSpawner + components: + - parent: 857 + pos: 28.5,8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 439 + type: TrashSpawner + components: + - parent: 857 + pos: 27.5,0.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 440 + type: TrashSpawner + components: + - parent: 857 + pos: 35.5,2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 441 + type: TrashSpawner + components: + - parent: 857 + pos: 44.5,6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 442 + type: TrashSpawner + components: + - parent: 857 + pos: 42.5,-2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 443 + type: TrashSpawner + components: + - parent: 857 + pos: 37.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 444 + type: TrashSpawner + components: + - parent: 857 + pos: 37.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 445 + type: TrashSpawner + components: + - parent: 857 + pos: 32.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 446 + type: TrashSpawner + components: + - parent: 857 + pos: 20.5,0.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 447 + type: TrashSpawner + components: + - parent: 857 + pos: 21.5,-2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 448 + type: TrashSpawner + components: + - parent: 857 + pos: 25.5,-1.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 449 + type: TrashSpawner + components: + - parent: 857 + pos: 27.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 450 + type: TrashSpawner + components: + - parent: 857 + pos: 27.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 451 + type: TrashSpawner + components: + - parent: 857 + pos: 24.5,-9.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 452 + type: TrashSpawner + components: + - parent: 857 + pos: 27.5,-13.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 453 + type: TrashSpawner + components: + - parent: 857 + pos: 26.5,-17.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 454 + type: solid_wall + components: + - parent: 857 + pos: 0.5,21.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 455 + type: TrashSpawner + components: + - parent: 857 + pos: 21.5,-17.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 456 + type: TrashSpawner + components: + - parent: 857 + pos: 21.5,-20.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 457 + type: TrashSpawner + components: + - parent: 857 + pos: 22.5,-23.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 458 + type: TrashSpawner + components: + - parent: 857 + pos: 18.5,-25.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 459 + type: TrashSpawner + components: + - parent: 857 + pos: 14.5,-24.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 460 + type: TrashSpawner + components: + - parent: 857 + pos: 14.5,-21.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 461 + type: TrashSpawner + components: + - parent: 857 + pos: 12.5,-19.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 462 + type: TrashSpawner + components: + - parent: 857 + pos: 7.5,-18.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 463 + type: TrashSpawner + components: + - parent: 857 + pos: -10.5,-17.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 464 + type: TrashSpawner + components: + - parent: 857 + pos: -0.5,-22.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 465 + type: TrashSpawner + components: + - parent: 857 + pos: -2.5,-26.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 466 + type: TrashSpawner + components: + - parent: 857 + pos: -5.5,-27.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 467 + type: Catwalk + components: + - parent: 857 + pos: -32.5,8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 468 + type: TrashSpawner + components: + - parent: 857 + pos: -9.5,-25.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 469 + type: LowWall + components: + - parent: 857 + pos: -35.5,11.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 470 + type: TrashSpawner + components: + - parent: 857 + pos: -11.5,-27.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 471 + type: TrashSpawner + components: + - parent: 857 + pos: -11.5,-23.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 472 + type: TrashSpawner + components: + - parent: 857 + pos: 0.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 473 + type: TrashSpawner + components: + - parent: 857 + pos: -0.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 474 + type: TrashSpawner + components: + - parent: 857 + pos: -0.5,-9.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 475 + type: TrashSpawner + components: + - parent: 857 + pos: -2.5,-10.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 476 + type: TrashSpawner + components: + - parent: 857 + pos: -6.5,-9.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 477 + type: TrashSpawner + components: + - parent: 857 + pos: -16.5,-5.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 478 + type: TrashSpawner + components: + - parent: 857 + pos: -11.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 479 + type: TrashSpawner + components: + - parent: 857 + pos: -8.5,-11.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 480 + type: TrashSpawner + components: + - parent: 857 + pos: -9.5,-12.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 481 + type: TrashSpawner + components: + - parent: 857 + pos: -8.5,-15.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 482 + type: TrashSpawner + components: + - parent: 857 + pos: -12.5,-15.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 483 + type: TrashSpawner + components: + - parent: 857 + pos: -18.5,-13.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 484 + type: SuspicionPistolMagazineSpawner + components: + - parent: 857 + pos: -35.5,0.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 485 + type: TrashSpawner + components: + - parent: 857 + pos: -21.5,-10.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 486 + type: TrashSpawner + components: + - parent: 857 + pos: -28.5,-11.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 487 + type: TrashSpawner + components: + - parent: 857 + pos: -32.5,-5.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 488 + type: TrashSpawner + components: + - parent: 857 + pos: -33.5,-11.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 489 + type: TrashSpawner + components: + - parent: 857 + pos: -33.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 490 + type: TrashSpawner + components: + - parent: 857 + pos: -32.5,-0.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 491 + type: TrashSpawner + components: + - parent: 857 + pos: -19.5,-5.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 492 + type: TrashSpawner + components: + - parent: 857 + pos: -30.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 493 + type: TrashSpawner + components: + - parent: 857 + pos: -30.5,1.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 494 + type: TrashSpawner + components: + - parent: 857 + pos: -22.5,6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 495 + type: TrashSpawner + components: + - parent: 857 + pos: -32.5,5.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 496 + type: TrashSpawner + components: + - parent: 857 + pos: -35.5,-2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 497 + type: TrashSpawner + components: + - parent: 857 + pos: -36.5,10.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 498 + type: TrashSpawner + components: + - parent: 857 + pos: 0.5,8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 499 + type: TrashSpawner + components: + - parent: 857 + pos: -3.5,7.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 500 + type: TrashSpawner + components: + - parent: 857 + pos: -2.5,20.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 501 + type: TrashSpawner + components: + - parent: 857 + pos: -4.5,22.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 502 + type: TrashSpawner + components: + - parent: 857 + pos: -7.5,23.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 503 + type: TrashSpawner + components: + - parent: 857 + pos: -8.5,25.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 504 + type: TrashSpawner + components: + - parent: 857 + pos: -15.5,24.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 505 + type: TrashSpawner + components: + - parent: 857 + pos: -18.5,25.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 506 + type: TrashSpawner + components: + - parent: 857 + pos: -18.5,19.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 507 + type: TrashSpawner + components: + - parent: 857 + pos: -15.5,9.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 508 + type: TrashSpawner + components: + - parent: 857 + pos: -17.5,13.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 509 + type: TrashSpawner + components: + - parent: 857 + pos: -21.5,12.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 510 + type: TrashSpawner + components: + - parent: 857 + pos: -23.5,14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 511 + type: TrashSpawner + components: + - parent: 857 + pos: -25.5,13.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 512 + type: TrashSpawner + components: + - parent: 857 + pos: -30.5,14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 513 + type: TrashSpawner + components: + - parent: 857 + pos: -32.5,11.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 514 + type: TrashSpawner + components: + - parent: 857 + pos: -31.5,7.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 515 + type: TrashSpawner + components: + - parent: 857 + pos: -21.5,10.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 516 + type: Poweredlight + components: + - parent: 857 + pos: -16,-1.5 rot: 3.141592653589793 rad type: Transform - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container + light_bulb: + type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer - -- uid: 9 - type: DisposalPipe +- uid: 517 + type: Poweredlight components: - - parent: 15 - pos: -15.5,-15.5 - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 10 - type: DisposalPipe - components: - - parent: 15 - pos: -13.5,-15.5 - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 11 - type: DisposalPipe - components: - - parent: 15 - pos: -14.5,-15.5 - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 12 - type: DisposalPipe - components: - - parent: 15 - pos: -12.5,-15.5 - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 13 - type: DisposalPipe - components: - - parent: 15 - pos: -11.5,-15.5 - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 14 - type: DisposalPipe - components: - - parent: 15 - pos: -10.5,-16.5 + - parent: 857 + pos: -20.5,-3 rot: 1.5707963267948966 rad type: Transform + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 518 + type: Poweredlight + components: + - parent: 857 + pos: -20.5,2 + rot: -1.5707963267948966 rad + type: Transform + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 519 + type: Catwalk + components: + - parent: 857 + pos: -15.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 520 + type: Catwalk + components: + - parent: 857 + pos: -16.5,-5.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 521 + type: Catwalk + components: + - parent: 857 + pos: -15.5,-5.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 522 + type: Catwalk + components: + - parent: 857 + pos: -15.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 523 + type: Catwalk + components: + - parent: 857 + pos: -16.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 524 + type: Airlock + components: + - name: Hydroponics + type: MetaData + - parent: 857 + pos: -16.5,2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 525 + type: AirlockMaintCommonLocked + components: + - parent: 857 + pos: -16.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 526 + type: AirlockMaintCommonLocked + components: + - parent: 857 + pos: -14.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 527 + type: Table + components: + - parent: 857 + pos: -15.5,0.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 528 + type: solid_wall + components: + - parent: 857 + pos: -14.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 529 + type: solid_wall + components: + - parent: 857 + pos: -21.5,-1.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 530 + type: SuspicionRifleSpawner + components: + - parent: 857 + pos: 5.5,16.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 531 + type: SuspicionMeleeSpawner + components: + - parent: 857 + pos: -4.5,20.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 532 + type: SuspicionPistolSpawner + components: + - parent: 857 + pos: -13.5,24.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 533 + type: SuspicionRifleSpawner + components: + - parent: 857 + pos: 6.5,28.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 534 + type: SuspicionRifleSpawner + components: + - parent: 857 + pos: 0.5,28.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 535 + type: SuspicionPistolSpawner + components: + - parent: 857 + pos: 6.5,20.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 536 + type: SuspicionRifleSpawner + components: + - parent: 857 + pos: -7.5,21.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 537 + type: SuspicionRifleSpawner + components: + - parent: 857 + pos: -7.5,20.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 538 + type: SuspicionPistolSpawner + components: + - parent: 857 + pos: -20.5,14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 539 + type: SuspicionPistolSpawner + components: + - parent: 857 + pos: -31.5,8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 540 + type: SuspicionPistolSpawner + components: + - parent: 857 + pos: -18.5,-11.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 541 + type: SuspicionRifleSpawner + components: + - parent: 857 + pos: -32.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 542 + type: SuspicionRifleSpawner + components: + - parent: 857 + pos: -14.5,-0.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 543 + type: SuspicionRifleSpawner + components: + - parent: 857 + pos: -2.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 544 + type: SuspicionRifleSpawner + components: + - parent: 857 + pos: 23.5,-0.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 545 + type: SuspicionMeleeSpawner + components: + - parent: 857 + pos: 22.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 546 + type: SuspicionMeleeSpawner + components: + - parent: 857 + pos: 17.5,-20.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 547 + type: SuspicionMeleeSpawner + components: + - parent: 857 + pos: 18.5,-24.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 548 + type: SuspicionMeleeSpawner + components: + - parent: 857 + pos: 10.5,-13.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 549 + type: SuspicionMeleeSpawner + components: + - parent: 857 + pos: 15.5,8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 550 + type: SuspicionMeleeSpawner + components: + - parent: 857 + pos: 10.5,8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 551 + type: SuspicionMeleeSpawner + components: + - parent: 857 + pos: 6.5,8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 552 + type: SuspicionMeleeSpawner + components: + - parent: 857 + pos: -0.5,0.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 553 + type: SuspicionMeleeSpawner + components: + - parent: 857 + pos: -29.5,10.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 554 + type: SuspicionMeleeSpawner + components: + - parent: 857 + pos: -28.5,13.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 555 + type: SuspicionMeleeSpawner + components: + - parent: 857 + pos: -27.5,1.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 556 + type: AirlockSecurityGlassLocked + components: + - name: Cell 2 + type: MetaData + - parent: 857 + pos: 0.5,9.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 557 + type: AirlockSecurityGlassLocked + components: + - name: Cell 1 + type: MetaData + - parent: 857 + pos: -2.5,9.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 558 + type: Catwalk + components: + - parent: 857 + pos: -1.5,21.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 559 + type: reinforced_wall + components: + - parent: 857 + pos: 13.5,25.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 560 + type: Poweredlight + components: + - parent: 857 + pos: 20,-17.5 + rot: 3.141592653589793 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 561 + type: Poweredlight + components: + - parent: 857 + pos: 15.5,-18 + rot: 1.5707963267948966 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 562 + type: Poweredlight + components: + - parent: 857 + pos: 17,-20.5 + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 563 + type: AirlockCommandGlassLocked + components: + - name: Head of Security's Office + type: MetaData + - parent: 857 + pos: -8.5,18.5 + rot: -1.5707963267948966 rad + type: Transform + - access: + - - Security + - Command + type: AccessReader +- uid: 564 + type: AirlockExternalLocked + components: + - parent: 857 + pos: 14.5,14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 565 + type: AirlockExternalLocked + components: + - name: Supply Shuttle Dock + type: MetaData + - parent: 857 + pos: 22.5,14.5 + rot: -1.5707963267948966 rad + type: Transform + - access: + - - Cargo + type: AccessReader +- uid: 566 + type: AirlockExternalLocked + components: + - name: Supply Shuttle Dock + type: MetaData + - parent: 857 + pos: 22.5,16.5 + rot: -1.5707963267948966 rad + type: Transform + - access: + - - Cargo + type: AccessReader +- uid: 567 + type: AirlockExternalLocked + components: + - name: Supply Shuttle Dock + type: MetaData + - parent: 857 + pos: 20.5,16.5 + rot: -1.5707963267948966 rad + type: Transform + - access: + - - Cargo + type: AccessReader +- uid: 568 + type: AirlockExternalLocked + components: + - name: Supply Shuttle Dock + type: MetaData + - parent: 857 + pos: 20.5,14.5 + rot: -1.5707963267948966 rad + type: Transform + - access: + - - Cargo + type: AccessReader +- uid: 569 + type: AirlockCargoGlassLocked + components: + - name: Cargo Bay + type: MetaData + - parent: 857 + pos: 17.5,11.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 570 + type: AirlockCargoGlassLocked + components: + - name: Cargo Bay + type: MetaData + - parent: 857 + pos: 17.5,10.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 571 + type: AirlockCargoGlassLocked + components: + - name: Cargo Office + type: MetaData + - parent: 857 + pos: 13.5,8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 572 + type: AirlockMaintCommandLocked + components: + - parent: 857 + pos: 8.5,12.5 + rot: -1.5707963267948966 rad + type: Transform + - access: + - - External + type: AccessReader +- uid: 573 + type: AirlockCommandGlassLocked + components: + - name: EVA + type: MetaData + - parent: 857 + pos: 9.5,6.5 + rot: -1.5707963267948966 rad + type: Transform + - access: + - - External + type: AccessReader +- uid: 574 + type: AirlockCommandGlassLocked + components: + - name: EVA + type: MetaData + - parent: 857 + pos: 7.5,6.5 + rot: -1.5707963267948966 rad + type: Transform + - access: + - - External + type: AccessReader +- uid: 575 + type: AirlockCommandGlassLocked + components: + - name: Bridge + type: MetaData + - parent: 857 + pos: 4.5,22.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 576 + type: AirlockCommandGlassLocked + components: + - name: Bridge + type: MetaData + - parent: 857 + pos: 2.5,22.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 577 + type: AirlockVaultLocked + components: + - name: Armory + type: MetaData + - parent: 857 + pos: -10.5,20.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 578 + type: AirlockVaultLocked + components: + - name: Armory + type: MetaData + - parent: 857 + pos: -12.5,17.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 579 + type: ChairOfficeDark + components: + - parent: 857 + pos: -8.5,8.5 + type: Transform + - anchored: False + type: Collidable +- uid: 580 + type: ChairOfficeDark + components: + - parent: 857 + pos: -9.5,7.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 581 + type: Table + components: + - parent: 857 + pos: -7.5,8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 582 + type: Table + components: + - parent: 857 + pos: -7.5,7.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 583 + type: Table + components: + - parent: 857 + pos: -9.5,6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 584 + type: Table + components: + - parent: 857 + pos: -8.5,6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 585 + type: AirlockMaintCommonLocked + components: + - parent: 857 + pos: 27.5,7.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 586 + type: AirlockMaintCommonLocked + components: + - parent: 857 + pos: -31.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 587 + type: AirlockMaintCommonLocked + components: + - parent: 857 + pos: -16.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform + - access: + - - Service + type: AccessReader +- uid: 588 + type: Airlock + components: + - name: Showers + type: MetaData + - parent: 857 + pos: -21.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 589 + type: Airlock + components: + - name: Bunk Dorms + type: MetaData + - parent: 857 + pos: -26.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 590 + type: AirlockServiceLocked + components: + - name: Theatre + type: MetaData + - parent: 857 + pos: -20.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform + - access: + - - Theatre + type: AccessReader +- uid: 591 + type: AirlockGlass + components: + - name: Locker Room + type: MetaData + - parent: 857 + pos: -26.5,-1.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 592 + type: AirlockServiceGlassLocked + components: + - name: Tool Storage + type: MetaData + - parent: 857 + pos: -25.5,8.5 + rot: -1.5707963267948966 rad + type: Transform + - access: + - - Maintenance + type: AccessReader +- uid: 593 + type: AirlockServiceGlassLocked + components: + - name: Tool Storage + type: MetaData + - parent: 857 + pos: -25.5,10.5 + rot: -1.5707963267948966 rad + type: Transform + - access: + - - Maintenance + type: AccessReader +- uid: 594 + type: AirlockGlass + components: + - name: Locker Room + type: MetaData + - parent: 857 + pos: -26.5,-0.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 595 + type: AirlockScienceLocked + components: + - name: Testing Area + type: MetaData + - parent: 857 + pos: -12.5,-20.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 596 + type: AirlockScienceLocked + components: + - name: Testing Area + type: MetaData + - parent: 857 + pos: -12.5,-19.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 597 + type: AirlockCommandGlassLocked + components: + - name: Research Director's Office + type: MetaData + - parent: 857 + pos: -3.5,-21.5 + rot: -1.5707963267948966 rad + type: Transform + - access: + - - Research + - Command + type: AccessReader +- uid: 598 + type: AirlockCommandGlassLocked + components: + - name: Server Room + type: MetaData + - parent: 857 + pos: -8.5,-21.5 + rot: -1.5707963267948966 rad + type: Transform + - access: + - - Research + - Command + type: AccessReader +- uid: 599 + type: AirlockCommandGlassLocked + components: + - name: Chief Medical Officer's Office + type: MetaData + - parent: 857 + pos: 20.5,-13.5 + rot: -1.5707963267948966 rad + type: Transform + - access: + - - Medical + - Command + type: AccessReader +- uid: 600 + type: AirlockMedicalGlassLocked + components: + - name: Chemistry + type: MetaData + - parent: 857 + pos: 17.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 601 + type: AirlockMedicalGlassLocked + components: + - name: Chemistry + type: MetaData + - parent: 857 + pos: 7.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 602 + type: AirlockEngineeringGlassLocked + components: + - name: Engineering + type: MetaData + - parent: 857 + pos: 30.5,5.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 603 + type: AirlockEngineeringGlassLocked + components: + - name: Engineering + type: MetaData + - parent: 857 + pos: 30.5,3.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 604 + type: AirlockMaintCommonLocked + components: + - parent: 857 + pos: -20.5,11.5 + rot: -1.5707963267948966 rad + type: Transform + - access: + - - Janitor + type: AccessReader +- uid: 605 + type: AirlockMaintCommonLocked + components: + - parent: 857 + pos: -32.5,2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 606 + type: AirlockMaintIntLocked + components: + - parent: 857 + pos: -13.5,-13.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 607 + type: AirlockMaintIntLocked + components: + - parent: 857 + pos: -12.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 608 + type: AirlockMaintRnDLocked + components: + - parent: 857 + pos: -4.5,-11.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 609 + type: AirlockMaintCommonLocked + components: + - parent: 857 + pos: 5.5,14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 610 + type: AirlockMaintCommonLocked + components: + - parent: 857 + pos: -16.5,6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 611 + type: AirlockSecurityGlassLocked + components: + - name: Brig + type: MetaData + - parent: 857 + pos: -6.5,6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 612 + type: AirlockServiceGlassLocked + components: + - name: Bar + type: MetaData + - parent: 857 + pos: -7.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 613 + type: AirlockMaintEngiLocked + components: + - parent: 857 + pos: 28.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 614 + type: AirlockServiceGlassLocked + components: + - name: Kitchen + type: MetaData + - parent: 857 + pos: -10.5,-1.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 615 + type: AirlockMaintCommonLocked + components: + - parent: 857 + pos: -8.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform + - access: + - - Service + type: AccessReader +- uid: 616 + type: AirlockVaultLocked + components: + - name: Vault + type: MetaData + - parent: 857 + pos: 0.5,17.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 617 + type: AirlockMaintCommonLocked + components: + - parent: 857 + pos: 1.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 618 + type: AirlockMaintCommonLocked + components: + - parent: 857 + pos: -23.5,-9.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 619 + type: AirlockMaintCommonLocked + components: + - parent: 857 + pos: -34.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 620 + type: Airlock + components: + - name: Custodial Closet + type: MetaData + - parent: 857 + pos: -22.5,9.5 + rot: -1.5707963267948966 rad + type: Transform + - access: + - - Janitor + type: AccessReader +- uid: 621 + type: AirlockExternalLocked + components: + - parent: 857 + pos: 15.5,16.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 622 + type: AirlockMaintCommandLocked + components: + - parent: 857 + pos: 11.5,20.5 + rot: -1.5707963267948966 rad + type: Transform + - access: + - - HeadOfPersonnel + type: AccessReader +- uid: 623 + type: Catwalk + components: + - parent: 857 + pos: 26.5,9.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 624 + type: AirlockCommandGlassLocked + components: + - name: Chief Engineer's Office + type: MetaData + - parent: 857 + pos: 38.5,1.5 + rot: -1.5707963267948966 rad + type: Transform + - access: + - - Engineering + - Command + type: AccessReader +- uid: 625 + type: AirlockMaintCommonLocked + components: + - parent: 857 + pos: -33.5,8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 626 + type: AirlockScienceGlassLocked + components: + - name: Research and Development + type: MetaData + - parent: 857 + pos: -3.5,-18.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 627 + type: AirlockScienceLocked + components: + - name: Science + type: MetaData + - parent: 857 + pos: 0.5,-20.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 628 + type: AirlockScienceLocked + components: + - name: Science + type: MetaData + - parent: 857 + pos: 0.5,-19.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 629 + type: AirlockMaintRnDLocked + components: + - parent: 857 + pos: -11.5,-21.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 630 + type: AirlockMaintMedLocked + components: + - parent: 857 + pos: 20.5,-10.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 631 + type: AirlockMaintMedLocked + components: + - parent: 857 + pos: 14.5,-18.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 632 + type: AirlockMaintCommonLocked + components: + - parent: 857 + pos: 0.5,20.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 633 + type: AirlockSecurityGlassLocked + components: + - name: Reception Desk + type: MetaData + - parent: 857 + pos: -9.5,9.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 634 + type: AirlockSecurityGlassLocked + components: + - name: Security Equipment + type: MetaData + - parent: 857 + pos: -10.5,15.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 635 + type: AirlockMedicalGlassLocked + components: + - name: Cloning + type: MetaData + - parent: 857 + pos: 8.5,-12.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 636 + type: AirlockMedicalGlassLocked + components: + - name: Surgery + type: MetaData + - parent: 857 + pos: 19.5,-18.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 637 + type: AirlockMedicalGlassLocked + components: + - name: Medical Storage + type: MetaData + - parent: 857 + pos: 20.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 638 + type: AirlockMedicalGlassLocked + components: + - name: Medical Bay + type: MetaData + - parent: 857 + pos: 11.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 639 + type: AirlockMedicalGlassLocked + components: + - name: Medical Bay + type: MetaData + - parent: 857 + pos: 10.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 640 + type: AirlockMaintCommandLocked + components: + - parent: 857 + pos: -1.5,22.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 641 + type: AirlockMaintCommonLocked + components: + - parent: 857 + pos: 21.5,2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 642 + type: AirlockMaintCommonLocked + components: + - parent: 857 + pos: 6.5,-19.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 643 + type: AirlockCommandLocked + components: + - name: Captain's Office + type: MetaData + - parent: 857 + pos: 5.5,25.5 + rot: -1.5707963267948966 rad + type: Transform + - access: + - - Captain + type: AccessReader +- uid: 644 + type: AirlockCommandGlassLocked + components: + - name: Heads of Staff Meeting Room + type: MetaData + - parent: 857 + pos: 1.5,25.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 645 + type: AirlockCommandGlassLocked + components: + - name: Heads of Staff Meeting Room + type: MetaData + - parent: 857 + pos: 1.5,24.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 646 + type: AirlockMaintRnDLocked + components: + - parent: 857 + pos: -16.5,-16.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 647 + type: AirlockMaintCargoLocked + components: + - parent: 857 + pos: 25.5,9.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 648 + type: AirlockMaintEngiLocked + components: + - parent: 857 + pos: 43.5,0.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 649 + type: AirlockMaintEngiLocked + components: + - parent: 857 + pos: 29.5,10.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 650 + type: AirlockEngineeringLocked + components: + - name: Secure Storage + type: MetaData + - parent: 857 + pos: 40.5,10.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 651 + type: AirlockEngineeringLocked + components: + - name: Secure Storage + type: MetaData + - parent: 857 + pos: 41.5,10.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 652 + type: AirlockEngineeringGlassLocked + components: + - name: Atmospherics + type: MetaData + - parent: 857 + pos: 33.5,7.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 653 + type: AirlockEngineeringGlassLocked + components: + - name: Engineering Equipment + type: MetaData + - parent: 857 + pos: 33.5,1.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 654 + type: AirlockEngineeringLocked + components: + - name: Gravity Generator + type: MetaData + - parent: 857 + pos: 49.5,-1.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 655 + type: AirlockSecurityGlassLocked + components: + - name: Brig + type: MetaData + - parent: 857 + pos: -6.5,9.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 656 + type: AirlockSecurityGlassLocked + components: + - name: Brig + type: MetaData + - parent: 857 + pos: -5.5,9.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 657 + type: AirlockSecurityGlassLocked + components: + - name: Brig + type: MetaData + - parent: 857 + pos: -5.5,6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 658 + type: AirlockExternalLocked + components: + - name: Arrivals Shuttle Dock + type: MetaData + - parent: 857 + pos: -39.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 659 + type: AirlockExternalLocked + components: + - name: Arrivals Shuttle Dock + type: MetaData + - parent: 857 + pos: -37.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 660 + type: AirlockExternalLocked + components: + - name: Escape Shuttle Dock + type: MetaData + - parent: 857 + pos: -41.5,8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 661 + type: LowWall + components: + - parent: 857 + pos: -36.5,11.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 662 + type: LowWall + components: + - parent: 857 + pos: -37.5,11.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 663 + type: AirlockExternalLocked + components: + - name: Escape Shuttle Dock + type: MetaData + - parent: 857 + pos: -39.5,8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 664 + type: AirlockExternalLocked + components: + - name: Escape Shuttle Dock + type: MetaData + - parent: 857 + pos: -39.5,4.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 665 + type: AirlockExternalLocked + components: + - name: Escape Shuttle Dock + type: MetaData + - parent: 857 + pos: -41.5,4.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 666 + type: WardrobeWhite + components: + - parent: 857 + pos: 17.5,-22.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 667 + type: Table + components: + - parent: 857 + pos: 19.5,-22.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 668 + type: solid_wall + components: + - parent: 857 + pos: -40.5,11.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 669 + type: Poweredlight + components: + - parent: 857 + pos: -38.5,2 + rot: 1.5707963267948966 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 670 + type: LowWall + components: + - parent: 857 + pos: -40.5,10.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 671 + type: Table + components: + - parent: 857 + pos: 19.5,-21.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 672 + type: Window + components: + - parent: 857 + pos: 18.5,-18.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 673 + type: Window + components: + - parent: 857 + pos: 17.5,-18.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 674 + type: LowWall + components: + - parent: 857 + pos: 18.5,-18.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 675 + type: LowWall + components: + - parent: 857 + pos: 17.5,-18.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 676 + type: solid_wall + components: + - parent: 857 + pos: 16.5,-19.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 677 + type: LowWall + components: + - parent: 857 + pos: -41.5,9.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 678 + type: solid_wall + components: + - parent: 857 + pos: 16.5,-20.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 679 + type: solid_wall + components: + - parent: 857 + pos: 16.5,-21.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 680 + type: solid_wall + components: + - parent: 857 + pos: 16.5,-22.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 681 + type: solid_wall + components: + - parent: 857 + pos: 16.5,-23.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 682 + type: LowWall + components: + - parent: 857 + pos: -40.5,9.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 683 + type: solid_wall + components: + - parent: 857 + pos: 17.5,-23.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 684 + type: solid_wall + components: + - parent: 857 + pos: 20.5,-23.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 685 + type: solid_wall + components: + - parent: 857 + pos: 20.5,-22.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 686 + type: solid_wall + components: + - parent: 857 + pos: 20.5,-21.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 687 + type: LowWall + components: + - parent: 857 + pos: -39.5,9.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 688 + type: solid_wall + components: + - parent: 857 + pos: 20.5,-20.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 689 + type: solid_wall + components: + - parent: 857 + pos: 20.5,-19.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 690 + type: solid_wall + components: + - parent: 857 + pos: 13.5,-25.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 691 + type: LowWall + components: + - parent: 857 + pos: -39.5,7.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 692 + type: solid_wall + components: + - parent: 857 + pos: 13.5,-24.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 693 + type: solid_wall + components: + - parent: 857 + pos: 13.5,-23.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 694 + type: solid_wall + components: + - parent: 857 + pos: 13.5,-22.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 695 + type: solid_wall + components: + - parent: 857 + pos: 13.5,-26.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 696 + type: solid_wall + components: + - parent: 857 + pos: 14.5,-26.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 697 + type: LowWall + components: + - parent: 857 + pos: -41.5,7.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 698 + type: LowWall + components: + - parent: 857 + pos: -40.5,7.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 699 + type: solid_wall + components: + - parent: 857 + pos: 15.5,-26.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 700 + type: solid_wall + components: + - parent: 857 + pos: 16.5,-26.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 701 + type: LowWall + components: + - parent: 857 + pos: -40.5,6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 702 + type: solid_wall + components: + - parent: 857 + pos: 17.5,-26.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 703 + type: solid_wall + components: + - parent: 857 + pos: 18.5,-26.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 704 + type: solid_wall + components: + - parent: 857 + pos: 19.5,-26.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 705 + type: solid_wall + components: + - parent: 857 + pos: 20.5,-26.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 706 + type: LowWall + components: + - parent: 857 + pos: -41.5,5.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 707 + type: solid_wall + components: + - parent: 857 + pos: 21.5,-26.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 708 + type: solid_wall + components: + - parent: 857 + pos: 22.5,-26.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 709 + type: solid_wall + components: + - parent: 857 + pos: 23.5,-26.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 710 + type: LowWall + components: + - parent: 857 + pos: -40.5,5.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 711 + type: solid_wall + components: + - parent: 857 + pos: 23.5,-25.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 712 + type: solid_wall + components: + - parent: 857 + pos: 23.5,-24.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 713 + type: solid_wall + components: + - parent: 857 + pos: 23.5,-23.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 714 + type: solid_wall + components: + - parent: 857 + pos: 23.5,-22.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 715 + type: LowWall + components: + - parent: 857 + pos: -39.5,5.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 716 + type: solid_wall + components: + - parent: 857 + pos: 45.5,9.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 717 + type: SpawnPointStationEngineer + components: + - parent: 857 + pos: 30.5,-2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 718 + type: LowWall + components: + - parent: 857 + pos: -39.5,3.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 719 + type: SpawnPointChiefEngineer + components: + - parent: 857 + pos: 40.5,-0.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 720 + type: SpawnPointHeadOfPersonnel + components: + - parent: 857 + pos: 7.5,20.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 721 + type: SpawnPointCaptain + components: + - parent: 857 + pos: 9.5,25.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 722 + type: LowWall + components: + - parent: 857 + pos: -41.5,3.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 723 + type: SpawnPointHeadOfSecurity + components: + - parent: 857 + pos: -6.5,20.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 724 + type: SpawnPointJanitor + components: + - parent: 857 + pos: -20.5,9.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 725 + type: SpawnPointClown + components: + - parent: 857 + pos: -18.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 726 + type: SpawnPointBartender + components: + - parent: 857 + pos: -5.5,-5.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 727 + type: LowWall + components: + - parent: 857 + pos: -40.5,3.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 728 + type: SpawnPointScientist + components: + - parent: 857 + pos: -15.5,-19.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 729 + type: SpawnPointScientist + components: + - parent: 857 + pos: -4.5,-15.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 730 + type: SpawnPointScientist + components: + - parent: 857 + pos: -0.5,-14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 731 + type: SpawnPointScientist + components: + - parent: 857 + pos: -8.5,-18.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 732 + type: SpawnPointScientist + components: + - parent: 857 + pos: -9.5,-17.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 733 + type: SpawnPointResearchDirector + components: + - parent: 857 + pos: -5.5,-23.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 734 + type: LowWall + components: + - parent: 857 + pos: -40.5,2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 735 + type: SpawnPointMedicalDoctor + components: + - parent: 857 + pos: 15.5,-15.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 736 + type: SpawnPointMedicalDoctor + components: + - parent: 857 + pos: 11.5,-9.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 737 + type: SpawnPointMedicalDoctor + components: + - parent: 857 + pos: 16.5,-9.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 738 + type: SpawnPointMedicalDoctor + components: + - parent: 857 + pos: 22.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 739 + type: LowWall + components: + - parent: 857 + pos: -40.5,1.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 740 + type: SpawnPointMedicalDoctor + components: + - parent: 857 + pos: 14.5,0.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 741 + type: SpawnPointMedicalDoctor + components: + - parent: 857 + pos: 6.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 742 + type: SpawnPointChiefMedicalOfficer + components: + - parent: 857 + pos: 24.5,-14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 743 + type: SpawnPointCargoTechnician + components: + - parent: 857 + pos: 21.5,11.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 744 + type: SpawnPointCargoTechnician + components: + - parent: 857 + pos: 14.5,11.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 745 + type: LowWall + components: + - parent: 857 + pos: -39.5,1.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 746 + type: PottedPlantRandomPlastic + components: + - parent: 857 + pos: -12.5,7.5 + rot: -1.5707963267948966 rad + type: Transform + - containers: + potted_plant_hide: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 747 + type: ReinforcedWindow + components: + - parent: 857 + pos: -37.5,-2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 748 + type: PottedPlantRandom + components: + - parent: 857 + pos: 21.5,-12.5 + rot: -1.5707963267948966 rad + type: Transform + - containers: + potted_plant_hide: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 749 + type: PottedPlantRandomPlastic + components: + - parent: 857 + pos: 29.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform + - containers: + potted_plant_hide: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 750 + type: PottedPlantRandom + components: + - parent: 857 + pos: 12.5,1.5 + rot: -1.5707963267948966 rad + type: Transform + - containers: + potted_plant_hide: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 751 + type: LowWall + components: + - parent: 857 + pos: -38.5,0.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 752 + type: LowWall + components: + - parent: 857 + pos: -38.5,-0.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 753 + type: LowWall + components: + - parent: 857 + pos: -38.5,-1.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 754 + type: LowWall + components: + - parent: 857 + pos: -37.5,-2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 755 + type: LowWall + components: + - parent: 857 + pos: -38.5,-2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 756 + type: LowWall + components: + - parent: 857 + pos: -39.5,-2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 757 + type: LowWall + components: + - parent: 857 + pos: -37.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 758 + type: PottedPlantRandom + components: + - parent: 857 + pos: 5.5,21.5 + rot: -1.5707963267948966 rad + type: Transform + - containers: + potted_plant_hide: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 759 + type: LowWall + components: + - parent: 857 + pos: -39.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 760 + type: reinforced_wall + components: + - parent: 857 + pos: 11.5,25.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 761 + type: VendingMachineBooze + components: + - parent: 857 + pos: -4.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 762 + type: LockerBoozeFilled + components: + - parent: 857 + pos: -3.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 763 + type: PottedPlantRandom + components: + - parent: 857 + pos: 1.5,-21.5 + rot: -1.5707963267948966 rad + type: Transform + - containers: + potted_plant_hide: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 764 + type: LockerEmergencyFilledRandom + components: + - parent: 857 + pos: 5.5,-21.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 765 + type: PottedPlantRandom + components: + - parent: 857 + pos: -24.5,11.5 + rot: -1.5707963267948966 rad + type: Transform + - containers: + potted_plant_hide: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 766 + type: LockerEmergencyFilledRandom + components: + - parent: 857 + pos: -23.5,11.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 767 + type: LockerEmergencyFilledRandom + components: + - parent: 857 + pos: 24.5,13.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 768 + type: PottedPlantRandom + components: + - parent: 857 + pos: 10.5,16.5 + rot: -1.5707963267948966 rad + type: Transform + - containers: + potted_plant_hide: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 769 + type: PottedPlantRandom + components: + - parent: 857 + pos: 7.5,23.5 + rot: -1.5707963267948966 rad + type: Transform + - containers: + potted_plant_hide: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 770 + type: LockerEmergencyFilledRandom + components: + - parent: 857 + pos: -2.5,30.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 771 + type: LockerEmergencyFilledRandom + components: + - parent: 857 + pos: 9.5,30.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 772 + type: LockerEmergencyFilledRandom + components: + - parent: 857 + pos: -0.5,14.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 773 + type: PottedPlantRD + components: + - parent: 857 + pos: -2.5,-22.5 + rot: -1.5707963267948966 rad + type: Transform + - containers: + potted_plant_hide: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 774 + type: LockerEmergencyFilledRandom + components: + - parent: 857 + pos: -21.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 775 + type: PottedPlantRandom + components: + - parent: 857 + pos: -25.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform + - containers: + potted_plant_hide: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 776 + type: PottedPlantRandom + components: + - parent: 857 + pos: -39.5,10.5 + rot: -1.5707963267948966 rad + type: Transform + - containers: + potted_plant_hide: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 777 + type: LockerFireFilled + components: + - parent: 857 + pos: -37.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 778 + type: LockerFireFilled + components: + - parent: 857 + pos: -11.5,-11.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 779 + type: LockerBombFilled + components: + - parent: 857 + pos: -17.5,-17.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 780 + type: LockerBombFilled + components: + - parent: 857 + pos: -12.5,21.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 781 + type: LockerFireFilled + components: + - parent: 857 + pos: 13.5,21.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 782 + type: LockerEmergencyFilledRandom + components: + - parent: 857 + pos: 12.5,21.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 783 + type: LockerFireFilled + components: + - parent: 857 + pos: 28.5,12.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 784 + type: LockerEmergencyFilledRandom + components: + - parent: 857 + pos: 43.5,9.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 785 + type: LockerFireFilled + components: + - parent: 857 + pos: 44.5,9.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 786 + type: LockerFireFilled + components: + - parent: 857 + pos: 23.5,0.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 787 + type: LockerEmergencyFilledRandom + components: + - parent: 857 + pos: 8.5,-18.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 788 + type: LockerFireFilled + components: + - parent: 857 + pos: 9.5,-18.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 789 + type: LockerEmergencyFilledRandom + components: + - parent: 857 + pos: -15.5,-17.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 790 + type: LockerEmergencyFilledRandom + components: + - parent: 857 + pos: -7.5,-25.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 791 + type: LockerEmergencyFilledRandom + components: + - parent: 857 + pos: 26.5,12.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 792 + type: LockerEmergencyFilledRandom + components: + - parent: 857 + pos: 23.5,1.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 793 + type: LockerFireFilled + components: + - parent: 857 + pos: -14.5,-17.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 794 + type: LockerEmergencyFilledRandom + components: + - parent: 857 + pos: -11.5,-10.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 795 + type: LockerEmergencyFilledRandom + components: + - parent: 857 + pos: -37.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 796 + type: LockerEmergencyFilledRandom + components: + - parent: 857 + pos: -39.5,2.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 797 + type: LockerEmergencyFilledRandom + components: + - parent: 857 + pos: -34.5,10.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 798 + type: LockerCaptainFilled + components: + - parent: 857 + pos: 6.5,26.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 799 + type: WardrobeCargoFilled + components: + - parent: 857 + pos: 23.5,7.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 800 + type: PottedPlantRandom + components: + - parent: 857 + pos: 0.5,26.5 + rot: -1.5707963267948966 rad + type: Transform + - containers: + potted_plant_hide: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 801 + type: WardrobePrisonFilled + components: + - parent: 857 + pos: 0.5,14.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 802 + type: LockerL3JanitorFilled + components: + - parent: 857 + pos: -19.5,9.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 803 + type: LockerJanitorFilled + components: + - parent: 857 + pos: -19.5,10.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 804 + type: LockerChefFilled + components: + - parent: 857 + pos: -14.5,1.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 805 + type: WardrobeWhiteFilled + components: + - parent: 857 + pos: 7.5,-16.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 806 + type: LockerMedicineFilled + components: + - parent: 857 + pos: 18.5,-2.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 807 + type: LockerL3VirologyFilled + components: + - parent: 857 + pos: 24.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 808 + type: LockerSecurityFilled + components: + - parent: 857 + pos: -12.5,13.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 809 + type: LockerSecurityFilled + components: + - parent: 857 + pos: -13.5,13.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 810 + type: LockerSecurityFilled + components: + - parent: 857 + pos: -14.5,13.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 811 + type: WardrobeMedicalDoctorFilled + components: + - parent: 857 + pos: 23.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 812 + type: LockerL3SecurityFilled + components: + - parent: 857 + pos: -11.5,21.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 813 + type: LockerChiefMedicalOfficerFilled + components: + - parent: 857 + pos: 21.5,-15.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 814 + type: WardrobeBlackFilled + components: + - parent: 857 + pos: -28.5,-2.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 815 + type: LockerHeadOfPersonnelFilled + components: + - parent: 857 + pos: 10.5,21.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 816 + type: LowWall + components: + - parent: 857 + pos: -38.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 817 + type: WardrobeEngineeringFilled + components: + - parent: 857 + pos: 32.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 818 + type: WardrobeAtmosphericsFilled + components: + - parent: 857 + pos: 36.5,10.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 819 + type: LockerAtmosphericsFilled + components: + - parent: 857 + pos: 36.5,9.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 820 + type: LockerAtmosphericsFilled + components: + - parent: 857 + pos: 36.5,8.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 821 + type: LockerChiefEngineerFilled + components: + - parent: 857 + pos: 37.5,-1.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 822 + type: LockerEngineerFilled + components: + - parent: 857 + pos: 35.5,-1.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 823 + type: LockerEngineerFilled + components: + - parent: 857 + pos: 35.5,-2.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 824 + type: LockerResearchDirectorFilled + components: + - parent: 857 + pos: -2.5,-24.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 825 + type: WardrobeScienceFilled + components: + - parent: 857 + pos: -11.5,-17.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 826 + type: LockerL3JanitorFilled + components: + - parent: 857 + pos: -13.5,-17.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 827 + type: LockerGeneric + components: + - parent: 857 + pos: -11.5,-12.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 828 + type: WardrobeGreyFilled + components: + - parent: 857 + pos: -27.5,-2.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 829 + type: WardrobePajamaFilled + components: + - parent: 857 + pos: -27.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 830 + type: Catwalk + components: + - parent: 857 + pos: 47.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 831 + type: Catwalk + components: + - parent: 857 + pos: 47.5,-5.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 832 + type: Catwalk + components: + - parent: 857 + pos: 47.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 833 + type: Catwalk + components: + - parent: 857 + pos: 48.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 834 + type: Catwalk + components: + - parent: 857 + pos: 49.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 835 + type: Catwalk + components: + - parent: 857 + pos: 50.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 836 + type: Catwalk + components: + - parent: 857 + pos: 51.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 837 + type: Catwalk + components: + - parent: 857 + pos: 51.5,-5.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 838 + type: Catwalk + components: + - parent: 857 + pos: 51.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 839 + type: Catwalk + components: + - parent: 857 + pos: 51.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 840 + type: Catwalk + components: + - parent: 857 + pos: 51.5,-2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 841 + type: Catwalk + components: + - parent: 857 + pos: 50.5,-2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 842 + type: DisposalTrunk + components: + - parent: 857 + pos: -29.5,11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalEntry: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 843 + type: DisposalBend + components: + - parent: 857 + pos: -29.5,10.5 + rot: 1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalBend: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 844 + type: DisposalBend + components: + - parent: 857 + pos: -28.5,10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalBend: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 845 + type: DisposalBend + components: + - parent: 857 + pos: -8.5,-14.5 + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalBend: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 846 + type: DisposalPipe + components: + - parent: 857 + pos: -7.5,-14.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer - -- uid: 15 + +- uid: 847 + type: DisposalPipe + components: + - parent: 857 + pos: -6.5,-14.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 848 + type: DisposalTrunk + components: + - parent: 857 + pos: -5.5,-14.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalEntry: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 849 + type: DisposalUnit + components: + - parent: 857 + pos: -5.5,-14.5 + rot: -1.5707963267948966 rad + type: Transform + + - deadThreshold: 100 + type: Destructible + - containers: + DisposalUnit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 850 + type: DisposalPipe + components: + - parent: 857 + pos: -9.5,-15.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 851 + type: DisposalPipe + components: + - parent: 857 + pos: -15.5,-15.5 + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 852 + type: DisposalPipe + components: + - parent: 857 + pos: -13.5,-15.5 + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 853 + type: DisposalPipe + components: + - parent: 857 + pos: -14.5,-15.5 + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 854 + type: DisposalPipe + components: + - parent: 857 + pos: -12.5,-15.5 + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 855 + type: DisposalPipe + components: + - parent: 857 + pos: -11.5,-15.5 + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 856 + type: DisposalPipe + components: + - parent: 857 + pos: -10.5,-16.5 + rot: 1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalTransit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 857 components: - name: Saltern Station type: MetaData @@ -331,6 +8879,54 @@ entities: - 0 - 0 temperature: 293.15 + - volume: 2500 + moles: + - 21.824879 + - 82.10312 + - 0 + - 0 + - 0 + - 0 + molesArchived: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + temperature: 293.14993 + - volume: 2500 + moles: + - 21.824879 + - 82.10312 + - 0 + - 0 + - 0 + - 0 + molesArchived: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + temperature: 293.1499 + - volume: 2500 + moles: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + molesArchived: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + temperature: 293.15 tiles: ? X: -16 Y: -16 @@ -4699,7 +13295,7 @@ entities: : 0 ? X: 11 Y: 22 - : 0 + : 1 ? X: 12 Y: 16 : 0 @@ -4741,7 +13337,7 @@ entities: : 0 ? X: 13 Y: 22 - : 0 + : 1 ? X: 14 Y: 16 : 0 @@ -4762,7 +13358,7 @@ entities: : 0 ? X: 14 Y: 22 - : 0 + : 2 ? X: 15 Y: 16 : 0 @@ -11168,17843 +19764,854 @@ entities: ? X: -26 Y: -14 : 0 + ? X: 11 + Y: 23 + : 3 + ? X: 11 + Y: 24 + : 3 + ? X: 11 + Y: 25 + : 3 + ? X: 12 + Y: 23 + : 3 + ? X: 12 + Y: 24 + : 3 + ? X: 12 + Y: 25 + : 3 + ? X: 13 + Y: 23 + : 3 + ? X: 13 + Y: 24 + : 3 + ? X: 13 + Y: 25 + : 3 + ? X: 14 + Y: 23 + : 3 + ? X: 14 + Y: 24 + : 3 + ? X: 14 + Y: 25 + : 3 type: GridAtmosphere -- uid: 16 - type: Wire - components: - - parent: 15 - pos: 28.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 17 - type: Wire - components: - - parent: 15 - pos: 27.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 18 - type: Wire - components: - - parent: 15 - pos: 26.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 19 - type: Wire - components: - - parent: 15 - pos: 25.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 20 - type: Wire - components: - - parent: 15 - pos: 24.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 21 - type: Wire - components: - - parent: 15 - pos: 23.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 22 - type: Wire - components: - - parent: 15 - pos: 22.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 23 - type: Wire - components: - - parent: 15 - pos: 21.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 24 - type: Wire - components: - - parent: 15 - pos: 20.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 25 - type: Wire - components: - - parent: 15 - pos: 19.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 26 - type: Wire - components: - - parent: 15 - pos: 18.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 27 - type: Wire - components: - - parent: 15 - pos: 17.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 28 - type: Wire - components: - - parent: 15 - pos: 16.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 29 - type: Wire - components: - - parent: 15 - pos: 15.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 30 - type: Wire - components: - - parent: 15 - pos: 14.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 31 - type: Wire - components: - - parent: 15 - pos: 13.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 32 - type: Wire - components: - - parent: 15 - pos: 12.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 33 - type: Wire - components: - - parent: 15 - pos: 11.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 34 - type: Wire - components: - - parent: 15 - pos: 10.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 35 - type: Wire - components: - - parent: 15 - pos: 9.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 36 - type: Wire - components: - - parent: 15 - pos: 8.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 37 - type: Wire - components: - - parent: 15 - pos: 7.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 38 - type: Wire - components: - - parent: 15 - pos: 6.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 39 - type: Wire - components: - - parent: 15 - pos: 5.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 40 - type: Wire - components: - - parent: 15 - pos: 4.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 41 - type: Wire - components: - - parent: 15 - pos: 3.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 42 - type: Wire - components: - - parent: 15 - pos: 2.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 43 - type: Wire - components: - - parent: 15 - pos: 1.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 44 - type: Wire - components: - - parent: 15 - pos: 0.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 45 - type: Wire - components: - - parent: 15 - pos: -0.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 46 - type: Wire - components: - - parent: 15 - pos: -1.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 47 - type: Wire - components: - - parent: 15 - pos: -2.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 48 - type: Wire - components: - - parent: 15 - pos: -3.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 49 - type: Wire - components: - - parent: 15 - pos: -4.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 50 - type: Wire - components: - - parent: 15 - pos: -5.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 51 - type: Wire - components: - - parent: 15 - pos: -6.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 52 - type: Wire - components: - - parent: 15 - pos: -7.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 53 - type: Wire - components: - - parent: 15 - pos: -8.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 54 - type: Wire - components: - - parent: 15 - pos: -9.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 55 - type: Wire - components: - - parent: 15 - pos: -10.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 56 - type: Wire - components: - - parent: 15 - pos: -11.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 57 - type: Wire - components: - - parent: 15 - pos: -12.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 58 - type: Wire - components: - - parent: 15 - pos: -13.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 59 - type: Wire - components: - - parent: 15 - pos: -14.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 60 - type: Wire - components: - - parent: 15 - pos: -15.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 61 - type: Wire - components: - - parent: 15 - pos: -16.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 62 - type: Wire - components: - - parent: 15 - pos: -17.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 63 - type: Wire - components: - - parent: 15 - pos: -18.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 64 - type: Wire - components: - - parent: 15 - pos: -19.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 65 - type: Wire - components: - - parent: 15 - pos: -20.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 66 - type: Wire - components: - - parent: 15 - pos: -21.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 67 - type: Wire - components: - - parent: 15 - pos: -22.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 68 - type: Wire - components: - - parent: 15 - pos: -23.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 69 - type: Wire - components: - - parent: 15 - pos: -24.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 70 - type: Wire - components: - - parent: 15 - pos: -25.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 71 - type: Wire - components: - - parent: 15 - pos: -26.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 72 - type: Wire - components: - - parent: 15 - pos: -27.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 73 - type: Wire - components: - - parent: 15 - pos: -28.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 74 - type: Wire - components: - - parent: 15 - pos: -29.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 75 - type: Wire - components: - - parent: 15 - pos: -30.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 76 - type: Wire - components: - - parent: 15 - pos: -31.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 77 - type: Wire - components: - - parent: 15 - pos: -32.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 78 - type: Wire - components: - - parent: 15 - pos: -33.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 79 - type: Wire - components: - - parent: 15 - pos: -34.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 80 - type: Wire - components: - - parent: 15 - pos: -35.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 81 - type: Wire - components: - - parent: 15 - pos: -36.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 82 - type: Wire - components: - - parent: 15 - pos: 3.5,5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 83 - type: Wire - components: - - parent: 15 - pos: 3.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 84 - type: Wire - components: - - parent: 15 - pos: 3.5,7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 85 - type: Wire - components: - - parent: 15 - pos: 3.5,8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 86 - type: Wire - components: - - parent: 15 - pos: 3.5,9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 87 - type: Wire - components: - - parent: 15 - pos: 3.5,10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 88 - type: Wire - components: - - parent: 15 - pos: 3.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 89 - type: Wire - components: - - parent: 15 - pos: 3.5,12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 90 - type: Wire - components: - - parent: 15 - pos: 3.5,13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 91 - type: Wire - components: - - parent: 15 - pos: 3.5,14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 92 - type: Wire - components: - - parent: 15 - pos: 3.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 93 - type: Wire - components: - - parent: 15 - pos: 3.5,16.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 94 - type: Wire - components: - - parent: 15 - pos: 3.5,17.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 95 - type: Wire - components: - - parent: 15 - pos: 3.5,18.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 96 - type: Wire - components: - - parent: 15 - pos: 3.5,19.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 97 - type: Wire - components: - - parent: 15 - pos: 3.5,20.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 98 - type: Wire - components: - - parent: 15 - pos: 3.5,3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 99 - type: Wire - components: - - parent: 15 - pos: 3.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 100 - type: Wire - components: - - parent: 15 - pos: 3.5,1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 101 - type: Wire - components: - - parent: 15 - pos: 3.5,0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 102 - type: Wire - components: - - parent: 15 - pos: 3.5,-0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 103 - type: Wire - components: - - parent: 15 - pos: 3.5,-1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 104 - type: Wire - components: - - parent: 15 - pos: 3.5,-2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 105 - type: Wire - components: - - parent: 15 - pos: 3.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 106 - type: Wire - components: - - parent: 15 - pos: 3.5,-4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 107 - type: Wire - components: - - parent: 15 - pos: 3.5,-5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 108 - type: Wire - components: - - parent: 15 - pos: 3.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 109 - type: Wire - components: - - parent: 15 - pos: 3.5,-7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 110 - type: Wire - components: - - parent: 15 - pos: 3.5,-8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 111 - type: Wire - components: - - parent: 15 - pos: 3.5,-9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 112 - type: Wire - components: - - parent: 15 - pos: 3.5,-10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 113 - type: Wire - components: - - parent: 15 - pos: 3.5,-11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 114 - type: Wire - components: - - parent: 15 - pos: 3.5,-12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 115 - type: Wire - components: - - parent: 15 - pos: 3.5,-13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 116 - type: Wire - components: - - parent: 15 - pos: 3.5,-14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 117 - type: Wire - components: - - parent: 15 - pos: 3.5,-15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 118 - type: Wire - components: - - parent: 15 - pos: 3.5,-16.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 119 - type: Wire - components: - - parent: 15 - pos: 3.5,-17.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 120 - type: Wire - components: - - parent: 15 - pos: 3.5,-18.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 121 - type: Wire - components: - - parent: 15 - pos: 3.5,-19.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 122 - type: Wire - components: - - parent: 15 - pos: 3.5,-20.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 123 - type: Wire - components: - - parent: 15 - pos: 3.5,-21.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 124 - type: Wire - components: - - parent: 15 - pos: 3.5,-22.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 125 - type: Wire - components: - - parent: 15 - pos: 3.5,-23.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 126 - type: Wire - components: - - parent: 15 - pos: 7.5,-19.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 127 - type: Wire - components: - - parent: 15 - pos: 5.5,-19.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 128 - type: Wire - components: - - parent: 15 - pos: 4.5,-19.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 129 - type: Wire - components: - - parent: 15 - pos: 6.5,-19.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 130 - type: Wire - components: - - parent: 15 - pos: 7.5,-20.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 131 - type: Wire - components: - - parent: 15 - pos: 8.5,-20.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 132 - type: Wire - components: - - parent: 15 - pos: 9.5,-20.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 133 - type: Wire - components: - - parent: 15 - pos: 10.5,-20.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 134 - type: Wire - components: - - parent: 15 - pos: 11.5,-20.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 135 - type: Wire - components: - - parent: 15 - pos: 12.5,-20.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 136 - type: Wire - components: - - parent: 15 - pos: 13.5,-20.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 137 - type: Wire - components: - - parent: 15 - pos: 14.5,-20.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 138 - type: Wire - components: - - parent: 15 - pos: 18.5,-25.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 139 - type: Wire - components: - - parent: 15 - pos: 17.5,-25.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 140 - type: Wire - components: - - parent: 15 - pos: 16.5,-25.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 141 - type: Wire - components: - - parent: 15 - pos: 15.5,-25.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 142 - type: Wire - components: - - parent: 15 - pos: 14.5,-25.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 143 - type: Wire - components: - - parent: 15 - pos: 14.5,-25.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 144 - type: Wire - components: - - parent: 15 - pos: 14.5,-24.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 145 - type: Wire - components: - - parent: 15 - pos: 22.5,-20.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 146 - type: Wire - components: - - parent: 15 - pos: 22.5,-19.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 147 - type: Wire - components: - - parent: 15 - pos: 22.5,-18.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 148 - type: Wire - components: - - parent: 15 - pos: 22.5,-17.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 149 - type: Wire - components: - - parent: 15 - pos: 23.5,-17.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 150 - type: Wire - components: - - parent: 15 - pos: 24.5,-17.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 151 - type: Wire - components: - - parent: 15 - pos: 25.5,-17.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 152 - type: Wire - components: - - parent: 15 - pos: 26.5,-17.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 153 - type: Wire - components: - - parent: 15 - pos: 26.5,-16.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 154 - type: Wire - components: - - parent: 15 - pos: 26.5,-15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 155 - type: Wire - components: - - parent: 15 - pos: 26.5,-14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 156 - type: Wire - components: - - parent: 15 - pos: 26.5,-13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 157 - type: Wire - components: - - parent: 15 - pos: 26.5,-12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 158 - type: Wire - components: - - parent: 15 - pos: 26.5,-11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 159 - type: Catwalk - components: - - parent: 15 - pos: 22.5,-18.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 160 - type: Wire - components: - - parent: 15 - pos: 26.5,-10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 161 - type: Wire - components: - - parent: 15 - pos: 26.5,-2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 162 - type: Wire - components: - - parent: 15 - pos: 26.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 163 - type: Wire - components: - - parent: 15 - pos: 26.5,-4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 164 - type: Wire - components: - - parent: 15 - pos: 26.5,-5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 165 - type: Wire - components: - - parent: 15 - pos: 26.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 166 - type: Wire - components: - - parent: 15 - pos: 26.5,-7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 167 - type: Wire - components: - - parent: 15 - pos: 26.5,-8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 168 - type: Wire - components: - - parent: 15 - pos: 26.5,-9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 169 - type: Wire - components: - - parent: 15 - pos: 25.5,-2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 170 - type: Wire - components: - - parent: 15 - pos: 24.5,-2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 171 - type: Wire - components: - - parent: 15 - pos: 23.5,-2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 172 - type: Wire - components: - - parent: 15 - pos: 22.5,-2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 173 - type: Wire - components: - - parent: 15 - pos: 21.5,-2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 174 - type: Wire - components: - - parent: 15 - pos: 20.5,-2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 175 - type: Wire - components: - - parent: 15 - pos: 20.5,-1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 176 - type: Wire - components: - - parent: 15 - pos: 20.5,-0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 177 - type: Wire - components: - - parent: 15 - pos: 20.5,0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 178 - type: Wire - components: - - parent: 15 - pos: 20.5,1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 179 - type: Wire - components: - - parent: 15 - pos: 21.5,1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 180 - type: Wire - components: - - parent: 15 - pos: 21.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 181 - type: Wire - components: - - parent: 15 - pos: 21.5,3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 182 - type: Wire - components: - - parent: 15 - pos: 27.5,5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 183 - type: Wire - components: - - parent: 15 - pos: 27.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 184 - type: Wire - components: - - parent: 15 - pos: 27.5,7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 185 - type: Catwalk - components: - - parent: 15 - pos: 10.5,14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 186 - type: Catwalk - components: - - parent: 15 - pos: 12.5,14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 187 - type: Catwalk - components: - - parent: 15 - pos: 11.5,14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 188 - type: Wire - components: - - parent: 15 - pos: 25.5,9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 189 - type: Wire - components: - - parent: 15 - pos: 24.5,9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 190 - type: Wire - components: - - parent: 15 - pos: 23.5,9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 191 - type: Wire - components: - - parent: 15 - pos: 22.5,9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 192 - type: Wire - components: - - parent: 15 - pos: 21.5,9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 193 - type: Wire - components: - - parent: 15 - pos: 21.5,10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 194 - type: Wire - components: - - parent: 15 - pos: 20.5,10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 195 - type: Wire - components: - - parent: 15 - pos: 19.5,10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 196 - type: Wire - components: - - parent: 15 - pos: 18.5,10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 197 - type: Wire - components: - - parent: 15 - pos: 17.5,10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 198 - type: Wire - components: - - parent: 15 - pos: 16.5,10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 199 - type: Wire - components: - - parent: 15 - pos: 15.5,10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 200 - type: Wire - components: - - parent: 15 - pos: 14.5,10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 201 - type: Wire - components: - - parent: 15 - pos: 13.5,10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 202 - type: Wire - components: - - parent: 15 - pos: 13.5,9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 203 - type: Wire - components: - - parent: 15 - pos: 13.5,8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 204 - type: Wire - components: - - parent: 15 - pos: 13.5,7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 205 - type: Wire - components: - - parent: 15 - pos: 13.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 206 - type: Wire - components: - - parent: 15 - pos: 13.5,5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 207 - type: Wire - components: - - parent: 15 - pos: 4.5,14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 208 - type: Wire - components: - - parent: 15 - pos: 6.5,14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 209 - type: Wire - components: - - parent: 15 - pos: 5.5,14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 210 - type: Wire - components: - - parent: 15 - pos: 6.5,13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 211 - type: Wire - components: - - parent: 15 - pos: 7.5,13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 212 - type: Wire - components: - - parent: 15 - pos: 8.5,13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 213 - type: Wire - components: - - parent: 15 - pos: 8.5,12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 214 - type: Wire - components: - - parent: 15 - pos: 8.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 215 - type: Wire - components: - - parent: 15 - pos: 9.5,13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 216 - type: Wire - components: - - parent: 15 - pos: 10.5,13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 217 - type: Wire - components: - - parent: 15 - pos: 10.5,14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 218 - type: Wire - components: - - parent: 15 - pos: 11.5,14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 219 - type: Wire - components: - - parent: 15 - pos: 12.5,14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 220 - type: Wire - components: - - parent: 15 - pos: 12.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 221 - type: Wire - components: - - parent: 15 - pos: 12.5,16.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 222 - type: Wire - components: - - parent: 15 - pos: 12.5,17.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 223 - type: Wire - components: - - parent: 15 - pos: 12.5,18.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 224 - type: Wire - components: - - parent: 15 - pos: 12.5,19.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 225 - type: Wire - components: - - parent: 15 - pos: 12.5,20.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 226 - type: Wire - components: - - parent: 15 - pos: 11.5,20.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 227 - type: Wire - components: - - parent: 15 - pos: 10.5,20.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 228 - type: Wire - components: - - parent: 15 - pos: 26.5,9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 229 - type: Wire - components: - - parent: 15 - pos: 26.5,8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 230 - type: Wire - components: - - parent: 15 - pos: 27.5,8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 231 - type: Wire - components: - - parent: 15 - pos: 2.5,-23.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 232 - type: Wire - components: - - parent: 15 - pos: 1.5,-23.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 233 - type: Wire - components: - - parent: 15 - pos: 0.5,-23.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 234 - type: Wire - components: - - parent: 15 - pos: -0.5,-24.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 235 - type: Wire - components: - - parent: 15 - pos: 2.5,-19.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 236 - type: Wire - components: - - parent: 15 - pos: 1.5,-19.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 237 - type: Wire - components: - - parent: 15 - pos: 0.5,-19.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 238 - type: Wire - components: - - parent: 15 - pos: -0.5,-19.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 239 - type: Wire - components: - - parent: 15 - pos: -1.5,-19.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 240 - type: Wire - components: - - parent: 15 - pos: -2.5,-19.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 241 - type: Wire - components: - - parent: 15 - pos: -3.5,-19.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 242 - type: Wire - components: - - parent: 15 - pos: -4.5,-19.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 243 - type: Wire - components: - - parent: 15 - pos: -5.5,-19.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 244 - type: Wire - components: - - parent: 15 - pos: -6.5,-19.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 245 - type: Wire - components: - - parent: 15 - pos: -7.5,-19.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 246 - type: Wire - components: - - parent: 15 - pos: -8.5,-19.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 247 - type: Wire - components: - - parent: 15 - pos: -9.5,-19.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 248 - type: Wire - components: - - parent: 15 - pos: -10.5,-19.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 249 - type: Wire - components: - - parent: 15 - pos: -11.5,-19.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 250 - type: Wire - components: - - parent: 15 - pos: -8.5,-20.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 251 - type: Wire - components: - - parent: 15 - pos: -8.5,-21.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 252 - type: Wire - components: - - parent: 15 - pos: -8.5,-22.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 253 - type: Wire - components: - - parent: 15 - pos: -9.5,-22.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 254 - type: Wire - components: - - parent: 15 - pos: -11.5,-20.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 255 - type: Wire - components: - - parent: 15 - pos: -11.5,-21.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 256 - type: Wire - components: - - parent: 15 - pos: -11.5,-22.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 257 - type: Wire - components: - - parent: 15 - pos: -11.5,-23.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 258 - type: Wire - components: - - parent: 15 - pos: -11.5,-24.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 259 - type: Wire - components: - - parent: 15 - pos: -11.5,-25.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 260 - type: Wire - components: - - parent: 15 - pos: -11.5,-26.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 261 - type: Wire - components: - - parent: 15 - pos: -10.5,-26.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 262 - type: Wire - components: - - parent: 15 - pos: -9.5,-26.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 263 - type: Wire - components: - - parent: 15 - pos: -8.5,-26.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 264 - type: Wire - components: - - parent: 15 - pos: -7.5,-26.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 265 - type: Wire - components: - - parent: 15 - pos: -6.5,-26.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 266 - type: Wire - components: - - parent: 15 - pos: -5.5,-26.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 267 - type: Wire - components: - - parent: 15 - pos: -4.5,-26.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 268 - type: Wire - components: - - parent: 15 - pos: -3.5,-26.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 269 - type: Wire - components: - - parent: 15 - pos: -2.5,-26.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 270 - type: Wire - components: - - parent: 15 - pos: -1.5,-26.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 271 - type: Wire - components: - - parent: 15 - pos: -0.5,-26.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 272 - type: Wire - components: - - parent: 15 - pos: -0.5,-23.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 273 - type: Wire - components: - - parent: 15 - pos: -0.5,-25.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 274 - type: Catwalk - components: - - parent: 15 - pos: -11.5,-22.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 275 - type: Catwalk - components: - - parent: 15 - pos: -11.5,-23.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 276 - type: Catwalk - components: - - parent: 15 - pos: -11.5,-24.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 277 - type: Catwalk - components: - - parent: 15 - pos: -11.5,-25.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 278 - type: Catwalk - components: - - parent: 15 - pos: -11.5,-26.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 279 - type: Catwalk - components: - - parent: 15 - pos: -0.5,-26.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 280 - type: Catwalk - components: - - parent: 15 - pos: -0.5,-25.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 281 - type: Catwalk - components: - - parent: 15 - pos: -0.5,-24.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 282 - type: Catwalk - components: - - parent: 15 - pos: -0.5,-23.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 283 - type: Catwalk - components: - - parent: 15 - pos: 0.5,-23.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 284 - type: Catwalk - components: - - parent: 15 - pos: -9.5,-26.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 285 - type: Catwalk - components: - - parent: 15 - pos: -8.5,-26.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 286 - type: Catwalk - components: - - parent: 15 - pos: -7.5,-26.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 287 - type: Wire - components: - - parent: 15 - pos: -12.5,-19.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 288 - type: Wire - components: - - parent: 15 - pos: -13.5,-19.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 289 - type: Wire - components: - - parent: 15 - pos: -14.5,-19.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 290 - type: Wire - components: - - parent: 15 - pos: -15.5,-19.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 291 - type: Wire - components: - - parent: 15 - pos: -16.5,-19.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 292 - type: Wire - components: - - parent: 15 - pos: -16.5,-18.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 293 - type: Wire - components: - - parent: 15 - pos: -16.5,-17.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 294 - type: Wire - components: - - parent: 15 - pos: -16.5,-16.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 295 - type: Wire - components: - - parent: 15 - pos: -16.5,-15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 296 - type: Wire - components: - - parent: 15 - pos: -16.5,-14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 297 - type: Wire - components: - - parent: 15 - pos: 2.5,-7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 298 - type: Wire - components: - - parent: 15 - pos: 1.5,-7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 299 - type: APC - components: - - parent: 15 - pos: -19.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 300 - type: Table - components: - - parent: 15 - pos: 30.5,-4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 301 - type: Wire - components: - - parent: 15 - pos: -3.5,-0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 302 - type: Wire - components: - - parent: 15 - pos: -1.5,-0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 303 - type: Wire - components: - - parent: 15 - pos: -2.5,-0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 304 - type: Catwalk - components: - - parent: 15 - pos: 29.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 305 - type: Wire - components: - - parent: 15 - pos: -7.5,-0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 306 - type: Catwalk - components: - - parent: 15 - pos: 33.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 307 - type: Wire - components: - - parent: 15 - pos: -6.5,-0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 308 - type: Wire - components: - - parent: 15 - pos: -5.5,-0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 309 - type: Catwalk - components: - - parent: 15 - pos: 28.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 310 - type: Wire - components: - - parent: 15 - pos: -9.5,-14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 311 - type: Wire - components: - - parent: 15 - pos: -10.5,-14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 312 - type: Wire - components: - - parent: 15 - pos: -11.5,-14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 313 - type: Wire - components: - - parent: 15 - pos: -12.5,-14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 314 - type: Wire - components: - - parent: 15 - pos: -13.5,-14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 315 - type: Wire - components: - - parent: 15 - pos: -14.5,-14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 316 - type: Wire - components: - - parent: 15 - pos: -15.5,-14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 317 - type: Wire - components: - - parent: 15 - pos: -13.5,-13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 318 - type: Wire - components: - - parent: 15 - pos: -13.5,-12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 319 - type: Catwalk - components: - - parent: 15 - pos: 27.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 320 - type: Wire - components: - - parent: 15 - pos: -9.5,-10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 321 - type: Wire - components: - - parent: 15 - pos: -9.5,-9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 322 - type: Wire - components: - - parent: 15 - pos: -9.5,-8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 323 - type: Wire - components: - - parent: 15 - pos: -9.5,-7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 324 - type: Wire - components: - - parent: 15 - pos: -32.5,3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 325 - type: Wire - components: - - parent: 15 - pos: -32.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 326 - type: Wire - components: - - parent: 15 - pos: -32.5,1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 327 - type: Wire - components: - - parent: 15 - pos: -32.5,0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 328 - type: LockerElectricalSupplies - components: - - parent: 15 - pos: 39.5,9.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - IsPlaceable: False - type: PlaceableSurface - - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 329 - type: Catwalk - components: - - parent: 15 - pos: 47.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 330 - type: Table - components: - - parent: 15 - pos: -12.5,8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 331 - type: Chair - components: - - parent: 15 - pos: 28.5,1.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable -- uid: 332 - type: Chair - components: - - parent: 15 - pos: 26.5,1.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable -- uid: 333 - type: Wire - components: - - parent: 15 - pos: -33.5,-5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 334 - type: Wire - components: - - parent: 15 - pos: -33.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 335 - type: Wire - components: - - parent: 15 - pos: -34.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 336 - type: Wire - components: - - parent: 15 - pos: -35.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 337 - type: Wire - components: - - parent: 15 - pos: -31.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 338 - type: Wire - components: - - parent: 15 - pos: -30.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 339 - type: Wire - components: - - parent: 15 - pos: -29.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 340 - type: Wire - components: - - parent: 15 - pos: -28.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 341 - type: Wire - components: - - parent: 15 - pos: -27.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 342 - type: Wire - components: - - parent: 15 - pos: -26.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 343 - type: Wire - components: - - parent: 15 - pos: -25.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 344 - type: Wire - components: - - parent: 15 - pos: -24.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 345 - type: Wire - components: - - parent: 15 - pos: -23.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 346 - type: Wire - components: - - parent: 15 - pos: -23.5,-5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 347 - type: Wire - components: - - parent: 15 - pos: -23.5,-4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 348 - type: Wire - components: - - parent: 15 - pos: -22.5,10.5 - rot: 3.141592653589793 rad - type: Transform -- uid: 349 - type: APC - components: - - parent: 15 - pos: -30.5,8.5 - rot: 3.141592653589793 rad - type: Transform -- uid: 350 - type: APC - components: - - parent: 15 - pos: -22.5,10.5 - rot: 3.141592653589793 rad - type: Transform - - startingCharge: 9806.396 - type: Battery -- uid: 351 - type: Wire - components: - - parent: 15 - pos: -23.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 352 - type: Wire - components: - - parent: 15 - pos: -23.5,-2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 353 - type: Wire - components: - - parent: 15 - pos: -23.5,-1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 354 - type: Wire - components: - - parent: 15 - pos: -24.5,-1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 355 - type: Wire - components: - - parent: 15 - pos: -25.5,-1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 356 - type: Wire - components: - - parent: 15 - pos: -26.5,-1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 357 - type: Wire - components: - - parent: 15 - pos: -27.5,-1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 358 - type: Wire - components: - - parent: 15 - pos: -28.5,-1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 359 - type: Window - components: - - parent: 15 - pos: -18.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 360 - type: Window - components: - - parent: 15 - pos: -19.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 361 - type: LowWall - components: - - parent: 15 - pos: -19.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 362 - type: LowWall - components: - - parent: 15 - pos: -18.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 363 - type: Wire - components: - - parent: 15 - pos: -23.5,-0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 364 - type: Wire - components: - - parent: 15 - pos: -23.5,0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 365 - type: Wire - components: - - parent: 15 - pos: -23.5,1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 366 - type: Wire - components: - - parent: 15 - pos: -23.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 367 - type: Wire - components: - - parent: 15 - pos: -23.5,3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 368 - type: Wire - components: - - parent: 15 - pos: -23.5,-7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 369 - type: Wire - components: - - parent: 15 - pos: -22.5,-7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 370 - type: ChairOfficeDark - components: - - parent: 15 - pos: -6.5,20.5 - rot: 3.141592653589793 rad - type: Transform - - anchored: False - type: Collidable -- uid: 371 - type: Poweredlight - components: - - parent: 15 - pos: -1.5,15 - rot: -1.5707963267948966 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 372 - type: Table - components: - - parent: 15 - pos: 10.5,8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 373 - type: Table - components: - - parent: 15 - pos: -7.5,21.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 374 - type: ChairOfficeDark - components: - - parent: 15 - pos: -11.5,8.5 - rot: 3.141592653589793 rad - type: Transform - - anchored: False - type: Collidable -- uid: 375 - type: Chair - components: - - parent: 15 - pos: -13.5,8.5 - type: Transform - - anchored: False - type: Collidable -- uid: 376 - type: Wire - components: - - parent: 15 - pos: -23.5,5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 377 - type: Wire - components: - - parent: 15 - pos: -23.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 378 - type: Wire - components: - - parent: 15 - pos: -23.5,7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 379 - type: Wire - components: - - parent: 15 - pos: -23.5,8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 380 - type: Wire - components: - - parent: 15 - pos: -23.5,9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 381 - type: Wire - components: - - parent: 15 - pos: -22.5,9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 382 - type: Wire - components: - - parent: 15 - pos: -21.5,9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 383 - type: Wire - components: - - parent: 15 - pos: -20.5,9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 384 - type: Wire - components: - - parent: 15 - pos: -19.5,9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 385 - type: Wire - components: - - parent: 15 - pos: -20.5,10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 386 - type: Wire - components: - - parent: 15 - pos: -20.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 387 - type: Wire - components: - - parent: 15 - pos: -20.5,12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 388 - type: Wire - components: - - parent: 15 - pos: -20.5,13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 389 - type: ComputerPowerMonitoring - components: - - parent: 15 - pos: 29.5,-1.5 - type: Transform -- uid: 390 - type: LockerToolFilled - components: - - parent: 15 - pos: 35.5,-0.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - IsPlaceable: False - type: PlaceableSurface - - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 391 - type: Multitool - components: - - parent: 15 - pos: -29.340704,7.4573865 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable -- uid: 392 - type: LockerToolFilled - components: - - parent: 15 - pos: 35.5,0.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - IsPlaceable: False - type: PlaceableSurface - - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 393 - type: Wire - components: - - parent: 15 - pos: -33.5,0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 394 - type: Wire - components: - - parent: 15 - pos: -33.5,-0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 395 - type: Wire - components: - - parent: 15 - pos: -33.5,-1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 396 - type: Wire - components: - - parent: 15 - pos: -33.5,-2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 397 - type: Wire - components: - - parent: 15 - pos: -33.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 398 - type: Wire - components: - - parent: 15 - pos: -33.5,-4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 399 - type: Wire - components: - - parent: 15 - pos: -32.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 400 - type: Wire - components: - - parent: 15 - pos: -32.5,13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 401 - type: Wire - components: - - parent: 15 - pos: -32.5,12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 402 - type: Wire - components: - - parent: 15 - pos: -32.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 403 - type: Wire - components: - - parent: 15 - pos: -32.5,10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 404 - type: Wire - components: - - parent: 15 - pos: -32.5,9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 405 - type: Wire - components: - - parent: 15 - pos: -32.5,8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 406 - type: Wire - components: - - parent: 15 - pos: -33.5,8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 407 - type: Wire - components: - - parent: 15 - pos: -34.5,8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 408 - type: Wire - components: - - parent: 15 - pos: -35.5,8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 409 - type: Wire - components: - - parent: 15 - pos: -36.5,8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 410 - type: Wire - components: - - parent: 15 - pos: -37.5,8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 411 - type: Wire - components: - - parent: 15 - pos: -37.5,7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 412 - type: Wire - components: - - parent: 15 - pos: -37.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 413 - type: Wire - components: - - parent: 15 - pos: -37.5,5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 414 - type: Wire - components: - - parent: 15 - pos: -37.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 415 - type: Wire - components: - - parent: 15 - pos: -19.5,13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 416 - type: Wire - components: - - parent: 15 - pos: -18.5,13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 417 - type: Wire - components: - - parent: 15 - pos: -17.5,13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 418 - type: Wire - components: - - parent: 15 - pos: -17.5,14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 419 - type: Wire - components: - - parent: 15 - pos: -17.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 420 - type: Wire - components: - - parent: 15 - pos: -18.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 421 - type: Wire - components: - - parent: 15 - pos: -18.5,16.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 422 - type: Wire - components: - - parent: 15 - pos: -18.5,17.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 423 - type: Wire - components: - - parent: 15 - pos: -18.5,18.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 424 - type: Wire - components: - - parent: 15 - pos: -18.5,19.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 425 - type: Wire - components: - - parent: 15 - pos: -18.5,20.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 426 - type: Wire - components: - - parent: 15 - pos: -18.5,21.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 427 - type: Wire - components: - - parent: 15 - pos: -18.5,22.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 428 - type: Wire - components: - - parent: 15 - pos: -18.5,23.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 429 - type: Wire - components: - - parent: 15 - pos: -18.5,24.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 430 - type: Wire - components: - - parent: 15 - pos: -18.5,25.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 431 - type: Wire - components: - - parent: 15 - pos: -17.5,25.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 432 - type: Wire - components: - - parent: 15 - pos: -16.5,25.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 433 - type: Wire - components: - - parent: 15 - pos: -15.5,25.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 434 - type: Wire - components: - - parent: 15 - pos: -14.5,25.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 435 - type: Wire - components: - - parent: 15 - pos: -13.5,25.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 436 - type: Wire - components: - - parent: 15 - pos: -12.5,25.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 437 - type: Wire - components: - - parent: 15 - pos: -11.5,25.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 438 - type: Wire - components: - - parent: 15 - pos: -10.5,25.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 439 - type: Wire - components: - - parent: 15 - pos: -9.5,25.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 440 - type: Wire - components: - - parent: 15 - pos: -8.5,25.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 441 - type: Wire - components: - - parent: 15 - pos: -7.5,25.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 442 - type: Wire - components: - - parent: 15 - pos: -7.5,24.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 443 - type: Wire - components: - - parent: 15 - pos: -6.5,24.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 444 - type: Wire - components: - - parent: 15 - pos: -5.5,24.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 445 - type: Wire - components: - - parent: 15 - pos: -4.5,24.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 446 - type: Wire - components: - - parent: 15 - pos: -4.5,23.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 447 - type: Wire - components: - - parent: 15 - pos: -4.5,22.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 448 - type: Wire - components: - - parent: 15 - pos: -4.5,21.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 449 - type: Wire - components: - - parent: 15 - pos: -3.5,21.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 450 - type: Wire - components: - - parent: 15 - pos: -2.5,21.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 451 - type: Wire - components: - - parent: 15 - pos: -1.5,21.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 452 - type: Wire - components: - - parent: 15 - pos: -0.5,21.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 453 - type: Wire - components: - - parent: 15 - pos: -0.5,20.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 454 - type: Wire - components: - - parent: 15 - pos: 0.5,20.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 455 - type: Wire - components: - - parent: 15 - pos: 1.5,20.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 456 - type: Wire - components: - - parent: 15 - pos: 2.5,20.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 457 - type: Wire - components: - - parent: 15 - pos: 2.5,21.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 458 - type: Wire - components: - - parent: 15 - pos: 2.5,22.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 459 - type: Wire - components: - - parent: 15 - pos: 2.5,23.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 460 - type: Wire - components: - - parent: 15 - pos: 2.5,24.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 461 - type: Wire - components: - - parent: 15 - pos: 2.5,25.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 462 - type: Wire - components: - - parent: 15 - pos: 2.5,26.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 463 - type: Wire - components: - - parent: 15 - pos: 2.5,27.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 464 - type: Wire - components: - - parent: 15 - pos: 2.5,28.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 465 - type: Wire - components: - - parent: 15 - pos: 0.5,27.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 466 - type: Wire - components: - - parent: 15 - pos: 0.5,28.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 467 - type: APC - components: - - parent: 15 - pos: 0.5,27.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 468 - type: APC - components: - - parent: 15 - pos: 7.5,27.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 469 - type: Wire - components: - - parent: 15 - pos: 1.5,28.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 470 - type: Wire - components: - - parent: 15 - pos: 3.5,25.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 471 - type: Wire - components: - - parent: 15 - pos: 4.5,25.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 472 - type: Wire - components: - - parent: 15 - pos: 5.5,25.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 473 - type: Wire - components: - - parent: 15 - pos: 6.5,25.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 474 - type: Wire - components: - - parent: 15 - pos: 7.5,25.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 475 - type: Wire - components: - - parent: 15 - pos: -6.5,5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 476 - type: Wire - components: - - parent: 15 - pos: -6.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 477 - type: Wire - components: - - parent: 15 - pos: -6.5,7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 478 - type: Wire - components: - - parent: 15 - pos: -6.5,8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 479 - type: Wire - components: - - parent: 15 - pos: -6.5,9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 480 - type: Wire - components: - - parent: 15 - pos: -6.5,10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 481 - type: Wire - components: - - parent: 15 - pos: -6.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 482 - type: Wire - components: - - parent: 15 - pos: -16.5,5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 483 - type: Wire - components: - - parent: 15 - pos: -16.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 484 - type: Wire - components: - - parent: 15 - pos: -16.5,7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 485 - type: Wire - components: - - parent: 15 - pos: -17.5,7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 486 - type: Wire - components: - - parent: 15 - pos: -17.5,8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 487 - type: Wire - components: - - parent: 15 - pos: -17.5,9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 488 - type: Wire - components: - - parent: 15 - pos: -17.5,10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 489 - type: Wire - components: - - parent: 15 - pos: -17.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 490 - type: Wire - components: - - parent: 15 - pos: -17.5,12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 491 - type: Wire - components: - - parent: 15 - pos: -16.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 492 - type: Wire - components: - - parent: 15 - pos: -15.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 493 - type: Wire - components: - - parent: 15 - pos: -14.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 494 - type: Wire - components: - - parent: 15 - pos: -13.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 495 - type: Wire - components: - - parent: 15 - pos: -12.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 496 - type: Wire - components: - - parent: 15 - pos: -11.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 497 - type: Wire - components: - - parent: 15 - pos: -10.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 498 - type: Wire - components: - - parent: 15 - pos: -9.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 499 - type: Wire - components: - - parent: 15 - pos: -8.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 500 - type: Wire - components: - - parent: 15 - pos: -7.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 501 - type: Wire - components: - - parent: 15 - pos: -6.5,12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 502 - type: Wire - components: - - parent: 15 - pos: -6.5,13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 503 - type: Wire - components: - - parent: 15 - pos: -6.5,14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 504 - type: Wire - components: - - parent: 15 - pos: -6.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 505 - type: Wire - components: - - parent: 15 - pos: -7.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 506 - type: Wire - components: - - parent: 15 - pos: -8.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 507 - type: Wire - components: - - parent: 15 - pos: -9.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 508 - type: Wire - components: - - parent: 15 - pos: -10.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 509 - type: Wire - components: - - parent: 15 - pos: -11.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 510 - type: Wire - components: - - parent: 15 - pos: -12.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 511 - type: Wire - components: - - parent: 15 - pos: 1.5,11.5 - rot: 1.5707963267948966 rad - type: Transform -- uid: 512 - type: APC - components: - - parent: 15 - pos: 1.5,11.5 - rot: 1.5707963267948966 rad - type: Transform -- uid: 513 - type: Wire - components: - - parent: 15 - pos: -5.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 514 - type: Wire - components: - - parent: 15 - pos: -4.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 515 - type: Wire - components: - - parent: 15 - pos: -3.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 516 - type: Wire - components: - - parent: 15 - pos: -2.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 517 - type: Wire - components: - - parent: 15 - pos: -1.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 518 - type: Wire - components: - - parent: 15 - pos: -0.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 519 - type: Wire - components: - - parent: 15 - pos: 0.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 520 - type: Wire - components: - - parent: 15 - pos: -8.5,16.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 521 - type: Wire - components: - - parent: 15 - pos: -8.5,17.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 522 - type: Wire - components: - - parent: 15 - pos: -8.5,18.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 523 - type: Wire - components: - - parent: 15 - pos: -8.5,19.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 524 - type: Wire - components: - - parent: 15 - pos: -8.5,20.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 525 - type: Catwalk - components: - - parent: 15 - pos: 7.5,-19.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 526 - type: Catwalk - components: - - parent: 15 - pos: 14.5,-19.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 527 - type: Catwalk - components: - - parent: 15 - pos: 21.5,-10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 528 - type: Catwalk - components: - - parent: 15 - pos: 26.5,-10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 529 - type: APC - components: - - parent: 15 - pos: -9.5,26.5 - rot: 1.5707963267948966 rad - type: Transform -- uid: 530 - type: Wire - components: - - parent: 15 - pos: -15.5,15.5 - rot: 1.5707963267948966 rad - type: Transform -- uid: 531 - type: APC - components: - - parent: 15 - pos: -15.5,15.5 - rot: 1.5707963267948966 rad - type: Transform -- uid: 532 - type: Wire - components: - - parent: 15 - pos: -14.5,15.5 - rot: 1.5707963267948966 rad - type: Transform -- uid: 533 - type: Wire - components: - - parent: 15 - pos: 2.5,17.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 534 - type: Wire - components: - - parent: 15 - pos: 1.5,17.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 535 - type: Wire - components: - - parent: 15 - pos: 0.5,17.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 536 - type: Wire - components: - - parent: 15 - pos: -1.5,17.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 537 - type: Wire - components: - - parent: 15 - pos: 29.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 538 - type: Wire - components: - - parent: 15 - pos: 29.5,5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 539 - type: Wire - components: - - parent: 15 - pos: 30.5,5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 540 - type: Wire - components: - - parent: 15 - pos: 32.5,5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 541 - type: Wire - components: - - parent: 15 - pos: 31.5,5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 542 - type: Wire - components: - - parent: 15 - pos: 33.5,5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 543 - type: Wire - components: - - parent: 15 - pos: 33.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 544 - type: Wire - components: - - parent: 15 - pos: 33.5,7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 545 - type: Wire - components: - - parent: 15 - pos: 33.5,8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 546 - type: Wire - components: - - parent: 15 - pos: 33.5,9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 547 - type: Wire - components: - - parent: 15 - pos: 33.5,10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 548 - type: Wire - components: - - parent: 15 - pos: 33.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 549 - type: Wire - components: - - parent: 15 - pos: 33.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 550 - type: Wire - components: - - parent: 15 - pos: 34.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 551 - type: Wire - components: - - parent: 15 - pos: 35.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 552 - type: Wire - components: - - parent: 15 - pos: 36.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 553 - type: Wire - components: - - parent: 15 - pos: 37.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 554 - type: Wire - components: - - parent: 15 - pos: 38.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 555 - type: Wire - components: - - parent: 15 - pos: 39.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 556 - type: Wire - components: - - parent: 15 - pos: 40.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 557 - type: Wire - components: - - parent: 15 - pos: 40.5,5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 558 - type: Wire - components: - - parent: 15 - pos: 40.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 559 - type: Wire - components: - - parent: 15 - pos: 40.5,7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 560 - type: ReinforcedWindow - components: - - parent: 15 - pos: 51.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 561 - type: Wire - components: - - parent: 15 - pos: 38.5,8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 562 - type: Wire - components: - - parent: 15 - pos: 37.5,8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 563 - type: Wire - components: - - parent: 15 - pos: 39.5,8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 564 - type: Wire - components: - - parent: 15 - pos: 38.5,3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 565 - type: Wire - components: - - parent: 15 - pos: 38.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 566 - type: Wire - components: - - parent: 15 - pos: 38.5,1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 567 - type: Wire - components: - - parent: 15 - pos: 38.5,0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 568 - type: Wire - components: - - parent: 15 - pos: 38.5,-0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 569 - type: Wire - components: - - parent: 15 - pos: 33.5,3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 570 - type: Wire - components: - - parent: 15 - pos: 33.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 571 - type: Wire - components: - - parent: 15 - pos: 33.5,1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 572 - type: Wire - components: - - parent: 15 - pos: 33.5,0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 573 - type: Wire - components: - - parent: 15 - pos: 33.5,-0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 574 - type: Wire - components: - - parent: 15 - pos: 33.5,-1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 575 - type: Wire - components: - - parent: 15 - pos: 33.5,-2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 576 - type: Wire - components: - - parent: 15 - pos: 33.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 577 - type: Wire - components: - - parent: 15 - pos: 33.5,-4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 578 - type: Wire - components: - - parent: 15 - pos: 33.5,-5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 579 - type: Wire - components: - - parent: 15 - pos: 33.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 580 - type: Wire - components: - - parent: 15 - pos: 33.5,-7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 581 - type: Wire - components: - - parent: 15 - pos: 32.5,-7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 582 - type: Wire - components: - - parent: 15 - pos: 31.5,-7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 583 - type: Wire - components: - - parent: 15 - pos: 30.5,-7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 584 - type: Wire - components: - - parent: 15 - pos: 29.5,-7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 585 - type: Wire - components: - - parent: 15 - pos: 29.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 586 - type: Wire - components: - - parent: 15 - pos: 28.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 587 - type: Wire - components: - - parent: 15 - pos: 27.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 588 - type: Wire - components: - - parent: 15 - pos: -3.5,-18.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 589 - type: Wire - components: - - parent: 15 - pos: -3.5,-17.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 590 - type: Wire - components: - - parent: 15 - pos: -3.5,-16.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 591 - type: Wire - components: - - parent: 15 - pos: -3.5,-15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 592 - type: Wire - components: - - parent: 15 - pos: -3.5,-14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 593 - type: Wire - components: - - parent: 15 - pos: -3.5,-20.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 594 - type: Wire - components: - - parent: 15 - pos: -3.5,-21.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 595 - type: Wire - components: - - parent: 15 - pos: -3.5,-22.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 596 - type: Wire - components: - - parent: 15 - pos: -3.5,-23.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 597 - type: Wire - components: - - parent: 15 - pos: 14.5,-19.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 598 - type: Wire - components: - - parent: 15 - pos: 14.5,-18.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 599 - type: Wire - components: - - parent: 15 - pos: 14.5,-17.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 600 - type: Wire - components: - - parent: 15 - pos: 14.5,-16.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 601 - type: Wire - components: - - parent: 15 - pos: 14.5,-15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 602 - type: Wire - components: - - parent: 15 - pos: 14.5,-14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 603 - type: Wire - components: - - parent: 15 - pos: 14.5,-13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 604 - type: Wire - components: - - parent: 15 - pos: 14.5,-12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 605 - type: Wire - components: - - parent: 15 - pos: 14.5,-11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 606 - type: Wire - components: - - parent: 15 - pos: 14.5,-10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 607 - type: Wire - components: - - parent: 15 - pos: 13.5,-10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 608 - type: Wire - components: - - parent: 15 - pos: 12.5,-10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 609 - type: Wire - components: - - parent: 15 - pos: 11.5,-10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 610 - type: Wire - components: - - parent: 15 - pos: 10.5,-10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 611 - type: Wire - components: - - parent: 15 - pos: 9.5,-10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 612 - type: Wire - components: - - parent: 15 - pos: 8.5,-10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 613 - type: Wire - components: - - parent: 15 - pos: 8.5,-11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 614 - type: Wire - components: - - parent: 15 - pos: 8.5,-12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 615 - type: Wire - components: - - parent: 15 - pos: 8.5,-13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 616 - type: Wire - components: - - parent: 15 - pos: 8.5,-14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 617 - type: Wire - components: - - parent: 15 - pos: 9.5,-14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 618 - type: Wire - components: - - parent: 15 - pos: 10.5,-14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 619 - type: Wire - components: - - parent: 15 - pos: 10.5,-9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 620 - type: Wire - components: - - parent: 15 - pos: 10.5,-8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 621 - type: Wire - components: - - parent: 15 - pos: 10.5,-7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 622 - type: Wire - components: - - parent: 15 - pos: 10.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 623 - type: Wire - components: - - parent: 15 - pos: 10.5,-5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 624 - type: Wire - components: - - parent: 15 - pos: 10.5,-4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 625 - type: Wire - components: - - parent: 15 - pos: 10.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 626 - type: Wire - components: - - parent: 15 - pos: 10.5,-2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 627 - type: Wire - components: - - parent: 15 - pos: 10.5,-1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 628 - type: Wire - components: - - parent: 15 - pos: 10.5,-0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 629 - type: Wire - components: - - parent: 15 - pos: 9.5,-0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 630 - type: Wire - components: - - parent: 15 - pos: 8.5,-0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 631 - type: Wire - components: - - parent: 15 - pos: 7.5,-0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 632 - type: Wire - components: - - parent: 15 - pos: 6.5,-0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 633 - type: Wire - components: - - parent: 15 - pos: 5.5,-0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 634 - type: Wire - components: - - parent: 15 - pos: 4.5,-0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 635 - type: Wire - components: - - parent: 15 - pos: 17.5,0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 636 - type: Wire - components: - - parent: 15 - pos: 17.5,-0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 637 - type: Wire - components: - - parent: 15 - pos: 17.5,-1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 638 - type: Wire - components: - - parent: 15 - pos: 17.5,-2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 639 - type: Wire - components: - - parent: 15 - pos: 17.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 640 - type: Wire - components: - - parent: 15 - pos: 17.5,-4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 641 - type: Wire - components: - - parent: 15 - pos: 17.5,-5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 642 - type: Wire - components: - - parent: 15 - pos: 17.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 643 - type: Wire - components: - - parent: 15 - pos: 18.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 644 - type: Wire - components: - - parent: 15 - pos: 19.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 645 - type: solid_wall - components: - - parent: 15 - pos: 25.5,-6.5 - rot: 1.5707963267948966 rad - type: Transform -- uid: 646 - type: Wire - components: - - parent: 15 - pos: 20.5,-4.5 - rot: 1.5707963267948966 rad - type: Transform -- uid: 647 - type: Wire - components: - - parent: 15 - pos: 19.5,-5.5 - rot: 1.5707963267948966 rad - type: Transform -- uid: 648 - type: Wire - components: - - parent: 15 - pos: 19.5,-4.5 - rot: 1.5707963267948966 rad - type: Transform -- uid: 649 - type: Wire - components: - - parent: 15 - pos: 17.5,-7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 650 - type: Wire - components: - - parent: 15 - pos: 17.5,-8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 651 - type: Wire - components: - - parent: 15 - pos: 17.5,-9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 652 - type: Wire - components: - - parent: 15 - pos: 17.5,-10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 653 - type: Wire - components: - - parent: 15 - pos: 18.5,-10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 654 - type: Wire - components: - - parent: 15 - pos: 19.5,-10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 655 - type: Wire - components: - - parent: 15 - pos: 20.5,-10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 656 - type: Wire - components: - - parent: 15 - pos: 21.5,-10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 657 - type: Wire - components: - - parent: 15 - pos: 21.5,-9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 658 - type: Wire - components: - - parent: 15 - pos: 22.5,-9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 659 - type: Wire - components: - - parent: 15 - pos: 23.5,-9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 660 - type: Wire - components: - - parent: 15 - pos: 24.5,-9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 661 - type: Wire - components: - - parent: 15 - pos: 25.5,-9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 662 - type: Wire - components: - - parent: 15 - pos: 16.5,-10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 663 - type: Wire - components: - - parent: 15 - pos: 15.5,-10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 664 - type: Wire - components: - - parent: 15 - pos: 18.5,-11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 665 - type: Wire - components: - - parent: 15 - pos: 18.5,-12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 666 - type: Wire - components: - - parent: 15 - pos: 18.5,-13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 667 - type: Wire - components: - - parent: 15 - pos: 19.5,-13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 668 - type: Wire - components: - - parent: 15 - pos: 20.5,-13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 669 - type: Wire - components: - - parent: 15 - pos: 21.5,-13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 670 - type: Wire - components: - - parent: 15 - pos: 22.5,-13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 671 - type: Wire - components: - - parent: 15 - pos: 23.5,-13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 672 - type: Table - components: - - parent: 15 - pos: 6.5,7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 673 - type: Wire - components: - - parent: 15 - pos: -4.5,-0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 674 - type: Wire - components: - - parent: 15 - pos: 0.5,-7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 675 - type: Wire - components: - - parent: 15 - pos: 0.5,-8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 676 - type: Wire - components: - - parent: 15 - pos: 0.5,-9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 677 - type: Wire - components: - - parent: 15 - pos: 0.5,-10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 678 - type: Wire - components: - - parent: 15 - pos: -0.5,-10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 679 - type: Wire - components: - - parent: 15 - pos: -1.5,-10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 680 - type: Wire - components: - - parent: 15 - pos: -2.5,-10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 681 - type: Wire - components: - - parent: 15 - pos: -3.5,-10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 682 - type: Wire - components: - - parent: 15 - pos: -4.5,-10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 683 - type: Wire - components: - - parent: 15 - pos: -5.5,-10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 684 - type: Wire - components: - - parent: 15 - pos: -6.5,-10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 685 - type: Wire - components: - - parent: 15 - pos: -7.5,-10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 686 - type: Wire - components: - - parent: 15 - pos: -8.5,-10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 687 - type: Wire - components: - - parent: 15 - pos: -9.5,-13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 688 - type: Wire - components: - - parent: 15 - pos: -9.5,-12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 689 - type: Wire - components: - - parent: 15 - pos: -9.5,-11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 690 - type: Wire - components: - - parent: 15 - pos: -8.5,-7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 691 - type: Wire - components: - - parent: 15 - pos: -7.5,-7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 692 - type: Wire - components: - - parent: 15 - pos: -6.5,-7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 693 - type: Wire - components: - - parent: 15 - pos: -6.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 694 - type: Wire - components: - - parent: 15 - pos: -6.5,-5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 695 - type: Wire - components: - - parent: 15 - pos: -6.5,-4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 696 - type: Wire - components: - - parent: 15 - pos: -7.5,-4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 697 - type: Wire - components: - - parent: 15 - pos: -8.5,-4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 698 - type: Wire - components: - - parent: 15 - pos: -8.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 699 - type: Wire - components: - - parent: 15 - pos: -8.5,-2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 700 - type: Wire - components: - - parent: 15 - pos: -8.5,-1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 701 - type: Wire - components: - - parent: 15 - pos: -8.5,-0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 702 - type: Wire - components: - - parent: 15 - pos: -11.5,0.5 - type: Transform -- uid: 703 - type: Chair - components: - - parent: 15 - pos: -3.5,-23.5 - rot: 3.141592653589793 rad - type: Transform - - anchored: False - type: Collidable -- uid: 704 - type: Chair - components: - - parent: 15 - pos: 38.5,-0.5 - type: Transform - - anchored: False - type: Collidable -- uid: 705 - type: Table - components: - - parent: 15 - pos: 39.5,-1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 706 - type: VendingMachineYouTool - components: - - parent: 15 - pos: 31.5,0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 707 - type: Wire - components: - - parent: 15 - pos: 2.5,-0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 708 - type: Wire - components: - - parent: 15 - pos: 1.5,-0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 709 - type: Wire - components: - - parent: 15 - pos: 0.5,-0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 710 - type: Wire - components: - - parent: 15 - pos: -0.5,-0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 711 - type: WeldingFuelTank - components: - - parent: 15 - pos: 33.5,12.5 - rot: 1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable -- uid: 712 - type: Table - components: - - parent: 15 - pos: 29.5,-4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 713 - type: ComputerAlert - components: - - parent: 15 - pos: 29.5,-2.5 - type: Transform -- uid: 714 - type: Wire - components: - - parent: 15 - pos: -32.5,14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 715 - type: Wire - components: - - parent: 15 - pos: -31.5,14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 716 - type: Wire - components: - - parent: 15 - pos: -30.5,14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 717 - type: Wire - components: - - parent: 15 - pos: -29.5,14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 718 - type: Wire - components: - - parent: 15 - pos: -28.5,14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 719 - type: Wire - components: - - parent: 15 - pos: -27.5,14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 720 - type: Wire - components: - - parent: 15 - pos: -26.5,14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 721 - type: Wire - components: - - parent: 15 - pos: -25.5,14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 722 - type: Wire - components: - - parent: 15 - pos: -24.5,14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 723 - type: Wire - components: - - parent: 15 - pos: -23.5,14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 724 - type: Wire - components: - - parent: 15 - pos: -22.5,14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 725 - type: Wire - components: - - parent: 15 - pos: -21.5,14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 726 - type: Wire - components: - - parent: 15 - pos: -20.5,14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 727 - type: Wire - components: - - parent: 15 - pos: -24.5,8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 728 - type: Wire - components: - - parent: 15 - pos: -25.5,8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 729 - type: Wire - components: - - parent: 15 - pos: -26.5,8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 730 - type: Wire - components: - - parent: 15 - pos: -27.5,8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 731 - type: Wire - components: - - parent: 15 - pos: -28.5,8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 732 - type: Catwalk - components: - - parent: 15 - pos: -16.5,-15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 733 - type: Catwalk - components: - - parent: 15 - pos: -13.5,-14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 734 - type: Table - components: - - parent: 15 - pos: 31.5,-4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 735 - type: Catwalk - components: - - parent: 15 - pos: -8.5,-10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 736 - type: Catwalk - components: - - parent: 15 - pos: -9.5,-9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 737 - type: Catwalk - components: - - parent: 15 - pos: -9.5,-8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 738 - type: SignHead - components: - - parent: 15 - pos: -9.687853,18.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 739 - type: ChairOfficeDark - components: - - parent: 15 - pos: 30.5,-2.5 - rot: 3.141592653589793 rad - type: Transform - - anchored: False - type: Collidable -- uid: 740 - type: Catwalk - components: - - parent: 15 - pos: 0.5,-7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 741 - type: CrateGeneric - components: - - parent: 15 - pos: 39.5,13.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - IsPlaceable: False - type: PlaceableSurface - - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 742 - type: CrateGeneric - components: - - parent: 15 - pos: 38.5,13.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - IsPlaceable: False - type: PlaceableSurface - - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 743 - type: Table - components: - - parent: 15 - pos: 6.5,8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 744 - type: Catwalk - components: - - parent: 15 - pos: -32.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 745 - type: Catwalk - components: - - parent: 15 - pos: -33.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 746 - type: Catwalk - components: - - parent: 15 - pos: -32.5,0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 747 - type: Catwalk - components: - - parent: 15 - pos: -32.5,1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 748 - type: Catwalk - components: - - parent: 15 - pos: -15.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 749 - type: Catwalk - components: - - parent: 15 - pos: -16.5,7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 750 - type: Catwalk - components: - - parent: 15 - pos: -20.5,12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 751 - type: Catwalk - components: - - parent: 15 - pos: -16.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 752 - type: Catwalk - components: - - parent: 15 - pos: -4.5,23.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 753 - type: Catwalk - components: - - parent: 15 - pos: -4.5,22.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 754 - type: Catwalk - components: - - parent: 15 - pos: -4.5,21.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 755 - type: Catwalk - components: - - parent: 15 - pos: -0.5,20.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 756 - type: Catwalk - components: - - parent: 15 - pos: 6.5,14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 757 - type: Catwalk - components: - - parent: 15 - pos: 8.5,13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 758 - type: Catwalk - components: - - parent: 15 - pos: 12.5,20.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 759 - type: AirlockMaintEngiLocked - components: - - parent: 15 - pos: 33.5,-5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 760 - type: Catwalk - components: - - parent: 15 - pos: 27.5,8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 761 - type: Catwalk - components: - - parent: 15 - pos: 21.5,1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 762 - type: ReinforcedWindow - components: - - parent: 15 - pos: 51.5,3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 763 - type: Generator - components: - - parent: 15 - pos: 40.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 764 - type: APC - components: - - parent: 15 - pos: 37.5,8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 765 - type: reinforced_wall - components: - - parent: 15 - pos: 39.5,10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 766 - type: reinforced_wall - components: - - parent: 15 - pos: 38.5,10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 767 - type: reinforced_wall - components: - - parent: 15 - pos: 37.5,10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 768 - type: reinforced_wall - components: - - parent: 15 - pos: 37.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 769 - type: reinforced_wall - components: - - parent: 15 - pos: 37.5,12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 770 - type: reinforced_wall - components: - - parent: 15 - pos: 37.5,13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 771 - type: reinforced_wall - components: - - parent: 15 - pos: 37.5,14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 772 - type: reinforced_wall - components: - - parent: 15 - pos: 38.5,14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 773 - type: reinforced_wall - components: - - parent: 15 - pos: 39.5,14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 774 - type: reinforced_wall - components: - - parent: 15 - pos: 40.5,14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 775 - type: reinforced_wall - components: - - parent: 15 - pos: 41.5,14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 776 - type: reinforced_wall - components: - - parent: 15 - pos: 42.5,14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 777 - type: reinforced_wall - components: - - parent: 15 - pos: 43.5,14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 778 - type: reinforced_wall - components: - - parent: 15 - pos: 44.5,14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 779 - type: reinforced_wall - components: - - parent: 15 - pos: 44.5,13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 780 - type: reinforced_wall - components: - - parent: 15 - pos: 44.5,12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 781 - type: reinforced_wall - components: - - parent: 15 - pos: 44.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 782 - type: reinforced_wall - components: - - parent: 15 - pos: 44.5,10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 783 - type: reinforced_wall - components: - - parent: 15 - pos: 43.5,10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 784 - type: reinforced_wall - components: - - parent: 15 - pos: 42.5,10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 785 - type: LowWall - components: - - parent: 15 - pos: 40.5,1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 786 - type: LowWall - components: - - parent: 15 - pos: 39.5,1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 787 - type: LowWall - components: - - parent: 15 - pos: 36.5,-0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 788 - type: Poweredlight - components: - - parent: 15 - pos: -10,-3.5 - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 789 - type: PoweredSmallLight - components: - - parent: 15 - pos: -12.5,-6 - rot: 1.5707963267948966 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 790 - type: PoweredSmallLight - components: - - parent: 15 - pos: -25.5,-10 - rot: 1.5707963267948966 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 791 - type: APC - components: - - parent: 15 - pos: -20.5,-8.5 - rot: 1.5707963267948966 rad - type: Transform -- uid: 792 - type: solid_wall - components: - - parent: 15 - pos: 37.5,9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 793 - type: solid_wall - components: - - parent: 15 - pos: 37.5,8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 794 - type: solid_wall - components: - - parent: 15 - pos: 37.5,7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 795 - type: solid_wall - components: - - parent: 15 - pos: 36.5,7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 796 - type: solid_wall - components: - - parent: 15 - pos: 35.5,7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 797 - type: VendingMachineDinnerware - components: - - parent: 15 - pos: -11.5,-3.5 - type: Transform -- uid: 798 - type: solid_wall - components: - - parent: 15 - pos: 36.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 799 - type: LowWall - components: - - parent: 15 - pos: 51.5,1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 800 - type: LowWall - components: - - parent: 15 - pos: 51.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 801 - type: solid_wall - components: - - parent: 15 - pos: 41.5,1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 802 - type: solid_wall - components: - - parent: 15 - pos: 41.5,0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 803 - type: solid_wall - components: - - parent: 15 - pos: 41.5,-0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 804 - type: solid_wall - components: - - parent: 15 - pos: 41.5,-1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 805 - type: solid_wall - components: - - parent: 15 - pos: 41.5,-2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 806 - type: solid_wall - components: - - parent: 15 - pos: 40.5,-2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 807 - type: solid_wall - components: - - parent: 15 - pos: 39.5,-2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 808 - type: solid_wall - components: - - parent: 15 - pos: 38.5,-2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 809 - type: solid_wall - components: - - parent: 15 - pos: 37.5,-2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 810 - type: solid_wall - components: - - parent: 15 - pos: 36.5,-2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 811 - type: solid_wall - components: - - parent: 15 - pos: 36.5,-1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 812 - type: solid_wall - components: - - parent: 15 - pos: 36.5,1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 813 - type: solid_wall - components: - - parent: 15 - pos: 36.5,0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 814 - type: LowWall - components: - - parent: 15 - pos: 37.5,1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 815 - type: solid_wall - components: - - parent: 15 - pos: 36.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 816 - type: LowWall - components: - - parent: 15 - pos: 51.5,3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 817 - type: solid_wall - components: - - parent: 15 - pos: 35.5,1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 818 - type: solid_wall - components: - - parent: 15 - pos: 31.5,1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 819 - type: solid_wall - components: - - parent: 15 - pos: 42.5,0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 820 - type: solid_wall - components: - - parent: 15 - pos: 45.5,0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 821 - type: solid_wall - components: - - parent: 15 - pos: 44.5,0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 822 - type: WaterTankFull - components: - - parent: 15 - pos: 10.5,-18.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable -- uid: 823 - type: solid_wall - components: - - parent: 15 - pos: 44.5,-0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 824 - type: solid_wall - components: - - parent: 15 - pos: 44.5,-1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 825 - type: solid_wall - components: - - parent: 15 - pos: 44.5,-2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 826 - type: solid_wall - components: - - parent: 15 - pos: 44.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 827 - type: solid_wall - components: - - parent: 15 - pos: 44.5,-4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 828 - type: solid_wall - components: - - parent: 15 - pos: 44.5,-5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 829 - type: solid_wall - components: - - parent: 15 - pos: 43.5,-5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 830 - type: solid_wall - components: - - parent: 15 - pos: 42.5,-5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 831 - type: solid_wall - components: - - parent: 15 - pos: 41.5,-5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 832 - type: solid_wall - components: - - parent: 15 - pos: 40.5,-5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 833 - type: solid_wall - components: - - parent: 15 - pos: 39.5,-5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 834 - type: solid_wall - components: - - parent: 15 - pos: 39.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 835 - type: solid_wall - components: - - parent: 15 - pos: 39.5,-7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 836 - type: solid_wall - components: - - parent: 15 - pos: 39.5,-8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 837 - type: solid_wall - components: - - parent: 15 - pos: 38.5,-8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 838 - type: solid_wall - components: - - parent: 15 - pos: 37.5,-8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 839 - type: solid_wall - components: - - parent: 15 - pos: 36.5,-8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 840 - type: solid_wall - components: - - parent: 15 - pos: 35.5,-8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 841 - type: solid_wall - components: - - parent: 15 - pos: 34.5,-8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 842 - type: solid_wall - components: - - parent: 15 - pos: 33.5,-8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 843 - type: solid_wall - components: - - parent: 15 - pos: 32.5,-8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 844 - type: solid_wall - components: - - parent: 15 - pos: 31.5,-8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 845 - type: solid_wall - components: - - parent: 15 - pos: 30.5,-8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 846 - type: solid_wall - components: - - parent: 15 - pos: 29.5,-8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 847 - type: solid_wall - components: - - parent: 15 - pos: 28.5,-8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 848 - type: solid_wall - components: - - parent: 15 - pos: 28.5,-7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 849 - type: solid_wall - components: - - parent: 15 - pos: 28.5,-9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 850 - type: solid_wall - components: - - parent: 15 - pos: 28.5,-10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 851 - type: solid_wall - components: - - parent: 15 - pos: 28.5,-11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 852 - type: solid_wall - components: - - parent: 15 - pos: 28.5,-12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 853 - type: solid_wall - components: - - parent: 15 - pos: 28.5,-13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 854 - type: solid_wall - components: - - parent: 15 - pos: 28.5,-14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 855 - type: solid_wall - components: - - parent: 15 - pos: 28.5,-15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 856 - type: solid_wall - components: - - parent: 15 - pos: 28.5,-16.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 857 - type: solid_wall - components: - - parent: 15 - pos: 28.5,-17.5 - rot: -1.5707963267948966 rad - type: Transform - uid: 858 - type: solid_wall + type: Catwalk components: - - parent: 15 - pos: 28.5,-18.5 + - parent: 857 + pos: 49.5,-2.5 rot: -1.5707963267948966 rad type: Transform - uid: 859 - type: solid_wall + type: Catwalk components: - - parent: 15 - pos: 28.5,-19.5 + - parent: 857 + pos: 48.5,-2.5 rot: -1.5707963267948966 rad type: Transform - uid: 860 - type: solid_wall + type: Catwalk components: - - parent: 15 - pos: 27.5,-19.5 + - parent: 857 + pos: 47.5,-2.5 rot: -1.5707963267948966 rad type: Transform - uid: 861 - type: solid_wall + type: Poweredlight components: - - parent: 15 - pos: 26.5,-19.5 - rot: -1.5707963267948966 rad + - parent: 857 + pos: 52,-4.5 + rot: 3.141592653589793 rad type: Transform + - color: '#FFFFFFFF' + type: PointLight + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer - uid: 862 - type: solid_wall + type: Poweredlight components: - - parent: 15 - pos: 25.5,-19.5 - rot: -1.5707963267948966 rad + - parent: 857 + pos: 47,-4.5 type: Transform + - color: '#FFFFFFFF' + type: PointLight + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer - uid: 863 - type: solid_wall + type: LowWall components: - - parent: 15 - pos: 24.5,-19.5 + - parent: 857 + pos: -38.5,-5.5 rot: -1.5707963267948966 rad type: Transform - uid: 864 - type: solid_wall + type: reinforced_wall components: - - parent: 15 - pos: 23.5,-19.5 + - parent: 857 + pos: 50.5,-1.5 rot: -1.5707963267948966 rad type: Transform - uid: 865 - type: solid_wall + type: reinforced_wall components: - - parent: 15 - pos: 23.5,-20.5 + - parent: 857 + pos: 48.5,-1.5 rot: -1.5707963267948966 rad type: Transform - uid: 866 type: solid_wall components: - - parent: 15 - pos: 23.5,-21.5 + - parent: 857 + pos: 51.5,5.5 rot: -1.5707963267948966 rad type: Transform - uid: 867 type: solid_wall components: - - parent: 15 - pos: 45.5,8.5 + - parent: 857 + pos: 50.5,5.5 rot: -1.5707963267948966 rad type: Transform - uid: 868 - type: Wire + type: solid_wall components: - - parent: 15 - pos: 14.5,-23.5 + - parent: 857 + pos: 47.5,0.5 rot: -1.5707963267948966 rad type: Transform - uid: 869 type: solid_wall components: - - parent: 15 - pos: 0.5,-28.5 + - parent: 857 + pos: 47.5,-0.5 rot: -1.5707963267948966 rad type: Transform - uid: 870 type: solid_wall components: - - parent: 15 - pos: 0.5,-27.5 + - parent: 857 + pos: 46.5,0.5 rot: -1.5707963267948966 rad type: Transform - uid: 871 type: solid_wall components: - - parent: 15 - pos: 0.5,-26.5 + - parent: 857 + pos: 49.5,5.5 rot: -1.5707963267948966 rad type: Transform - uid: 872 - type: ReinforcedWindow + type: solid_wall components: - - parent: 15 - pos: 51.5,0.5 + - parent: 857 + pos: 51.5,4.5 rot: -1.5707963267948966 rad type: Transform - uid: 873 - type: LowWall + type: reinforced_wall components: - - parent: 15 - pos: 51.5,0.5 + - parent: 857 + pos: 47.5,-1.5 rot: -1.5707963267948966 rad type: Transform - uid: 874 - type: solid_wall + type: reinforced_wall components: - - parent: 15 - pos: 18.5,-23.5 + - parent: 857 + pos: 51.5,-1.5 rot: -1.5707963267948966 rad type: Transform - uid: 875 - type: solid_wall + type: reinforced_wall components: - - parent: 15 - pos: 19.5,-23.5 + - parent: 857 + pos: 52.5,-1.5 rot: -1.5707963267948966 rad type: Transform - uid: 876 - type: solid_wall + type: reinforced_wall components: - - parent: 15 - pos: 13.5,-21.5 + - parent: 857 + pos: 52.5,-2.5 rot: -1.5707963267948966 rad type: Transform - uid: 877 - type: solid_wall + type: reinforced_wall components: - - parent: 15 - pos: 12.5,-21.5 + - parent: 857 + pos: 52.5,-3.5 rot: -1.5707963267948966 rad type: Transform - uid: 878 - type: solid_wall + type: reinforced_wall components: - - parent: 15 - pos: 1.5,-24.5 + - parent: 857 + pos: 52.5,-4.5 rot: -1.5707963267948966 rad type: Transform - uid: 879 - type: solid_wall + type: reinforced_wall components: - - parent: 15 - pos: 0.5,-24.5 + - parent: 857 + pos: 52.5,-5.5 rot: -1.5707963267948966 rad type: Transform - uid: 880 - type: solid_wall + type: reinforced_wall components: - - parent: 15 - pos: 0.5,-25.5 + - parent: 857 + pos: 52.5,-6.5 rot: -1.5707963267948966 rad type: Transform - uid: 881 - type: solid_wall + type: reinforced_wall components: - - parent: 15 - pos: 8.5,-21.5 + - parent: 857 + pos: 52.5,-7.5 rot: -1.5707963267948966 rad type: Transform - uid: 882 - type: solid_wall + type: reinforced_wall components: - - parent: 15 - pos: 7.5,-21.5 + - parent: 857 + pos: 51.5,-7.5 rot: -1.5707963267948966 rad type: Transform - uid: 883 - type: solid_wall + type: reinforced_wall components: - - parent: 15 - pos: 6.5,-21.5 + - parent: 857 + pos: 50.5,-7.5 rot: -1.5707963267948966 rad type: Transform - uid: 884 - type: solid_wall + type: reinforced_wall components: - - parent: 15 - pos: 6.5,-22.5 + - parent: 857 + pos: 49.5,-7.5 rot: -1.5707963267948966 rad type: Transform - uid: 885 - type: solid_wall + type: reinforced_wall components: - - parent: 15 - pos: 5.5,-22.5 + - parent: 857 + pos: 48.5,-7.5 rot: -1.5707963267948966 rad type: Transform - uid: 886 - type: LowWall + type: reinforced_wall components: - - parent: 15 - pos: 5.5,-23.5 + - parent: 857 + pos: 47.5,-7.5 rot: -1.5707963267948966 rad type: Transform - uid: 887 - type: LowWall + type: reinforced_wall components: - - parent: 15 - pos: 5.5,-24.5 + - parent: 857 + pos: 46.5,-7.5 rot: -1.5707963267948966 rad type: Transform - uid: 888 - type: LowWall + type: reinforced_wall components: - - parent: 15 - pos: 4.5,-24.5 + - parent: 857 + pos: 46.5,-6.5 rot: -1.5707963267948966 rad type: Transform - uid: 889 - type: LowWall + type: reinforced_wall components: - - parent: 15 - pos: 3.5,-24.5 + - parent: 857 + pos: 46.5,-5.5 rot: -1.5707963267948966 rad type: Transform - uid: 890 - type: LowWall + type: reinforced_wall components: - - parent: 15 - pos: 2.5,-24.5 + - parent: 857 + pos: 46.5,-4.5 rot: -1.5707963267948966 rad type: Transform - uid: 891 - type: LowWall + type: reinforced_wall components: - - parent: 15 - pos: 9.5,-21.5 + - parent: 857 + pos: 46.5,-3.5 rot: -1.5707963267948966 rad type: Transform - uid: 892 - type: LowWall + type: reinforced_wall components: - - parent: 15 - pos: 10.5,-21.5 + - parent: 857 + pos: 46.5,-2.5 rot: -1.5707963267948966 rad type: Transform - uid: 893 - type: LowWall + type: reinforced_wall components: - - parent: 15 - pos: 11.5,-21.5 + - parent: 857 + pos: 46.5,-1.5 rot: -1.5707963267948966 rad type: Transform - uid: 894 - type: solid_wall + type: GravityGenerator components: - - parent: 15 - pos: 45.5,10.5 + - parent: 857 + pos: 49.5,-4.5 rot: -1.5707963267948966 rad type: Transform - uid: 895 - type: LowWall + type: Table components: - - parent: 15 - pos: 34.5,7.5 + - parent: 857 + pos: -18.5,-9.5 rot: -1.5707963267948966 rad type: Transform - uid: 896 - type: LowWall + type: PoweredSmallLight components: - - parent: 15 - pos: 32.5,7.5 + - parent: 857 + pos: -12.5,-5 rot: -1.5707963267948966 rad type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer - uid: 897 - type: solid_wall + type: Poweredlight components: - - parent: 15 - pos: 31.5,7.5 + - parent: 857 + pos: -13.5,2 rot: -1.5707963267948966 rad type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer - uid: 898 - type: solid_wall + type: Poweredlight components: - - parent: 15 - pos: 30.5,7.5 - rot: -1.5707963267948966 rad + - parent: 857 + pos: -13.5,-2 + rot: 1.5707963267948966 rad type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer - uid: 899 - type: solid_wall + type: KitchenMicrowave components: - - parent: 15 - pos: 29.5,7.5 + - parent: 857 + pos: -14.5,-1.5 rot: -1.5707963267948966 rad type: Transform + - containers: + microwave_entity_container: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer - uid: 900 - type: solid_wall + type: Table components: - - parent: 15 - pos: 29.5,8.5 + - parent: 857 + pos: -14.5,-0.5 rot: -1.5707963267948966 rad type: Transform - uid: 901 - type: solid_wall + type: Table components: - - parent: 15 - pos: 29.5,9.5 + - parent: 857 + pos: -14.5,-1.5 rot: -1.5707963267948966 rad type: Transform - uid: 902 - type: solid_wall + type: Stool components: - - parent: 15 - pos: 28.5,7.5 + - parent: 857 + pos: -9.5,-3.5 rot: -1.5707963267948966 rad type: Transform + - anchored: False + type: Collidable - uid: 903 - type: solid_wall + type: PianoInstrument components: - - parent: 15 - pos: 30.5,6.5 + - parent: 857 + pos: -9.5,-4.5 rot: -1.5707963267948966 rad type: Transform + - anchored: False + type: Collidable - uid: 904 - type: solid_wall + type: VendingMachineTheater components: - - parent: 15 - pos: 30.5,2.5 + - parent: 857 + pos: -17.5,-9.5 rot: -1.5707963267948966 rad type: Transform - uid: 905 - type: solid_wall + type: SpawnPointSecurityOfficer components: - - parent: 15 - pos: 30.5,1.5 + - parent: 857 + pos: -11.5,8.5 rot: -1.5707963267948966 rad type: Transform - uid: 906 - type: LowWall + type: Table components: - - parent: 15 - pos: 32.5,1.5 + - parent: 857 + pos: -10.5,1.5 rot: -1.5707963267948966 rad type: Transform - uid: 907 - type: LowWall + type: Table components: - - parent: 15 - pos: 34.5,1.5 + - parent: 857 + pos: -10.5,0.5 rot: -1.5707963267948966 rad type: Transform - uid: 908 - type: LowWall + type: Table components: - - parent: 15 - pos: 30.5,4.5 + - parent: 857 + pos: -10.5,-0.5 rot: -1.5707963267948966 rad type: Transform - uid: 909 - type: LowWall + type: SpawnPointLatejoin components: - - parent: 15 - pos: 30.5,14.5 + - parent: 857 + pos: -36.5,-1.5 rot: -1.5707963267948966 rad type: Transform - uid: 910 - type: LowWall + type: Catwalk components: - - parent: 15 - pos: 30.5,15.5 + - parent: 857 + pos: -9.5,-7.5 rot: -1.5707963267948966 rad type: Transform - uid: 911 - type: LowWall + type: Catwalk components: - - parent: 15 - pos: 31.5,15.5 + - parent: 857 + pos: -17.5,-14.5 rot: -1.5707963267948966 rad type: Transform - uid: 912 - type: LowWall + type: Catwalk components: - - parent: 15 - pos: 32.5,15.5 + - parent: 857 + pos: -23.5,-10.5 rot: -1.5707963267948966 rad type: Transform - uid: 913 - type: LowWall + type: solid_wall components: - - parent: 15 - pos: 33.5,15.5 + - parent: 857 + pos: -14.5,-5.5 rot: -1.5707963267948966 rad type: Transform - uid: 914 - type: LowWall + type: solid_wall components: - - parent: 15 - pos: 34.5,15.5 + - parent: 857 + pos: -13.5,-5.5 rot: -1.5707963267948966 rad type: Transform - uid: 915 - type: LowWall + type: solid_wall components: - - parent: 15 - pos: 35.5,15.5 + - parent: 857 + pos: -12.5,-5.5 rot: -1.5707963267948966 rad type: Transform - uid: 916 - type: LowWall + type: solid_wall components: - - parent: 15 - pos: 36.5,15.5 + - parent: 857 + pos: -11.5,-5.5 rot: -1.5707963267948966 rad type: Transform - uid: 917 - type: LowWall + type: solid_wall components: - - parent: 15 - pos: 36.5,14.5 + - parent: 857 + pos: -10.5,-4.5 rot: -1.5707963267948966 rad type: Transform - uid: 918 type: solid_wall components: - - parent: 15 - pos: 29.5,11.5 + - parent: 857 + pos: -10.5,-3.5 rot: -1.5707963267948966 rad type: Transform - uid: 919 type: solid_wall components: - - parent: 15 - pos: 29.5,12.5 + - parent: 857 + pos: -14.5,-2.5 rot: -1.5707963267948966 rad type: Transform - uid: 920 type: solid_wall components: - - parent: 15 - pos: 29.5,13.5 + - parent: 857 + pos: -13.5,-2.5 rot: -1.5707963267948966 rad type: Transform - uid: 921 type: solid_wall components: - - parent: 15 - pos: 29.5,14.5 + - parent: 857 + pos: -11.5,-2.5 rot: -1.5707963267948966 rad type: Transform - uid: 922 - type: LowWall + type: solid_wall components: - - parent: 15 - pos: 19.5,16.5 + - parent: 857 + pos: -10.5,-2.5 rot: -1.5707963267948966 rad type: Transform - uid: 923 - type: LowWall + type: solid_wall components: - - parent: 15 - pos: 21.5,14.5 + - parent: 857 + pos: -15.5,-2.5 rot: -1.5707963267948966 rad type: Transform - uid: 924 - type: LowWall + type: solid_wall components: - - parent: 15 - pos: 23.5,14.5 + - parent: 857 + pos: -15.5,-1.5 rot: -1.5707963267948966 rad type: Transform - uid: 925 type: solid_wall components: - - parent: 15 - pos: 25.5,14.5 + - parent: 857 + pos: -15.5,-0.5 rot: -1.5707963267948966 rad type: Transform - uid: 926 - type: LowWall + type: solid_wall components: - - parent: 15 - pos: 19.5,14.5 + - parent: 857 + pos: -15.5,-3.5 rot: -1.5707963267948966 rad type: Transform - uid: 927 - type: ReinforcedWindow + type: solid_wall components: - - parent: 15 - pos: 21.5,15.5 + - parent: 857 + pos: -15.5,1.5 rot: -1.5707963267948966 rad type: Transform - uid: 928 type: solid_wall components: - - parent: 15 - pos: 25.5,13.5 + - parent: 857 + pos: -12.5,2.5 rot: -1.5707963267948966 rad type: Transform - uid: 929 type: solid_wall components: - - parent: 15 - pos: 25.5,12.5 + - parent: 857 + pos: -13.5,2.5 rot: -1.5707963267948966 rad type: Transform - uid: 930 type: solid_wall components: - - parent: 15 - pos: 25.5,11.5 + - parent: 857 + pos: -14.5,2.5 rot: -1.5707963267948966 rad type: Transform - uid: 931 type: solid_wall components: - - parent: 15 - pos: 25.5,10.5 + - parent: 857 + pos: -15.5,2.5 rot: -1.5707963267948966 rad type: Transform - uid: 932 type: solid_wall components: - - parent: 15 - pos: 25.5,8.5 + - parent: 857 + pos: -20.5,-8.5 rot: -1.5707963267948966 rad type: Transform - uid: 933 type: solid_wall components: - - parent: 15 - pos: 25.5,7.5 + - parent: 857 + pos: -17.5,-10.5 rot: -1.5707963267948966 rad type: Transform - uid: 934 type: solid_wall components: - - parent: 15 - pos: 26.5,7.5 + - parent: 857 + pos: -18.5,-10.5 rot: -1.5707963267948966 rad type: Transform - uid: 935 type: solid_wall components: - - parent: 15 - pos: 24.5,7.5 + - parent: 857 + pos: -19.5,-10.5 rot: -1.5707963267948966 rad type: Transform - uid: 936 type: solid_wall components: - - parent: 15 - pos: 24.5,6.5 + - parent: 857 + pos: -20.5,-10.5 rot: -1.5707963267948966 rad type: Transform - uid: 937 type: solid_wall components: - - parent: 15 - pos: 23.5,6.5 + - parent: 857 + pos: -20.5,-9.5 rot: -1.5707963267948966 rad type: Transform - uid: 938 - type: solid_wall + type: Brutepack components: - - parent: 15 - pos: 18.5,6.5 + - parent: 857 + pos: 7.370505,-3.4650035 rot: -1.5707963267948966 rad type: Transform + - anchored: False + type: Collidable - uid: 939 - type: solid_wall + type: TrashSpawner components: - - parent: 15 - pos: 17.5,6.5 + - parent: 857 + pos: 7.5,13.5 rot: -1.5707963267948966 rad type: Transform - uid: 940 - type: solid_wall + type: SignBar components: - - parent: 15 - pos: 17.5,7.5 + - parent: 857 + pos: -4.6859417,2.5 rot: -1.5707963267948966 rad type: Transform + - deadThreshold: 100 + type: Destructible - uid: 941 - type: solid_wall + type: SignSmoking components: - - parent: 15 - pos: 17.5,8.5 + - parent: 857 + pos: 23.462582,6.5 rot: -1.5707963267948966 rad type: Transform + - deadThreshold: 100 + type: Destructible - uid: 942 type: solid_wall components: - - parent: 15 - pos: 17.5,9.5 + - parent: 857 + pos: -16.5,-6.5 rot: -1.5707963267948966 rad type: Transform - uid: 943 type: solid_wall components: - - parent: 15 - pos: 16.5,8.5 + - parent: 857 + pos: -0.5,-6.5 rot: -1.5707963267948966 rad type: Transform - uid: 944 type: solid_wall components: - - parent: 15 - pos: 12.5,8.5 - rot: -1.5707963267948966 rad + - parent: 857 + pos: 33.5,11.5 + rot: 1.5707963267948966 rad type: Transform - uid: 945 - type: LowWall + type: SignDirectionalBridge components: - - parent: 15 - pos: 19.5,6.5 - rot: -1.5707963267948966 rad + - parent: 857 + pos: 5.641159,-12.7475605 + rot: 1.5707963267948966 rad type: Transform + - deadThreshold: 100 + type: Destructible - uid: 946 - type: LowWall + type: Brutepack components: - - parent: 15 - pos: 20.5,6.5 + - parent: 857 + pos: 6.97988,-3.2306285 rot: -1.5707963267948966 rad type: Transform + - anchored: False + type: Collidable - uid: 947 - type: LowWall + type: solid_wall components: - - parent: 15 - pos: 21.5,6.5 + - parent: 857 + pos: -26.5,-12.5 rot: -1.5707963267948966 rad type: Transform - uid: 948 - type: LowWall + type: solid_wall components: - - parent: 15 - pos: 22.5,6.5 + - parent: 857 + pos: -27.5,-12.5 rot: -1.5707963267948966 rad type: Transform - uid: 949 - type: LowWall + type: solid_wall components: - - parent: 15 - pos: 23.5,15.5 + - parent: 857 + pos: -28.5,-12.5 rot: -1.5707963267948966 rad type: Transform - uid: 950 - type: LowWall + type: solid_wall components: - - parent: 15 - pos: 23.5,16.5 + - parent: 857 + pos: -29.5,-12.5 rot: -1.5707963267948966 rad type: Transform - uid: 951 - type: SignDirectionalBridge + type: solid_wall components: - - parent: 15 - pos: -20.49181,6.256847 + - parent: 857 + pos: -30.5,-12.5 + rot: -1.5707963267948966 rad type: Transform - uid: 952 - type: SignDirectionalSec + type: solid_wall components: - - parent: 15 - pos: 5.9947615,6.5 - rot: 3.141592653589793 rad + - parent: 857 + pos: -31.5,-12.5 + rot: -1.5707963267948966 rad type: Transform - uid: 953 - type: LowWall + type: solid_wall components: - - parent: 15 - pos: 19.5,15.5 + - parent: 857 + pos: -32.5,-12.5 rot: -1.5707963267948966 rad type: Transform - uid: 954 type: solid_wall components: - - parent: 15 - pos: -0.5,-7.5 + - parent: 857 + pos: -33.5,-12.5 rot: -1.5707963267948966 rad type: Transform - uid: 955 type: solid_wall components: - - parent: 15 - pos: -19.5,-16.5 + - parent: 857 + pos: -34.5,-12.5 rot: -1.5707963267948966 rad type: Transform - uid: 956 type: solid_wall components: - - parent: 15 - pos: -21.5,-16.5 + - parent: 857 + pos: -34.5,-11.5 rot: -1.5707963267948966 rad type: Transform - uid: 957 type: solid_wall components: - - parent: 15 - pos: 17.5,12.5 + - parent: 857 + pos: -34.5,-10.5 rot: -1.5707963267948966 rad type: Transform - uid: 958 type: solid_wall components: - - parent: 15 - pos: 17.5,13.5 + - parent: 857 + pos: -34.5,-9.5 rot: -1.5707963267948966 rad type: Transform - uid: 959 - type: solid_wall + type: Paper components: - - parent: 15 - pos: 17.5,14.5 - rot: -1.5707963267948966 rad + - parent: 857 + pos: 9.699392,17.630365 + rot: 3.141592653589793 rad type: Transform + - anchored: False + type: Collidable - uid: 960 - type: solid_wall + type: ChairOfficeDark components: - - parent: 15 - pos: 17.5,15.5 - rot: -1.5707963267948966 rad + - parent: 857 + pos: 10.5,17.5 + rot: 3.141592653589793 rad type: Transform + - anchored: False + type: Collidable - uid: 961 - type: solid_wall + type: Chair components: - - parent: 15 - pos: 16.5,16.5 - rot: -1.5707963267948966 rad + - parent: 857 + pos: 8.5,17.5 type: Transform + - anchored: False + type: Collidable - uid: 962 - type: solid_wall + type: Table components: - - parent: 15 - pos: 17.5,16.5 + - parent: 857 + pos: 9.5,17.5 rot: -1.5707963267948966 rad type: Transform - uid: 963 - type: solid_wall - components: - - parent: 15 - pos: 16.5,13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 964 - type: solid_wall - components: - - parent: 15 - pos: 15.5,13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 965 - type: solid_wall - components: - - parent: 15 - pos: 14.5,13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 966 - type: solid_wall - components: - - parent: 15 - pos: 13.5,13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 967 - type: solid_wall - components: - - parent: 15 - pos: 12.5,13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 968 - type: solid_wall - components: - - parent: 15 - pos: 11.5,13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 969 - type: reinforced_wall - components: - - parent: 15 - pos: 11.5,12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 970 - type: reinforced_wall - components: - - parent: 15 - pos: 10.5,12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 971 - type: reinforced_wall - components: - - parent: 15 - pos: 9.5,12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 972 - type: reinforced_wall - components: - - parent: 15 - pos: 7.5,12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 973 - type: reinforced_wall - components: - - parent: 15 - pos: 6.5,12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 974 - type: reinforced_wall - components: - - parent: 15 - pos: 5.5,12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 975 - type: reinforced_wall - components: - - parent: 15 - pos: 5.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 976 - type: reinforced_wall - components: - - parent: 15 - pos: 5.5,10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 977 - type: reinforced_wall - components: - - parent: 15 - pos: 5.5,9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 978 - type: reinforced_wall - components: - - parent: 15 - pos: 5.5,8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 979 - type: reinforced_wall - components: - - parent: 15 - pos: 5.5,7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 980 - type: reinforced_wall - components: - - parent: 15 - pos: 5.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 981 - type: reinforced_wall - components: - - parent: 15 - pos: 11.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 982 - type: reinforced_wall - components: - - parent: 15 - pos: 11.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 983 - type: reinforced_wall - components: - - parent: 15 - pos: 11.5,10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 984 - type: reinforced_wall - components: - - parent: 15 - pos: 11.5,9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 985 - type: reinforced_wall - components: - - parent: 15 - pos: 11.5,8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 986 - type: reinforced_wall - components: - - parent: 15 - pos: 11.5,7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 987 - type: reinforced_wall - components: - - parent: 15 - pos: 10.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 988 - type: reinforced_wall - components: - - parent: 15 - pos: 6.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 989 - type: LowWall - components: - - parent: 15 - pos: 8.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 990 - type: solid_wall - components: - - parent: 15 - pos: 14.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 991 - type: solid_wall - components: - - parent: 15 - pos: 14.5,16.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 992 - type: solid_wall - components: - - parent: 15 - pos: 14.5,17.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 993 - type: ReinforcedWindow - components: - - parent: 15 - pos: 19.5,14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 994 - type: ReinforcedWindow - components: - - parent: 15 - pos: 19.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 995 - type: ReinforcedWindow - components: - - parent: 15 - pos: 19.5,16.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 996 - type: solid_wall - components: - - parent: 15 - pos: 14.5,21.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 997 - type: solid_wall - components: - - parent: 15 - pos: 14.5,22.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 998 - type: solid_wall - components: - - parent: 15 - pos: 13.5,22.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 999 - type: solid_wall - components: - - parent: 15 - pos: 12.5,22.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1000 - type: solid_wall - components: - - parent: 15 - pos: 11.5,22.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1001 - type: solid_wall - components: - - parent: 15 - pos: 11.5,21.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1002 - type: solid_wall - components: - - parent: 15 - pos: 11.5,19.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1003 - type: solid_wall - components: - - parent: 15 - pos: 11.5,18.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1004 - type: solid_wall - components: - - parent: 15 - pos: 11.5,17.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1005 - type: solid_wall - components: - - parent: 15 - pos: 11.5,16.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1006 - type: solid_wall - components: - - parent: 15 - pos: 11.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1007 - type: solid_wall - components: - - parent: 15 - pos: 10.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1008 - type: solid_wall - components: - - parent: 15 - pos: 9.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1009 - type: Wire - components: - - parent: 15 - pos: 8.5,16.5 - type: Transform -- uid: 1010 - type: Wire - components: - - parent: 15 - pos: 8.5,17.5 - type: Transform -- uid: 1011 - type: solid_wall - components: - - parent: 15 - pos: 6.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1012 - type: solid_wall - components: - - parent: 15 - pos: 5.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1013 - type: solid_wall - components: - - parent: 15 - pos: 6.5,16.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1014 - type: solid_wall - components: - - parent: 15 - pos: 5.5,13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1015 - type: solid_wall - components: - - parent: 15 - pos: 6.5,21.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1016 - type: reinforced_wall - components: - - parent: 15 - pos: 10.5,22.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1017 - type: reinforced_wall - components: - - parent: 15 - pos: 9.5,22.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1018 - type: reinforced_wall - components: - - parent: 15 - pos: 8.5,22.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1019 - type: reinforced_wall - components: - - parent: 15 - pos: 7.5,22.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1020 - type: reinforced_wall - components: - - parent: 15 - pos: 6.5,22.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1021 - type: reinforced_wall - components: - - parent: 15 - pos: 5.5,22.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1022 - type: reinforced_wall - components: - - parent: 15 - pos: 10.5,23.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1023 - type: reinforced_wall - components: - - parent: 15 - pos: 10.5,24.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1024 - type: reinforced_wall - components: - - parent: 15 - pos: 10.5,25.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1025 - type: reinforced_wall - components: - - parent: 15 - pos: 10.5,26.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1026 - type: reinforced_wall - components: - - parent: 15 - pos: 10.5,27.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1027 - type: reinforced_wall - components: - - parent: 15 - pos: 10.5,28.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1028 - type: reinforced_wall - components: - - parent: 15 - pos: 10.5,30.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1029 - type: reinforced_wall - components: - - parent: 15 - pos: 10.5,31.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1030 - type: reinforced_wall - components: - - parent: 15 - pos: -3.5,31.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1031 - type: reinforced_wall - components: - - parent: 15 - pos: -3.5,30.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1032 - type: reinforced_wall - components: - - parent: 15 - pos: -3.5,28.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1033 - type: reinforced_wall - components: - - parent: 15 - pos: -3.5,27.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1034 - type: reinforced_wall - components: - - parent: 15 - pos: -3.5,26.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1035 - type: reinforced_wall - components: - - parent: 15 - pos: -3.5,25.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1036 - type: reinforced_wall - components: - - parent: 15 - pos: 1.5,22.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1037 - type: reinforced_wall - components: - - parent: 15 - pos: 0.5,22.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1038 - type: reinforced_wall - components: - - parent: 15 - pos: -0.5,22.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1039 - type: AirlockCommandLocked - components: - - name: Head of Personnel's Office - type: MetaData - - parent: 15 - pos: 6.5,17.5 - rot: -1.5707963267948966 rad - type: Transform - - access: - - - HeadOfPersonnel - type: AccessReader -- uid: 1040 - type: reinforced_wall - components: - - parent: 15 - pos: -2.5,22.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1041 - type: reinforced_wall - components: - - parent: 15 - pos: -3.5,22.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1042 - type: reinforced_wall - components: - - parent: 15 - pos: -3.5,23.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1043 - type: reinforced_wall - components: - - parent: 15 - pos: -3.5,24.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1044 - type: solid_wall - components: - - parent: 15 - pos: 1.5,26.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1045 - type: solid_wall - components: - - parent: 15 - pos: 1.5,27.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1046 - type: solid_wall - components: - - parent: 15 - pos: 0.5,27.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1047 - type: solid_wall - components: - - parent: 15 - pos: -2.5,27.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1048 - type: solid_wall - components: - - parent: 15 - pos: 1.5,23.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1049 - type: solid_wall - components: - - parent: 15 - pos: 5.5,23.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1050 - type: solid_wall - components: - - parent: 15 - pos: 5.5,24.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1051 - type: solid_wall - components: - - parent: 15 - pos: 5.5,26.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1052 - type: solid_wall - components: - - parent: 15 - pos: 5.5,27.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1053 - type: solid_wall - components: - - parent: 15 - pos: 6.5,27.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1054 - type: solid_wall - components: - - parent: 15 - pos: 7.5,27.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1055 - type: solid_wall - components: - - parent: 15 - pos: 8.5,27.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1056 - type: solid_wall - components: - - parent: 15 - pos: 9.5,27.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1057 - type: LowWall - components: - - parent: 15 - pos: 3.5,22.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1058 - type: LowWall - components: - - parent: 15 - pos: -1.5,27.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1059 - type: LowWall - components: - - parent: 15 - pos: -0.5,27.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1060 - type: LowWall - components: - - parent: 15 - pos: -3.5,29.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1061 - type: LowWall - components: - - parent: 15 - pos: 10.5,29.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1062 - type: LowWall - components: - - parent: 15 - pos: 9.5,31.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1063 - type: LowWall - components: - - parent: 15 - pos: 9.5,32.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1064 - type: LowWall - components: - - parent: 15 - pos: 8.5,32.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1065 - type: LowWall - components: - - parent: 15 - pos: 8.5,33.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1066 - type: LowWall - components: - - parent: 15 - pos: 7.5,33.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1067 - type: LowWall - components: - - parent: 15 - pos: 6.5,33.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1068 - type: LowWall - components: - - parent: 15 - pos: 5.5,33.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1069 - type: LowWall - components: - - parent: 15 - pos: 4.5,33.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1070 - type: LowWall - components: - - parent: 15 - pos: 3.5,33.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1071 - type: LowWall - components: - - parent: 15 - pos: 2.5,33.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1072 - type: LowWall - components: - - parent: 15 - pos: 1.5,33.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1073 - type: LowWall - components: - - parent: 15 - pos: 0.5,33.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1074 - type: LowWall - components: - - parent: 15 - pos: -0.5,33.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1075 - type: LowWall - components: - - parent: 15 - pos: -1.5,33.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1076 - type: LowWall - components: - - parent: 15 - pos: -1.5,32.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1077 - type: LowWall - components: - - parent: 15 - pos: -2.5,31.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1078 - type: LowWall - components: - - parent: 15 - pos: -2.5,32.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1079 - type: LowWall - components: - - parent: 15 - pos: 6.5,19.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1080 - type: LowWall - components: - - parent: 15 - pos: 6.5,18.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1081 - type: reinforced_wall - components: - - parent: 15 - pos: 1.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1082 - type: reinforced_wall - components: - - parent: 15 - pos: 0.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1083 - type: reinforced_wall - components: - - parent: 15 - pos: -0.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1084 - type: reinforced_wall - components: - - parent: 15 - pos: -1.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1085 - type: reinforced_wall - components: - - parent: 15 - pos: -2.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1086 - type: reinforced_wall - components: - - parent: 15 - pos: -3.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1087 - type: reinforced_wall - components: - - parent: 15 - pos: -4.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1088 - type: reinforced_wall - components: - - parent: 15 - pos: -4.5,16.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1089 - type: reinforced_wall - components: - - parent: 15 - pos: -4.5,17.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1090 - type: reinforced_wall - components: - - parent: 15 - pos: -4.5,18.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1091 - type: reinforced_wall - components: - - parent: 15 - pos: -4.5,19.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1092 - type: reinforced_wall - components: - - parent: 15 - pos: -5.5,19.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1093 - type: LowWall - components: - - parent: 15 - pos: -7.5,18.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1094 - type: reinforced_wall - components: - - parent: 15 - pos: -3.5,19.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1095 - type: reinforced_wall - components: - - parent: 15 - pos: -2.5,19.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1096 - type: reinforced_wall - components: - - parent: 15 - pos: -1.5,19.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1097 - type: reinforced_wall - components: - - parent: 15 - pos: -0.5,19.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1098 - type: reinforced_wall - components: - - parent: 15 - pos: 0.5,19.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1099 - type: reinforced_wall - components: - - parent: 15 - pos: 0.5,18.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1100 - type: reinforced_wall - components: - - parent: 15 - pos: 0.5,16.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1101 - type: reinforced_wall - components: - - parent: 15 - pos: -5.5,20.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1102 - type: reinforced_wall - components: - - parent: 15 - pos: -5.5,21.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1103 - type: reinforced_wall - components: - - parent: 15 - pos: -5.5,22.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1104 - type: reinforced_wall - components: - - parent: 15 - pos: -6.5,22.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1105 - type: reinforced_wall - components: - - parent: 15 - pos: -7.5,22.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1106 - type: reinforced_wall - components: - - parent: 15 - pos: -8.5,22.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1107 - type: reinforced_wall - components: - - parent: 15 - pos: -9.5,22.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1108 - type: Wire - components: - - parent: 15 - pos: -13.5,15.5 - rot: 1.5707963267948966 rad - type: Transform -- uid: 1109 - type: reinforced_wall - components: - - parent: 15 - pos: -11.5,22.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1110 - type: reinforced_wall - components: - - parent: 15 - pos: -12.5,22.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1111 - type: reinforced_wall - components: - - parent: 15 - pos: -13.5,22.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1112 - type: reinforced_wall - components: - - parent: 15 - pos: -14.5,22.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1113 - type: reinforced_wall - components: - - parent: 15 - pos: -15.5,22.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1114 - type: reinforced_wall - components: - - parent: 15 - pos: -16.5,22.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1115 - type: reinforced_wall - components: - - parent: 15 - pos: -16.5,23.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1116 - type: reinforced_wall - components: - - parent: 15 - pos: -15.5,23.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1117 - type: reinforced_wall - components: - - parent: 15 - pos: -14.5,23.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1118 - type: reinforced_wall - components: - - parent: 15 - pos: -13.5,23.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1119 - type: reinforced_wall - components: - - parent: 15 - pos: -12.5,23.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1120 - type: reinforced_wall - components: - - parent: 15 - pos: -11.5,23.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1121 - type: reinforced_wall - components: - - parent: 15 - pos: -10.5,23.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1122 - type: Wire - components: - - parent: 15 - pos: -9.5,26.5 - rot: 1.5707963267948966 rad - type: Transform -- uid: 1123 - type: reinforced_wall - components: - - parent: 15 - pos: -16.5,21.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1124 - type: reinforced_wall - components: - - parent: 15 - pos: -16.5,20.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1125 - type: reinforced_wall - components: - - parent: 15 - pos: -16.5,19.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1126 - type: reinforced_wall - components: - - parent: 15 - pos: -16.5,18.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1127 - type: reinforced_wall - components: - - parent: 15 - pos: -16.5,17.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1128 - type: reinforced_wall - components: - - parent: 15 - pos: -15.5,21.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1129 - type: reinforced_wall - components: - - parent: 15 - pos: -15.5,20.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1130 - type: reinforced_wall - components: - - parent: 15 - pos: -15.5,19.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1131 - type: reinforced_wall - components: - - parent: 15 - pos: -15.5,18.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1132 - type: reinforced_wall - components: - - parent: 15 - pos: -15.5,17.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1133 - type: reinforced_wall - components: - - parent: 15 - pos: -14.5,17.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1134 - type: reinforced_wall - components: - - parent: 15 - pos: -13.5,17.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1135 - type: reinforced_wall - components: - - parent: 15 - pos: -11.5,17.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1136 - type: reinforced_wall - components: - - parent: 15 - pos: -10.5,17.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1137 - type: reinforced_wall - components: - - parent: 15 - pos: -10.5,18.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1138 - type: reinforced_wall - components: - - parent: 15 - pos: -10.5,19.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1139 - type: reinforced_wall - components: - - parent: 15 - pos: -14.5,8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1140 - type: reinforced_wall - components: - - parent: 15 - pos: -14.5,7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1141 - type: reinforced_wall - components: - - parent: 15 - pos: -14.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1142 - type: reinforced_wall - components: - - parent: 15 - pos: -13.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1143 - type: reinforced_wall - components: - - parent: 15 - pos: -12.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1144 - type: reinforced_wall - components: - - parent: 15 - pos: -11.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1145 - type: reinforced_wall - components: - - parent: 15 - pos: -10.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1146 - type: reinforced_wall - components: - - parent: 15 - pos: -10.5,7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1147 - type: reinforced_wall - components: - - parent: 15 - pos: -10.5,8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1148 - type: reinforced_wall - components: - - parent: 15 - pos: -10.5,9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1149 - type: reinforced_wall - components: - - parent: 15 - pos: -14.5,12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1150 - type: reinforced_wall - components: - - parent: 15 - pos: -15.5,12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1151 - type: reinforced_wall - components: - - parent: 15 - pos: -15.5,13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1152 - type: reinforced_wall - components: - - parent: 15 - pos: -15.5,14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1153 - type: reinforced_wall - components: - - parent: 15 - pos: -15.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1154 - type: AirlockMaintSecLocked - components: - - parent: 15 - pos: -14.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1155 - type: reinforced_wall - components: - - parent: 15 - pos: -14.5,10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1156 - type: reinforced_wall - components: - - parent: 15 - pos: -14.5,9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1157 - type: solid_wall - components: - - parent: 15 - pos: -6.5,18.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1158 - type: LowWall - components: - - parent: 15 - pos: -10.5,14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1159 - type: solid_wall - components: - - parent: 15 - pos: -9.5,18.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1160 - type: solid_wall - components: - - parent: 15 - pos: -10.5,16.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1161 - type: solid_wall - components: - - parent: 15 - pos: -10.5,13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1162 - type: solid_wall - components: - - parent: 15 - pos: -10.5,12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1163 - type: solid_wall - components: - - parent: 15 - pos: -11.5,12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1164 - type: solid_wall - components: - - parent: 15 - pos: -12.5,12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1165 - type: solid_wall - components: - - parent: 15 - pos: -13.5,12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1166 - type: solid_wall - components: - - parent: 15 - pos: -5.5,18.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1167 - type: reinforced_wall - components: - - parent: 15 - pos: 1.5,14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1168 - type: reinforced_wall - components: - - parent: 15 - pos: 1.5,13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1169 - type: reinforced_wall - components: - - parent: 15 - pos: 1.5,12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1170 - type: reinforced_wall - components: - - parent: 15 - pos: 1.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1171 - type: reinforced_wall - components: - - parent: 15 - pos: 1.5,10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1172 - type: reinforced_wall - components: - - parent: 15 - pos: 1.5,9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1173 - type: reinforced_wall - components: - - parent: 15 - pos: 1.5,8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1174 - type: reinforced_wall - components: - - parent: 15 - pos: 1.5,7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1175 - type: reinforced_wall - components: - - parent: 15 - pos: 1.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1176 - type: reinforced_wall - components: - - parent: 15 - pos: -4.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1177 - type: reinforced_wall - components: - - parent: 15 - pos: -1.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1178 - type: reinforced_wall - components: - - parent: 15 - pos: -7.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1179 - type: solid_wall - components: - - parent: 15 - pos: -4.5,7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1180 - type: solid_wall - components: - - parent: 15 - pos: -4.5,8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1181 - type: solid_wall - components: - - parent: 15 - pos: -4.5,9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1182 - type: solid_wall - components: - - parent: 15 - pos: -1.5,9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1183 - type: solid_wall - components: - - parent: 15 - pos: -1.5,7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1184 - type: solid_wall - components: - - parent: 15 - pos: -1.5,8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1185 - type: LowWall - components: - - parent: 15 - pos: -0.5,9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1186 - type: LowWall - components: - - parent: 15 - pos: -3.5,9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1187 - type: LowWall - components: - - parent: 15 - pos: -7.5,9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1188 - type: LowWall - components: - - parent: 15 - pos: -8.5,9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1189 - type: solid_wall - components: - - parent: 15 - pos: -15.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1190 - type: solid_wall - components: - - parent: 15 - pos: -17.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1191 - type: solid_wall - components: - - parent: 15 - pos: -18.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1192 - type: solid_wall - components: - - parent: 15 - pos: -18.5,7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1193 - type: solid_wall - components: - - parent: 15 - pos: -18.5,8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1194 - type: solid_wall - components: - - parent: 15 - pos: -18.5,9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1195 - type: solid_wall - components: - - parent: 15 - pos: -18.5,10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1196 - type: solid_wall - components: - - parent: 15 - pos: -18.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1197 - type: solid_wall - components: - - parent: 15 - pos: -19.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1198 - type: solid_wall - components: - - parent: 15 - pos: -18.5,14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1199 - type: solid_wall - components: - - parent: 15 - pos: -19.5,14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1200 - type: solid_wall - components: - - parent: 15 - pos: -19.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1201 - type: solid_wall - components: - - parent: 15 - pos: -19.5,16.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1202 - type: solid_wall - components: - - parent: 15 - pos: -19.5,17.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1203 - type: solid_wall - components: - - parent: 15 - pos: -19.5,18.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1204 - type: solid_wall - components: - - parent: 15 - pos: -19.5,19.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1205 - type: solid_wall - components: - - parent: 15 - pos: -19.5,20.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1206 - type: solid_wall - components: - - parent: 15 - pos: -19.5,21.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1207 - type: solid_wall - components: - - parent: 15 - pos: -19.5,22.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1208 - type: solid_wall - components: - - parent: 15 - pos: -19.5,23.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1209 - type: solid_wall - components: - - parent: 15 - pos: -19.5,24.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1210 - type: solid_wall - components: - - parent: 15 - pos: -19.5,25.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1211 - type: solid_wall - components: - - parent: 15 - pos: -19.5,26.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1212 - type: solid_wall - components: - - parent: 15 - pos: -18.5,26.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1213 - type: solid_wall - components: - - parent: 15 - pos: -17.5,26.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1214 - type: solid_wall - components: - - parent: 15 - pos: -16.5,26.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1215 - type: solid_wall - components: - - parent: 15 - pos: -15.5,26.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1216 - type: solid_wall - components: - - parent: 15 - pos: -14.5,26.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1217 - type: solid_wall - components: - - parent: 15 - pos: -13.5,26.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1218 - type: solid_wall - components: - - parent: 15 - pos: -12.5,26.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1219 - type: solid_wall - components: - - parent: 15 - pos: -11.5,26.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1220 - type: solid_wall - components: - - parent: 15 - pos: -10.5,26.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1221 - type: solid_wall - components: - - parent: 15 - pos: -9.5,26.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1222 - type: solid_wall - components: - - parent: 15 - pos: -8.5,26.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1223 - type: solid_wall - components: - - parent: 15 - pos: -7.5,26.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1224 - type: solid_wall - components: - - parent: 15 - pos: -6.5,26.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1225 - type: solid_wall - components: - - parent: 15 - pos: -6.5,25.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1226 - type: solid_wall - components: - - parent: 15 - pos: -4.5,25.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1227 - type: solid_wall - components: - - parent: 15 - pos: -5.5,25.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1228 - type: solid_wall - components: - - parent: 15 - pos: -20.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1229 - type: solid_wall - components: - - parent: 15 - pos: -21.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1230 - type: solid_wall - components: - - parent: 15 - pos: -22.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1231 - type: solid_wall - components: - - parent: 15 - pos: -23.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1232 - type: solid_wall - components: - - parent: 15 - pos: -24.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1233 - type: solid_wall - components: - - parent: 15 - pos: -25.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1234 - type: solid_wall - components: - - parent: 15 - pos: -26.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1235 - type: solid_wall - components: - - parent: 15 - pos: -27.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1236 - type: solid_wall - components: - - parent: 15 - pos: -28.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1237 - type: solid_wall - components: - - parent: 15 - pos: -29.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1238 - type: solid_wall - components: - - parent: 15 - pos: -30.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1239 - type: solid_wall - components: - - parent: 15 - pos: -31.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1240 - type: solid_wall - components: - - parent: 15 - pos: -32.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1241 - type: solid_wall - components: - - parent: 15 - pos: -33.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1242 - type: solid_wall - components: - - parent: 15 - pos: -33.5,14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1243 - type: solid_wall - components: - - parent: 15 - pos: -33.5,13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1244 - type: solid_wall - components: - - parent: 15 - pos: -33.5,12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1245 - type: solid_wall - components: - - parent: 15 - pos: -33.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1246 - type: solid_wall - components: - - parent: 15 - pos: -33.5,10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1247 - type: APC - components: - - parent: 15 - pos: -34.5,-5.5 - rot: 3.141592653589793 rad - type: Transform -- uid: 1248 - type: solid_wall - components: - - parent: 15 - pos: -33.5,7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1249 - type: solid_wall - components: - - parent: 15 - pos: -33.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1250 - type: solid_wall - components: - - parent: 15 - pos: -32.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1251 - type: solid_wall - components: - - parent: 15 - pos: -31.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1252 - type: solid_wall - components: - - parent: 15 - pos: -30.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1253 - type: LowWall - components: - - parent: 15 - pos: -28.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1254 - type: Window - components: - - parent: 15 - pos: -8.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1255 - type: Window - components: - - parent: 15 - pos: -7.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1256 - type: solid_wall - components: - - parent: 15 - pos: -26.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1257 - type: solid_wall - components: - - parent: 15 - pos: -26.5,7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1258 - type: solid_wall - components: - - parent: 15 - pos: -25.5,7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1259 - type: solid_wall - components: - - parent: 15 - pos: -30.5,7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1260 - type: solid_wall - components: - - parent: 15 - pos: -30.5,8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1261 - type: solid_wall - components: - - parent: 15 - pos: -30.5,9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1262 - type: solid_wall - components: - - parent: 15 - pos: -30.5,10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1263 - type: solid_wall - components: - - parent: 15 - pos: -30.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1264 - type: solid_wall - components: - - parent: 15 - pos: -30.5,12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1265 - type: solid_wall - components: - - parent: 15 - pos: -28.5,12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1266 - type: solid_wall - components: - - parent: 15 - pos: -27.5,12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1267 - type: solid_wall - components: - - parent: 15 - pos: -26.5,12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1268 - type: solid_wall - components: - - parent: 15 - pos: -25.5,12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1269 - type: solid_wall - components: - - parent: 15 - pos: -24.5,12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1270 - type: solid_wall - components: - - parent: 15 - pos: -23.5,12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1271 - type: solid_wall - components: - - parent: 15 - pos: -22.5,12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1272 - type: solid_wall - components: - - parent: 15 - pos: -29.5,12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1273 - type: solid_wall - components: - - parent: 15 - pos: -22.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1274 - type: solid_wall - components: - - parent: 15 - pos: -22.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1275 - type: solid_wall - components: - - parent: 15 - pos: -21.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1276 - type: solid_wall - components: - - parent: 15 - pos: -22.5,10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1277 - type: solid_wall - components: - - parent: 15 - pos: -22.5,8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1278 - type: solid_wall - components: - - parent: 15 - pos: -22.5,7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1279 - type: solid_wall - components: - - parent: 15 - pos: -21.5,7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1280 - type: solid_wall - components: - - parent: 15 - pos: -21.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1281 - type: solid_wall - components: - - parent: 15 - pos: -20.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1282 - type: solid_wall - components: - - parent: 15 - pos: -19.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1283 - type: solid_wall - components: - - parent: 15 - pos: -25.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1284 - type: LowWall - components: - - parent: 15 - pos: -25.5,9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1285 - type: LowWall - components: - - parent: 15 - pos: -2.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1286 - type: LowWall - components: - - parent: 15 - pos: -3.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1287 - type: LowWall - components: - - parent: 15 - pos: -0.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1288 - type: LowWall - components: - - parent: 15 - pos: 0.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1289 - type: LowWall - components: - - parent: 15 - pos: 14.5,8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1290 - type: solid_wall - components: - - parent: 15 - pos: 30.5,-0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1291 - type: solid_wall - components: - - parent: 15 - pos: 30.5,0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1292 - type: solid_wall - components: - - parent: 15 - pos: 29.5,-0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1293 - type: solid_wall - components: - - parent: 15 - pos: 28.5,-0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1294 - type: solid_wall - components: - - parent: 15 - pos: 27.5,-0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1295 - type: solid_wall - components: - - parent: 15 - pos: 26.5,-0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1296 - type: solid_wall - components: - - parent: 15 - pos: 25.5,-0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1297 - type: solid_wall - components: - - parent: 15 - pos: 24.5,-0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1298 - type: solid_wall - components: - - parent: 15 - pos: 24.5,0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1299 - type: solid_wall - components: - - parent: 15 - pos: 24.5,1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1300 - type: solid_wall - components: - - parent: 15 - pos: 24.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1301 - type: solid_wall - components: - - parent: 15 - pos: 23.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1302 - type: solid_wall - components: - - parent: 15 - pos: 22.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1303 - type: solid_wall - components: - - parent: 15 - pos: 19.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1304 - type: solid_wall - components: - - parent: 15 - pos: 18.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1305 - type: solid_wall - components: - - parent: 15 - pos: 17.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1306 - type: solid_wall - components: - - parent: 15 - pos: 16.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1307 - type: solid_wall - components: - - parent: 15 - pos: 15.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1308 - type: solid_wall - components: - - parent: 15 - pos: 14.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1309 - type: solid_wall - components: - - parent: 15 - pos: 13.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1310 - type: solid_wall - components: - - parent: 15 - pos: 12.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1311 - type: solid_wall - components: - - parent: 15 - pos: 6.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1312 - type: solid_wall - components: - - parent: 15 - pos: 5.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1313 - type: solid_wall - components: - - parent: 15 - pos: 5.5,1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1314 - type: solid_wall - components: - - parent: 15 - pos: 20.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1315 - type: solid_wall - components: - - parent: 15 - pos: 19.5,1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1316 - type: solid_wall - components: - - parent: 15 - pos: 19.5,0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1317 - type: solid_wall - components: - - parent: 15 - pos: 19.5,-0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1318 - type: solid_wall - components: - - parent: 15 - pos: 19.5,-1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1319 - type: solid_wall - components: - - parent: 15 - pos: 19.5,-2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1320 - type: solid_wall - components: - - parent: 15 - pos: 13.5,-2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1321 - type: solid_wall - components: - - parent: 15 - pos: 13.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1322 - type: solid_wall - components: - - parent: 15 - pos: 14.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1323 - type: solid_wall - components: - - parent: 15 - pos: 13.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1324 - type: solid_wall - components: - - parent: 15 - pos: 5.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1325 - type: solid_wall - components: - - parent: 15 - pos: 5.5,-4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1326 - type: solid_wall - components: - - parent: 15 - pos: 5.5,-5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1327 - type: solid_wall - components: - - parent: 15 - pos: 5.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1328 - type: solid_wall - components: - - parent: 15 - pos: 5.5,-7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1329 - type: solid_wall - components: - - parent: 15 - pos: 5.5,-12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1330 - type: solid_wall - components: - - parent: 15 - pos: 5.5,-11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1331 - type: LowWall - components: - - parent: 15 - pos: 5.5,-8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1332 - type: LowWall - components: - - parent: 15 - pos: 5.5,-9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1333 - type: LowWall - components: - - parent: 15 - pos: 5.5,-10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1334 - type: LowWall - components: - - parent: 15 - pos: 13.5,-1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1335 - type: LowWall - components: - - parent: 15 - pos: 13.5,1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1336 - type: LowWall - components: - - parent: 15 - pos: 13.5,-0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1337 - type: LowWall - components: - - parent: 15 - pos: 16.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1338 - type: LowWall - components: - - parent: 15 - pos: 11.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1339 - type: LowWall - components: - - parent: 15 - pos: 10.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1340 - type: LowWall - components: - - parent: 15 - pos: 9.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1341 - type: LowWall - components: - - parent: 15 - pos: 8.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1342 - type: LowWall - components: - - parent: 15 - pos: 7.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1343 - type: LowWall - components: - - parent: 15 - pos: 6.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1344 - type: LowWall - components: - - parent: 15 - pos: 9.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1345 - type: LowWall - components: - - parent: 15 - pos: 8.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1346 - type: LowWall - components: - - parent: 15 - pos: 13.5,-5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1347 - type: LowWall - components: - - parent: 15 - pos: 13.5,-4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1348 - type: LowWall - components: - - parent: 15 - pos: 12.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1349 - type: LowWall - components: - - parent: 15 - pos: 18.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1350 - type: solid_wall - components: - - parent: 15 - pos: 19.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1351 - type: solid_wall - components: - - parent: 15 - pos: 20.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1352 - type: solid_wall - components: - - parent: 15 - pos: 21.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1353 - type: solid_wall - components: - - parent: 15 - pos: 22.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1354 - type: solid_wall - components: - - parent: 15 - pos: 23.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1355 - type: solid_wall - components: - - parent: 15 - pos: 24.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1356 - type: solid_wall - components: - - parent: 15 - pos: 25.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1357 - type: solid_wall - components: - - parent: 15 - pos: 25.5,-4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1358 - type: solid_wall - components: - - parent: 15 - pos: 25.5,-5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1359 - type: solid_wall - components: - - parent: 15 - pos: 25.5,-7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1360 - type: solid_wall - components: - - parent: 15 - pos: 25.5,-8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1361 - type: solid_wall - components: - - parent: 15 - pos: 24.5,-8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1362 - type: solid_wall - components: - - parent: 15 - pos: 23.5,-8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1363 - type: solid_wall - components: - - parent: 15 - pos: 22.5,-8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1364 - type: solid_wall - components: - - parent: 15 - pos: 21.5,-8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1365 - type: solid_wall - components: - - parent: 15 - pos: 20.5,-8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1366 - type: solid_wall - components: - - parent: 15 - pos: 20.5,-7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1367 - type: solid_wall - components: - - parent: 15 - pos: 16.5,-18.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1368 - type: solid_wall - components: - - parent: 15 - pos: 20.5,-4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1369 - type: solid_wall - components: - - parent: 15 - pos: 20.5,-9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1370 - type: Window - components: - - parent: 15 - pos: 20.5,-14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1371 - type: solid_wall - components: - - parent: 15 - pos: 20.5,-11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1372 - type: solid_wall - components: - - parent: 15 - pos: 21.5,-11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1373 - type: solid_wall - components: - - parent: 15 - pos: 22.5,-11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1374 - type: solid_wall - components: - - parent: 15 - pos: 23.5,-11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1375 - type: solid_wall - components: - - parent: 15 - pos: 24.5,-11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1376 - type: solid_wall - components: - - parent: 15 - pos: 25.5,-11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1377 - type: solid_wall - components: - - parent: 15 - pos: 25.5,-12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1378 - type: solid_wall - components: - - parent: 15 - pos: 25.5,-13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1379 - type: solid_wall - components: - - parent: 15 - pos: 25.5,-14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1380 - type: solid_wall - components: - - parent: 15 - pos: 25.5,-15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1381 - type: solid_wall - components: - - parent: 15 - pos: 25.5,-16.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1382 - type: solid_wall - components: - - parent: 15 - pos: 24.5,-16.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1383 - type: solid_wall - components: - - parent: 15 - pos: 23.5,-16.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1384 - type: solid_wall - components: - - parent: 15 - pos: 22.5,-16.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1385 - type: solid_wall - components: - - parent: 15 - pos: 21.5,-16.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1386 - type: solid_wall - components: - - parent: 15 - pos: 20.5,-16.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1387 - type: Window - components: - - parent: 15 - pos: 20.5,-5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1388 - type: solid_wall - components: - - parent: 15 - pos: 15.5,-18.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1389 - type: solid_wall - components: - - parent: 15 - pos: 20.5,-17.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1390 - type: solid_wall - components: - - parent: 15 - pos: 20.5,-18.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1391 - type: solid_wall - components: - - parent: 15 - pos: 46.5,5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1392 - type: solid_wall - components: - - parent: 15 - pos: 45.5,5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1393 - type: solid_wall - components: - - parent: 15 - pos: 48.5,5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1394 - type: LowWall - components: - - parent: 15 - pos: 20.5,-14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1395 - type: LowWall - components: - - parent: 15 - pos: 20.5,-5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1396 - type: LowWall - components: - - parent: 15 - pos: 11.5,-14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1397 - type: LowWall - components: - - parent: 15 - pos: 11.5,-15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1398 - type: LowWall - components: - - parent: 15 - pos: 9.5,-12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1399 - type: Window - components: - - parent: 15 - pos: 9.5,-12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1400 - type: solid_wall - components: - - parent: 15 - pos: 11.5,-12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1401 - type: Window - components: - - parent: 15 - pos: 11.5,-15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1402 - type: solid_wall - components: - - parent: 15 - pos: 6.5,-12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1403 - type: Window - components: - - parent: 15 - pos: 20.5,-12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1404 - type: solid_wall - components: - - parent: 15 - pos: 6.5,-13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1405 - type: solid_wall - components: - - parent: 15 - pos: 6.5,-14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1406 - type: solid_wall - components: - - parent: 15 - pos: 6.5,-15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1407 - type: solid_wall - components: - - parent: 15 - pos: 6.5,-16.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1408 - type: solid_wall - components: - - parent: 15 - pos: 6.5,-17.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1409 - type: solid_wall - components: - - parent: 15 - pos: 7.5,-17.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1410 - type: solid_wall - components: - - parent: 15 - pos: 8.5,-17.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1411 - type: solid_wall - components: - - parent: 15 - pos: 9.5,-17.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1412 - type: solid_wall - components: - - parent: 15 - pos: 10.5,-17.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1413 - type: solid_wall - components: - - parent: 15 - pos: 11.5,-17.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1414 - type: Window - components: - - parent: 15 - pos: 11.5,-14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1415 - type: solid_wall - components: - - parent: 15 - pos: 11.5,-18.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1416 - type: solid_wall - components: - - parent: 15 - pos: 12.5,-18.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1417 - type: solid_wall - components: - - parent: 15 - pos: 13.5,-18.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1418 - type: solid_wall - components: - - parent: 15 - pos: 6.5,-18.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1419 - type: solid_wall - components: - - parent: 15 - pos: 6.5,-20.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1420 - type: solid_wall - components: - - parent: 15 - pos: 28.5,-1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1421 - type: solid_wall - components: - - parent: 15 - pos: 28.5,-2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1422 - type: solid_wall - components: - - parent: 15 - pos: 28.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1423 - type: solid_wall - components: - - parent: 15 - pos: 28.5,-4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1424 - type: solid_wall - components: - - parent: 15 - pos: 28.5,-5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1425 - type: solid_wall - components: - - parent: 15 - pos: 29.5,-5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1426 - type: solid_wall - components: - - parent: 15 - pos: 30.5,-5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1427 - type: solid_wall - components: - - parent: 15 - pos: 31.5,-5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1428 - type: solid_wall - components: - - parent: 15 - pos: 32.5,-5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1429 - type: solid_wall - components: - - parent: 15 - pos: 34.5,-5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1430 - type: solid_wall - components: - - parent: 15 - pos: 35.5,-5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1431 - type: solid_wall - components: - - parent: 15 - pos: 36.5,-5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1432 - type: solid_wall - components: - - parent: 15 - pos: 36.5,-4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1433 - type: solid_wall - components: - - parent: 15 - pos: 36.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1434 - type: solid_wall - components: - - parent: 15 - pos: 1.5,1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1435 - type: solid_wall - components: - - parent: 15 - pos: 1.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1436 - type: solid_wall - components: - - parent: 15 - pos: 0.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1437 - type: solid_wall - components: - - parent: 15 - pos: 1.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1438 - type: solid_wall - components: - - parent: 15 - pos: 1.5,-4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1439 - type: solid_wall - components: - - parent: 15 - pos: 1.5,-5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1440 - type: solid_wall - components: - - parent: 15 - pos: 1.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1441 - type: solid_wall - components: - - parent: 15 - pos: 0.5,-5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1442 - type: solid_wall - components: - - parent: 15 - pos: -0.5,-5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1443 - type: solid_wall - components: - - parent: 15 - pos: -1.5,-5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1444 - type: solid_wall - components: - - parent: 15 - pos: -2.5,-5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1445 - type: solid_wall - components: - - parent: 15 - pos: 1.5,-9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1446 - type: solid_wall - components: - - parent: 15 - pos: 1.5,-10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1447 - type: solid_wall - components: - - parent: 15 - pos: 1.5,-11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1448 - type: solid_wall - components: - - parent: 15 - pos: 1.5,-12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1449 - type: solid_wall - components: - - parent: 15 - pos: 1.5,-8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1450 - type: solid_wall - components: - - parent: 15 - pos: 0.5,-12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1451 - type: solid_wall - components: - - parent: 15 - pos: -0.5,-12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1452 - type: solid_wall - components: - - parent: 15 - pos: -1.5,-12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1453 - type: solid_wall - components: - - parent: 15 - pos: -2.5,-12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1454 - type: solid_wall - components: - - parent: 15 - pos: 0.5,-13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1455 - type: solid_wall - components: - - parent: 15 - pos: -5.5,-18.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1456 - type: solid_wall - components: - - parent: 15 - pos: 0.5,-17.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1457 - type: solid_wall - components: - - parent: 15 - pos: 0.5,-18.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1458 - type: solid_wall - components: - - parent: 15 - pos: -0.5,-18.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1459 - type: solid_wall - components: - - parent: 15 - pos: -6.5,-18.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1460 - type: solid_wall - components: - - parent: 15 - pos: -1.5,-18.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1461 - type: solid_wall - components: - - parent: 15 - pos: -2.5,-11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1462 - type: solid_wall - components: - - parent: 15 - pos: -3.5,-11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1463 - type: AirlockServiceLocked - components: - - name: Freezer - type: MetaData - - parent: 15 - pos: -12.5,-2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1464 - type: solid_wall - components: - - parent: 15 - pos: -5.5,-11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1465 - type: solid_wall - components: - - parent: 15 - pos: -6.5,-11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1466 - type: solid_wall - components: - - parent: 15 - pos: -6.5,-12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1467 - type: solid_wall - components: - - parent: 15 - pos: -6.5,-13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1468 - type: solid_wall - components: - - parent: 15 - pos: -6.5,-14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1469 - type: solid_wall - components: - - parent: 15 - pos: -6.5,-15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1470 - type: solid_wall - components: - - parent: 15 - pos: -6.5,-16.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1471 - type: solid_wall - components: - - parent: 15 - pos: -6.5,-17.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1472 - type: LowWall - components: - - parent: 15 - pos: -2.5,-18.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1473 - type: LowWall - components: - - parent: 15 - pos: -4.5,-18.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1474 - type: LowWall - components: - - parent: 15 - pos: 0.5,-16.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1475 - type: solid_wall - components: - - parent: 15 - pos: -7.5,-21.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1476 - type: solid_wall - components: - - parent: 15 - pos: 1.5,-22.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1477 - type: solid_wall - components: - - parent: 15 - pos: 0.5,-22.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1478 - type: solid_wall - components: - - parent: 15 - pos: 0.5,-21.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1479 - type: solid_wall - components: - - parent: 15 - pos: -0.5,-21.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1480 - type: solid_wall - components: - - parent: 15 - pos: -1.5,-21.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1481 - type: LowWall - components: - - parent: 15 - pos: -4.5,-21.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1482 - type: solid_wall - components: - - parent: 15 - pos: -1.5,-22.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1483 - type: solid_wall - components: - - parent: 15 - pos: -1.5,-23.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1484 - type: solid_wall - components: - - parent: 15 - pos: -1.5,-24.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1485 - type: solid_wall - components: - - parent: 15 - pos: -1.5,-25.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1486 - type: solid_wall - components: - - parent: 15 - pos: -2.5,-25.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1487 - type: solid_wall - components: - - parent: 15 - pos: -3.5,-25.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1488 - type: solid_wall - components: - - parent: 15 - pos: -4.5,-25.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1489 - type: solid_wall - components: - - parent: 15 - pos: -5.5,-25.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1490 - type: solid_wall - components: - - parent: 15 - pos: -6.5,-25.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1491 - type: solid_wall - components: - - parent: 15 - pos: -6.5,-24.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1492 - type: solid_wall - components: - - parent: 15 - pos: -6.5,-23.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1493 - type: solid_wall - components: - - parent: 15 - pos: -6.5,-22.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1494 - type: solid_wall - components: - - parent: 15 - pos: -6.5,-21.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1495 - type: LowWall - components: - - parent: 15 - pos: -2.5,-21.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1496 - type: LowWall - components: - - parent: 15 - pos: -5.5,-21.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1497 - type: solid_wall - components: - - parent: 15 - pos: -9.5,-21.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1498 - type: reinforced_wall - components: - - parent: 15 - pos: -12.5,-27.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1499 - type: reinforced_wall - components: - - parent: 15 - pos: -13.5,-27.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1500 - type: reinforced_wall - components: - - parent: 15 - pos: -14.5,-27.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1501 - type: reinforced_wall - components: - - parent: 15 - pos: -15.5,-27.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1502 - type: reinforced_wall - components: - - parent: 15 - pos: -16.5,-27.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1503 - type: reinforced_wall - components: - - parent: 15 - pos: -17.5,-27.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1504 - type: reinforced_wall - components: - - parent: 15 - pos: -18.5,-27.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1505 - type: reinforced_wall - components: - - parent: 15 - pos: -18.5,-26.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1506 - type: reinforced_wall - components: - - parent: 15 - pos: -18.5,-25.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1507 - type: reinforced_wall - components: - - parent: 15 - pos: -18.5,-24.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1508 - type: reinforced_wall - components: - - parent: 15 - pos: -18.5,-23.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1509 - type: reinforced_wall - components: - - parent: 15 - pos: -17.5,-23.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1510 - type: reinforced_wall - components: - - parent: 15 - pos: -13.5,-23.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1511 - type: reinforced_wall - components: - - parent: 15 - pos: -12.5,-23.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1512 - type: reinforced_wall - components: - - parent: 15 - pos: -12.5,-24.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1513 - type: reinforced_wall - components: - - parent: 15 - pos: -12.5,-25.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1514 - type: reinforced_wall - components: - - parent: 15 - pos: -12.5,-26.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1515 - type: solid_wall - components: - - parent: 15 - pos: -12.5,-28.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1516 - type: solid_wall - components: - - parent: 15 - pos: -11.5,-28.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1517 - type: solid_wall - components: - - parent: 15 - pos: -10.5,-28.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1518 - type: solid_wall - components: - - parent: 15 - pos: -6.5,-28.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1519 - type: solid_wall - components: - - parent: 15 - pos: -5.5,-28.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1520 - type: solid_wall - components: - - parent: 15 - pos: -4.5,-28.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1521 - type: solid_wall - components: - - parent: 15 - pos: -3.5,-28.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1522 - type: solid_wall - components: - - parent: 15 - pos: -2.5,-28.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1523 - type: solid_wall - components: - - parent: 15 - pos: -1.5,-28.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1524 - type: solid_wall - components: - - parent: 15 - pos: -0.5,-28.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1525 - type: solid_wall - components: - - parent: 15 - pos: -10.5,-21.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1526 - type: solid_wall - components: - - parent: 15 - pos: -10.5,-22.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1527 - type: solid_wall - components: - - parent: 15 - pos: -10.5,-23.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1528 - type: solid_wall - components: - - parent: 15 - pos: -10.5,-24.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1529 - type: solid_wall - components: - - parent: 15 - pos: -10.5,-25.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1530 - type: solid_wall - components: - - parent: 15 - pos: -12.5,-22.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1531 - type: solid_wall - components: - - parent: 15 - pos: -12.5,-21.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1532 - type: solid_wall - components: - - parent: 15 - pos: -12.5,-18.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1533 - type: solid_wall - components: - - parent: 15 - pos: -12.5,-17.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1534 - type: solid_wall - components: - - parent: 15 - pos: -12.5,-16.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1535 - type: solid_wall - components: - - parent: 15 - pos: -11.5,-16.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1536 - type: solid_wall - components: - - parent: 15 - pos: -10.5,-16.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1537 - type: solid_wall - components: - - parent: 15 - pos: -9.5,-16.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1538 - type: solid_wall - components: - - parent: 15 - pos: -8.5,-16.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1539 - type: solid_wall - components: - - parent: 15 - pos: -7.5,-16.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1540 - type: solid_wall - components: - - parent: 15 - pos: -13.5,-16.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1541 - type: solid_wall - components: - - parent: 15 - pos: -14.5,-16.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1542 - type: solid_wall - components: - - parent: 15 - pos: -15.5,-16.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1543 - type: solid_wall - components: - - parent: 15 - pos: -17.5,-16.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1544 - type: solid_wall - components: - - parent: 15 - pos: -18.5,-16.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1545 - type: solid_wall - components: - - parent: 15 - pos: -18.5,-17.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1546 - type: solid_wall - components: - - parent: 15 - pos: -18.5,-18.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1547 - type: solid_wall - components: - - parent: 15 - pos: -18.5,-19.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1548 - type: solid_wall - components: - - parent: 15 - pos: -18.5,-20.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1549 - type: solid_wall - components: - - parent: 15 - pos: -18.5,-21.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1550 - type: solid_wall - components: - - parent: 15 - pos: -18.5,-22.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1551 type: Table components: - - parent: 15 - pos: 6.5,28.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1552 - type: Table - components: - - parent: 15 - pos: 5.5,28.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1553 - type: VendingMachineCoffee - components: - - parent: 15 - pos: 5.5,-13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1554 - type: ToolboxElectricalFilled - components: - - parent: 15 - pos: 8.259691,28.555487 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - containers: - storagebase: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 1555 - type: solid_wall - components: - - parent: 15 - pos: -16.5,-13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1556 - type: solid_wall - components: - - parent: 15 - pos: -15.5,-13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1557 - type: solid_wall - components: - - parent: 15 - pos: -14.5,-13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1558 - type: solid_wall - components: - - parent: 15 - pos: -12.5,-13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1559 - type: solid_wall - components: - - parent: 15 - pos: -11.5,-13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1560 - type: solid_wall - components: - - parent: 15 - pos: -10.5,-13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1561 - type: solid_wall - components: - - parent: 15 - pos: -10.5,-12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1562 - type: solid_wall - components: - - parent: 15 - pos: -10.5,-11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1563 - type: solid_wall - components: - - parent: 15 - pos: -10.5,-10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1564 - type: solid_wall - components: - - parent: 15 - pos: -10.5,-9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1565 - type: solid_wall - components: - - parent: 15 - pos: -10.5,-8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1566 - type: solid_wall - components: - - parent: 15 - pos: -11.5,-8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1567 - type: solid_wall - components: - - parent: 15 - pos: -13.5,-8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1568 - type: solid_wall - components: - - parent: 15 - pos: -14.5,-8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1569 - type: solid_wall - components: - - parent: 15 - pos: -15.5,-8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1570 - type: solid_wall - components: - - parent: 15 - pos: -16.5,-8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1571 - type: solid_wall - components: - - parent: 15 - pos: -16.5,-9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1572 - type: solid_wall - components: - - parent: 15 - pos: -16.5,-10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1573 - type: solid_wall - components: - - parent: 15 - pos: -16.5,-11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1574 - type: solid_wall - components: - - parent: 15 - pos: -16.5,-12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1575 - type: solid_wall - components: - - parent: 15 - pos: -9.5,-24.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1576 - type: solid_wall - components: - - parent: 15 - pos: -8.5,-24.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1577 - type: solid_wall - components: - - parent: 15 - pos: -7.5,-24.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1578 - type: solid_wall - components: - - parent: 15 - pos: -2.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1579 - type: solid_wall - components: - - parent: 15 - pos: -2.5,-7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1580 - type: solid_wall - components: - - parent: 15 - pos: -2.5,-8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1581 - type: solid_wall - components: - - parent: 15 - pos: -3.5,-8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1582 - type: solid_wall - components: - - parent: 15 - pos: -4.5,-8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1583 - type: solid_wall - components: - - parent: 15 - pos: -5.5,-8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1584 - type: solid_wall - components: - - parent: 15 - pos: -6.5,-8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1585 - type: solid_wall - components: - - parent: 15 - pos: -7.5,-8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1586 - type: solid_wall - components: - - parent: 15 - pos: -8.5,-8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1587 - type: solid_wall - components: - - parent: 15 - pos: -8.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1588 - type: solid_wall - components: - - parent: 15 - pos: -8.5,-5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1589 - type: solid_wall - components: - - parent: 15 - pos: -7.5,-5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1590 - type: solid_wall - components: - - parent: 15 - pos: -9.5,-5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1591 - type: solid_wall - components: - - parent: 15 - pos: -10.5,-5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1592 - type: Table - components: - - parent: 15 - pos: -15.5,-11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1593 - type: Table - components: - - parent: 15 - pos: -15.5,-12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1594 - type: Table - components: - - parent: 15 - pos: -29.5,7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1595 - type: DisposalTrunk - components: - - parent: 15 - pos: -10.5,-17.5 - rot: 1.5707963267948966 rad - type: Transform - - containers: - DisposalEntry: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 1596 - type: VendingMachineSovietSoda - components: - - parent: 15 - pos: -11.5,-9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1597 - type: ChairOfficeDark - components: - - parent: 15 - pos: 40.5,-0.5 - rot: 3.141592653589793 rad - type: Transform - - anchored: False - type: Collidable -- uid: 1598 - type: solid_wall - components: - - parent: 15 - pos: -10.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1599 - type: solid_wall - components: - - parent: 15 - pos: -4.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1600 - type: solid_wall - components: - - parent: 15 - pos: -9.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1601 - type: solid_wall - components: - - parent: 15 - pos: -11.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1602 - type: Table - components: - - parent: 15 - pos: 26.5,0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1603 - type: Multitool - components: - - parent: 15 - pos: 6.259919,28.557344 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable -- uid: 1604 - type: Medkit - components: - - parent: 15 - pos: -0.959059,28.524237 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - containers: - storagebase: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 1605 - type: VendingMachineCola - components: - - parent: 15 - pos: 29.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1606 - type: Table - components: - - parent: 15 - pos: 28.5,0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1607 - type: Table - components: - - parent: 15 - pos: 20.5,7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1608 - type: Table - components: - - parent: 15 - pos: 19.5,7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1609 - type: WeldingFuelTank - components: - - parent: 15 - pos: -26.5,11.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable -- uid: 1610 - type: WeldingFuelTank - components: - - parent: 15 - pos: 35.5,-4.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable -- uid: 1611 - type: WeldingFuelTank - components: - - parent: 15 - pos: -15.5,-9.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable -- uid: 1612 - type: DrinkMugMoebius - components: - - parent: 15 - pos: -8.476567,-17.420076 - rot: -1.5707963267948966 rad - type: Transform - - caps: PourIn, PourOut, Injectable - type: Solution - - anchored: False - type: Collidable -- uid: 1613 - type: VendingMachineSnack - components: - - parent: 15 - pos: 9.5,28.5 - rot: 3.141592653589793 rad - type: Transform -- uid: 1614 - type: Table - components: - - parent: 15 - pos: 0.5,28.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1615 - type: Table - components: - - parent: 15 - pos: 1.5,28.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1616 - type: Table - components: - - parent: 15 - pos: -0.5,28.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1617 - type: solid_wall - components: - - parent: 15 - pos: -21.5,-9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1618 - type: solid_wall - components: - - parent: 15 - pos: -22.5,-9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1619 - type: Paper - components: - - parent: 15 - pos: 9.543142,17.067865 - rot: 3.141592653589793 rad - type: Transform - - anchored: False - type: Collidable -- uid: 1620 - type: solid_wall - components: - - parent: 15 - pos: -24.5,-9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1621 - type: solid_wall - components: - - parent: 15 - pos: -25.5,-9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1622 - type: solid_wall - components: - - parent: 15 - pos: -26.5,-9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1623 - type: solid_wall - components: - - parent: 15 - pos: -27.5,-9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1624 - type: solid_wall - components: - - parent: 15 - pos: -28.5,-9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1625 - type: solid_wall - components: - - parent: 15 - pos: -29.5,-9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1626 - type: solid_wall - components: - - parent: 15 - pos: -30.5,-9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1627 - type: solid_wall - components: - - parent: 15 - pos: -31.5,-9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1628 - type: solid_wall - components: - - parent: 15 - pos: -31.5,-7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1629 - type: solid_wall - components: - - parent: 15 - pos: -31.5,-8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1630 - type: Table - components: - - parent: 15 - pos: -1.5,28.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1631 - type: Table - components: - - parent: 15 - pos: -2.5,28.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1632 - type: solid_wall - components: - - parent: 15 - pos: -34.5,-8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1633 - type: solid_wall - components: - - parent: 15 - pos: -34.5,-7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1634 - type: solid_wall - components: - - parent: 15 - pos: -31.5,-5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1635 - type: solid_wall - components: - - parent: 15 - pos: -31.5,-4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1636 - type: solid_wall - components: - - parent: 15 - pos: -31.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1637 - type: solid_wall - components: - - parent: 15 - pos: -30.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1638 - type: solid_wall - components: - - parent: 15 - pos: -29.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1639 - type: solid_wall - components: - - parent: 15 - pos: -28.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1640 - type: solid_wall - components: - - parent: 15 - pos: -27.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1641 - type: solid_wall - components: - - parent: 15 - pos: -26.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1642 - type: solid_wall - components: - - parent: 15 - pos: -26.5,-2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1643 - type: solid_wall - components: - - parent: 15 - pos: -26.5,-4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1644 - type: solid_wall - components: - - parent: 15 - pos: -26.5,-5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1645 - type: solid_wall - components: - - parent: 15 - pos: -26.5,-7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1646 - type: solid_wall - components: - - parent: 15 - pos: -26.5,-8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1647 - type: Table - components: - - parent: 15 - pos: -7.5,20.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1648 - type: solid_wall - components: - - parent: 15 - pos: -21.5,-5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1649 - type: solid_wall - components: - - parent: 15 - pos: -21.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1650 - type: solid_wall - components: - - parent: 15 - pos: -20.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1651 - type: solid_wall - components: - - parent: 15 - pos: -19.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1652 - type: solid_wall - components: - - parent: 15 - pos: -18.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1653 - type: solid_wall - components: - - parent: 15 - pos: -17.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1654 - type: SpawnPointLatejoin - components: - - parent: 15 - pos: -36.5,-5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1655 - type: SpawnPointLatejoin - components: - - parent: 15 - pos: -36.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1656 - type: CrateInternals - components: - - parent: 15 - pos: 42.5,13.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - IsPlaceable: False - type: PlaceableSurface - - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 1657 - type: CrateRadiation - components: - - parent: 15 - pos: 43.5,13.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - IsPlaceable: False - type: PlaceableSurface - - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 1658 - type: solid_wall - components: - - parent: 15 - pos: -17.5,-4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1659 - type: solid_wall - components: - - parent: 15 - pos: -17.5,-5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1660 - type: solid_wall - components: - - parent: 15 - pos: -17.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1661 - type: solid_wall - components: - - parent: 15 - pos: -18.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1662 - type: solid_wall - components: - - parent: 15 - pos: -19.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1663 - type: solid_wall - components: - - parent: 15 - pos: -20.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1664 - type: solid_wall - components: - - parent: 15 - pos: -21.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1665 - type: solid_wall - components: - - parent: 15 - pos: -21.5,-2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1666 - type: solid_wall - components: - - parent: 15 - pos: -17.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1667 - type: solid_wall - components: - - parent: 15 - pos: -20.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1668 - type: solid_wall - components: - - parent: 15 - pos: -21.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1669 - type: solid_wall - components: - - parent: 15 - pos: -21.5,1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1670 - type: solid_wall - components: - - parent: 15 - pos: -21.5,0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1671 - type: solid_wall - components: - - parent: 15 - pos: -21.5,-0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1672 - type: solid_wall - components: - - parent: 15 - pos: -22.5,1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1673 - type: solid_wall - components: - - parent: 15 - pos: -25.5,1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1674 - type: solid_wall - components: - - parent: 15 - pos: -26.5,0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1675 - type: solid_wall - components: - - parent: 15 - pos: -26.5,1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1676 - type: solid_wall - components: - - parent: 15 - pos: -26.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1677 - type: solid_wall - components: - - parent: 15 - pos: -27.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1678 - type: Poweredlight - components: - - parent: 15 - pos: -35,-4.5 - rot: 3.141592653589793 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 1679 - type: Window - components: - - parent: 15 - pos: -25.5,9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1680 - type: solid_wall - components: - - parent: 15 - pos: -30.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1681 - type: solid_wall - components: - - parent: 15 - pos: -31.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1682 - type: solid_wall - components: - - parent: 15 - pos: -31.5,1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1683 - type: solid_wall - components: - - parent: 15 - pos: -31.5,0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1684 - type: solid_wall - components: - - parent: 15 - pos: -31.5,-0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1685 - type: solid_wall - components: - - parent: 15 - pos: -31.5,-1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1686 - type: solid_wall - components: - - parent: 15 - pos: -31.5,-2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1687 - type: solid_wall - components: - - parent: 15 - pos: -34.5,-5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1688 - type: solid_wall - components: - - parent: 15 - pos: -34.5,-4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1689 - type: solid_wall - components: - - parent: 15 - pos: -34.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1690 - type: solid_wall - components: - - parent: 15 - pos: -34.5,-2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1691 - type: solid_wall - components: - - parent: 15 - pos: -34.5,-1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1692 - type: solid_wall - components: - - parent: 15 - pos: -34.5,-0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1693 - type: solid_wall - components: - - parent: 15 - pos: -34.5,0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1694 - type: solid_wall - components: - - parent: 15 - pos: -34.5,1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1695 - type: solid_wall - components: - - parent: 15 - pos: -33.5,1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1696 - type: solid_wall - components: - - parent: 15 - pos: -33.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1697 - type: LowWall - components: - - parent: 15 - pos: -5.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1698 - type: LowWall - components: - - parent: 15 - pos: -6.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1699 - type: LowWall - components: - - parent: 15 - pos: -7.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1700 - type: LowWall - components: - - parent: 15 - pos: -8.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1701 - type: LowWall - components: - - parent: 15 - pos: -35.5,-8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1702 - type: LowWall - components: - - parent: 15 - pos: -36.5,-8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1703 - type: LowWall - components: - - parent: 15 - pos: -37.5,-8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1704 - type: LowWall - components: - - parent: 15 - pos: -38.5,-8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1705 - type: LowWall - components: - - parent: 15 - pos: -38.5,-7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1706 - type: LowWall - components: - - parent: 15 - pos: -38.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1707 - type: LowWall - components: - - parent: 15 - pos: -38.5,-5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1708 - type: LowWall - components: - - parent: 15 - pos: -38.5,-4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1709 - type: LowWall - components: - - parent: 15 - pos: -39.5,-4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1710 - type: LowWall - components: - - parent: 15 - pos: -37.5,-4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1711 - type: LowWall - components: - - parent: 15 - pos: -39.5,-2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1712 - type: LowWall - components: - - parent: 15 - pos: -38.5,-2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1713 - type: LowWall - components: - - parent: 15 - pos: -37.5,-2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1714 - type: LowWall - components: - - parent: 15 - pos: -38.5,-1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1715 - type: LowWall - components: - - parent: 15 - pos: -38.5,-0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1716 - type: LowWall - components: - - parent: 15 - pos: -38.5,0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1717 - type: ReinforcedWindow - components: - - parent: 15 - pos: -37.5,-2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1718 - type: LowWall - components: - - parent: 15 - pos: -39.5,1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1719 - type: LowWall - components: - - parent: 15 - pos: -40.5,1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1720 - type: LowWall - components: - - parent: 15 - pos: -40.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1721 - type: LowWall - components: - - parent: 15 - pos: -40.5,3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1722 - type: LowWall - components: - - parent: 15 - pos: -41.5,3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1723 - type: LowWall - components: - - parent: 15 - pos: -39.5,3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1724 - type: LowWall - components: - - parent: 15 - pos: -39.5,5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1725 - type: LowWall - components: - - parent: 15 - pos: -40.5,5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1726 - type: LowWall - components: - - parent: 15 - pos: -41.5,5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1727 - type: LowWall - components: - - parent: 15 - pos: -40.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1728 - type: LowWall - components: - - parent: 15 - pos: -40.5,7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1729 - type: LowWall - components: - - parent: 15 - pos: -41.5,7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1730 - type: LowWall - components: - - parent: 15 - pos: -39.5,7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1731 - type: LowWall - components: - - parent: 15 - pos: -39.5,9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1732 - type: LowWall - components: - - parent: 15 - pos: -40.5,9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1733 - type: LowWall - components: - - parent: 15 - pos: -41.5,9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1734 - type: LowWall - components: - - parent: 15 - pos: -40.5,10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1735 - type: Poweredlight - components: - - parent: 15 - pos: -38.5,2 - rot: 1.5707963267948966 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 1736 - type: solid_wall - components: - - parent: 15 - pos: -40.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1737 - type: LowWall - components: - - parent: 15 - pos: -37.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1738 - type: LowWall - components: - - parent: 15 - pos: -36.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1739 - type: LowWall - components: - - parent: 15 - pos: -35.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1740 - type: Catwalk - components: - - parent: 15 - pos: -32.5,8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1741 - type: solid_wall - components: - - parent: 15 - pos: 0.5,21.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1742 - type: ReinforcedWindow - components: - - parent: 15 - pos: 30.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1743 - type: Window - components: - - parent: 15 - pos: 32.5,1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1744 - type: Window - components: - - parent: 15 - pos: 34.5,1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1745 - type: Window - components: - - parent: 15 - pos: 36.5,-0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1746 - type: Window - components: - - parent: 15 - pos: 37.5,1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1747 - type: Window - components: - - parent: 15 - pos: 39.5,1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1748 - type: Window - components: - - parent: 15 - pos: 40.5,1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1749 - type: APC - components: - - parent: 15 - pos: -11.5,2.5 - type: Transform -- uid: 1750 - type: Poweredlight - components: - - parent: 15 - pos: -24.5,-9 - rot: 1.5707963267948966 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 1751 - type: SignCloning - components: - - parent: 15 - pos: 7.326743,-12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1752 - type: SignSmoking - components: - - parent: 15 - pos: 42.70487,10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1753 - type: Window - components: - - parent: 15 - pos: 32.5,7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1754 - type: Window - components: - - parent: 15 - pos: 34.5,7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1755 - type: ReinforcedWindow - components: - - parent: 15 - pos: 30.5,14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1756 - type: ReinforcedWindow - components: - - parent: 15 - pos: 30.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1757 - type: ReinforcedWindow - components: - - parent: 15 - pos: 31.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1758 - type: ReinforcedWindow - components: - - parent: 15 - pos: 32.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1759 - type: ReinforcedWindow - components: - - parent: 15 - pos: 33.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1760 - type: ReinforcedWindow - components: - - parent: 15 - pos: 34.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1761 - type: ReinforcedWindow - components: - - parent: 15 - pos: 35.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1762 - type: ReinforcedWindow - components: - - parent: 15 - pos: 36.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1763 - type: ReinforcedWindow - components: - - parent: 15 - pos: 36.5,14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1764 - type: solid_wall - components: - - parent: 15 - pos: -20.5,-16.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1765 - type: solid_wall - components: - - parent: 15 - pos: -1.5,-7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1766 - type: SignSmoking - components: - - parent: 15 - pos: -1.2919803,-7.6148567 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1767 - type: ReinforcedWindow - components: - - parent: 15 - pos: 21.5,14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1768 - type: ReinforcedWindow - components: - - parent: 15 - pos: 23.5,14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1769 - type: ReinforcedWindow - components: - - parent: 15 - pos: 23.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1770 - type: ReinforcedWindow - components: - - parent: 15 - pos: 23.5,16.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1771 - type: SignDirectionalBridge - components: - - parent: 15 - pos: 1.3437586,6.5 - rot: 1.5707963267948966 rad - type: Transform -- uid: 1772 - type: SignConference - components: - - parent: 15 - pos: -2.6767635,22.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1773 - type: SignArmory - components: - - parent: 15 - pos: -13.678196,17.5 - type: Transform -- uid: 1774 - type: ReinforcedWindow - components: - - parent: 15 - pos: 21.5,16.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1775 - type: LowWall - components: - - parent: 15 - pos: 14.5,18.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1776 - type: LowWall - components: - - parent: 15 - pos: 14.5,19.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1777 - type: LowWall - components: - - parent: 15 - pos: 14.5,20.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1778 - type: ReinforcedWindow - components: - - parent: 15 - pos: 14.5,18.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1779 - type: ReinforcedWindow - components: - - parent: 15 - pos: 14.5,19.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1780 - type: ReinforcedWindow - components: - - parent: 15 - pos: 14.5,20.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1781 - type: ReinforcedWindow - components: - - parent: 15 - pos: 6.5,18.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1782 - type: ReinforcedWindow - components: - - parent: 15 - pos: 6.5,19.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1783 - type: ReinforcedWindow - components: - - parent: 15 - pos: 8.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1784 - type: Window - components: - - parent: 15 - pos: 14.5,8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1785 - type: Window - components: - - parent: 15 - pos: 19.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1786 - type: Window - components: - - parent: 15 - pos: 20.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1787 - type: Window - components: - - parent: 15 - pos: 21.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1788 - type: Window - components: - - parent: 15 - pos: 22.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1789 - type: Window - components: - - parent: 15 - pos: 13.5,-0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1790 - type: Window - components: - - parent: 15 - pos: 13.5,-1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1791 - type: Window - components: - - parent: 15 - pos: 13.5,1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1792 - type: Window - components: - - parent: 15 - pos: 11.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1793 - type: Window - components: - - parent: 15 - pos: 10.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1794 - type: Window - components: - - parent: 15 - pos: 9.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1795 - type: Window - components: - - parent: 15 - pos: 8.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1796 - type: Window - components: - - parent: 15 - pos: 7.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1797 - type: Window - components: - - parent: 15 - pos: 8.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1798 - type: Window - components: - - parent: 15 - pos: 9.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1799 - type: Window - components: - - parent: 15 - pos: 6.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1800 - type: Window - components: - - parent: 15 - pos: 12.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1801 - type: Window - components: - - parent: 15 - pos: 13.5,-5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1802 - type: Window - components: - - parent: 15 - pos: 13.5,-4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1803 - type: Window - components: - - parent: 15 - pos: 16.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1804 - type: Window - components: - - parent: 15 - pos: 18.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1805 - type: LowWall - components: - - parent: 15 - pos: 20.5,-15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1806 - type: LowWall - components: - - parent: 15 - pos: 20.5,-12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1807 - type: Window - components: - - parent: 15 - pos: 20.5,-15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1808 - type: LowWall - components: - - parent: 15 - pos: 10.5,-12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1809 - type: LowWall - components: - - parent: 15 - pos: 7.5,-12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1810 - type: LowWall - components: - - parent: 15 - pos: 11.5,-13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1811 - type: LowWall - components: - - parent: 15 - pos: 11.5,-16.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1812 - type: Window - components: - - parent: 15 - pos: 11.5,-16.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1813 - type: Window - components: - - parent: 15 - pos: 11.5,-13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1814 - type: Window - components: - - parent: 15 - pos: 10.5,-12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1815 - type: Window - components: - - parent: 15 - pos: 7.5,-12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1816 - type: Window - components: - - parent: 15 - pos: 5.5,-10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1817 - type: Window - components: - - parent: 15 - pos: 5.5,-9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1818 - type: Window - components: - - parent: 15 - pos: 5.5,-8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1819 - type: Window - components: - - parent: 15 - pos: 0.5,-16.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1820 - type: Window - components: - - parent: 15 - pos: -2.5,-18.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1821 - type: Window - components: - - parent: 15 - pos: -4.5,-18.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1822 - type: Window - components: - - parent: 15 - pos: -5.5,-21.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1823 - type: Window - components: - - parent: 15 - pos: -4.5,-21.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1824 - type: Window - components: - - parent: 15 - pos: -2.5,-21.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1825 - type: Window - components: - - parent: 15 - pos: -5.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1826 - type: Window - components: - - parent: 15 - pos: -6.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1827 - type: Window - components: - - parent: 15 - pos: -27.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1828 - type: Window - components: - - parent: 15 - pos: -28.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1829 - type: Window - components: - - parent: 15 - pos: -29.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1830 - type: LowWall - components: - - parent: 15 - pos: -29.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1831 - type: LowWall - components: - - parent: 15 - pos: -27.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1832 - type: ReinforcedWindow - components: - - parent: 15 - pos: -35.5,-8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1833 - type: ReinforcedWindow - components: - - parent: 15 - pos: -36.5,-8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1834 - type: ReinforcedWindow - components: - - parent: 15 - pos: -37.5,-8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1835 - type: ReinforcedWindow - components: - - parent: 15 - pos: -38.5,-8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1836 - type: ReinforcedWindow - components: - - parent: 15 - pos: -38.5,-7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1837 - type: ReinforcedWindow - components: - - parent: 15 - pos: -38.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1838 - type: ReinforcedWindow - components: - - parent: 15 - pos: -38.5,-5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1839 - type: ReinforcedWindow - components: - - parent: 15 - pos: -38.5,-4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1840 - type: ReinforcedWindow - components: - - parent: 15 - pos: -37.5,-4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1841 - type: ReinforcedWindow - components: - - parent: 15 - pos: -39.5,-4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1842 - type: ReinforcedWindow - components: - - parent: 15 - pos: -38.5,-2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1843 - type: ReinforcedWindow - components: - - parent: 15 - pos: -39.5,-2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1844 - type: solid_wall - components: - - parent: 15 - pos: -38.5,1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1845 - type: ReinforcedWindow - components: - - parent: 15 - pos: -38.5,-1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1846 - type: ReinforcedWindow - components: - - parent: 15 - pos: -38.5,-0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1847 - type: ReinforcedWindow - components: - - parent: 15 - pos: -38.5,0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1848 - type: ReinforcedWindow - components: - - parent: 15 - pos: -39.5,1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1849 - type: ReinforcedWindow - components: - - parent: 15 - pos: -40.5,1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1850 - type: ReinforcedWindow - components: - - parent: 15 - pos: -40.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1851 - type: ReinforcedWindow - components: - - parent: 15 - pos: -40.5,3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1852 - type: ReinforcedWindow - components: - - parent: 15 - pos: -41.5,3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1853 - type: ReinforcedWindow - components: - - parent: 15 - pos: -39.5,3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1854 - type: ReinforcedWindow - components: - - parent: 15 - pos: -39.5,5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1855 - type: ReinforcedWindow - components: - - parent: 15 - pos: -40.5,5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1856 - type: ReinforcedWindow - components: - - parent: 15 - pos: -41.5,5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1857 - type: ReinforcedWindow - components: - - parent: 15 - pos: -40.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1858 - type: ReinforcedWindow - components: - - parent: 15 - pos: -40.5,7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1859 - type: ReinforcedWindow - components: - - parent: 15 - pos: -41.5,7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1860 - type: ReinforcedWindow - components: - - parent: 15 - pos: -39.5,7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1861 - type: ReinforcedWindow - components: - - parent: 15 - pos: -39.5,9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1862 - type: ReinforcedWindow - components: - - parent: 15 - pos: -40.5,9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1863 - type: ReinforcedWindow - components: - - parent: 15 - pos: -41.5,9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1864 - type: ReinforcedWindow - components: - - parent: 15 - pos: -40.5,10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1865 - type: APC - components: - - parent: 15 - pos: -33.5,7.5 - type: Transform -- uid: 1866 - type: solid_wall - components: - - parent: 15 - pos: -39.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1867 - type: ReinforcedWindow - components: - - parent: 15 - pos: -37.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1868 - type: ReinforcedWindow - components: - - parent: 15 - pos: -36.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1869 - type: ReinforcedWindow - components: - - parent: 15 - pos: -35.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1870 - type: solid_wall - components: - - parent: 15 - pos: -29.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1871 - type: solid_wall - components: - - parent: 15 - pos: -28.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1872 - type: ReinforcedWindow - components: - - parent: 15 - pos: -3.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1873 - type: ReinforcedWindow - components: - - parent: 15 - pos: -2.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1874 - type: ReinforcedWindow - components: - - parent: 15 - pos: -0.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1875 - type: ReinforcedWindow - components: - - parent: 15 - pos: 0.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1876 - type: ReinforcedWindow - components: - - parent: 15 - pos: -0.5,9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1877 - type: ReinforcedWindow - components: - - parent: 15 - pos: -3.5,9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1878 - type: ReinforcedWindow - components: - - parent: 15 - pos: -8.5,9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1879 - type: ReinforcedWindow - components: - - parent: 15 - pos: -7.5,9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1880 - type: Window - components: - - parent: 15 - pos: -10.5,14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1881 - type: Window - components: - - parent: 15 - pos: -7.5,18.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1882 - type: ReinforcedWindow - components: - - parent: 15 - pos: -2.5,31.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1883 - type: ReinforcedWindow - components: - - parent: 15 - pos: -2.5,32.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1884 - type: ReinforcedWindow - components: - - parent: 15 - pos: -3.5,29.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1885 - type: ReinforcedWindow - components: - - parent: 15 - pos: -1.5,32.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1886 - type: ReinforcedWindow - components: - - parent: 15 - pos: -1.5,33.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1887 - type: ReinforcedWindow - components: - - parent: 15 - pos: -0.5,33.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1888 - type: ReinforcedWindow - components: - - parent: 15 - pos: 0.5,33.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1889 - type: ReinforcedWindow - components: - - parent: 15 - pos: 1.5,33.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1890 - type: ReinforcedWindow - components: - - parent: 15 - pos: 2.5,33.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1891 - type: ReinforcedWindow - components: - - parent: 15 - pos: 3.5,33.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1892 - type: ReinforcedWindow - components: - - parent: 15 - pos: 4.5,33.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1893 - type: ReinforcedWindow - components: - - parent: 15 - pos: 5.5,33.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1894 - type: ReinforcedWindow - components: - - parent: 15 - pos: 6.5,33.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1895 - type: ReinforcedWindow - components: - - parent: 15 - pos: 7.5,33.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1896 - type: ReinforcedWindow - components: - - parent: 15 - pos: 8.5,33.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1897 - type: ReinforcedWindow - components: - - parent: 15 - pos: 8.5,32.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1898 - type: ReinforcedWindow - components: - - parent: 15 - pos: 9.5,31.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1899 - type: ReinforcedWindow - components: - - parent: 15 - pos: 9.5,32.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1900 - type: ReinforcedWindow - components: - - parent: 15 - pos: 10.5,29.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1901 - type: ReinforcedWindow - components: - - parent: 15 - pos: 3.5,22.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1902 - type: Window - components: - - parent: 15 - pos: -0.5,27.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1903 - type: Window - components: - - parent: 15 - pos: -1.5,27.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1904 - type: ReinforcedWindow - components: - - parent: 15 - pos: 2.5,-24.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1905 - type: ReinforcedWindow - components: - - parent: 15 - pos: 3.5,-24.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1906 - type: ReinforcedWindow - components: - - parent: 15 - pos: 4.5,-24.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1907 - type: ReinforcedWindow - components: - - parent: 15 - pos: 5.5,-24.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1908 - type: ReinforcedWindow - components: - - parent: 15 - pos: 5.5,-23.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1909 - type: Window - components: - - parent: 15 - pos: 9.5,-21.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1910 - type: Window - components: - - parent: 15 - pos: 10.5,-21.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1911 - type: Window - components: - - parent: 15 - pos: 11.5,-21.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1912 - type: ReinforcedWindow - components: - - parent: 15 - pos: 51.5,1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1913 - type: Wire - components: - - parent: 15 - pos: 40.5,8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1914 - type: Wire - components: - - parent: 15 - pos: 41.5,8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1915 - type: Wire - components: - - parent: 15 - pos: 42.5,8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1916 - type: Wire - components: - - parent: 15 - pos: 43.5,8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1917 - type: Wire - components: - - parent: 15 - pos: 43.5,9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1918 - type: Wire - components: - - parent: 15 - pos: 43.5,10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1919 - type: APC - components: - - parent: 15 - pos: 43.5,10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1920 - type: Wire - components: - - parent: 15 - pos: 41.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1921 - type: Wire - components: - - parent: 15 - pos: 41.5,3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1922 - type: Wire - components: - - parent: 15 - pos: 41.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1923 - type: Wire - components: - - parent: 15 - pos: 41.5,1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1924 - type: APC - components: - - parent: 15 - pos: 41.5,1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1925 - type: WaterTankFull - components: - - parent: 15 - pos: -19.5,7.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable -- uid: 1926 - type: WaterTankFull - components: - - parent: 15 - pos: 35.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable -- uid: 1927 - type: SignDirectionalEng - components: - - parent: 15 - pos: 18.507353,6.5 - type: Transform -- uid: 1928 - type: Poweredlight - components: - - parent: 15 - pos: 37,2.5 - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 1929 - type: Poweredlight - components: - - parent: 15 - pos: 38.5,-2 - rot: 1.5707963267948966 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 1930 - type: Poweredlight - components: - - parent: 15 - pos: 30.5,8 - rot: 1.5707963267948966 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 1931 - type: Poweredlight - components: - - parent: 15 - pos: -14.5,17 - rot: -1.5707963267948966 rad - type: Transform - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 1932 - type: PaintingMonkey - components: - - parent: 15 - pos: -7.6996727,-5.5 - type: Transform -- uid: 1933 - type: PoweredSmallLight - components: - - parent: 15 - pos: 44,-1.5 - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 1934 - type: Poweredlight - components: - - parent: 15 - pos: 36.5,8 - rot: 1.5707963267948966 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 1935 - type: Poweredlight - components: - - parent: 15 - pos: 37,12.5 - rot: 3.141592653589793 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 1936 - type: Poweredlight - components: - - parent: 15 - pos: 30,12.5 - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 1937 - type: Wire - components: - - parent: 15 - pos: 32.5,9.5 - type: Transform -- uid: 1938 - type: Wire - components: - - parent: 15 - pos: 31.5,9.5 - type: Transform -- uid: 1939 - type: Wire - components: - - parent: 15 - pos: 30.5,9.5 - type: Transform -- uid: 1940 - type: Wire - components: - - parent: 15 - pos: 29.5,9.5 - type: Transform -- uid: 1941 - type: APC - components: - - parent: 15 - pos: 29.5,9.5 - type: Transform -- uid: 1942 - type: Wire - components: - - parent: 15 - pos: 35.5,-1.5 - rot: 3.141592653589793 rad - type: Transform -- uid: 1943 - type: Wire - components: - - parent: 15 - pos: 34.5,-1.5 - rot: 3.141592653589793 rad - type: Transform -- uid: 1944 - type: Wire - components: - - parent: 15 - pos: 36.5,-1.5 - rot: 3.141592653589793 rad - type: Transform -- uid: 1945 - type: APC - components: - - parent: 15 - pos: 36.5,-1.5 - rot: 3.141592653589793 rad - type: Transform -- uid: 1946 - type: Poweredlight - components: - - parent: 15 - pos: 36,-2.5 - rot: 3.141592653589793 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 1947 - type: Poweredlight - components: - - parent: 15 - pos: 29,-2.5 - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 1948 - type: Poweredlight - components: - - parent: 15 - pos: 35.5,7 - rot: -1.5707963267948966 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 1949 - type: Poweredlight - components: - - parent: 15 - pos: 31.5,2 - rot: 1.5707963267948966 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 1950 - type: Poweredlight - components: - - parent: 15 - pos: 31,0.5 - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 1951 - type: SignEngineering - components: - - parent: 15 - pos: 26.30795,7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1952 - type: Poweredlight - components: - - parent: 15 - pos: 30,1.5 - rot: 3.141592653589793 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 1953 - type: Poweredlight - components: - - parent: 15 - pos: 25,1.5 - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 1954 - type: Wire - components: - - parent: 15 - pos: 27.5,3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1955 - type: Wire - components: - - parent: 15 - pos: 27.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1956 - type: Wire - components: - - parent: 15 - pos: 27.5,1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1957 - type: Wire - components: - - parent: 15 - pos: 27.5,0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1958 - type: Wire - components: - - parent: 15 - pos: 27.5,-0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1959 - type: APC - components: - - parent: 15 - pos: 27.5,-0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1960 - type: PoweredSmallLight - components: - - parent: 15 - pos: 26,11.5 - rot: 3.141592653589793 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 1961 - type: PoweredSmallLight - components: - - parent: 15 - pos: 38.5,-3 - rot: 1.5707963267948966 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 1962 - type: PoweredSmallLight - components: - - parent: 15 - pos: 35.5,-6 - rot: 1.5707963267948966 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 1963 - type: PoweredSmallLight - components: - - parent: 15 - pos: 26,-4.5 - rot: 3.141592653589793 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 1964 - type: PoweredSmallLight - components: - - parent: 15 - pos: 24,0.5 - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 1965 - type: PoweredSmallLight - components: - - parent: 15 - pos: 28,-10.5 - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 1966 - type: PoweredSmallLight - components: - - parent: 15 - pos: 28,-15.5 - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 1967 - type: PoweredSmallLight - components: - - parent: 15 - pos: 25.5,-19 - rot: -1.5707963267948966 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 1968 - type: solid_wall - components: - - parent: 15 - pos: 45.5,7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1969 - type: solid_wall - components: - - parent: 15 - pos: 45.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1970 - type: PoweredSmallLight - components: - - parent: 15 - pos: 12.5,-19 - rot: 1.5707963267948966 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 1971 - type: APC - components: - - parent: 15 - pos: 20.5,-4.5 - rot: 1.5707963267948966 rad - type: Transform -- uid: 1972 - type: Wire - components: - - parent: 15 - pos: 23.5,-12.5 - rot: 1.5707963267948966 rad - type: Transform -- uid: 1973 - type: Wire - components: - - parent: 15 - pos: 23.5,-11.5 - rot: 1.5707963267948966 rad - type: Transform -- uid: 1974 - type: APC - components: - - parent: 15 - pos: 23.5,-11.5 - rot: 1.5707963267948966 rad - type: Transform -- uid: 1975 - type: Wire - components: - - parent: 15 - pos: 15.5,-16.5 - rot: 1.5707963267948966 rad - type: Transform -- uid: 1976 - type: Wire - components: - - parent: 15 - pos: 16.5,-16.5 - rot: 1.5707963267948966 rad - type: Transform -- uid: 1977 - type: Wire - components: - - parent: 15 - pos: 16.5,-17.5 - rot: 1.5707963267948966 rad - type: Transform -- uid: 1978 - type: Wire - components: - - parent: 15 - pos: 16.5,-18.5 - rot: 1.5707963267948966 rad - type: Transform -- uid: 1979 - type: APC - components: - - parent: 15 - pos: 16.5,-18.5 - rot: 1.5707963267948966 rad - type: Transform -- uid: 1980 - type: Wire - components: - - parent: 15 - pos: 8.5,-15.5 - rot: 1.5707963267948966 rad - type: Transform -- uid: 1981 - type: Wire - components: - - parent: 15 - pos: 8.5,-17.5 - rot: 1.5707963267948966 rad - type: Transform -- uid: 1982 - type: Wire - components: - - parent: 15 - pos: 8.5,-16.5 - rot: 1.5707963267948966 rad - type: Transform -- uid: 1983 - type: APC - components: - - parent: 15 - pos: 8.5,-17.5 - rot: 1.5707963267948966 rad - type: Transform -- uid: 1984 - type: PoweredSmallLight - components: - - parent: 15 - pos: 9.5,-18 - rot: 1.5707963267948966 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 1985 - type: PoweredSmallLight - components: - - parent: 15 - pos: 25.5,-1 - rot: 1.5707963267948966 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 1986 - type: PoweredSmallLight - components: - - parent: 15 - pos: 30.5,-6 - rot: 1.5707963267948966 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 1987 - type: Poweredlight - components: - - parent: 15 - pos: 25,11.5 - rot: 3.141592653589793 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 1988 - type: Poweredlight - components: - - parent: 15 - pos: 13.5,-7 - rot: -1.5707963267948966 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 1989 - type: Poweredlight - components: - - parent: 15 - pos: 20,-8.5 - rot: 3.141592653589793 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 1990 - type: Poweredlight - components: - - parent: 15 - pos: 19,-0.5 - rot: 3.141592653589793 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 1991 - type: Poweredlight - components: - - parent: 15 - pos: 15.5,2 - rot: -1.5707963267948966 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 1992 - type: ChairOfficeLight - components: - - parent: 15 - pos: 14.5,0.5 - rot: 3.141592653589793 rad - type: Transform - - anchored: False - type: Collidable -- uid: 1993 - type: ChairOfficeLight - components: - - parent: 15 - pos: 10.5,-16.5 - rot: 3.141592653589793 rad - type: Transform - - anchored: False - type: Collidable -- uid: 1994 - type: solid_wall - components: - - parent: 15 - pos: 47.5,5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1995 - type: solid_wall - components: - - parent: 15 - pos: 51.5,-0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1996 - type: Poweredlight - components: - - parent: 15 - pos: 12,-12.5 - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 1997 - type: Poweredlight - components: - - parent: 15 - pos: 9.5,-17 - rot: 1.5707963267948966 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 1998 - type: Poweredlight - components: - - parent: 15 - pos: 6.5,-12 - rot: 1.5707963267948966 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 1999 - type: Poweredlight - components: - - parent: 15 - pos: 6,-4.5 - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2000 - type: Wire - components: - - parent: 15 - pos: 6.5,-1.5 - type: Transform -- uid: 2001 - type: Wire - components: - - parent: 15 - pos: 6.5,-2.5 - type: Transform -- uid: 2002 - type: Wire - components: - - parent: 15 - pos: 6.5,-3.5 - type: Transform -- uid: 2003 - type: Wire - components: - - parent: 15 - pos: 5.5,-3.5 - type: Transform -- uid: 2004 - type: APC - components: - - parent: 15 - pos: 5.5,-3.5 - type: Transform -- uid: 2005 - type: SignDirectionalMed - components: - - parent: 15 - pos: 5.768486,-12.5 - rot: 1.5707963267948966 rad - type: Transform -- uid: 2006 - type: Poweredlight - components: - - parent: 15 - pos: 12.5,2 - rot: -1.5707963267948966 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2007 - type: Wire - components: - - parent: 15 - pos: 17.5,1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2008 - type: Wire - components: - - parent: 15 - pos: 17.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2009 - type: APC - components: - - parent: 15 - pos: 17.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2010 - type: Poweredlight - components: - - parent: 15 - pos: 13,-3.5 - rot: 3.141592653589793 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2011 - type: SignCargo - components: - - parent: 15 - pos: 16.688538,8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2012 - type: Poweredlight - components: - - parent: 15 - pos: 1,-17.5 - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2013 - type: Poweredlight - components: - - parent: 15 - pos: 6,-17.5 - rot: 3.141592653589793 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2014 - type: Poweredlight - components: - - parent: 15 - pos: 1.5,-22 - rot: 1.5707963267948966 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2015 - type: Poweredlight - components: - - parent: 15 - pos: 5.5,-22 - rot: 1.5707963267948966 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2016 - type: Wire - components: - - parent: 15 - pos: 14.5,11.5 - rot: 1.5707963267948966 rad - type: Transform -- uid: 2017 - type: Wire - components: - - parent: 15 - pos: 14.5,12.5 - rot: 1.5707963267948966 rad - type: Transform -- uid: 2018 - type: Wire - components: - - parent: 15 - pos: 14.5,13.5 - rot: 1.5707963267948966 rad - type: Transform -- uid: 2019 - type: APC - components: - - parent: 15 - pos: 14.5,13.5 - rot: 1.5707963267948966 rad - type: Transform -- uid: 2020 - type: Wire - components: - - parent: 15 - pos: 8.5,10.5 - rot: 1.5707963267948966 rad - type: Transform -- uid: 2021 - type: Wire - components: - - parent: 15 - pos: 7.5,10.5 - rot: 1.5707963267948966 rad - type: Transform -- uid: 2022 - type: Wire - components: - - parent: 15 - pos: 6.5,10.5 - rot: 1.5707963267948966 rad - type: Transform -- uid: 2023 - type: Wire - components: - - parent: 15 - pos: 5.5,10.5 - rot: 1.5707963267948966 rad - type: Transform -- uid: 2024 - type: APC - components: - - parent: 15 - pos: 5.5,10.5 - rot: 1.5707963267948966 rad - type: Transform -- uid: 2025 - type: Poweredlight - components: - - parent: 15 - pos: 18,13.5 - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2026 - type: Poweredlight - components: - - parent: 15 - pos: 18,8.5 - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2027 - type: Poweredlight - components: - - parent: 15 - pos: 15.5,13 - rot: -1.5707963267948966 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2028 - type: Poweredlight - components: - - parent: 15 - pos: 12,10.5 - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2029 - type: Poweredlight - components: - - parent: 15 - pos: 17,7.5 - rot: 3.141592653589793 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2030 - type: Poweredlight - components: - - parent: 15 - pos: 23.5,3 - rot: 1.5707963267948966 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2031 - type: Poweredlight - components: - - parent: 15 - pos: 18.5,3 - rot: 1.5707963267948966 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2032 - type: Poweredlight - components: - - parent: 15 - pos: 13.5,3 - rot: 1.5707963267948966 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2033 - type: Poweredlight - components: - - parent: 15 - pos: 11,9.5 - rot: 3.141592653589793 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2034 - type: Poweredlight - components: - - parent: 15 - pos: 6,9.5 - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2035 - type: PoweredSmallLight - components: - - parent: 15 - pos: 8.5,15 - rot: 1.5707963267948966 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2036 - type: PoweredSmallLight - components: - - parent: 15 - pos: 14,16.5 - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2037 - type: PoweredSmallLight - components: - - parent: 15 - pos: 17,15.5 - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2038 - type: Wire - components: - - parent: 15 - pos: 9.5,20.5 - type: Transform -- uid: 2039 - type: Wire - components: - - parent: 15 - pos: 8.5,20.5 - type: Transform -- uid: 2040 - type: Wire - components: - - parent: 15 - pos: 8.5,19.5 - type: Transform -- uid: 2041 - type: Wire - components: - - parent: 15 - pos: 8.5,18.5 - type: Transform -- uid: 2042 - type: solid_wall - components: - - parent: 15 - pos: 7.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2043 - type: solid_wall - components: - - parent: 15 - pos: 8.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2044 - type: Wire - components: - - parent: 15 + - parent: 857 pos: 9.5,16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2045 - type: Wire - components: - - parent: 15 - pos: 9.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2046 - type: APC - components: - - parent: 15 - pos: 9.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2047 - type: Wire - components: - - parent: 15 - pos: -2.5,19.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2048 - type: Wire - components: - - parent: 15 - pos: -2.5,18.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2049 - type: Wire - components: - - parent: 15 - pos: -2.5,17.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2050 - type: Wire - components: - - parent: 15 - pos: -0.5,17.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2051 - type: APC - components: - - parent: 15 - pos: -2.5,19.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2052 - type: Wire - components: - - parent: 15 - pos: 7.5,26.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2053 - type: Wire - components: - - parent: 15 - pos: 7.5,27.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2054 - type: Poweredlight - components: - - parent: 15 - pos: 8.5,22 - rot: -1.5707963267948966 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2055 - type: Poweredlight - components: - - parent: 15 - pos: 8.5,16 - rot: 1.5707963267948966 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2056 - type: Poweredlight - components: - - parent: 15 - pos: 1.5,16 - rot: 1.5707963267948966 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2057 - type: Poweredlight - components: - - parent: 15 - pos: 5.5,16 - rot: 1.5707963267948966 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2058 - type: Poweredlight - components: - - parent: 15 - pos: 2,23.5 - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2059 - type: Poweredlight - components: - - parent: 15 - pos: 5,23.5 - rot: 3.141592653589793 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2060 - type: Poweredlight - components: - - parent: 15 - pos: 10,25.5 - rot: 3.141592653589793 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2061 - type: Poweredlight - components: - - parent: 15 - pos: 1.5,28 - rot: 1.5707963267948966 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2062 - type: Poweredlight - components: - - parent: 15 - pos: 5.5,28 - rot: 1.5707963267948966 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2063 - type: Poweredlight - components: - - parent: 15 - pos: -3,30.5 - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2064 - type: Poweredlight - components: - - parent: 15 - pos: 10,30.5 - rot: 3.141592653589793 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2065 - type: Poweredlight - components: - - parent: 15 - pos: -3,25.5 - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2066 - type: PoweredSmallLight - components: - - parent: 15 - pos: -4,17.5 - rot: 3.141592653589793 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2067 - type: AirlockMaintCommonLocked - components: - - parent: 15 - pos: 1.5,-23.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2068 - type: PoweredSmallLight - components: - - parent: 15 - pos: -7.5,26 - rot: 1.5707963267948966 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2069 - type: Wire - components: - - parent: 15 - pos: -9.5,20.5 - rot: 1.5707963267948966 rad - type: Transform -- uid: 2070 - type: Wire - components: - - parent: 15 - pos: -10.5,20.5 - rot: 1.5707963267948966 rad - type: Transform -- uid: 2071 - type: Wire - components: - - parent: 15 - pos: -10.5,21.5 - rot: 1.5707963267948966 rad - type: Transform -- uid: 2072 - type: reinforced_wall - components: - - parent: 15 - pos: -10.5,21.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2073 - type: reinforced_wall - components: - - parent: 15 - pos: -10.5,22.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2074 - type: APC - components: - - parent: 15 - pos: -10.5,21.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2075 - type: Poweredlight - components: - - parent: 15 - pos: -7.5,22 - rot: -1.5707963267948966 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2076 - type: Poweredlight - components: - - parent: 15 - pos: -15,20.5 - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2077 - type: Poweredlight - components: - - parent: 15 - pos: -6.0158176,18 - rot: -1.5707963267948966 rad - type: Transform - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2078 - type: Poweredlight - components: - - parent: 15 - pos: -5,16.5 - rot: 3.141592653589793 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2079 - type: Poweredlight - components: - - parent: 15 - pos: -1.5,19 - rot: -1.5707963267948966 rad - type: Transform - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2080 - type: Poweredlight - components: - - parent: 15 - pos: -10,7.5 - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2081 - type: Poweredlight - components: - - parent: 15 - pos: -5,7.5 - rot: 3.141592653589793 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2082 - type: PoweredSmallLight - components: - - parent: 15 - pos: -4,8.5 - rot: 3.141592653589793 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2083 - type: PoweredSmallLight - components: - - parent: 15 - pos: -1,8.5 - rot: 3.141592653589793 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2084 - type: Poweredlight - components: - - parent: 15 - pos: -1.5,10 - rot: 1.5707963267948966 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2085 - type: Poweredlight - components: - - parent: 15 - pos: 2,12.5 - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2086 - type: Poweredlight - components: - - parent: 15 - pos: 2,7.5 - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2087 - type: SignDirectionalSci - components: - - parent: 15 - pos: 1.3437586,6.2515917 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2088 - type: Poweredlight - components: - - parent: 15 - pos: 2,-4.5 - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2089 - type: Poweredlight - components: - - parent: 15 - pos: 2,-9.5 - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2090 - type: Poweredlight - components: - - parent: 15 - pos: -0.5,-5 - rot: 1.5707963267948966 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2091 - type: Poweredlight - components: - - parent: 15 - pos: 6.0308504,2 - type: Transform - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2092 +- uid: 964 type: Table components: - - parent: 15 - pos: 29.5,0.5 + - parent: 857 + pos: 9.5,18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2093 - type: Table - components: - - parent: 15 - pos: 25.5,0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2094 - type: VendingMachineEngivend - components: - - parent: 15 - pos: 31.5,-0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2095 - type: Wire - components: - - parent: 15 - pos: -6.5,-8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2096 - type: APC - components: - - parent: 15 - pos: -6.5,-8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2097 - type: Poweredlight - components: - - parent: 15 - pos: -1.5,6 - rot: -1.5707963267948966 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2098 - type: Poweredlight - components: - - parent: 15 - pos: -11.5,6 - rot: -1.5707963267948966 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2099 - type: Poweredlight - components: - - parent: 15 - pos: -18.5,6 - rot: -1.5707963267948966 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2100 - type: Poweredlight - components: - - parent: 15 - pos: -11,8.5 - rot: 3.141592653589793 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2101 - type: Paper - components: - - parent: 15 - pos: 8.598616,26.075901 - type: Transform - - anchored: False - type: Collidable -- uid: 2102 - type: PoweredSmallLight - components: - - parent: 15 - pos: -0.5,-12 - rot: -1.5707963267948966 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2103 - type: PoweredSmallLight - components: - - parent: 15 - pos: -18,9.5 - rot: 3.141592653589793 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2104 - type: PoweredSmallLight - components: - - parent: 15 - pos: -19,22.5 - rot: 3.141592653589793 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2105 - type: PoweredSmallLight - components: - - parent: 15 - pos: -14.5,26 - rot: 1.5707963267948966 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2106 - type: PoweredSmallLight - components: - - parent: 15 - pos: -19,16.5 - rot: 3.141592653589793 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2107 - type: Wire - components: - - parent: 15 - pos: -29.5,8.5 - rot: 3.141592653589793 rad - type: Transform -- uid: 2108 - type: Wire - components: - - parent: 15 - pos: -30.5,8.5 - rot: 3.141592653589793 rad - type: Transform -- uid: 2109 - type: Wire - components: - - parent: 15 - pos: -28.5,-2.5 - rot: 3.141592653589793 rad - type: Transform -- uid: 2110 - type: APC - components: - - parent: 15 - pos: -28.5,-3.5 - rot: 3.141592653589793 rad - type: Transform -- uid: 2111 - type: Chair - components: - - parent: 15 - pos: -8.5,20.5 - type: Transform - - anchored: False - type: Collidable -- uid: 2112 - type: APC - components: - - parent: 15 - pos: -33.5,2.5 - rot: 3.141592653589793 rad - type: Transform -- uid: 2113 - type: solid_wall - components: - - parent: 15 - pos: -33.5,9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2114 - type: APC - components: - - parent: 15 - pos: -12.5,-13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2115 - type: APC - components: - - parent: 15 - pos: -1.5,-18.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2116 - type: APC - components: - - parent: 15 - pos: -7.5,-21.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2117 - type: APC - components: - - parent: 15 - pos: -12.5,-18.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2118 - type: APC - components: - - parent: 15 - pos: 0.5,-26.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2119 - type: Table - components: - - parent: 15 - pos: -29.5,8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2120 - type: Table - components: - - parent: 15 - pos: -29.5,9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2121 - type: Poweredlight - components: - - parent: 15 - pos: -3,-6.5 - rot: 3.141592653589793 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2122 - type: Poweredlight - components: - - parent: 15 - pos: -5.5,-8 - rot: 1.5707963267948966 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2123 - type: Table - components: - - parent: 15 - pos: 18.5,7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2124 - type: Table - components: - - parent: 15 - pos: 15.5,8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2125 - type: VendingMachineSnack - components: - - parent: 15 - pos: -22.5,0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2126 - type: VendingMachineCola - components: - - parent: 15 - pos: -34.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2127 - type: Poweredlight - components: - - parent: 15 - pos: -27.5,12 - rot: -1.5707963267948966 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2128 - type: LockerToolFilled - components: - - parent: 15 - pos: -27.5,11.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - IsPlaceable: False - type: PlaceableSurface - - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 2129 - type: PoweredSmallLight - components: - - parent: 15 - pos: -11,-10.5 - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2130 - type: PoweredSmallLight - components: - - parent: 15 - pos: -7,-12.5 - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2131 - type: PoweredSmallLight - components: - - parent: 15 - pos: -14.5,-16 - rot: -1.5707963267948966 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2132 - type: Table - components: - - parent: 15 - pos: 10.5,7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2133 - type: Table - components: - - parent: 15 - pos: 10.5,7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2134 - type: PoweredSmallLight - components: - - parent: 15 - pos: -19,9.5 - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2135 - type: Poweredlight - components: - - parent: 15 - pos: -30,9.5 - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2136 - type: Welder - components: - - parent: 15 - pos: -29.434454,8.191761 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable -- uid: 2137 - type: LockerWeldingSupplies - components: - - parent: 15 - pos: 38.5,9.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - IsPlaceable: False - type: PlaceableSurface - - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 2138 - type: Poweredlight - components: - - parent: 15 - pos: -23,8.5 - rot: 3.141592653589793 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2139 - type: Poweredlight - components: - - parent: 15 - pos: -32.5,6 - rot: -1.5707963267948966 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2140 - type: Poweredlight - components: - - parent: 15 - pos: -30.5,3 - rot: 1.5707963267948966 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2141 - type: Poweredlight - components: - - parent: 15 - pos: -20.5,3 - rot: 1.5707963267948966 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2142 - type: Poweredlight - components: - - parent: 15 - pos: -26,-3.5 - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2143 - type: Poweredlight - components: - - parent: 15 - pos: -22,-3.5 - rot: 3.141592653589793 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2144 - type: Poweredlight - components: - - parent: 15 - pos: -31,-0.5 - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2145 - type: Poweredlight - components: - - parent: 15 - pos: -27,1.5 - rot: 3.141592653589793 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2146 - type: PoweredSmallLight - components: - - parent: 15 - pos: -29.5,-4 - rot: 1.5707963267948966 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2147 - type: PoweredSmallLight - components: - - parent: 15 - pos: -29.5,-9 - rot: -1.5707963267948966 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2148 - type: Food4NoRaisins - components: - - parent: 15 - pos: -1.7489221,25.142187 - rot: 3.141592653589793 rad - type: Transform - - fillingSteps: 0 - type: Solution - - anchored: False - type: Collidable -- uid: 2149 - type: Pen - components: - - parent: 15 - pos: 9.652517,18.48974 - rot: 3.141592653589793 rad - type: Transform - - anchored: False - type: Collidable -- uid: 2150 - type: PoweredSmallLight - components: - - parent: 15 - pos: -18,-4.5 - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2151 - type: PoweredSmallLight - components: - - parent: 15 - pos: -34,-0.5 - rot: 3.141592653589793 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2152 - type: Table - components: - - parent: 15 - pos: 7.5,28.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2153 - type: Table - components: - - parent: 15 - pos: 8.5,28.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2154 - type: PoweredSmallLight - components: - - parent: 15 - pos: -29.5,15 - rot: 1.5707963267948966 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2155 - type: Poweredlight - components: - - parent: 15 - pos: -22,2.5 - rot: 3.141592653589793 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2156 - type: SignShipDock - components: - - parent: 15 - pos: -33.298416,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2157 - type: Poweredlight - components: - - parent: 15 - pos: -22,0.5 - rot: 3.141592653589793 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2158 - type: Poweredlight - components: - - parent: 15 - pos: -34,9.5 - rot: 3.141592653589793 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2159 - type: Poweredlight - components: - - parent: 15 - pos: -35,0.5 - rot: 3.141592653589793 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2160 - type: solid_wall - components: - - parent: 15 - pos: -38.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2161 - type: solid_wall - components: - - parent: 15 - pos: -34.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2162 - type: SpawnPointStationEngineer - components: - - parent: 15 - pos: 33.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2163 - type: SpawnPointSecurityOfficer - components: - - parent: 15 - pos: -7.5,12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2164 - type: Table - components: - - parent: 15 - pos: 8.5,-5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2165 - type: Table - components: - - parent: 15 - pos: 8.5,-4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2166 - type: Table - components: - - parent: 15 - pos: 8.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2167 - type: Table - components: - - parent: 15 - pos: 7.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2168 - type: Table - components: - - parent: 15 - pos: 6.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2169 - type: ChairOfficeLight - components: - - parent: 15 - pos: 6.5,-4.5 - rot: 1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable -- uid: 2170 - type: ComputerMedicalRecords - components: - - parent: 15 - pos: 6.5,-5.5 - rot: 1.5707963267948966 rad - type: Transform -- uid: 2171 - type: chem_dispenser - components: - - parent: 15 - pos: 14.5,1.5 - rot: -1.5707963267948966 rad - type: Transform - - containers: - ReagentDispenser-reagentContainerContainer: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2172 - type: Table - components: - - parent: 15 - pos: 14.5,-0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2173 - type: Table - components: - - parent: 15 - pos: 18.5,1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2174 - type: Table - components: - - parent: 15 - pos: 18.5,0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2175 - type: chem_master - components: - - parent: 15 - pos: 15.5,1.5 - rot: -1.5707963267948966 rad - type: Transform - - containers: - ChemMaster-reagentContainerContainer: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2176 - type: Table - components: - - parent: 15 - pos: 14.5,-2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2177 - type: Table - components: - - parent: 15 - pos: 15.5,-0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2178 - type: Table - components: - - parent: 15 - pos: 15.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2179 - type: LockerHeadOfSecurityFilled - components: - - parent: 15 - pos: -9.5,21.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - IsPlaceable: False - type: PlaceableSurface - - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 2180 - type: LockerChemistry - components: - - parent: 15 - pos: 18.5,-1.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - IsPlaceable: False - type: PlaceableSurface - - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 2181 - type: Table - components: - - parent: 15 - pos: 13.5,0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2182 - type: WarpPoint - components: - - parent: 15 - pos: 8.5,10.5 - rot: -1.5707963267948966 rad - type: Transform - - location: eva - type: WarpPoint -- uid: 2183 - type: WarpPoint - components: - - parent: 15 - pos: 7.5,25.5 - rot: -1.5707963267948966 rad - type: Transform - - location: cap - type: WarpPoint -- uid: 2184 - type: WarpPoint - components: - - parent: 15 - pos: 16.5,0.5 - rot: -1.5707963267948966 rad - type: Transform - - location: chem - type: WarpPoint -- uid: 2185 - type: WarpPoint - components: - - parent: 15 - pos: 9.5,19.5 - rot: -1.5707963267948966 rad - type: Transform - - location: hop - type: WarpPoint -- uid: 2186 - type: WarpPoint - components: - - parent: 15 - pos: 49.5,-2.5 - rot: -1.5707963267948966 rad - type: Transform - - location: grav - type: WarpPoint -- uid: 2187 - type: LockerMedical - components: - - parent: 15 - pos: 21.5,-7.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - IsPlaceable: False - type: PlaceableSurface - - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 2188 - type: LockerMedical - components: - - parent: 15 - pos: 22.5,-7.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - IsPlaceable: False - type: PlaceableSurface - - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 2189 - type: VendingMachineMedical - components: - - parent: 15 - pos: 19.5,-4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2190 - type: VendingMachineMedical - components: - - parent: 15 - pos: 6.5,-11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2191 - type: Table - components: - - parent: 15 - pos: 21.5,-4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2192 - type: Table - components: - - parent: 15 - pos: 22.5,-4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2193 - type: Table - components: - - parent: 15 - pos: 23.5,-4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2194 - type: CrateMedical - components: - - parent: 15 - pos: 24.5,-4.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - IsPlaceable: False - type: PlaceableSurface - - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 2195 - type: Table - components: - - parent: 15 - pos: 6.5,-10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2196 - type: Table - components: - - parent: 15 - pos: 6.5,-9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2197 - type: Table - components: - - parent: 15 - pos: 6.5,-8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2198 - type: Table - components: - - parent: 15 - pos: 6.5,-7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2199 - type: Table - components: - - parent: 15 - pos: 10.5,-13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2200 - type: Table - components: - - parent: 15 - pos: 9.5,-13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2201 - type: Beaker - components: - - parent: 15 - pos: 15.07514,-0.38339257 - rot: 1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable -- uid: 2202 - type: MedicalScanner - components: - - parent: 15 - pos: 16.5,-13.5 - rot: -1.5707963267948966 rad - type: Transform - - containers: - MedicalScanner-bodyContainer: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2203 - type: MedicalScanner - components: - - parent: 15 - pos: 16.5,-11.5 - rot: -1.5707963267948966 rad - type: Transform - - containers: - MedicalScanner-bodyContainer: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2204 - type: LowWall - components: - - parent: 15 - pos: 15.5,-12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2205 - type: LowWall - components: - - parent: 15 - pos: 16.5,-12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2206 - type: LowWall - components: - - parent: 15 - pos: 17.5,-12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2207 - type: Window - components: - - parent: 15 - pos: 15.5,-12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2208 - type: Window - components: - - parent: 15 - pos: 16.5,-12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2209 - type: Window - components: - - parent: 15 - pos: 17.5,-12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2210 - type: Poweredlight - components: - - parent: 15 - pos: 20,-11.5 - rot: 3.141592653589793 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2211 - type: Poweredlight - components: - - parent: 15 - pos: 7,-14.5 - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2212 - type: Poweredlight - components: - - parent: 15 - pos: 23.5,-4 - rot: -1.5707963267948966 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2213 - type: Poweredlight - components: - - parent: 15 - pos: 23.5,-8 - rot: 1.5707963267948966 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2214 - type: Medkit - components: - - parent: 15 - pos: 6.5537567,-7.609968 - rot: 1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - containers: - storagebase: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 2215 - type: Medkit - components: - - parent: 15 - pos: 6.5693817,-8.359968 - rot: 1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - containers: - storagebase: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 2216 - type: Medkit - components: - - parent: 15 - pos: 6.5225067,-9.141218 - rot: 1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - containers: - storagebase: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 2217 - type: Medkit - components: - - parent: 15 - pos: 6.5068817,-9.984968 - rot: 1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - containers: - storagebase: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 2218 - type: DisposalUnit - components: - - parent: 15 - pos: 18.5,-0.5 - type: Transform - - - containers: - DisposalUnit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 2219 - type: DisposalTrunk - components: - - parent: 15 - pos: 18.5,-0.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalEntry: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 2220 - type: LargeBeaker - components: - - parent: 15 - pos: 14.528265,-0.44589257 - rot: 1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable -- uid: 2221 - type: Beaker - components: - - parent: 15 - pos: 15.48139,-0.43026757 - rot: 1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable -- uid: 2222 - type: ComputerMedicalRecords - components: - - parent: 15 - pos: 24.5,-15.5 - rot: 1.5707963267948966 rad - type: Transform -- uid: 2223 - type: Table - components: - - parent: 15 - pos: 23.5,-13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2224 - type: Table - components: - - parent: 15 - pos: 23.5,-14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2225 - type: Table - components: - - parent: 15 - pos: 23.5,-15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2226 - type: ChairOfficeLight - components: - - parent: 15 - pos: 24.5,-14.5 - rot: 3.141592653589793 rad - type: Transform - - anchored: False - type: Collidable -- uid: 2227 - type: Poweredlight - components: - - parent: 15 - pos: 25,-14.5 - rot: 3.141592653589793 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2228 - type: WarpPoint - components: - - parent: 15 - pos: -24.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform - - location: dorms - type: WarpPoint -- uid: 2229 - type: WarpPoint - components: - - parent: 15 - pos: -36.5,6.5 - rot: -1.5707963267948966 rad - type: Transform - - location: escape - type: WarpPoint -- uid: 2230 - type: SpawnPointChef - components: - - parent: 15 - pos: -12.5,0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2231 - type: SpawnPointLatejoin - components: - - parent: 15 - pos: -36.5,0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2232 - type: SpawnPointAssistant - components: - - parent: 15 - pos: -29.5,-0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2233 - type: SpawnPointAssistant - components: - - parent: 15 - pos: -23.5,-2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2234 - type: Table - components: - - parent: 15 - pos: -4.5,-23.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2235 - type: Table - components: - - parent: 15 - pos: -4.5,-24.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2236 - type: LowWall - components: - - parent: 15 - pos: -10.5,-29.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2237 - type: LowWall - components: - - parent: 15 - pos: -10.5,-30.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2238 - type: LowWall - components: - - parent: 15 - pos: -9.5,-30.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2239 - type: LowWall - components: - - parent: 15 - pos: -6.5,-29.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2240 - type: LowWall - components: - - parent: 15 - pos: -7.5,-30.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2241 - type: LowWall - components: - - parent: 15 - pos: -6.5,-30.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2242 - type: LowWall - components: - - parent: 15 - pos: -8.5,-30.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2243 - type: ReinforcedWindow - components: - - parent: 15 - pos: -10.5,-29.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2244 - type: ReinforcedWindow - components: - - parent: 15 - pos: -10.5,-30.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2245 - type: ReinforcedWindow - components: - - parent: 15 - pos: -9.5,-30.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2246 - type: ReinforcedWindow - components: - - parent: 15 - pos: -8.5,-30.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2247 - type: ReinforcedWindow - components: - - parent: 15 - pos: -7.5,-30.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2248 - type: ReinforcedWindow - components: - - parent: 15 - pos: -6.5,-30.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2249 - type: ReinforcedWindow - components: - - parent: 15 - pos: -6.5,-29.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2250 - type: Poweredlight - components: - - parent: 15 - pos: -1.5,-18 - rot: 1.5707963267948966 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2251 - type: Poweredlight - components: - - parent: 15 - pos: -6,-14.5 - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2252 - type: Poweredlight - components: - - parent: 15 - pos: -1.5,-13 - rot: -1.5707963267948966 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2253 - type: Poweredlight - components: - - parent: 15 - pos: -9.5,-21 - rot: 1.5707963267948966 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2254 - type: Poweredlight - components: - - parent: 15 - pos: -9.5,-17 - rot: -1.5707963267948966 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2255 - type: Poweredlight - components: - - parent: 15 - pos: -1.5,-21 - rot: 1.5707963267948966 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2256 - type: Poweredlight - components: - - parent: 15 - pos: -2,-23.5 - rot: 3.141592653589793 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2257 - type: PoweredSmallLight - components: - - parent: 15 - pos: -7,-23.5 - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2258 - type: ResearchAndDevelopmentServer - components: - - parent: 15 - pos: -8.5,-23.5 - type: Transform - - points: 136000 - type: ResearchServer -- uid: 2259 - type: Poweredlight - components: - - parent: 15 - pos: -18,-25.5 - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2260 - type: Poweredlight - components: - - parent: 15 - pos: -18,-21.5 - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2261 - type: Poweredlight - components: - - parent: 15 - pos: -13,-21.5 - rot: 3.141592653589793 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2262 - type: Poweredlight - components: - - parent: 15 - pos: -13,-25.5 - rot: 3.141592653589793 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2263 - type: SignScience - components: - - parent: 15 - pos: -8.494434,-16.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2264 - type: Wire - components: - - parent: 15 - pos: -17.5,-19.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2265 - type: APC - components: - - parent: 15 - pos: -18.5,-19.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2266 - type: ComputerResearchAndDevelopment - components: - - parent: 15 - pos: -5.5,-15.5 - type: Transform -- uid: 2267 - type: PoweredSmallLight - components: - - parent: 15 - pos: -6.5,-26 - rot: 1.5707963267948966 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2268 - type: Table - components: - - parent: 15 - pos: -0.5,-17.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2269 - type: Table - components: - - parent: 15 - pos: -1.5,-17.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2270 - type: Table - components: - - parent: 15 - pos: -2.5,-17.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2271 - type: Table - components: - - parent: 15 - pos: 0.5,-15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2272 - type: Table - components: - - parent: 15 - pos: 0.5,-14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2273 - type: BaseResearchAndDevelopmentPointSource - components: - - parent: 15 - pos: -5.5,-17.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2274 - type: ChairOfficeLight - components: - - parent: 15 - pos: -0.5,-14.5 - type: Transform - - anchored: False - type: Collidable -- uid: 2275 - type: ChairOfficeLight - components: - - parent: 15 - pos: -5.5,-23.5 - type: Transform - - anchored: False - type: Collidable -- uid: 2276 - type: VendingMachineCoffee - components: - - parent: 15 - pos: -7.5,-17.5 - type: Transform -- uid: 2277 - type: Table - components: - - parent: 15 - pos: -8.5,-17.5 - type: Transform -- uid: 2278 - type: ChairOfficeLight - components: - - parent: 15 - pos: -9.5,-17.5 - type: Transform - - anchored: False - type: Collidable -- uid: 2279 - type: ChairOfficeLight - components: - - parent: 15 - pos: -8.5,-18.5 - rot: 1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable -- uid: 2280 - type: Autolathe - components: - - parent: 15 - pos: -5.5,-12.5 - type: Transform - - recipes: - - Brutepack - - Ointment - - LightTube - - LightBulb - - MetalStack - - GlassStack - - Wirecutter - - Screwdriver - - Welder - - Wrench - - Crowbar - - Multitool - type: LatheDatabase -- uid: 2281 - type: Protolathe - components: - - parent: 15 - pos: -3.5,-12.5 - type: Transform - - protolatherecipes: - - Brutepack - - Ointment - - LightTube - - LightBulb - - MetalStack - - GlassStack - - Wirecutter - - Screwdriver - - Welder - - Wrench - - Crowbar - - Multitool - type: ProtolatheDatabase -- uid: 2282 - type: Table - components: - - parent: 15 - pos: -2.5,-13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2283 - type: Table - components: - - parent: 15 - pos: -1.5,-13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2284 - type: Table - components: - - parent: 15 - pos: -0.5,-13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2285 - type: SpawnPointStationEngineer - components: - - parent: 15 - pos: 41.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2286 - type: SpawnPointStationEngineer - components: - - parent: 15 - pos: 33.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2287 - type: SpawnPointSecurityOfficer - components: - - parent: 15 - pos: -2.5,12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2288 - type: SpawnPointSecurityOfficer - components: - - parent: 15 - pos: -13.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2289 - type: Poweredlight - components: - - parent: 15 - pos: -38.5,11 - rot: -1.5707963267948966 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2290 - type: Table - components: - - parent: 15 - pos: -2.5,-4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2291 - type: Table - components: - - parent: 15 - pos: -7.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2292 - type: Table - components: - - parent: 15 - pos: -6.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2293 - type: Table - components: - - parent: 15 - pos: -5.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2294 - type: Table - components: - - parent: 15 - pos: -4.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2295 - type: Table - components: - - parent: 15 - pos: -3.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2296 - type: Table - components: - - parent: 15 - pos: -2.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2297 - type: Table - components: - - parent: 15 - pos: 39.5,-0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2298 - type: SpawnPointAssistant - components: - - parent: 15 - pos: -27.5,8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2299 - type: SpawnPointSecurityOfficer - components: - - parent: 15 - pos: -12.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2300 - type: SpawnPointAssistant - components: - - parent: 15 - pos: -27.5,10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2301 - type: SpawnPointStationEngineer - components: - - parent: 15 - pos: 33.5,-2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2302 - type: StoolBar - components: - - parent: 15 - pos: -7.5,-2.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable -- uid: 2303 - type: StoolBar - components: - - parent: 15 - pos: -6.5,-2.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable -- uid: 2304 - type: StoolBar - components: - - parent: 15 - pos: -5.5,-2.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable -- uid: 2305 - type: StoolBar - components: - - parent: 15 - pos: -4.5,-2.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable -- uid: 2306 - type: StoolBar - components: - - parent: 15 - pos: -3.5,-2.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable -- uid: 2307 - type: StoolBar - components: - - parent: 15 - pos: -2.5,-2.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable -- uid: 2308 - type: Fork - components: - - parent: 15 - pos: -7.6538,0.49939823 - type: Transform - - anchored: False - type: Collidable -- uid: 2309 - type: Arcade - components: - - parent: 15 - pos: -1.5,-4.5 - type: Transform -- uid: 2310 - type: TableWood - components: - - parent: 15 - pos: -7.5,0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2311 - type: TableWood - components: - - parent: 15 - pos: -6.5,0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2312 - type: TableWood - components: - - parent: 15 - pos: -0.5,0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2313 - type: TableWood - components: - - parent: 15 - pos: -3.5,0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2314 - type: ChairWood - components: - - parent: 15 - pos: -3.5,1.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable -- uid: 2315 - type: ChairWood - components: - - parent: 15 - pos: -3.5,-0.5 - rot: 1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable -- uid: 2316 - type: ChairWood - components: - - parent: 15 - pos: -6.5,1.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable -- uid: 2317 - type: ChairWood - components: - - parent: 15 - pos: -7.5,1.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable -- uid: 2318 - type: ChairWood - components: - - parent: 15 - pos: -7.5,-0.5 - rot: 1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable -- uid: 2319 - type: ChairWood - components: - - parent: 15 - pos: -6.5,-0.5 - rot: 1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable -- uid: 2320 - type: ChairWood - components: - - parent: 15 - pos: -0.5,1.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable -- uid: 2321 - type: ChairWood - components: - - parent: 15 - pos: -0.5,-0.5 - rot: 1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable -- uid: 2322 - type: BarSign - components: - - parent: 15 - pos: 1,2.5 - rot: 1.5707963267948966 rad - type: Transform -- uid: 2323 - type: Spoon - components: - - parent: 15 - pos: -6.419425,0.43689823 - type: Transform - - anchored: False - type: Collidable -- uid: 2324 - type: VendingMachineCigs - components: - - parent: 15 - pos: 0.5,-4.5 - type: Transform -- uid: 2325 - type: VendingMachineSnack - components: - - parent: 15 - pos: -0.5,-4.5 - type: Transform -- uid: 2326 - type: Chair - components: - - parent: 15 - pos: 22.5,-14.5 - type: Transform - - anchored: False - type: Collidable -- uid: 2327 - type: Stool - components: - - parent: 15 - pos: -1.5,-3.5 - type: Transform - - anchored: False - type: Collidable -- uid: 2328 - type: Table - components: - - parent: 15 - pos: -15.5,-10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2329 - type: ComputerComms - components: - - parent: 15 - pos: 3.5,32.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2330 - type: WarpPoint - components: - - parent: 15 - pos: -4.5,-0.5 - rot: -1.5707963267948966 rad - type: Transform - - location: bar - type: WarpPoint -- uid: 2331 - type: WarpPoint - components: - - parent: 15 - pos: -6.5,-19.5 - rot: -1.5707963267948966 rad - type: Transform - - location: sci - type: WarpPoint -- uid: 2332 - type: WarpPoint - components: - - parent: 15 - pos: 14.5,-9.5 - rot: -1.5707963267948966 rad - type: Transform - - location: med - type: WarpPoint -- uid: 2333 - type: WarpPoint - components: - - parent: 15 - pos: 19.5,11.5 - rot: -1.5707963267948966 rad - type: Transform - - location: cargo - type: WarpPoint -- uid: 2334 - type: WarpPoint - components: - - parent: 15 - pos: 34.5,4.5 - rot: -1.5707963267948966 rad - type: Transform - - location: eng - type: WarpPoint -- uid: 2335 - type: VendingMachineCola - components: - - parent: 15 - pos: 1.5,21.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2336 - type: VendingMachineCoffee - components: - - parent: 15 - pos: 0.5,23.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2337 - type: VendingMachineCigs - components: - - parent: 15 - pos: 6.5,23.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2338 - type: TableWood - components: - - parent: 15 - pos: 8.5,25.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2339 - type: TableWood - components: - - parent: 15 - pos: 8.5,26.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2340 - type: ChairOfficeDark - components: - - parent: 15 - pos: 3.5,31.5 - rot: 1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable -- uid: 2341 - type: ComputerComms - components: - - parent: 15 - pos: 9.5,23.5 - rot: 1.5707963267948966 rad - type: Transform -- uid: 2342 - type: ChairOfficeDark - components: - - parent: 15 - pos: 9.5,25.5 - rot: 3.141592653589793 rad - type: Transform - - anchored: False - type: Collidable -- uid: 2343 - type: ChairWood - components: - - parent: 15 - pos: 7.5,25.5 - type: Transform - - anchored: False - type: Collidable -- uid: 2344 - type: WarpPoint - components: - - parent: 15 - pos: -6.5,13.5 - rot: -1.5707963267948966 rad - type: Transform - - location: sec - type: WarpPoint -- uid: 2345 - type: WarpPoint - components: - - parent: 15 - pos: 3.5,29.5 - rot: -1.5707963267948966 rad - type: Transform - - location: bridge - type: WarpPoint -- uid: 2346 - type: Table - components: - - parent: 15 - pos: 6.5,20.5 - type: Transform -- uid: 2347 - type: ComputerId - components: - - parent: 15 - pos: 8.5,23.5 - rot: 1.5707963267948966 rad - type: Transform - - containers: - IdCardConsole-privilegedId: - type: Content.Server.GameObjects.ContainerSlot - IdCardConsole-targetId: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2348 - type: ComputerId - components: - - parent: 15 - pos: 7.5,21.5 - rot: -1.5707963267948966 rad - type: Transform - - containers: - IdCardConsole-privilegedId: - type: Content.Server.GameObjects.ContainerSlot - IdCardConsole-targetId: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2349 - type: ComputerAlert - components: - - parent: 15 - pos: 6.5,32.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2350 - type: ComputerPowerMonitoring - components: - - parent: 15 - pos: 7.5,32.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2351 - type: Paper - components: - - parent: 15 - pos: -1.344388,25.58412 - type: Transform - - anchored: False - type: Collidable -- uid: 2352 - type: Pen - components: - - parent: 15 - pos: -1.563138,24.568495 - type: Transform - - anchored: False - type: Collidable -- uid: 2353 - type: TableWood - components: - - parent: 15 - pos: -1.5,25.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2354 - type: TableWood - components: - - parent: 15 - pos: -1.5,24.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2355 - type: ChairOfficeDark - components: - - parent: 15 - pos: -0.5,24.5 - rot: 3.141592653589793 rad - type: Transform - - anchored: False - type: Collidable -- uid: 2356 - type: ChairOfficeDark - components: - - parent: 15 - pos: -0.5,25.5 - rot: 3.141592653589793 rad - type: Transform - - anchored: False - type: Collidable -- uid: 2357 - type: ChairOfficeDark - components: - - parent: 15 - pos: -2.5,24.5 - type: Transform - - anchored: False - type: Collidable -- uid: 2358 - type: ChairOfficeDark - components: - - parent: 15 - pos: -2.5,25.5 - type: Transform - - anchored: False - type: Collidable -- uid: 2359 - type: ChairOfficeDark - components: - - parent: 15 - pos: 7.5,31.5 - rot: 1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable -- uid: 2360 - type: ComputerMedicalRecords - components: - - parent: 15 - pos: 0.5,32.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2361 - type: ChairOfficeDark - components: - - parent: 15 - pos: 0.5,31.5 - rot: 1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable -- uid: 2362 +- uid: 965 type: ComputerSupplyRequest components: - - parent: 15 + - parent: 857 pos: 8.5,31.5 rot: 3.141592653589793 rad type: Transform @@ -29021,775 +20628,805 @@ entities: - cargo.glass - cargo.cable type: GalacticMarket -- uid: 2363 - type: Table - components: - - parent: 15 - pos: 9.5,18.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2364 - type: Table - components: - - parent: 15 - pos: 9.5,16.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2365 - type: Table - components: - - parent: 15 - pos: 9.5,17.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2366 - type: Chair - components: - - parent: 15 - pos: 8.5,17.5 - type: Transform - - anchored: False - type: Collidable -- uid: 2367 +- uid: 966 type: ChairOfficeDark components: - - parent: 15 - pos: 10.5,17.5 + - parent: 857 + pos: 0.5,31.5 + rot: 1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 967 + type: ComputerMedicalRecords + components: + - parent: 857 + pos: 0.5,32.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 968 + type: ChairOfficeDark + components: + - parent: 857 + pos: 7.5,31.5 + rot: 1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 969 + type: ChairOfficeDark + components: + - parent: 857 + pos: -2.5,25.5 + type: Transform + - anchored: False + type: Collidable +- uid: 970 + type: ChairOfficeDark + components: + - parent: 857 + pos: -2.5,24.5 + type: Transform + - anchored: False + type: Collidable +- uid: 971 + type: ChairOfficeDark + components: + - parent: 857 + pos: -0.5,25.5 rot: 3.141592653589793 rad type: Transform - anchored: False type: Collidable -- uid: 2368 +- uid: 972 + type: ChairOfficeDark + components: + - parent: 857 + pos: -0.5,24.5 + rot: 3.141592653589793 rad + type: Transform + - anchored: False + type: Collidable +- uid: 973 + type: TableWood + components: + - parent: 857 + pos: -1.5,24.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 974 + type: TableWood + components: + - parent: 857 + pos: -1.5,25.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 975 + type: Pen + components: + - parent: 857 + pos: -1.563138,24.568495 + type: Transform + - anchored: False + type: Collidable +- uid: 976 type: Paper components: - - parent: 15 - pos: 9.699392,17.630365 + - parent: 857 + pos: -1.344388,25.58412 + type: Transform + - anchored: False + type: Collidable +- uid: 977 + type: ComputerPowerMonitoring + components: + - parent: 857 + pos: 7.5,32.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 978 + type: ComputerAlert + components: + - parent: 857 + pos: 6.5,32.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 979 + type: ComputerId + components: + - parent: 857 + pos: 7.5,21.5 + rot: -1.5707963267948966 rad + type: Transform + - containers: + IdCardConsole-privilegedId: + type: Content.Server.GameObjects.ContainerSlot + IdCardConsole-targetId: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 980 + type: ComputerId + components: + - parent: 857 + pos: 8.5,23.5 + rot: 1.5707963267948966 rad + type: Transform + - containers: + IdCardConsole-privilegedId: + type: Content.Server.GameObjects.ContainerSlot + IdCardConsole-targetId: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 981 + type: Table + components: + - parent: 857 + pos: 6.5,20.5 + type: Transform +- uid: 982 + type: WarpPoint + components: + - parent: 857 + pos: 3.5,29.5 + rot: -1.5707963267948966 rad + type: Transform + - location: bridge + type: WarpPoint +- uid: 983 + type: WarpPoint + components: + - parent: 857 + pos: -6.5,13.5 + rot: -1.5707963267948966 rad + type: Transform + - location: sec + type: WarpPoint +- uid: 984 + type: ChairWood + components: + - parent: 857 + pos: 7.5,25.5 + type: Transform + - anchored: False + type: Collidable +- uid: 985 + type: ChairOfficeDark + components: + - parent: 857 + pos: 9.5,25.5 rot: 3.141592653589793 rad type: Transform - anchored: False type: Collidable -- uid: 2369 - type: solid_wall +- uid: 986 + type: ComputerComms components: - - parent: 15 - pos: -34.5,-9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2370 - type: solid_wall - components: - - parent: 15 - pos: -34.5,-10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2371 - type: solid_wall - components: - - parent: 15 - pos: -34.5,-11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2372 - type: solid_wall - components: - - parent: 15 - pos: -34.5,-12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2373 - type: solid_wall - components: - - parent: 15 - pos: -33.5,-12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2374 - type: solid_wall - components: - - parent: 15 - pos: -32.5,-12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2375 - type: solid_wall - components: - - parent: 15 - pos: -31.5,-12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2376 - type: solid_wall - components: - - parent: 15 - pos: -30.5,-12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2377 - type: solid_wall - components: - - parent: 15 - pos: -29.5,-12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2378 - type: solid_wall - components: - - parent: 15 - pos: -28.5,-12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2379 - type: solid_wall - components: - - parent: 15 - pos: -27.5,-12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2380 - type: solid_wall - components: - - parent: 15 - pos: -26.5,-12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2381 - type: Brutepack - components: - - parent: 15 - pos: 6.97988,-3.2306285 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable -- uid: 2382 - type: SignDirectionalBridge - components: - - parent: 15 - pos: 5.641159,-12.7475605 + - parent: 857 + pos: 9.5,23.5 rot: 1.5707963267948966 rad type: Transform -- uid: 2383 - type: solid_wall +- uid: 987 + type: ChairOfficeDark components: - - parent: 15 - pos: 33.5,11.5 + - parent: 857 + pos: 3.5,31.5 rot: 1.5707963267948966 rad type: Transform -- uid: 2384 - type: solid_wall - components: - - parent: 15 - pos: -0.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2385 - type: solid_wall - components: - - parent: 15 - pos: -16.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2386 - type: SignSmoking - components: - - parent: 15 - pos: 23.462582,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2387 - type: SignBar - components: - - parent: 15 - pos: -4.6859417,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2388 - type: TrashSpawner - components: - - parent: 15 - pos: 7.5,13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2389 - type: Brutepack - components: - - parent: 15 - pos: 7.370505,-3.4650035 - rot: -1.5707963267948966 rad - type: Transform - anchored: False type: Collidable -- uid: 2390 - type: solid_wall +- uid: 988 + type: TableWood components: - - parent: 15 - pos: -20.5,-9.5 + - parent: 857 + pos: 8.5,26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2391 - type: solid_wall +- uid: 989 + type: TableWood components: - - parent: 15 - pos: -20.5,-10.5 + - parent: 857 + pos: 8.5,25.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2392 - type: solid_wall +- uid: 990 + type: VendingMachineCigs components: - - parent: 15 - pos: -19.5,-10.5 + - parent: 857 + pos: 6.5,23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2393 - type: solid_wall +- uid: 991 + type: VendingMachineCoffee components: - - parent: 15 - pos: -18.5,-10.5 + - parent: 857 + pos: 0.5,23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2394 - type: solid_wall +- uid: 992 + type: VendingMachineCola components: - - parent: 15 - pos: -17.5,-10.5 + - parent: 857 + pos: 1.5,21.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2395 - type: solid_wall +- uid: 993 + type: WarpPoint components: - - parent: 15 - pos: -20.5,-8.5 + - parent: 857 + pos: 34.5,4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2396 - type: solid_wall + - location: eng + type: WarpPoint +- uid: 994 + type: WarpPoint components: - - parent: 15 - pos: -15.5,2.5 + - parent: 857 + pos: 19.5,11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2397 - type: solid_wall + - location: cargo + type: WarpPoint +- uid: 995 + type: WarpPoint components: - - parent: 15 - pos: -14.5,2.5 + - parent: 857 + pos: 14.5,-9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2398 - type: solid_wall + - location: med + type: WarpPoint +- uid: 996 + type: WarpPoint components: - - parent: 15 - pos: -13.5,2.5 + - parent: 857 + pos: -6.5,-19.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2399 - type: solid_wall + - location: sci + type: WarpPoint +- uid: 997 + type: WarpPoint components: - - parent: 15 - pos: -12.5,2.5 + - parent: 857 + pos: -4.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2400 - type: solid_wall + - location: bar + type: WarpPoint +- uid: 998 + type: ComputerComms components: - - parent: 15 - pos: -15.5,1.5 + - parent: 857 + pos: 3.5,32.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2401 - type: solid_wall - components: - - parent: 15 - pos: -15.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2402 - type: solid_wall - components: - - parent: 15 - pos: -15.5,-0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2403 - type: solid_wall - components: - - parent: 15 - pos: -15.5,-1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2404 - type: solid_wall - components: - - parent: 15 - pos: -15.5,-2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2405 - type: solid_wall - components: - - parent: 15 - pos: -10.5,-2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2406 - type: solid_wall - components: - - parent: 15 - pos: -11.5,-2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2407 - type: solid_wall - components: - - parent: 15 - pos: -13.5,-2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2408 - type: solid_wall - components: - - parent: 15 - pos: -14.5,-2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2409 - type: solid_wall - components: - - parent: 15 - pos: -10.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2410 - type: solid_wall - components: - - parent: 15 - pos: -10.5,-4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2411 - type: solid_wall - components: - - parent: 15 - pos: -11.5,-5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2412 - type: solid_wall - components: - - parent: 15 - pos: -12.5,-5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2413 - type: solid_wall - components: - - parent: 15 - pos: -13.5,-5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2414 - type: solid_wall - components: - - parent: 15 - pos: -14.5,-5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2415 - type: Catwalk - components: - - parent: 15 - pos: -23.5,-10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2416 - type: Catwalk - components: - - parent: 15 - pos: -17.5,-14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2417 - type: Catwalk - components: - - parent: 15 - pos: -9.5,-7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2418 - type: Wire - components: - - parent: 15 - pos: -33.5,-7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2419 - type: Wire - components: - - parent: 15 - pos: -33.5,-8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2420 - type: Wire - components: - - parent: 15 - pos: -33.5,-9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2421 - type: Wire - components: - - parent: 15 - pos: -33.5,-10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2422 - type: Wire - components: - - parent: 15 - pos: -33.5,-11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2423 - type: Wire - components: - - parent: 15 - pos: -32.5,-11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2424 - type: Wire - components: - - parent: 15 - pos: -31.5,-11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2425 - type: Wire - components: - - parent: 15 - pos: -30.5,-11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2426 - type: Wire - components: - - parent: 15 - pos: -29.5,-11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2427 - type: Wire - components: - - parent: 15 - pos: -28.5,-11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2428 - type: Wire - components: - - parent: 15 - pos: -27.5,-11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2429 - type: Wire - components: - - parent: 15 - pos: -26.5,-11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2430 - type: Wire - components: - - parent: 15 - pos: -25.5,-11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2431 - type: Wire - components: - - parent: 15 - pos: -24.5,-11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2432 - type: Wire - components: - - parent: 15 - pos: -23.5,-11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2433 - type: Wire - components: - - parent: 15 - pos: -18.5,-11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2434 - type: Wire - components: - - parent: 15 - pos: -21.5,-11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2435 - type: Wire - components: - - parent: 15 - pos: -22.5,-11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2436 - type: Wire - components: - - parent: 15 - pos: -19.5,-11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2437 - type: Wire - components: - - parent: 15 - pos: -20.5,-11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2438 - type: Wire - components: - - parent: 15 - pos: -18.5,-12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2439 - type: Wire - components: - - parent: 15 - pos: -18.5,-13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2440 - type: Wire - components: - - parent: 15 - pos: -18.5,-14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2441 - type: Wire - components: - - parent: 15 - pos: -9.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2442 - type: Wire - components: - - parent: 15 - pos: -17.5,-14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2443 - type: Wire - components: - - parent: 15 - pos: -15.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2444 - type: Wire - components: - - parent: 15 - pos: -14.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2445 - type: Wire - components: - - parent: 15 - pos: -13.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2446 - type: Wire - components: - - parent: 15 - pos: -12.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2447 - type: Wire - components: - - parent: 15 - pos: -11.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2448 - type: Wire - components: - - parent: 15 - pos: -10.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2449 - type: Wire - components: - - parent: 15 - pos: -23.5,-10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2450 - type: Wire - components: - - parent: 15 - pos: -23.5,-9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2451 - type: Wire - components: - - parent: 15 - pos: -23.5,-8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2452 - type: Wire - components: - - parent: 15 - pos: -21.5,-7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2453 - type: Wire - components: - - parent: 15 - pos: -20.5,-7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2454 - type: SpawnPointLatejoin - components: - - parent: 15 - pos: -36.5,-1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2455 +- uid: 999 type: Table components: - - parent: 15 - pos: -10.5,-0.5 + - parent: 857 + pos: -15.5,-10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2456 - type: Table - components: - - parent: 15 - pos: -10.5,0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2457 - type: Table - components: - - parent: 15 - pos: -10.5,1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2458 - type: Wire - components: - - parent: 15 - pos: -9.5,-1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2459 - type: Wire - components: - - parent: 15 - pos: -10.5,-1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2460 - type: Wire - components: - - parent: 15 - pos: -11.5,-1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2461 - type: SpawnPointSecurityOfficer - components: - - parent: 15 - pos: -11.5,8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2462 - type: VendingMachineTheater - components: - - parent: 15 - pos: -17.5,-9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2463 - type: PianoInstrument - components: - - parent: 15 - pos: -9.5,-4.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable -- uid: 2464 +- uid: 1000 type: Stool components: - - parent: 15 - pos: -9.5,-3.5 + - parent: 857 + pos: -1.5,-3.5 + type: Transform + - anchored: False + type: Collidable +- uid: 1001 + type: Catwalk + components: + - parent: 857 + pos: 22.5,-18.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1002 + type: Chair + components: + - parent: 857 + pos: 22.5,-14.5 + type: Transform + - anchored: False + type: Collidable +- uid: 1003 + type: VendingMachineSnack + components: + - parent: 857 + pos: -0.5,-4.5 + type: Transform +- uid: 1004 + type: VendingMachineCigs + components: + - parent: 857 + pos: 0.5,-4.5 + type: Transform +- uid: 1005 + type: Spoon + components: + - parent: 857 + pos: -6.419425,0.43689823 + type: Transform + - anchored: False + type: Collidable +- uid: 1006 + type: BarSign + components: + - parent: 857 + pos: 1,2.5 + rot: 1.5707963267948966 rad + type: Transform +- uid: 1007 + type: ChairWood + components: + - parent: 857 + pos: -0.5,-0.5 + rot: 1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 1008 + type: ChairWood + components: + - parent: 857 + pos: -0.5,1.5 rot: -1.5707963267948966 rad type: Transform - anchored: False type: Collidable -- uid: 2465 +- uid: 1009 + type: ChairWood + components: + - parent: 857 + pos: -6.5,-0.5 + rot: 1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 1010 + type: ChairWood + components: + - parent: 857 + pos: -7.5,-0.5 + rot: 1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 1011 + type: ChairWood + components: + - parent: 857 + pos: -7.5,1.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 1012 + type: ChairWood + components: + - parent: 857 + pos: -6.5,1.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 1013 + type: ChairWood + components: + - parent: 857 + pos: -3.5,-0.5 + rot: 1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 1014 + type: ChairWood + components: + - parent: 857 + pos: -3.5,1.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 1015 + type: TableWood + components: + - parent: 857 + pos: -3.5,0.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1016 + type: TableWood + components: + - parent: 857 + pos: -0.5,0.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1017 + type: TableWood + components: + - parent: 857 + pos: -6.5,0.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1018 + type: TableWood + components: + - parent: 857 + pos: -7.5,0.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1019 + type: Arcade + components: + - parent: 857 + pos: -1.5,-4.5 + type: Transform +- uid: 1020 + type: Fork + components: + - parent: 857 + pos: -7.6538,0.49939823 + type: Transform + - anchored: False + type: Collidable +- uid: 1021 + type: StoolBar + components: + - parent: 857 + pos: -2.5,-2.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 1022 + type: StoolBar + components: + - parent: 857 + pos: -3.5,-2.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 1023 + type: StoolBar + components: + - parent: 857 + pos: -4.5,-2.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 1024 + type: StoolBar + components: + - parent: 857 + pos: -5.5,-2.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 1025 + type: StoolBar + components: + - parent: 857 + pos: -6.5,-2.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 1026 + type: StoolBar + components: + - parent: 857 + pos: -7.5,-2.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 1027 + type: Catwalk + components: + - parent: 857 + pos: 10.5,14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1028 + type: Catwalk + components: + - parent: 857 + pos: 12.5,14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1029 + type: Catwalk + components: + - parent: 857 + pos: 11.5,14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1030 + type: SpawnPointStationEngineer + components: + - parent: 857 + pos: 33.5,-2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1031 + type: SpawnPointAssistant + components: + - parent: 857 + pos: -27.5,10.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1032 + type: SpawnPointSecurityOfficer + components: + - parent: 857 + pos: -12.5,15.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1033 + type: SpawnPointAssistant + components: + - parent: 857 + pos: -27.5,8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1034 type: Table components: - - parent: 15 - pos: -14.5,-1.5 + - parent: 857 + pos: 39.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2466 +- uid: 1035 type: Table components: - - parent: 15 - pos: -14.5,-0.5 + - parent: 857 + pos: -2.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2467 - type: KitchenMicrowave +- uid: 1036 + type: Table components: - - parent: 15 - pos: -14.5,-1.5 + - parent: 857 + pos: -3.5,-3.5 rot: -1.5707963267948966 rad type: Transform - - containers: - microwave_entity_container: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 2468 - type: Wire +- uid: 1037 + type: Table components: - - parent: 15 - pos: -11.5,-0.5 + - parent: 857 + pos: -4.5,-3.5 + rot: -1.5707963267948966 rad type: Transform -- uid: 2469 - type: Wire +- uid: 1038 + type: Table components: - - parent: 15 - pos: -11.5,1.5 + - parent: 857 + pos: -5.5,-3.5 + rot: -1.5707963267948966 rad type: Transform -- uid: 2470 +- uid: 1039 + type: Table + components: + - parent: 857 + pos: -6.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1040 + type: Table + components: + - parent: 857 + pos: -7.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1041 + type: Table + components: + - parent: 857 + pos: -2.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1042 type: Poweredlight components: - - parent: 15 - pos: -13.5,-2 + - parent: 857 + pos: -38.5,11 + rot: -1.5707963267948966 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1043 + type: SpawnPointSecurityOfficer + components: + - parent: 857 + pos: -13.5,15.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1044 + type: SpawnPointSecurityOfficer + components: + - parent: 857 + pos: -2.5,12.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1045 + type: SpawnPointStationEngineer + components: + - parent: 857 + pos: 33.5,11.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1046 + type: SpawnPointStationEngineer + components: + - parent: 857 + pos: 41.5,4.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1047 + type: Table + components: + - parent: 857 + pos: -0.5,-13.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1048 + type: Table + components: + - parent: 857 + pos: -1.5,-13.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1049 + type: Table + components: + - parent: 857 + pos: -2.5,-13.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1050 + type: Protolathe + components: + - parent: 857 + pos: -3.5,-12.5 + type: Transform + - protolatherecipes: + - Brutepack + - Ointment + - LightTube + - LightBulb + - MetalStack + - GlassStack + - Wirecutter + - Screwdriver + - Welder + - Wrench + - Crowbar + - Multitool + type: ProtolatheDatabase +- uid: 1051 + type: Autolathe + components: + - parent: 857 + pos: -5.5,-12.5 + type: Transform + - recipes: + - Brutepack + - Ointment + - LightTube + - LightBulb + - MetalStack + - GlassStack + - Wirecutter + - Screwdriver + - Welder + - Wrench + - Crowbar + - Multitool + type: LatheDatabase +- uid: 1052 + type: ChairOfficeLight + components: + - parent: 857 + pos: -8.5,-18.5 + rot: 1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 1053 + type: ChairOfficeLight + components: + - parent: 857 + pos: -9.5,-17.5 + type: Transform + - anchored: False + type: Collidable +- uid: 1054 + type: Table + components: + - parent: 857 + pos: -8.5,-17.5 + type: Transform +- uid: 1055 + type: VendingMachineCoffee + components: + - parent: 857 + pos: -7.5,-17.5 + type: Transform +- uid: 1056 + type: ChairOfficeLight + components: + - parent: 857 + pos: -5.5,-23.5 + type: Transform + - anchored: False + type: Collidable +- uid: 1057 + type: ChairOfficeLight + components: + - parent: 857 + pos: -0.5,-14.5 + type: Transform + - anchored: False + type: Collidable +- uid: 1058 + type: BaseResearchAndDevelopmentPointSource + components: + - parent: 857 + pos: -5.5,-17.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1059 + type: Table + components: + - parent: 857 + pos: 0.5,-14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1060 + type: Table + components: + - parent: 857 + pos: 0.5,-15.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1061 + type: Table + components: + - parent: 857 + pos: -2.5,-17.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1062 + type: Table + components: + - parent: 857 + pos: -1.5,-17.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1063 + type: Table + components: + - parent: 857 + pos: -0.5,-17.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1064 + type: PoweredSmallLight + components: + - parent: 857 + pos: -6.5,-26 rot: 1.5707963267948966 rad type: Transform - color: '#FFFFFFFF' @@ -29800,12 +21437,34 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2471 +- uid: 1065 + type: ComputerResearchAndDevelopment + components: + - parent: 857 + pos: -5.5,-15.5 + type: Transform +- uid: 1066 + type: LowWall + components: + - parent: 857 + pos: -38.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1067 + type: SignScience + components: + - parent: 857 + pos: -8.494434,-16.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 1068 type: Poweredlight components: - - parent: 15 - pos: -13.5,2 - rot: -1.5707963267948966 rad + - parent: 857 + pos: -13,-25.5 + rot: 3.141592653589793 rad type: Transform - color: '#FFFFFFFF' type: PointLight @@ -29815,11 +21474,104 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2472 +- uid: 1069 + type: Poweredlight + components: + - parent: 857 + pos: -13,-21.5 + rot: 3.141592653589793 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1070 + type: Poweredlight + components: + - parent: 857 + pos: -18,-21.5 + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1071 + type: Poweredlight + components: + - parent: 857 + pos: -18,-25.5 + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1072 + type: ResearchAndDevelopmentServer + components: + - parent: 857 + pos: -8.5,-23.5 + type: Transform + - points: 136000 + type: ResearchServer +- uid: 1073 type: PoweredSmallLight components: - - parent: 15 - pos: -12.5,-5 + - parent: 857 + pos: -7,-23.5 + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1074 + type: Poweredlight + components: + - parent: 857 + pos: -2,-23.5 + rot: 3.141592653589793 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1075 + type: Poweredlight + components: + - parent: 857 + pos: -1.5,-21 + rot: 1.5707963267948966 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1076 + type: Poweredlight + components: + - parent: 857 + pos: -9.5,-17 rot: -1.5707963267948966 rad type: Transform - color: '#FFFFFFFF' @@ -29830,359 +21582,1310 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2473 +- uid: 1077 + type: Poweredlight + components: + - parent: 857 + pos: -9.5,-21 + rot: 1.5707963267948966 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1078 + type: Poweredlight + components: + - parent: 857 + pos: -1.5,-13 + rot: -1.5707963267948966 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1079 + type: Poweredlight + components: + - parent: 857 + pos: -6,-14.5 + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1080 + type: Poweredlight + components: + - parent: 857 + pos: -1.5,-18 + rot: 1.5707963267948966 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1081 + type: ReinforcedWindow + components: + - parent: 857 + pos: -6.5,-29.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1082 + type: ReinforcedWindow + components: + - parent: 857 + pos: -6.5,-30.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1083 + type: ReinforcedWindow + components: + - parent: 857 + pos: -7.5,-30.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1084 + type: ReinforcedWindow + components: + - parent: 857 + pos: -8.5,-30.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1085 + type: ReinforcedWindow + components: + - parent: 857 + pos: -9.5,-30.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1086 + type: ReinforcedWindow + components: + - parent: 857 + pos: -10.5,-30.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1087 + type: ReinforcedWindow + components: + - parent: 857 + pos: -10.5,-29.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1088 + type: LowWall + components: + - parent: 857 + pos: -8.5,-30.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1089 + type: LowWall + components: + - parent: 857 + pos: -6.5,-30.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1090 + type: LowWall + components: + - parent: 857 + pos: -7.5,-30.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1091 + type: LowWall + components: + - parent: 857 + pos: -6.5,-29.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1092 + type: LowWall + components: + - parent: 857 + pos: -9.5,-30.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1093 + type: LowWall + components: + - parent: 857 + pos: -10.5,-30.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1094 + type: LowWall + components: + - parent: 857 + pos: -10.5,-29.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1095 type: Table components: - - parent: 15 - pos: -18.5,-9.5 + - parent: 857 + pos: -4.5,-24.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2474 - type: GravityGenerator +- uid: 1096 + type: Table components: - - parent: 15 - pos: 49.5,-4.5 + - parent: 857 + pos: -4.5,-23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2475 - type: reinforced_wall +- uid: 1097 + type: SpawnPointAssistant components: - - parent: 15 - pos: 46.5,-1.5 + - parent: 857 + pos: -23.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2476 - type: reinforced_wall +- uid: 1098 + type: SpawnPointAssistant components: - - parent: 15 - pos: 46.5,-2.5 + - parent: 857 + pos: -29.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2477 - type: reinforced_wall +- uid: 1099 + type: SpawnPointLatejoin components: - - parent: 15 - pos: 46.5,-3.5 + - parent: 857 + pos: -36.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2478 - type: reinforced_wall +- uid: 1100 + type: SpawnPointChef components: - - parent: 15 - pos: 46.5,-4.5 + - parent: 857 + pos: -12.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2479 - type: reinforced_wall +- uid: 1101 + type: WarpPoint components: - - parent: 15 - pos: 46.5,-5.5 + - parent: 857 + pos: -36.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2480 - type: reinforced_wall + - location: escape + type: WarpPoint +- uid: 1102 + type: WarpPoint components: - - parent: 15 - pos: 46.5,-6.5 + - parent: 857 + pos: -24.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2481 - type: reinforced_wall + - location: dorms + type: WarpPoint +- uid: 1103 + type: Poweredlight components: - - parent: 15 - pos: 46.5,-7.5 + - parent: 857 + pos: 25,-14.5 + rot: 3.141592653589793 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1104 + type: ChairOfficeLight + components: + - parent: 857 + pos: 24.5,-14.5 + rot: 3.141592653589793 rad + type: Transform + - anchored: False + type: Collidable +- uid: 1105 + type: Table + components: + - parent: 857 + pos: 23.5,-15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2482 - type: reinforced_wall +- uid: 1106 + type: Table components: - - parent: 15 - pos: 47.5,-7.5 + - parent: 857 + pos: 23.5,-14.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2483 - type: reinforced_wall +- uid: 1107 + type: Table components: - - parent: 15 - pos: 48.5,-7.5 + - parent: 857 + pos: 23.5,-13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2484 - type: reinforced_wall +- uid: 1108 + type: ComputerMedicalRecords components: - - parent: 15 - pos: 49.5,-7.5 + - parent: 857 + pos: 24.5,-15.5 + rot: 1.5707963267948966 rad + type: Transform +- uid: 1109 + type: Beaker + components: + - parent: 857 + pos: 15.48139,-0.43026757 + rot: 1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 1110 + type: LargeBeaker + components: + - parent: 857 + pos: 14.528265,-0.44589257 + rot: 1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 1111 + type: DisposalTrunk + components: + - parent: 857 + pos: 18.5,-0.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalEntry: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 1112 + type: DisposalUnit + components: + - parent: 857 + pos: 18.5,-0.5 + type: Transform + + - deadThreshold: 100 + type: Destructible + - containers: + DisposalUnit: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 1113 + type: Medkit + components: + - parent: 857 + pos: 6.5068817,-9.984968 + rot: 1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - containers: + storagebase: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 1114 + type: Medkit + components: + - parent: 857 + pos: 6.5225067,-9.141218 + rot: 1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - containers: + storagebase: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 1115 + type: Medkit + components: + - parent: 857 + pos: 6.5693817,-8.359968 + rot: 1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - containers: + storagebase: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 1116 + type: Catwalk + components: + - parent: 857 + pos: -11.5,-22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2485 - type: reinforced_wall +- uid: 1117 + type: Catwalk components: - - parent: 15 - pos: 50.5,-7.5 + - parent: 857 + pos: -11.5,-23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2486 - type: reinforced_wall +- uid: 1118 + type: Catwalk components: - - parent: 15 - pos: 51.5,-7.5 + - parent: 857 + pos: -11.5,-24.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2487 - type: reinforced_wall +- uid: 1119 + type: Catwalk components: - - parent: 15 - pos: 52.5,-7.5 + - parent: 857 + pos: -11.5,-25.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2488 - type: reinforced_wall +- uid: 1120 + type: Catwalk components: - - parent: 15 - pos: 52.5,-6.5 + - parent: 857 + pos: -11.5,-26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2489 - type: reinforced_wall +- uid: 1121 + type: Catwalk components: - - parent: 15 - pos: 52.5,-5.5 + - parent: 857 + pos: -0.5,-26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2490 - type: reinforced_wall +- uid: 1122 + type: Catwalk components: - - parent: 15 - pos: 52.5,-4.5 + - parent: 857 + pos: -0.5,-25.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2491 - type: reinforced_wall +- uid: 1123 + type: Catwalk components: - - parent: 15 - pos: 52.5,-3.5 + - parent: 857 + pos: -0.5,-24.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2492 - type: reinforced_wall +- uid: 1124 + type: Catwalk components: - - parent: 15 - pos: 52.5,-2.5 + - parent: 857 + pos: -0.5,-23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2493 - type: reinforced_wall +- uid: 1125 + type: Catwalk components: - - parent: 15 - pos: 52.5,-1.5 + - parent: 857 + pos: 0.5,-23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2494 - type: reinforced_wall +- uid: 1126 + type: Catwalk components: - - parent: 15 - pos: 51.5,-1.5 + - parent: 857 + pos: -9.5,-26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2495 - type: reinforced_wall +- uid: 1127 + type: Catwalk components: - - parent: 15 - pos: 47.5,-1.5 + - parent: 857 + pos: -8.5,-26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2496 - type: solid_wall +- uid: 1128 + type: Catwalk components: - - parent: 15 - pos: 51.5,4.5 + - parent: 857 + pos: -7.5,-26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2497 - type: solid_wall +- uid: 1129 + type: Medkit components: - - parent: 15 - pos: 49.5,5.5 + - parent: 857 + pos: 6.5537567,-7.609968 + rot: 1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - containers: + storagebase: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 1130 + type: Poweredlight + components: + - parent: 857 + pos: 23.5,-8 + rot: 1.5707963267948966 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1131 + type: Poweredlight + components: + - parent: 857 + pos: 23.5,-4 rot: -1.5707963267948966 rad type: Transform -- uid: 2498 - type: solid_wall + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1132 + type: Poweredlight components: - - parent: 15 - pos: 46.5,0.5 + - parent: 857 + pos: 7,-14.5 + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1133 + type: Poweredlight + components: + - parent: 857 + pos: 20,-11.5 + rot: 3.141592653589793 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1134 + type: Window + components: + - parent: 857 + pos: 17.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2499 - type: solid_wall +- uid: 1135 + type: Window components: - - parent: 15 - pos: 47.5,-0.5 + - parent: 857 + pos: 16.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2500 - type: solid_wall +- uid: 1136 + type: Window components: - - parent: 15 - pos: 47.5,0.5 + - parent: 857 + pos: 15.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2501 - type: solid_wall +- uid: 1137 + type: LowWall components: - - parent: 15 - pos: 50.5,5.5 + - parent: 857 + pos: 17.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2502 - type: solid_wall +- uid: 1138 + type: LowWall components: - - parent: 15 - pos: 51.5,5.5 + - parent: 857 + pos: 16.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2503 - type: reinforced_wall +- uid: 1139 + type: LowWall components: - - parent: 15 - pos: 48.5,-1.5 + - parent: 857 + pos: 15.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2504 - type: reinforced_wall +- uid: 1140 + type: MedicalScanner components: - - parent: 15 - pos: 50.5,-1.5 + - parent: 857 + pos: 16.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2505 - type: Wire + - containers: + MedicalScanner-bodyContainer: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1141 + type: LowWall components: - - parent: 15 - pos: 42.5,4.5 + - parent: 857 + pos: -38.5,-7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2506 - type: Wire +- uid: 1142 + type: Table components: - - parent: 15 - pos: 43.5,4.5 + - parent: 857 + pos: 30.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2507 - type: Wire +- uid: 1143 + type: MedicalScanner components: - - parent: 15 - pos: 44.5,4.5 + - parent: 857 + pos: 16.5,-13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2508 - type: Wire + - containers: + MedicalScanner-bodyContainer: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1144 + type: Beaker components: - - parent: 15 - pos: 45.5,4.5 + - parent: 857 + pos: 15.07514,-0.38339257 + rot: 1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 1145 + type: Table + components: + - parent: 857 + pos: 9.5,-13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2509 - type: Wire +- uid: 1146 + type: Catwalk components: - - parent: 15 - pos: 46.5,4.5 + - parent: 857 + pos: 29.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2510 - type: Wire +- uid: 1147 + type: Table components: - - parent: 15 - pos: 47.5,4.5 + - parent: 857 + pos: 10.5,-13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2511 - type: Wire +- uid: 1148 + type: Catwalk components: - - parent: 15 - pos: 48.5,4.5 + - parent: 857 + pos: 33.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2512 - type: Wire +- uid: 1149 + type: Table components: - - parent: 15 - pos: 49.5,4.5 + - parent: 857 + pos: 6.5,-7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2513 - type: Wire +- uid: 1150 + type: Table components: - - parent: 15 - pos: 49.5,3.5 + - parent: 857 + pos: 6.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2514 - type: Wire +- uid: 1151 + type: Catwalk components: - - parent: 15 - pos: 49.5,2.5 + - parent: 857 + pos: 28.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2515 - type: Wire +- uid: 1152 + type: Table components: - - parent: 15 - pos: 49.5,1.5 + - parent: 857 + pos: 6.5,-9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2516 - type: Wire +- uid: 1153 + type: Table components: - - parent: 15 - pos: 49.5,0.5 + - parent: 857 + pos: 6.5,-10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2517 - type: Wire +- uid: 1154 + type: CrateMedical components: - - parent: 15 - pos: 49.5,-0.5 + - parent: 857 + pos: 24.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2518 - type: Wire + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 1155 + type: Table components: - - parent: 15 - pos: 49.5,-1.5 + - parent: 857 + pos: 23.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2519 - type: Wire +- uid: 1156 + type: Table components: - - parent: 15 + - parent: 857 + pos: 22.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1157 + type: Table + components: + - parent: 857 + pos: 21.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1158 + type: VendingMachineMedical + components: + - parent: 857 + pos: 6.5,-11.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1159 + type: VendingMachineMedical + components: + - parent: 857 + pos: 19.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1160 + type: LockerMedical + components: + - parent: 857 + pos: 22.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 1161 + type: Catwalk + components: + - parent: 857 + pos: 27.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1162 + type: LockerMedical + components: + - parent: 857 + pos: 21.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 1163 + type: WarpPoint + components: + - parent: 857 pos: 49.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2520 - type: APC + - location: grav + type: WarpPoint +- uid: 1164 + type: WarpPoint components: - - parent: 15 - pos: 50.5,-1.5 + - parent: 857 + pos: 9.5,19.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2521 + - location: hop + type: WarpPoint +- uid: 1165 + type: WarpPoint + components: + - parent: 857 + pos: 16.5,0.5 + rot: -1.5707963267948966 rad + type: Transform + - location: chem + type: WarpPoint +- uid: 1166 + type: WarpPoint + components: + - parent: 857 + pos: 7.5,25.5 + rot: -1.5707963267948966 rad + type: Transform + - location: cap + type: WarpPoint +- uid: 1167 + type: WarpPoint + components: + - parent: 857 + pos: 8.5,10.5 + rot: -1.5707963267948966 rad + type: Transform + - location: eva + type: WarpPoint +- uid: 1168 + type: Table + components: + - parent: 857 + pos: 13.5,0.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1169 + type: LockerChemistry + components: + - parent: 857 + pos: 18.5,-1.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 1170 + type: LockerElectricalSupplies + components: + - parent: 857 + pos: 39.5,9.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 1171 + type: Catwalk + components: + - parent: 857 + pos: 47.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1172 + type: Table + components: + - parent: 857 + pos: -12.5,8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1173 + type: Chair + components: + - parent: 857 + pos: 28.5,1.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 1174 + type: Chair + components: + - parent: 857 + pos: 26.5,1.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 1175 + type: LockerHeadOfSecurityFilled + components: + - parent: 857 + pos: -9.5,21.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 1176 + type: Table + components: + - parent: 857 + pos: 15.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1177 + type: Table + components: + - parent: 857 + pos: 15.5,-0.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1178 + type: Table + components: + - parent: 857 + pos: 14.5,-2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1179 + type: chem_master + components: + - parent: 857 + pos: 15.5,1.5 + rot: -1.5707963267948966 rad + type: Transform + - containers: + ChemMaster-reagentContainerContainer: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1180 + type: Table + components: + - parent: 857 + pos: 18.5,0.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1181 + type: Table + components: + - parent: 857 + pos: 18.5,1.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1182 + type: Table + components: + - parent: 857 + pos: 14.5,-0.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1183 + type: chem_dispenser + components: + - parent: 857 + pos: 14.5,1.5 + rot: -1.5707963267948966 rad + type: Transform + - containers: + ReagentDispenser-reagentContainerContainer: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1184 + type: ComputerMedicalRecords + components: + - parent: 857 + pos: 6.5,-5.5 + rot: 1.5707963267948966 rad + type: Transform +- uid: 1185 + type: ChairOfficeLight + components: + - parent: 857 + pos: 6.5,-4.5 + rot: 1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 1186 + type: Table + components: + - parent: 857 + pos: 6.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1187 + type: Table + components: + - parent: 857 + pos: 7.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1188 + type: Table + components: + - parent: 857 + pos: 8.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1189 + type: Table + components: + - parent: 857 + pos: 8.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1190 + type: Table + components: + - parent: 857 + pos: 8.5,-5.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1191 + type: LowWall + components: + - parent: 857 + pos: -38.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1192 + type: LowWall + components: + - parent: 857 + pos: -37.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1193 + type: SpawnPointSecurityOfficer + components: + - parent: 857 + pos: -7.5,12.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1194 + type: SpawnPointStationEngineer + components: + - parent: 857 + pos: 33.5,4.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1195 + type: solid_wall + components: + - parent: 857 + pos: -34.5,11.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1196 + type: solid_wall + components: + - parent: 857 + pos: -38.5,11.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1197 type: Poweredlight components: - - parent: 15 - pos: 47,-4.5 + - parent: 857 + pos: -35,0.5 + rot: 3.141592653589793 rad type: Transform - color: '#FFFFFFFF' type: PointLight + - powerLoad: 40 + type: PowerReceiver - containers: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2522 +- uid: 1198 type: Poweredlight components: - - parent: 15 - pos: 52,-4.5 + - parent: 857 + pos: -34,9.5 + rot: 3.141592653589793 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1199 + type: Poweredlight + components: + - parent: 857 + pos: -22,0.5 + rot: 3.141592653589793 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1200 + type: SignShipDock + components: + - parent: 857 + pos: -33.298416,6.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 1201 + type: Window + components: + - parent: 857 + pos: -18.5,2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1202 + type: Window + components: + - parent: 857 + pos: -19.5,2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1203 + type: LowWall + components: + - parent: 857 + pos: -19.5,2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1204 + type: LowWall + components: + - parent: 857 + pos: -18.5,2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1205 + type: Poweredlight + components: + - parent: 857 + pos: -22,2.5 + rot: 3.141592653589793 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1206 + type: PoweredSmallLight + components: + - parent: 857 + pos: -29.5,15 + rot: 1.5707963267948966 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1207 + type: Table + components: + - parent: 857 + pos: 8.5,28.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1208 + type: Table + components: + - parent: 857 + pos: 7.5,28.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1209 + type: PoweredSmallLight + components: + - parent: 857 + pos: -34,-0.5 + rot: 3.141592653589793 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1210 + type: PoweredSmallLight + components: + - parent: 857 + pos: -18,-4.5 + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1211 + type: Pen + components: + - parent: 857 + pos: 9.652517,18.48974 + rot: 3.141592653589793 rad + type: Transform + - anchored: False + type: Collidable +- uid: 1212 + type: ChairOfficeDark + components: + - parent: 857 + pos: -6.5,20.5 + rot: 3.141592653589793 rad + type: Transform + - anchored: False + type: Collidable +- uid: 1213 + type: Poweredlight + components: + - parent: 857 + pos: -1.5,15 + rot: -1.5707963267948966 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1214 + type: Table + components: + - parent: 857 + pos: 10.5,8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1215 + type: Table + components: + - parent: 857 + pos: -7.5,21.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1216 + type: ChairOfficeDark + components: + - parent: 857 + pos: -11.5,8.5 + rot: 3.141592653589793 rad + type: Transform + - anchored: False + type: Collidable +- uid: 1217 + type: Chair + components: + - parent: 857 + pos: -13.5,8.5 + type: Transform + - anchored: False + type: Collidable +- uid: 1218 + type: Food4NoRaisins + components: + - parent: 857 + pos: -1.7489221,25.142187 + rot: 3.141592653589793 rad + type: Transform + - fillingSteps: 0 + type: Solution + - anchored: False + type: Collidable +- uid: 1219 + type: PoweredSmallLight + components: + - parent: 857 + pos: -29.5,-9 + rot: -1.5707963267948966 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1220 + type: PoweredSmallLight + components: + - parent: 857 + pos: -29.5,-4 + rot: 1.5707963267948966 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1221 + type: Poweredlight + components: + - parent: 857 + pos: -27,1.5 rot: 3.141592653589793 rad type: Transform - color: '#FFFFFFFF' @@ -30191,914 +22894,114 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2523 - type: Catwalk +- uid: 1222 + type: Poweredlight components: - - parent: 15 - pos: 47.5,-2.5 - rot: -1.5707963267948966 rad + - parent: 857 + pos: -31,-0.5 type: Transform -- uid: 2524 - type: Catwalk - components: - - parent: 15 - pos: 48.5,-2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2525 - type: Catwalk - components: - - parent: 15 - pos: 49.5,-2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2526 - type: Catwalk - components: - - parent: 15 - pos: 50.5,-2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2527 - type: Catwalk - components: - - parent: 15 - pos: 51.5,-2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2528 - type: Catwalk - components: - - parent: 15 - pos: 51.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2529 - type: Catwalk - components: - - parent: 15 - pos: 51.5,-4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2530 - type: Catwalk - components: - - parent: 15 - pos: 51.5,-5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2531 - type: Catwalk - components: - - parent: 15 - pos: 51.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2532 - type: Catwalk - components: - - parent: 15 - pos: 50.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2533 - type: Catwalk - components: - - parent: 15 - pos: 49.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2534 - type: Catwalk - components: - - parent: 15 - pos: 48.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2535 - type: Catwalk - components: - - parent: 15 - pos: 47.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2536 - type: Catwalk - components: - - parent: 15 - pos: 47.5,-5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2537 - type: Catwalk - components: - - parent: 15 - pos: 47.5,-4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2538 - type: WardrobePajamaFilled - components: - - parent: 15 - pos: -27.5,-4.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - IsPlaceable: False - type: PlaceableSurface + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 2539 - type: WardrobeGreyFilled - components: - - parent: 15 - pos: -27.5,-2.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - IsPlaceable: False - type: PlaceableSurface - - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 2540 - type: LockerGeneric - components: - - parent: 15 - pos: -11.5,-12.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - IsPlaceable: False - type: PlaceableSurface - - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 2541 - type: LockerL3JanitorFilled - components: - - parent: 15 - pos: -13.5,-17.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - IsPlaceable: False - type: PlaceableSurface - - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 2542 - type: WardrobeScienceFilled - components: - - parent: 15 - pos: -11.5,-17.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - IsPlaceable: False - type: PlaceableSurface - - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 2543 - type: LockerResearchDirectorFilled - components: - - parent: 15 - pos: -2.5,-24.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - IsPlaceable: False - type: PlaceableSurface - - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 2544 - type: LockerEngineerFilled - components: - - parent: 15 - pos: 35.5,-2.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - IsPlaceable: False - type: PlaceableSurface - - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 2545 - type: LockerEngineerFilled - components: - - parent: 15 - pos: 35.5,-1.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - IsPlaceable: False - type: PlaceableSurface - - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 2546 - type: LockerChiefEngineerFilled - components: - - parent: 15 - pos: 37.5,-1.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - IsPlaceable: False - type: PlaceableSurface - - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 2547 - type: LockerAtmosphericsFilled - components: - - parent: 15 - pos: 36.5,8.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - IsPlaceable: False - type: PlaceableSurface - - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 2548 - type: LockerAtmosphericsFilled - components: - - parent: 15 - pos: 36.5,9.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - IsPlaceable: False - type: PlaceableSurface - - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 2549 - type: WardrobeAtmosphericsFilled - components: - - parent: 15 - pos: 36.5,10.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - IsPlaceable: False - type: PlaceableSurface - - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 2550 - type: WardrobeEngineeringFilled - components: - - parent: 15 - pos: 32.5,-4.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - IsPlaceable: False - type: PlaceableSurface - - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 2551 - type: LockerHeadOfPersonnelFilled - components: - - parent: 15 - pos: 10.5,21.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - IsPlaceable: False - type: PlaceableSurface - - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 2552 - type: WardrobeBlackFilled - components: - - parent: 15 - pos: -28.5,-2.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - IsPlaceable: False - type: PlaceableSurface - - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 2553 - type: LockerChiefMedicalOfficerFilled - components: - - parent: 15 - pos: 21.5,-15.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - IsPlaceable: False - type: PlaceableSurface - - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 2554 - type: LockerL3SecurityFilled - components: - - parent: 15 - pos: -11.5,21.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - IsPlaceable: False - type: PlaceableSurface - - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 2555 - type: WardrobeMedicalDoctorFilled - components: - - parent: 15 - pos: 23.5,-7.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - IsPlaceable: False - type: PlaceableSurface - - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 2556 - type: LockerSecurityFilled - components: - - parent: 15 - pos: -14.5,13.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - IsPlaceable: False - type: PlaceableSurface - - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 2557 - type: LockerSecurityFilled - components: - - parent: 15 - pos: -13.5,13.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - IsPlaceable: False - type: PlaceableSurface - - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 2558 - type: LockerSecurityFilled - components: - - parent: 15 - pos: -12.5,13.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - IsPlaceable: False - type: PlaceableSurface - - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 2559 - type: LockerL3VirologyFilled - components: - - parent: 15 - pos: 24.5,-7.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - IsPlaceable: False - type: PlaceableSurface - - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 2560 - type: LockerMedicineFilled - components: - - parent: 15 - pos: 18.5,-2.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - IsPlaceable: False - type: PlaceableSurface - - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 2561 - type: WardrobeWhiteFilled - components: - - parent: 15 - pos: 7.5,-16.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - IsPlaceable: False - type: PlaceableSurface - - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 2562 - type: LockerChefFilled - components: - - parent: 15 - pos: -14.5,1.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - IsPlaceable: False - type: PlaceableSurface - - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 2563 - type: LockerJanitorFilled - components: - - parent: 15 - pos: -19.5,10.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - IsPlaceable: False - type: PlaceableSurface - - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 2564 - type: LockerL3JanitorFilled - components: - - parent: 15 - pos: -19.5,9.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - IsPlaceable: False - type: PlaceableSurface - - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 2565 - type: WardrobePrisonFilled - components: - - parent: 15 - pos: 0.5,14.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - IsPlaceable: False - type: PlaceableSurface - - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 2566 - type: PottedPlantRandom - components: - - parent: 15 - pos: 0.5,26.5 - rot: -1.5707963267948966 rad - type: Transform - - containers: - potted_plant_hide: + light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2567 - type: WardrobeCargoFilled +- uid: 1223 + type: Poweredlight components: - - parent: 15 - pos: 23.5,7.5 - rot: -1.5707963267948966 rad + - parent: 857 + pos: -22,-3.5 + rot: 3.141592653589793 rad type: Transform - - anchored: False - type: Collidable - - IsPlaceable: False - type: PlaceableSurface + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 2568 - type: LockerCaptainFilled - components: - - parent: 15 - pos: 6.5,26.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - IsPlaceable: False - type: PlaceableSurface - - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 2569 - type: LockerEmergencyFilledRandom - components: - - parent: 15 - pos: -34.5,10.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - IsPlaceable: False - type: PlaceableSurface - - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 2570 - type: LockerEmergencyFilledRandom - components: - - parent: 15 - pos: -39.5,2.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - IsPlaceable: False - type: PlaceableSurface - - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 2571 - type: LockerEmergencyFilledRandom - components: - - parent: 15 - pos: -37.5,-7.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - IsPlaceable: False - type: PlaceableSurface - - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 2572 - type: LockerEmergencyFilledRandom - components: - - parent: 15 - pos: -11.5,-10.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - IsPlaceable: False - type: PlaceableSurface - - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 2573 - type: LockerFireFilled - components: - - parent: 15 - pos: -14.5,-17.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - IsPlaceable: False - type: PlaceableSurface - - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 2574 - type: LockerEmergencyFilledRandom - components: - - parent: 15 - pos: 23.5,1.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - IsPlaceable: False - type: PlaceableSurface - - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 2575 - type: LockerEmergencyFilledRandom - components: - - parent: 15 - pos: 26.5,12.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - IsPlaceable: False - type: PlaceableSurface - - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 2576 - type: LockerEmergencyFilledRandom - components: - - parent: 15 - pos: -7.5,-25.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - IsPlaceable: False - type: PlaceableSurface - - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 2577 - type: LockerEmergencyFilledRandom - components: - - parent: 15 - pos: -15.5,-17.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - IsPlaceable: False - type: PlaceableSurface - - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 2578 - type: LockerFireFilled - components: - - parent: 15 - pos: 9.5,-18.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - IsPlaceable: False - type: PlaceableSurface - - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 2579 - type: LockerEmergencyFilledRandom - components: - - parent: 15 - pos: 8.5,-18.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - IsPlaceable: False - type: PlaceableSurface - - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 2580 - type: LockerFireFilled - components: - - parent: 15 - pos: 23.5,0.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - IsPlaceable: False - type: PlaceableSurface - - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 2581 - type: LockerFireFilled - components: - - parent: 15 - pos: 44.5,9.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - IsPlaceable: False - type: PlaceableSurface - - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 2582 - type: LockerEmergencyFilledRandom - components: - - parent: 15 - pos: 43.5,9.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - IsPlaceable: False - type: PlaceableSurface - - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 2583 - type: LockerFireFilled - components: - - parent: 15 - pos: 28.5,12.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - IsPlaceable: False - type: PlaceableSurface - - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 2584 - type: LockerEmergencyFilledRandom - components: - - parent: 15 - pos: 12.5,21.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - IsPlaceable: False - type: PlaceableSurface - - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 2585 - type: LockerFireFilled - components: - - parent: 15 - pos: 13.5,21.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - IsPlaceable: False - type: PlaceableSurface - - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 2586 - type: LockerBombFilled - components: - - parent: 15 - pos: -12.5,21.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - IsPlaceable: False - type: PlaceableSurface - - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 2587 - type: LockerBombFilled - components: - - parent: 15 - pos: -17.5,-17.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - IsPlaceable: False - type: PlaceableSurface - - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 2588 - type: LockerFireFilled - components: - - parent: 15 - pos: -11.5,-11.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - IsPlaceable: False - type: PlaceableSurface - - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 2589 - type: LockerFireFilled - components: - - parent: 15 - pos: -37.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - IsPlaceable: False - type: PlaceableSurface - - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 2590 - type: PottedPlantRandom - components: - - parent: 15 - pos: -39.5,10.5 - rot: -1.5707963267948966 rad - type: Transform - - containers: - potted_plant_hide: + light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2591 - type: PottedPlantRandom +- uid: 1224 + type: Poweredlight components: - - parent: 15 - pos: -25.5,-8.5 - rot: -1.5707963267948966 rad + - parent: 857 + pos: -26,-3.5 type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver - containers: - potted_plant_hide: + light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2592 - type: LockerEmergencyFilledRandom +- uid: 1225 + type: Poweredlight components: - - parent: 15 - pos: -21.5,-8.5 + - parent: 857 + pos: -20.5,3 + rot: 1.5707963267948966 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1226 + type: Poweredlight + components: + - parent: 857 + pos: -30.5,3 + rot: 1.5707963267948966 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1227 + type: Poweredlight + components: + - parent: 857 + pos: -32.5,6 + rot: -1.5707963267948966 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1228 + type: Poweredlight + components: + - parent: 857 + pos: -23,8.5 + rot: 3.141592653589793 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1229 + type: LockerWeldingSupplies + components: + - parent: 857 + pos: 38.5,9.5 rot: -1.5707963267948966 rad type: Transform - anchored: False @@ -31109,22 +23012,26 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2593 - type: PottedPlantRD +- uid: 1230 + type: Welder components: - - parent: 15 - pos: -2.5,-22.5 + - parent: 857 + pos: -29.434454,8.191761 rot: -1.5707963267948966 rad type: Transform - - containers: - potted_plant_hide: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2594 - type: LockerEmergencyFilledRandom + - anchored: False + type: Collidable +- uid: 1231 + type: ComputerPowerMonitoring components: - - parent: 15 - pos: -0.5,14.5 + - parent: 857 + pos: 29.5,-1.5 + type: Transform +- uid: 1232 + type: LockerToolFilled + components: + - parent: 857 + pos: 35.5,-0.5 rot: -1.5707963267948966 rad type: Transform - anchored: False @@ -31135,11 +23042,20 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2595 - type: LockerEmergencyFilledRandom +- uid: 1233 + type: Multitool components: - - parent: 15 - pos: 9.5,30.5 + - parent: 857 + pos: -29.340704,7.4573865 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 1234 + type: LockerToolFilled + components: + - parent: 857 + pos: 35.5,0.5 rot: -1.5707963267948966 rad type: Transform - anchored: False @@ -31150,11 +23066,96 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2596 - type: LockerEmergencyFilledRandom +- uid: 1235 + type: Poweredlight components: - - parent: 15 - pos: -2.5,30.5 + - parent: 857 + pos: -30,9.5 + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1236 + type: PoweredSmallLight + components: + - parent: 857 + pos: -19,9.5 + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1237 + type: Table + components: + - parent: 857 + pos: 10.5,7.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1238 + type: Table + components: + - parent: 857 + pos: 10.5,7.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1239 + type: PoweredSmallLight + components: + - parent: 857 + pos: -14.5,-16 + rot: -1.5707963267948966 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1240 + type: PoweredSmallLight + components: + - parent: 857 + pos: -7,-12.5 + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1241 + type: PoweredSmallLight + components: + - parent: 857 + pos: -11,-10.5 + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1242 + type: LockerToolFilled + components: + - parent: 857 + pos: -27.5,11.5 rot: -1.5707963267948966 rad type: Transform - anchored: False @@ -31165,682 +23166,3136 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2597 - type: PottedPlantRandom +- uid: 1243 + type: Poweredlight components: - - parent: 15 - pos: 7.5,23.5 + - parent: 857 + pos: -27.5,12 rot: -1.5707963267948966 rad type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver - containers: - potted_plant_hide: + light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2598 - type: PottedPlantRandom +- uid: 1244 + type: VendingMachineCola components: - - parent: 15 - pos: 10.5,16.5 + - parent: 857 + pos: -34.5,2.5 rot: -1.5707963267948966 rad type: Transform +- uid: 1245 + type: VendingMachineSnack + components: + - parent: 857 + pos: -22.5,0.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1246 + type: Table + components: + - parent: 857 + pos: 15.5,8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1247 + type: Table + components: + - parent: 857 + pos: 18.5,7.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1248 + type: Poweredlight + components: + - parent: 857 + pos: -5.5,-8 + rot: 1.5707963267948966 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver - containers: - potted_plant_hide: + light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2599 - type: LockerEmergencyFilledRandom +- uid: 1249 + type: Poweredlight components: - - parent: 15 - pos: 24.5,13.5 + - parent: 857 + pos: -3,-6.5 + rot: 3.141592653589793 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1250 + type: Table + components: + - parent: 857 + pos: -29.5,9.5 rot: -1.5707963267948966 rad type: Transform +- uid: 1251 + type: Table + components: + - parent: 857 + pos: -29.5,8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1252 + type: LowWall + components: + - parent: 857 + pos: -36.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1253 + type: LowWall + components: + - parent: 857 + pos: -35.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1254 + type: LowWall + components: + - parent: 857 + pos: -8.5,2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1255 + type: LowWall + components: + - parent: 857 + pos: -7.5,2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1256 + type: LowWall + components: + - parent: 857 + pos: -6.5,2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1257 + type: solid_wall + components: + - parent: 857 + pos: -33.5,9.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1258 + type: LowWall + components: + - parent: 857 + pos: -5.5,2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1259 + type: Chair + components: + - parent: 857 + pos: -8.5,20.5 + type: Transform - anchored: False type: Collidable - - IsPlaceable: False - type: PlaceableSurface - - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 2600 - type: LockerEmergencyFilledRandom +- uid: 1260 + type: solid_wall components: - - parent: 15 - pos: -23.5,11.5 + - parent: 857 + pos: -33.5,2.5 rot: -1.5707963267948966 rad type: Transform +- uid: 1261 + type: PoweredSmallLight + components: + - parent: 857 + pos: -19,16.5 + rot: 3.141592653589793 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1262 + type: PoweredSmallLight + components: + - parent: 857 + pos: -14.5,26 + rot: 1.5707963267948966 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1263 + type: PoweredSmallLight + components: + - parent: 857 + pos: -19,22.5 + rot: 3.141592653589793 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1264 + type: PoweredSmallLight + components: + - parent: 857 + pos: -18,9.5 + rot: 3.141592653589793 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1265 + type: PoweredSmallLight + components: + - parent: 857 + pos: -0.5,-12 + rot: -1.5707963267948966 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1266 + type: Paper + components: + - parent: 857 + pos: 8.598616,26.075901 + type: Transform - anchored: False type: Collidable - - IsPlaceable: False - type: PlaceableSurface - - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 2601 - type: PottedPlantRandom +- uid: 1267 + type: Poweredlight components: - - parent: 15 - pos: -24.5,11.5 + - parent: 857 + pos: -11,8.5 + rot: 3.141592653589793 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1268 + type: Poweredlight + components: + - parent: 857 + pos: -18.5,6 + rot: -1.5707963267948966 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1269 + type: Poweredlight + components: + - parent: 857 + pos: -11.5,6 + rot: -1.5707963267948966 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1270 + type: Poweredlight + components: + - parent: 857 + pos: -1.5,6 + rot: -1.5707963267948966 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1271 + type: solid_wall + components: + - parent: 857 + pos: -33.5,1.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1272 + type: VendingMachineEngivend + components: + - parent: 857 + pos: 31.5,-0.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1273 + type: Table + components: + - parent: 857 + pos: 25.5,0.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1274 + type: Table + components: + - parent: 857 + pos: 29.5,0.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1275 + type: Poweredlight + components: + - parent: 857 + pos: 6.0308504,2 + type: Transform + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1276 + type: Poweredlight + components: + - parent: 857 + pos: -0.5,-5 + rot: 1.5707963267948966 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1277 + type: Poweredlight + components: + - parent: 857 + pos: 2,-9.5 + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1278 + type: Poweredlight + components: + - parent: 857 + pos: 2,-4.5 + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1279 + type: SignDirectionalSci + components: + - parent: 857 + pos: 1.3437586,6.2515917 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 1280 + type: Poweredlight + components: + - parent: 857 + pos: 2,7.5 + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1281 + type: Poweredlight + components: + - parent: 857 + pos: 2,12.5 + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1282 + type: Poweredlight + components: + - parent: 857 + pos: -1.5,10 + rot: 1.5707963267948966 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1283 + type: PoweredSmallLight + components: + - parent: 857 + pos: -1,8.5 + rot: 3.141592653589793 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1284 + type: PoweredSmallLight + components: + - parent: 857 + pos: -4,8.5 + rot: 3.141592653589793 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1285 + type: Poweredlight + components: + - parent: 857 + pos: -5,7.5 + rot: 3.141592653589793 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1286 + type: Poweredlight + components: + - parent: 857 + pos: -10,7.5 + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1287 + type: Poweredlight + components: + - parent: 857 + pos: -1.5,19 rot: -1.5707963267948966 rad type: Transform - containers: - potted_plant_hide: + light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2602 - type: LockerEmergencyFilledRandom +- uid: 1288 + type: Poweredlight components: - - parent: 15 - pos: 5.5,-21.5 + - parent: 857 + pos: -5,16.5 + rot: 3.141592653589793 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1289 + type: Poweredlight + components: + - parent: 857 + pos: -6.0158176,18 rot: -1.5707963267948966 rad type: Transform + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1290 + type: Poweredlight + components: + - parent: 857 + pos: -15,20.5 + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1291 + type: Poweredlight + components: + - parent: 857 + pos: -7.5,22 + rot: -1.5707963267948966 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1292 + type: solid_wall + components: + - parent: 857 + pos: -34.5,1.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1293 + type: reinforced_wall + components: + - parent: 857 + pos: -10.5,22.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1294 + type: reinforced_wall + components: + - parent: 857 + pos: -10.5,21.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1295 + type: PoweredSmallLight + components: + - parent: 857 + pos: -7.5,26 + rot: 1.5707963267948966 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1296 + type: AirlockMaintCommonLocked + components: + - parent: 857 + pos: 1.5,-23.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1297 + type: PoweredSmallLight + components: + - parent: 857 + pos: -4,17.5 + rot: 3.141592653589793 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1298 + type: Poweredlight + components: + - parent: 857 + pos: -3,25.5 + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1299 + type: Poweredlight + components: + - parent: 857 + pos: 10,30.5 + rot: 3.141592653589793 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1300 + type: Poweredlight + components: + - parent: 857 + pos: -3,30.5 + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1301 + type: Poweredlight + components: + - parent: 857 + pos: 5.5,28 + rot: 1.5707963267948966 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1302 + type: Poweredlight + components: + - parent: 857 + pos: 1.5,28 + rot: 1.5707963267948966 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1303 + type: Poweredlight + components: + - parent: 857 + pos: 10,25.5 + rot: 3.141592653589793 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1304 + type: Poweredlight + components: + - parent: 857 + pos: 5,23.5 + rot: 3.141592653589793 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1305 + type: Poweredlight + components: + - parent: 857 + pos: 2,23.5 + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1306 + type: Poweredlight + components: + - parent: 857 + pos: 5.5,16 + rot: 1.5707963267948966 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1307 + type: Poweredlight + components: + - parent: 857 + pos: 1.5,16 + rot: 1.5707963267948966 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1308 + type: Poweredlight + components: + - parent: 857 + pos: 8.5,16 + rot: 1.5707963267948966 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1309 + type: solid_wall + components: + - parent: 857 + pos: -34.5,0.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1310 + type: solid_wall + components: + - parent: 857 + pos: -34.5,-0.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1311 + type: Poweredlight + components: + - parent: 857 + pos: 8.5,22 + rot: -1.5707963267948966 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1312 + type: solid_wall + components: + - parent: 857 + pos: -34.5,-1.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1313 + type: solid_wall + components: + - parent: 857 + pos: -34.5,-2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1314 + type: solid_wall + components: + - parent: 857 + pos: 8.5,15.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1315 + type: solid_wall + components: + - parent: 857 + pos: 7.5,15.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1316 + type: PoweredSmallLight + components: + - parent: 857 + pos: 17,15.5 + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1317 + type: PoweredSmallLight + components: + - parent: 857 + pos: 14,16.5 + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1318 + type: PoweredSmallLight + components: + - parent: 857 + pos: 8.5,15 + rot: 1.5707963267948966 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1319 + type: Poweredlight + components: + - parent: 857 + pos: 6,9.5 + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1320 + type: Poweredlight + components: + - parent: 857 + pos: 11,9.5 + rot: 3.141592653589793 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1321 + type: Poweredlight + components: + - parent: 857 + pos: 13.5,3 + rot: 1.5707963267948966 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1322 + type: Poweredlight + components: + - parent: 857 + pos: 18.5,3 + rot: 1.5707963267948966 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1323 + type: Poweredlight + components: + - parent: 857 + pos: 23.5,3 + rot: 1.5707963267948966 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1324 + type: Poweredlight + components: + - parent: 857 + pos: 17,7.5 + rot: 3.141592653589793 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1325 + type: Poweredlight + components: + - parent: 857 + pos: 12,10.5 + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1326 + type: Poweredlight + components: + - parent: 857 + pos: 15.5,13 + rot: -1.5707963267948966 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1327 + type: Poweredlight + components: + - parent: 857 + pos: 18,8.5 + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1328 + type: Poweredlight + components: + - parent: 857 + pos: 18,13.5 + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1329 + type: solid_wall + components: + - parent: 857 + pos: -34.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1330 + type: solid_wall + components: + - parent: 857 + pos: -34.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1331 + type: Poweredlight + components: + - parent: 857 + pos: 5.5,-22 + rot: 1.5707963267948966 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1332 + type: Poweredlight + components: + - parent: 857 + pos: 1.5,-22 + rot: 1.5707963267948966 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1333 + type: Poweredlight + components: + - parent: 857 + pos: 6,-17.5 + rot: 3.141592653589793 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1334 + type: Poweredlight + components: + - parent: 857 + pos: 1,-17.5 + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1335 + type: SignCargo + components: + - parent: 857 + pos: 16.688538,8.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 1336 + type: Poweredlight + components: + - parent: 857 + pos: 13,-3.5 + rot: 3.141592653589793 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1337 + type: solid_wall + components: + - parent: 857 + pos: -34.5,-5.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1338 + type: Poweredlight + components: + - parent: 857 + pos: 12.5,2 + rot: -1.5707963267948966 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1339 + type: SignDirectionalMed + components: + - parent: 857 + pos: 5.768486,-12.5 + rot: 1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 1340 + type: solid_wall + components: + - parent: 857 + pos: -31.5,-2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1341 + type: Poweredlight + components: + - parent: 857 + pos: 6,-4.5 + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1342 + type: Poweredlight + components: + - parent: 857 + pos: 6.5,-12 + rot: 1.5707963267948966 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1343 + type: Poweredlight + components: + - parent: 857 + pos: 9.5,-17 + rot: 1.5707963267948966 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1344 + type: Poweredlight + components: + - parent: 857 + pos: 12,-12.5 + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1345 + type: solid_wall + components: + - parent: 857 + pos: 51.5,-0.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1346 + type: solid_wall + components: + - parent: 857 + pos: 47.5,5.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1347 + type: ChairOfficeLight + components: + - parent: 857 + pos: 10.5,-16.5 + rot: 3.141592653589793 rad + type: Transform - anchored: False type: Collidable - - IsPlaceable: False - type: PlaceableSurface - - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 2603 - type: PottedPlantRandom +- uid: 1348 + type: ChairOfficeLight components: - - parent: 15 - pos: 1.5,-21.5 - rot: -1.5707963267948966 rad - type: Transform - - containers: - potted_plant_hide: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2604 - type: LockerBoozeFilled - components: - - parent: 15 - pos: -3.5,-7.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - IsPlaceable: False - type: PlaceableSurface - - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 2605 - type: VendingMachineBooze - components: - - parent: 15 - pos: -4.5,-7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2606 - type: LockerEmergencyFilledRandom - components: - - parent: 15 - pos: -9.5,23.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - IsPlaceable: False - type: PlaceableSurface - - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 2607 - type: PottedPlantRandom - components: - - parent: 15 - pos: 5.5,21.5 - rot: -1.5707963267948966 rad - type: Transform - - containers: - potted_plant_hide: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2608 - type: PottedPlantRandom - components: - - parent: 15 - pos: 12.5,1.5 - rot: -1.5707963267948966 rad - type: Transform - - containers: - potted_plant_hide: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2609 - type: PottedPlantRandomPlastic - components: - - parent: 15 - pos: 29.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform - - containers: - potted_plant_hide: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2610 - type: PottedPlantRandom - components: - - parent: 15 - pos: 21.5,-12.5 - rot: -1.5707963267948966 rad - type: Transform - - containers: - potted_plant_hide: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2611 - type: PottedPlantRandomPlastic - components: - - parent: 15 - pos: -12.5,7.5 - rot: -1.5707963267948966 rad - type: Transform - - containers: - potted_plant_hide: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2612 - type: SpawnPointCargoTechnician - components: - - parent: 15 - pos: 14.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2613 - type: SpawnPointCargoTechnician - components: - - parent: 15 - pos: 21.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2614 - type: SpawnPointChiefMedicalOfficer - components: - - parent: 15 - pos: 24.5,-14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2615 - type: SpawnPointMedicalDoctor - components: - - parent: 15 - pos: 6.5,-4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2616 - type: SpawnPointMedicalDoctor - components: - - parent: 15 + - parent: 857 pos: 14.5,0.5 + rot: 3.141592653589793 rad + type: Transform + - anchored: False + type: Collidable +- uid: 1349 + type: Poweredlight + components: + - parent: 857 + pos: 15.5,2 rot: -1.5707963267948966 rad type: Transform -- uid: 2617 - type: SpawnPointMedicalDoctor + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1350 + type: Poweredlight components: - - parent: 15 - pos: 22.5,-6.5 + - parent: 857 + pos: 19,-0.5 + rot: 3.141592653589793 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1351 + type: Poweredlight + components: + - parent: 857 + pos: 20,-8.5 + rot: 3.141592653589793 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1352 + type: Poweredlight + components: + - parent: 857 + pos: 13.5,-7 rot: -1.5707963267948966 rad type: Transform -- uid: 2618 - type: SpawnPointMedicalDoctor + - color: '#FFFFFFFF' + type: PointLight + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1353 + type: Poweredlight components: - - parent: 15 - pos: 16.5,-9.5 + - parent: 857 + pos: 25,11.5 + rot: 3.141592653589793 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1354 + type: solid_wall + components: + - parent: 857 + pos: -31.5,-1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2619 - type: SpawnPointMedicalDoctor +- uid: 1355 + type: PoweredSmallLight components: - - parent: 15 - pos: 11.5,-9.5 + - parent: 857 + pos: 30.5,-6 + rot: 1.5707963267948966 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1356 + type: PoweredSmallLight + components: + - parent: 857 + pos: 25.5,-1 + rot: 1.5707963267948966 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1357 + type: PoweredSmallLight + components: + - parent: 857 + pos: 9.5,-18 + rot: 1.5707963267948966 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1358 + type: solid_wall + components: + - parent: 857 + pos: -31.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2620 - type: SpawnPointMedicalDoctor +- uid: 1359 + type: solid_wall components: - - parent: 15 - pos: 15.5,-15.5 + - parent: 857 + pos: -31.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2621 - type: SpawnPointResearchDirector +- uid: 1360 + type: ApcExtensionCable components: - - parent: 15 - pos: -5.5,-23.5 + - parent: 857 + pos: -32.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2622 - type: SpawnPointScientist + - deadThreshold: 100 + type: Destructible +- uid: 1361 + type: solid_wall components: - - parent: 15 - pos: -9.5,-17.5 + - parent: 857 + pos: -31.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2623 - type: SpawnPointScientist +- uid: 1362 + type: PoweredSmallLight components: - - parent: 15 - pos: -8.5,-18.5 + - parent: 857 + pos: 12.5,-19 + rot: 1.5707963267948966 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1363 + type: solid_wall + components: + - parent: 857 + pos: 45.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2624 - type: SpawnPointScientist +- uid: 1364 + type: solid_wall components: - - parent: 15 - pos: -0.5,-14.5 + - parent: 857 + pos: 45.5,7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2625 - type: SpawnPointScientist +- uid: 1365 + type: PoweredSmallLight components: - - parent: 15 - pos: -4.5,-15.5 + - parent: 857 + pos: 25.5,-19 rot: -1.5707963267948966 rad type: Transform -- uid: 2626 - type: SpawnPointScientist + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1366 + type: PoweredSmallLight components: - - parent: 15 - pos: -15.5,-19.5 + - parent: 857 + pos: 28,-15.5 + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1367 + type: Catwalk + components: + - parent: 857 + pos: 7.5,-19.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2627 - type: SpawnPointBartender +- uid: 1368 + type: Catwalk components: - - parent: 15 - pos: -5.5,-5.5 + - parent: 857 + pos: 14.5,-19.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2628 - type: SpawnPointClown +- uid: 1369 + type: Catwalk components: - - parent: 15 - pos: -18.5,-8.5 + - parent: 857 + pos: 21.5,-10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2629 - type: SpawnPointJanitor +- uid: 1370 + type: Catwalk components: - - parent: 15 - pos: -20.5,9.5 + - parent: 857 + pos: 26.5,-10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2630 - type: SpawnPointHeadOfSecurity +- uid: 1371 + type: solid_wall components: - - parent: 15 - pos: -6.5,20.5 + - parent: 857 + pos: -30.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2631 - type: SpawnPointCaptain +- uid: 1372 + type: PoweredSmallLight components: - - parent: 15 - pos: 9.5,25.5 + - parent: 857 + pos: 28,-10.5 + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1373 + type: Window + components: + - parent: 857 + pos: -25.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2632 - type: SpawnPointHeadOfPersonnel +- uid: 1374 + type: PoweredSmallLight components: - - parent: 15 - pos: 7.5,20.5 + - parent: 857 + pos: 24,0.5 + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1375 + type: PoweredSmallLight + components: + - parent: 857 + pos: 26,-4.5 + rot: 3.141592653589793 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1376 + type: PoweredSmallLight + components: + - parent: 857 + pos: 35.5,-6 + rot: 1.5707963267948966 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1377 + type: PoweredSmallLight + components: + - parent: 857 + pos: 38.5,-3 + rot: 1.5707963267948966 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1378 + type: PoweredSmallLight + components: + - parent: 857 + pos: 26,11.5 + rot: 3.141592653589793 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1379 + type: Poweredlight + components: + - parent: 857 + pos: -35,-4.5 + rot: 3.141592653589793 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1380 + type: Poweredlight + components: + - parent: 857 + pos: 25,1.5 + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1381 + type: Poweredlight + components: + - parent: 857 + pos: 30,1.5 + rot: 3.141592653589793 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1382 + type: SignEngineering + components: + - parent: 857 + pos: 26.30795,7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2633 - type: SpawnPointChiefEngineer + - deadThreshold: 100 + type: Destructible +- uid: 1383 + type: Poweredlight components: - - parent: 15 - pos: 40.5,-0.5 + - parent: 857 + pos: 31,0.5 + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1384 + type: Poweredlight + components: + - parent: 857 + pos: 31.5,2 + rot: 1.5707963267948966 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1385 + type: Poweredlight + components: + - parent: 857 + pos: 35.5,7 rot: -1.5707963267948966 rad type: Transform -- uid: 2634 - type: SpawnPointStationEngineer + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1386 + type: Poweredlight components: - - parent: 15 + - parent: 857 + pos: 29,-2.5 + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1387 + type: Poweredlight + components: + - parent: 857 + pos: 36,-2.5 + rot: 3.141592653589793 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1388 + type: solid_wall + components: + - parent: 857 + pos: -27.5,2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1389 + type: solid_wall + components: + - parent: 857 + pos: -26.5,2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1390 + type: Poweredlight + components: + - parent: 857 + pos: 30,12.5 + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1391 + type: Poweredlight + components: + - parent: 857 + pos: 37,12.5 + rot: 3.141592653589793 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1392 + type: Poweredlight + components: + - parent: 857 + pos: 36.5,8 + rot: 1.5707963267948966 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1393 + type: PoweredSmallLight + components: + - parent: 857 + pos: 44,-1.5 + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1394 + type: PaintingMonkey + components: + - parent: 857 + pos: -7.6996727,-5.5 + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 1395 + type: reinforced_wall + components: + - parent: 857 + pos: 12.5,25.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1396 + type: Poweredlight + components: + - parent: 857 + pos: 30.5,8 + rot: 1.5707963267948966 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1397 + type: Poweredlight + components: + - parent: 857 + pos: 38.5,-2 + rot: 1.5707963267948966 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1398 + type: Poweredlight + components: + - parent: 857 + pos: 37,2.5 + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1399 + type: SignDirectionalEng + components: + - parent: 857 + pos: 18.507353,6.5 + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 1400 + type: WaterTankFull + components: + - parent: 857 + pos: 35.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 1401 + type: WaterTankFull + components: + - parent: 857 + pos: -19.5,7.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 1402 + type: ReinforcedWindow + components: + - parent: 857 + pos: 51.5,2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1403 + type: solid_wall + components: + - parent: 857 + pos: -26.5,1.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1404 + type: solid_wall + components: + - parent: 857 + pos: -26.5,0.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1405 + type: ReinforcedWindow + components: + - parent: 857 + pos: 51.5,1.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1406 + type: Window + components: + - parent: 857 + pos: 11.5,-21.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1407 + type: Window + components: + - parent: 857 + pos: 10.5,-21.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1408 + type: Window + components: + - parent: 857 + pos: 9.5,-21.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1409 + type: ReinforcedWindow + components: + - parent: 857 + pos: 5.5,-23.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1410 + type: ReinforcedWindow + components: + - parent: 857 + pos: 5.5,-24.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1411 + type: ReinforcedWindow + components: + - parent: 857 + pos: 4.5,-24.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1412 + type: ReinforcedWindow + components: + - parent: 857 + pos: 3.5,-24.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1413 + type: ReinforcedWindow + components: + - parent: 857 + pos: 2.5,-24.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1414 + type: Window + components: + - parent: 857 + pos: -1.5,27.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1415 + type: Window + components: + - parent: 857 + pos: -0.5,27.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1416 + type: ReinforcedWindow + components: + - parent: 857 + pos: 3.5,22.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1417 + type: ReinforcedWindow + components: + - parent: 857 + pos: 10.5,29.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1418 + type: ReinforcedWindow + components: + - parent: 857 + pos: 9.5,32.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1419 + type: ReinforcedWindow + components: + - parent: 857 + pos: 9.5,31.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1420 + type: ReinforcedWindow + components: + - parent: 857 + pos: 8.5,32.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1421 + type: ReinforcedWindow + components: + - parent: 857 + pos: 8.5,33.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1422 + type: ReinforcedWindow + components: + - parent: 857 + pos: 7.5,33.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1423 + type: ReinforcedWindow + components: + - parent: 857 + pos: 6.5,33.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1424 + type: ReinforcedWindow + components: + - parent: 857 + pos: 5.5,33.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1425 + type: ReinforcedWindow + components: + - parent: 857 + pos: 4.5,33.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1426 + type: ReinforcedWindow + components: + - parent: 857 + pos: 3.5,33.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1427 + type: ReinforcedWindow + components: + - parent: 857 + pos: 2.5,33.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1428 + type: ReinforcedWindow + components: + - parent: 857 + pos: 1.5,33.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1429 + type: ReinforcedWindow + components: + - parent: 857 + pos: 0.5,33.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1430 + type: ReinforcedWindow + components: + - parent: 857 + pos: -0.5,33.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1431 + type: ReinforcedWindow + components: + - parent: 857 + pos: -1.5,33.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1432 + type: ReinforcedWindow + components: + - parent: 857 + pos: -1.5,32.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1433 + type: ReinforcedWindow + components: + - parent: 857 + pos: -3.5,29.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1434 + type: ReinforcedWindow + components: + - parent: 857 + pos: -2.5,32.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1435 + type: ReinforcedWindow + components: + - parent: 857 + pos: -2.5,31.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1436 + type: Window + components: + - parent: 857 + pos: -7.5,18.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1437 + type: Window + components: + - parent: 857 + pos: -10.5,14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1438 + type: ReinforcedWindow + components: + - parent: 857 + pos: -7.5,9.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1439 + type: ReinforcedWindow + components: + - parent: 857 + pos: -8.5,9.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1440 + type: ReinforcedWindow + components: + - parent: 857 + pos: -3.5,9.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1441 + type: ReinforcedWindow + components: + - parent: 857 + pos: -0.5,9.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1442 + type: ReinforcedWindow + components: + - parent: 857 + pos: 0.5,6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1443 + type: ReinforcedWindow + components: + - parent: 857 + pos: -0.5,6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1444 + type: ReinforcedWindow + components: + - parent: 857 + pos: -2.5,6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1445 + type: ReinforcedWindow + components: + - parent: 857 + pos: -3.5,6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1446 + type: solid_wall + components: + - parent: 857 + pos: -28.5,2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1447 + type: solid_wall + components: + - parent: 857 + pos: -29.5,2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1448 + type: ReinforcedWindow + components: + - parent: 857 + pos: -35.5,11.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1449 + type: ReinforcedWindow + components: + - parent: 857 + pos: -36.5,11.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1450 + type: ReinforcedWindow + components: + - parent: 857 + pos: -37.5,11.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1451 + type: solid_wall + components: + - parent: 857 + pos: -39.5,11.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1452 + type: solid_wall + components: + - parent: 857 + pos: -25.5,1.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1453 + type: ReinforcedWindow + components: + - parent: 857 + pos: -40.5,10.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1454 + type: ReinforcedWindow + components: + - parent: 857 + pos: -41.5,9.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1455 + type: ReinforcedWindow + components: + - parent: 857 + pos: -40.5,9.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1456 + type: ReinforcedWindow + components: + - parent: 857 + pos: -39.5,9.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1457 + type: ReinforcedWindow + components: + - parent: 857 + pos: -39.5,7.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1458 + type: ReinforcedWindow + components: + - parent: 857 + pos: -41.5,7.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1459 + type: ReinforcedWindow + components: + - parent: 857 + pos: -40.5,7.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1460 + type: ReinforcedWindow + components: + - parent: 857 + pos: -40.5,6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1461 + type: ReinforcedWindow + components: + - parent: 857 + pos: -41.5,5.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1462 + type: ReinforcedWindow + components: + - parent: 857 + pos: -40.5,5.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1463 + type: ReinforcedWindow + components: + - parent: 857 + pos: -39.5,5.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1464 + type: ReinforcedWindow + components: + - parent: 857 + pos: -39.5,3.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1465 + type: ReinforcedWindow + components: + - parent: 857 + pos: -41.5,3.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1466 + type: ReinforcedWindow + components: + - parent: 857 + pos: -40.5,3.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1467 + type: ReinforcedWindow + components: + - parent: 857 + pos: -40.5,2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1468 + type: ReinforcedWindow + components: + - parent: 857 + pos: -40.5,1.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1469 + type: ReinforcedWindow + components: + - parent: 857 + pos: -39.5,1.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1470 + type: ReinforcedWindow + components: + - parent: 857 + pos: -38.5,0.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1471 + type: ReinforcedWindow + components: + - parent: 857 + pos: -38.5,-0.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1472 + type: ReinforcedWindow + components: + - parent: 857 + pos: -38.5,-1.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1473 + type: solid_wall + components: + - parent: 857 + pos: -38.5,1.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1474 + type: ReinforcedWindow + components: + - parent: 857 + pos: -39.5,-2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1475 + type: ReinforcedWindow + components: + - parent: 857 + pos: -38.5,-2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1476 + type: ReinforcedWindow + components: + - parent: 857 + pos: -39.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1477 + type: ReinforcedWindow + components: + - parent: 857 + pos: -37.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1478 + type: ReinforcedWindow + components: + - parent: 857 + pos: -38.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1479 + type: ReinforcedWindow + components: + - parent: 857 + pos: -38.5,-5.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1480 + type: ReinforcedWindow + components: + - parent: 857 + pos: -38.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1481 + type: ReinforcedWindow + components: + - parent: 857 + pos: -38.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1482 + type: ReinforcedWindow + components: + - parent: 857 + pos: -38.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1483 + type: ReinforcedWindow + components: + - parent: 857 + pos: -37.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1484 + type: ReinforcedWindow + components: + - parent: 857 + pos: -36.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1485 + type: ReinforcedWindow + components: + - parent: 857 + pos: -35.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1486 + type: LowWall + components: + - parent: 857 + pos: -27.5,6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1487 + type: solid_wall + components: + - parent: 857 + pos: 25.5,-6.5 + rot: 1.5707963267948966 rad + type: Transform +- uid: 1488 + type: LowWall + components: + - parent: 857 + pos: -29.5,6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1489 + type: Window + components: + - parent: 857 + pos: -29.5,6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1490 + type: Window + components: + - parent: 857 + pos: -28.5,6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1491 + type: Window + components: + - parent: 857 + pos: -27.5,6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1492 + type: Window + components: + - parent: 857 + pos: -6.5,2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1493 + type: Window + components: + - parent: 857 + pos: -5.5,2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1494 + type: Window + components: + - parent: 857 + pos: -2.5,-21.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1495 + type: Window + components: + - parent: 857 + pos: -4.5,-21.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1496 + type: Window + components: + - parent: 857 + pos: -5.5,-21.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1497 + type: Window + components: + - parent: 857 + pos: -4.5,-18.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1498 + type: Window + components: + - parent: 857 + pos: -2.5,-18.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1499 + type: Window + components: + - parent: 857 + pos: 0.5,-16.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1500 + type: Window + components: + - parent: 857 + pos: 5.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1501 + type: Window + components: + - parent: 857 + pos: 5.5,-9.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1502 + type: Window + components: + - parent: 857 + pos: 5.5,-10.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1503 + type: Window + components: + - parent: 857 + pos: 7.5,-12.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1504 + type: Window + components: + - parent: 857 + pos: 10.5,-12.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1505 + type: Window + components: + - parent: 857 + pos: 11.5,-13.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1506 + type: Window + components: + - parent: 857 + pos: 11.5,-16.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1507 + type: LowWall + components: + - parent: 857 + pos: 11.5,-16.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1508 + type: LowWall + components: + - parent: 857 + pos: 11.5,-13.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1509 + type: LowWall + components: + - parent: 857 + pos: 7.5,-12.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1510 + type: LowWall + components: + - parent: 857 + pos: 10.5,-12.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1511 + type: Window + components: + - parent: 857 + pos: 20.5,-15.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1512 + type: LowWall + components: + - parent: 857 + pos: 20.5,-12.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1513 + type: LowWall + components: + - parent: 857 + pos: 20.5,-15.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1514 + type: Table + components: + - parent: 857 + pos: 6.5,7.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1515 + type: Window + components: + - parent: 857 + pos: 18.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1516 + type: Window + components: + - parent: 857 + pos: 16.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1517 + type: Window + components: + - parent: 857 + pos: 13.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1518 + type: Window + components: + - parent: 857 + pos: 13.5,-5.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1519 + type: Window + components: + - parent: 857 + pos: 12.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1520 + type: Window + components: + - parent: 857 + pos: 6.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1521 + type: Window + components: + - parent: 857 + pos: 9.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1522 + type: Window + components: + - parent: 857 + pos: 8.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1523 + type: Window + components: + - parent: 857 + pos: 7.5,2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1524 + type: Window + components: + - parent: 857 + pos: 8.5,2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1525 + type: Window + components: + - parent: 857 + pos: 9.5,2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1526 + type: Window + components: + - parent: 857 + pos: 10.5,2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1527 + type: Window + components: + - parent: 857 + pos: 11.5,2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1528 + type: Window + components: + - parent: 857 + pos: 13.5,1.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1529 + type: Window + components: + - parent: 857 + pos: 13.5,-1.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1530 + type: Window + components: + - parent: 857 + pos: 13.5,-0.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1531 + type: Window + components: + - parent: 857 + pos: 22.5,6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1532 + type: Window + components: + - parent: 857 + pos: 21.5,6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1533 + type: Window + components: + - parent: 857 + pos: 20.5,6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1534 + type: Window + components: + - parent: 857 + pos: 19.5,6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1535 + type: Window + components: + - parent: 857 + pos: 14.5,8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1536 + type: ReinforcedWindow + components: + - parent: 857 + pos: 8.5,6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1537 + type: ReinforcedWindow + components: + - parent: 857 + pos: 6.5,19.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1538 + type: ReinforcedWindow + components: + - parent: 857 + pos: 6.5,18.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1539 + type: ReinforcedWindow + components: + - parent: 857 + pos: 14.5,20.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1540 + type: ReinforcedWindow + components: + - parent: 857 + pos: 14.5,19.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1541 + type: ReinforcedWindow + components: + - parent: 857 + pos: 14.5,18.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1542 + type: LowWall + components: + - parent: 857 + pos: 14.5,20.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1543 + type: LowWall + components: + - parent: 857 + pos: 14.5,19.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1544 + type: LowWall + components: + - parent: 857 + pos: 14.5,18.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1545 + type: Chair + components: + - parent: 857 + pos: -3.5,-23.5 + rot: 3.141592653589793 rad + type: Transform + - anchored: False + type: Collidable +- uid: 1546 + type: Chair + components: + - parent: 857 + pos: 38.5,-0.5 + type: Transform + - anchored: False + type: Collidable +- uid: 1547 + type: Table + components: + - parent: 857 + pos: 39.5,-1.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1548 + type: VendingMachineYouTool + components: + - parent: 857 + pos: 31.5,0.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1549 + type: ReinforcedWindow + components: + - parent: 857 + pos: 21.5,16.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1550 + type: SignArmory + components: + - parent: 857 + pos: -13.678196,17.5 + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 1551 + type: SignConference + components: + - parent: 857 + pos: -2.6767635,22.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 1552 + type: SignDirectionalBridge + components: + - parent: 857 + pos: 1.3437586,6.5 + rot: 1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 1553 + type: WeldingFuelTank + components: + - parent: 857 + pos: 33.5,12.5 + rot: 1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 1554 + type: Table + components: + - parent: 857 + pos: 29.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1555 + type: ComputerAlert + components: + - parent: 857 + pos: 29.5,-2.5 + type: Transform +- uid: 1556 + type: ReinforcedWindow + components: + - parent: 857 + pos: 23.5,16.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1557 + type: ReinforcedWindow + components: + - parent: 857 + pos: 23.5,15.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1558 + type: ReinforcedWindow + components: + - parent: 857 + pos: 23.5,14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1559 + type: ReinforcedWindow + components: + - parent: 857 + pos: 21.5,14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1560 + type: SignSmoking + components: + - parent: 857 + pos: -1.2919803,-7.6148567 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 1561 + type: solid_wall + components: + - parent: 857 + pos: -1.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1562 + type: solid_wall + components: + - parent: 857 + pos: -20.5,-16.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1563 + type: ReinforcedWindow + components: + - parent: 857 + pos: 36.5,14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1564 + type: ReinforcedWindow + components: + - parent: 857 + pos: 36.5,15.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1565 + type: ReinforcedWindow + components: + - parent: 857 + pos: 35.5,15.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1566 + type: ReinforcedWindow + components: + - parent: 857 + pos: 34.5,15.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1567 + type: ReinforcedWindow + components: + - parent: 857 + pos: 33.5,15.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1568 + type: ReinforcedWindow + components: + - parent: 857 + pos: 32.5,15.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1569 + type: ReinforcedWindow + components: + - parent: 857 + pos: 31.5,15.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1570 + type: ReinforcedWindow + components: + - parent: 857 + pos: 30.5,15.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1571 + type: ReinforcedWindow + components: + - parent: 857 + pos: 30.5,14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1572 + type: Window + components: + - parent: 857 + pos: 34.5,7.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1573 + type: Window + components: + - parent: 857 + pos: 32.5,7.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1574 + type: Catwalk + components: + - parent: 857 + pos: -16.5,-15.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1575 + type: Catwalk + components: + - parent: 857 + pos: -13.5,-14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1576 + type: Table + components: + - parent: 857 + pos: 31.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1577 + type: Catwalk + components: + - parent: 857 + pos: -8.5,-10.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1578 + type: Catwalk + components: + - parent: 857 + pos: -9.5,-9.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1579 + type: Catwalk + components: + - parent: 857 + pos: -9.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1580 + type: SignHead + components: + - parent: 857 + pos: -9.687853,18.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 1581 + type: ChairOfficeDark + components: + - parent: 857 pos: 30.5,-2.5 + rot: 3.141592653589793 rad + type: Transform + - anchored: False + type: Collidable +- uid: 1582 + type: Catwalk + components: + - parent: 857 + pos: 0.5,-7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2635 - type: solid_wall +- uid: 1583 + type: CrateGeneric components: - - parent: 15 - pos: 45.5,9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2636 - type: Wire - components: - - parent: 15 - pos: 22.5,-21.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2637 - type: Wire - components: - - parent: 15 - pos: 22.5,-22.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2638 - type: Wire - components: - - parent: 15 - pos: 22.5,-23.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2639 - type: Wire - components: - - parent: 15 - pos: 22.5,-24.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2640 - type: Wire - components: - - parent: 15 - pos: 22.5,-25.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2641 - type: Wire - components: - - parent: 15 - pos: 21.5,-25.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2642 - type: Wire - components: - - parent: 15 - pos: 20.5,-25.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2643 - type: Wire - components: - - parent: 15 - pos: 19.5,-25.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2644 - type: Wire - components: - - parent: 15 - pos: 14.5,-21.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2645 - type: Wire - components: - - parent: 15 - pos: 14.5,-22.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2646 - type: solid_wall - components: - - parent: 15 - pos: 23.5,-22.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2647 - type: solid_wall - components: - - parent: 15 - pos: 23.5,-23.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2648 - type: solid_wall - components: - - parent: 15 - pos: 23.5,-24.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2649 - type: solid_wall - components: - - parent: 15 - pos: 23.5,-25.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2650 - type: solid_wall - components: - - parent: 15 - pos: 23.5,-26.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2651 - type: solid_wall - components: - - parent: 15 - pos: 22.5,-26.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2652 - type: solid_wall - components: - - parent: 15 - pos: 21.5,-26.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2653 - type: solid_wall - components: - - parent: 15 - pos: 20.5,-26.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2654 - type: solid_wall - components: - - parent: 15 - pos: 19.5,-26.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2655 - type: solid_wall - components: - - parent: 15 - pos: 18.5,-26.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2656 - type: solid_wall - components: - - parent: 15 - pos: 17.5,-26.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2657 - type: solid_wall - components: - - parent: 15 - pos: 16.5,-26.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2658 - type: solid_wall - components: - - parent: 15 - pos: 15.5,-26.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2659 - type: solid_wall - components: - - parent: 15 - pos: 14.5,-26.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2660 - type: solid_wall - components: - - parent: 15 - pos: 13.5,-26.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2661 - type: solid_wall - components: - - parent: 15 - pos: 13.5,-22.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2662 - type: solid_wall - components: - - parent: 15 - pos: 13.5,-23.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2663 - type: solid_wall - components: - - parent: 15 - pos: 13.5,-24.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2664 - type: solid_wall - components: - - parent: 15 - pos: 13.5,-25.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2665 - type: solid_wall - components: - - parent: 15 - pos: 20.5,-19.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2666 - type: solid_wall - components: - - parent: 15 - pos: 20.5,-20.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2667 - type: solid_wall - components: - - parent: 15 - pos: 20.5,-21.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2668 - type: solid_wall - components: - - parent: 15 - pos: 20.5,-22.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2669 - type: solid_wall - components: - - parent: 15 - pos: 20.5,-23.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2670 - type: solid_wall - components: - - parent: 15 - pos: 17.5,-23.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2671 - type: solid_wall - components: - - parent: 15 - pos: 16.5,-23.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2672 - type: solid_wall - components: - - parent: 15 - pos: 16.5,-22.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2673 - type: solid_wall - components: - - parent: 15 - pos: 16.5,-21.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2674 - type: solid_wall - components: - - parent: 15 - pos: 16.5,-20.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2675 - type: solid_wall - components: - - parent: 15 - pos: 16.5,-19.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2676 - type: LowWall - components: - - parent: 15 - pos: 17.5,-18.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2677 - type: LowWall - components: - - parent: 15 - pos: 18.5,-18.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2678 - type: Window - components: - - parent: 15 - pos: 17.5,-18.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2679 - type: Window - components: - - parent: 15 - pos: 18.5,-18.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2680 - type: Table - components: - - parent: 15 - pos: 19.5,-21.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2681 - type: Table - components: - - parent: 15 - pos: 19.5,-22.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2682 - type: WardrobeWhite - components: - - parent: 15 - pos: 17.5,-22.5 + - parent: 857 + pos: 39.5,13.5 rot: -1.5707963267948966 rad type: Transform - anchored: False @@ -31851,5725 +26306,5742 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2683 - type: AirlockExternalLocked +- uid: 1584 + type: CrateGeneric components: - - name: Escape Shuttle Dock - type: MetaData - - parent: 15 - pos: -41.5,4.5 + - parent: 857 + pos: 38.5,13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2684 - type: AirlockExternalLocked + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 1585 + type: Table components: - - name: Escape Shuttle Dock - type: MetaData - - parent: 15 - pos: -39.5,4.5 + - parent: 857 + pos: 6.5,8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2685 - type: AirlockExternalLocked +- uid: 1586 + type: Catwalk components: - - name: Escape Shuttle Dock - type: MetaData - - parent: 15 - pos: -39.5,8.5 + - parent: 857 + pos: -32.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2686 - type: AirlockExternalLocked +- uid: 1587 + type: Catwalk components: - - name: Escape Shuttle Dock - type: MetaData - - parent: 15 - pos: -41.5,8.5 + - parent: 857 + pos: -33.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2687 - type: AirlockExternalLocked +- uid: 1588 + type: Catwalk components: - - name: Arrivals Shuttle Dock - type: MetaData - - parent: 15 - pos: -37.5,-3.5 + - parent: 857 + pos: -32.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2688 - type: AirlockExternalLocked +- uid: 1589 + type: Catwalk components: - - name: Arrivals Shuttle Dock - type: MetaData - - parent: 15 - pos: -39.5,-3.5 + - parent: 857 + pos: -32.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2689 - type: AirlockSecurityGlassLocked +- uid: 1590 + type: Catwalk components: - - name: Brig - type: MetaData - - parent: 15 - pos: -5.5,6.5 + - parent: 857 + pos: -15.5,11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2690 - type: AirlockSecurityGlassLocked +- uid: 1591 + type: Catwalk components: - - name: Brig - type: MetaData - - parent: 15 - pos: -5.5,9.5 + - parent: 857 + pos: -16.5,7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2691 - type: AirlockSecurityGlassLocked +- uid: 1592 + type: Catwalk components: - - name: Brig - type: MetaData - - parent: 15 - pos: -6.5,9.5 + - parent: 857 + pos: -20.5,12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2692 - type: AirlockEngineeringLocked +- uid: 1593 + type: Catwalk components: - - name: Gravity Generator - type: MetaData - - parent: 15 - pos: 49.5,-1.5 + - parent: 857 + pos: -16.5,11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2693 - type: AirlockEngineeringGlassLocked +- uid: 1594 + type: Catwalk components: - - name: Engineering Equipment - type: MetaData - - parent: 15 - pos: 33.5,1.5 + - parent: 857 + pos: -4.5,23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2694 - type: AirlockEngineeringGlassLocked +- uid: 1595 + type: Catwalk components: - - name: Atmospherics - type: MetaData - - parent: 15 - pos: 33.5,7.5 + - parent: 857 + pos: -4.5,22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2695 - type: AirlockEngineeringLocked +- uid: 1596 + type: Catwalk components: - - name: Secure Storage - type: MetaData - - parent: 15 - pos: 41.5,10.5 + - parent: 857 + pos: -4.5,21.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2696 - type: AirlockEngineeringLocked +- uid: 1597 + type: Catwalk components: - - name: Secure Storage - type: MetaData - - parent: 15 - pos: 40.5,10.5 + - parent: 857 + pos: -0.5,20.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2697 +- uid: 1598 + type: Catwalk + components: + - parent: 857 + pos: 6.5,14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1599 + type: Catwalk + components: + - parent: 857 + pos: 8.5,13.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1600 + type: Catwalk + components: + - parent: 857 + pos: 12.5,20.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1601 type: AirlockMaintEngiLocked components: - - parent: 15 - pos: 29.5,10.5 + - parent: 857 + pos: 33.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2698 - type: AirlockMaintEngiLocked +- uid: 1602 + type: Catwalk components: - - parent: 15 - pos: 43.5,0.5 + - parent: 857 + pos: 27.5,8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2699 - type: AirlockMaintCargoLocked +- uid: 1603 + type: Catwalk components: - - parent: 15 - pos: 25.5,9.5 + - parent: 857 + pos: 21.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2700 - type: AirlockMaintRnDLocked +- uid: 1604 + type: ReinforcedWindow components: - - parent: 15 - pos: -16.5,-16.5 + - parent: 857 + pos: 51.5,3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2701 - type: AirlockCommandGlassLocked +- uid: 1605 + type: SignSmoking components: - - name: Heads of Staff Meeting Room - type: MetaData - - parent: 15 - pos: 1.5,24.5 + - parent: 857 + pos: 42.70487,10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2702 - type: AirlockCommandGlassLocked + - deadThreshold: 100 + type: Destructible +- uid: 1606 + type: solid_wall components: - - name: Heads of Staff Meeting Room - type: MetaData - - parent: 15 - pos: 1.5,25.5 + - parent: 857 + pos: -22.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2703 +- uid: 1607 + type: reinforced_wall + components: + - parent: 857 + pos: 39.5,10.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1608 + type: reinforced_wall + components: + - parent: 857 + pos: 38.5,10.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1609 + type: reinforced_wall + components: + - parent: 857 + pos: 37.5,10.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1610 + type: reinforced_wall + components: + - parent: 857 + pos: 37.5,11.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1611 + type: reinforced_wall + components: + - parent: 857 + pos: 37.5,12.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1612 + type: reinforced_wall + components: + - parent: 857 + pos: 37.5,13.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1613 + type: reinforced_wall + components: + - parent: 857 + pos: 37.5,14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1614 + type: reinforced_wall + components: + - parent: 857 + pos: 38.5,14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1615 + type: reinforced_wall + components: + - parent: 857 + pos: 39.5,14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1616 + type: reinforced_wall + components: + - parent: 857 + pos: 40.5,14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1617 + type: reinforced_wall + components: + - parent: 857 + pos: 41.5,14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1618 + type: reinforced_wall + components: + - parent: 857 + pos: 42.5,14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1619 + type: reinforced_wall + components: + - parent: 857 + pos: 43.5,14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1620 + type: reinforced_wall + components: + - parent: 857 + pos: 44.5,14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1621 + type: reinforced_wall + components: + - parent: 857 + pos: 44.5,13.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1622 + type: reinforced_wall + components: + - parent: 857 + pos: 44.5,12.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1623 + type: reinforced_wall + components: + - parent: 857 + pos: 44.5,11.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1624 + type: reinforced_wall + components: + - parent: 857 + pos: 44.5,10.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1625 + type: reinforced_wall + components: + - parent: 857 + pos: 43.5,10.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1626 + type: reinforced_wall + components: + - parent: 857 + pos: 42.5,10.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1627 + type: LowWall + components: + - parent: 857 + pos: 40.5,1.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1628 + type: LowWall + components: + - parent: 857 + pos: 39.5,1.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1629 + type: LowWall + components: + - parent: 857 + pos: 36.5,-0.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1630 + type: Poweredlight + components: + - parent: 857 + pos: -10,-3.5 + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1631 + type: PoweredSmallLight + components: + - parent: 857 + pos: -12.5,-6 + rot: 1.5707963267948966 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1632 + type: PoweredSmallLight + components: + - parent: 857 + pos: -25.5,-10 + rot: 1.5707963267948966 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1633 + type: solid_wall + components: + - parent: 857 + pos: -21.5,-0.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1634 + type: solid_wall + components: + - parent: 857 + pos: 37.5,9.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1635 + type: solid_wall + components: + - parent: 857 + pos: 37.5,8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1636 + type: solid_wall + components: + - parent: 857 + pos: 37.5,7.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1637 + type: solid_wall + components: + - parent: 857 + pos: 36.5,7.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1638 + type: solid_wall + components: + - parent: 857 + pos: 35.5,7.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1639 + type: VendingMachineDinnerware + components: + - parent: 857 + pos: -11.5,-3.5 + type: Transform +- uid: 1640 + type: solid_wall + components: + - parent: 857 + pos: 36.5,6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1641 + type: LowWall + components: + - parent: 857 + pos: 51.5,1.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1642 + type: LowWall + components: + - parent: 857 + pos: 51.5,2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1643 + type: solid_wall + components: + - parent: 857 + pos: 41.5,1.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1644 + type: solid_wall + components: + - parent: 857 + pos: 41.5,0.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1645 + type: solid_wall + components: + - parent: 857 + pos: 41.5,-0.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1646 + type: solid_wall + components: + - parent: 857 + pos: 41.5,-1.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1647 + type: solid_wall + components: + - parent: 857 + pos: 41.5,-2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1648 + type: solid_wall + components: + - parent: 857 + pos: 40.5,-2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1649 + type: solid_wall + components: + - parent: 857 + pos: 39.5,-2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1650 + type: solid_wall + components: + - parent: 857 + pos: 38.5,-2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1651 + type: solid_wall + components: + - parent: 857 + pos: 37.5,-2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1652 + type: solid_wall + components: + - parent: 857 + pos: 36.5,-2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1653 + type: solid_wall + components: + - parent: 857 + pos: 36.5,-1.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1654 + type: solid_wall + components: + - parent: 857 + pos: 36.5,1.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1655 + type: solid_wall + components: + - parent: 857 + pos: 36.5,0.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1656 + type: LowWall + components: + - parent: 857 + pos: 37.5,1.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1657 + type: solid_wall + components: + - parent: 857 + pos: 36.5,2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1658 + type: LowWall + components: + - parent: 857 + pos: 51.5,3.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1659 + type: solid_wall + components: + - parent: 857 + pos: 35.5,1.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1660 + type: solid_wall + components: + - parent: 857 + pos: 31.5,1.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1661 + type: solid_wall + components: + - parent: 857 + pos: 42.5,0.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1662 + type: solid_wall + components: + - parent: 857 + pos: 45.5,0.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1663 + type: solid_wall + components: + - parent: 857 + pos: 44.5,0.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1664 + type: WaterTankFull + components: + - parent: 857 + pos: 10.5,-18.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 1665 + type: solid_wall + components: + - parent: 857 + pos: 44.5,-0.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1666 + type: solid_wall + components: + - parent: 857 + pos: 44.5,-1.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1667 + type: solid_wall + components: + - parent: 857 + pos: 44.5,-2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1668 + type: solid_wall + components: + - parent: 857 + pos: 44.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1669 + type: solid_wall + components: + - parent: 857 + pos: 44.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1670 + type: solid_wall + components: + - parent: 857 + pos: 44.5,-5.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1671 + type: solid_wall + components: + - parent: 857 + pos: 43.5,-5.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1672 + type: solid_wall + components: + - parent: 857 + pos: 42.5,-5.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1673 + type: solid_wall + components: + - parent: 857 + pos: 41.5,-5.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1674 + type: solid_wall + components: + - parent: 857 + pos: 40.5,-5.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1675 + type: solid_wall + components: + - parent: 857 + pos: 39.5,-5.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1676 + type: solid_wall + components: + - parent: 857 + pos: 39.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1677 + type: solid_wall + components: + - parent: 857 + pos: 39.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1678 + type: solid_wall + components: + - parent: 857 + pos: 39.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1679 + type: solid_wall + components: + - parent: 857 + pos: 38.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1680 + type: solid_wall + components: + - parent: 857 + pos: 37.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1681 + type: solid_wall + components: + - parent: 857 + pos: 36.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1682 + type: solid_wall + components: + - parent: 857 + pos: 35.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1683 + type: solid_wall + components: + - parent: 857 + pos: 34.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1684 + type: solid_wall + components: + - parent: 857 + pos: 33.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1685 + type: solid_wall + components: + - parent: 857 + pos: 32.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1686 + type: solid_wall + components: + - parent: 857 + pos: 31.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1687 + type: solid_wall + components: + - parent: 857 + pos: 30.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1688 + type: solid_wall + components: + - parent: 857 + pos: 29.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1689 + type: solid_wall + components: + - parent: 857 + pos: 28.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1690 + type: solid_wall + components: + - parent: 857 + pos: 28.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1691 + type: solid_wall + components: + - parent: 857 + pos: 28.5,-9.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1692 + type: solid_wall + components: + - parent: 857 + pos: 28.5,-10.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1693 + type: solid_wall + components: + - parent: 857 + pos: 28.5,-11.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1694 + type: solid_wall + components: + - parent: 857 + pos: 28.5,-12.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1695 + type: solid_wall + components: + - parent: 857 + pos: 28.5,-13.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1696 + type: solid_wall + components: + - parent: 857 + pos: 28.5,-14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1697 + type: solid_wall + components: + - parent: 857 + pos: 28.5,-15.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1698 + type: solid_wall + components: + - parent: 857 + pos: 28.5,-16.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1699 + type: solid_wall + components: + - parent: 857 + pos: 28.5,-17.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1700 + type: solid_wall + components: + - parent: 857 + pos: 28.5,-18.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1701 + type: solid_wall + components: + - parent: 857 + pos: 28.5,-19.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1702 + type: solid_wall + components: + - parent: 857 + pos: 27.5,-19.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1703 + type: solid_wall + components: + - parent: 857 + pos: 26.5,-19.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1704 + type: solid_wall + components: + - parent: 857 + pos: 25.5,-19.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1705 + type: solid_wall + components: + - parent: 857 + pos: 24.5,-19.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1706 + type: solid_wall + components: + - parent: 857 + pos: 23.5,-19.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1707 + type: solid_wall + components: + - parent: 857 + pos: 23.5,-20.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1708 + type: solid_wall + components: + - parent: 857 + pos: 23.5,-21.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1709 + type: solid_wall + components: + - parent: 857 + pos: 45.5,8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1710 + type: SignCloning + components: + - parent: 857 + pos: 7.326743,-12.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 1711 + type: solid_wall + components: + - parent: 857 + pos: 0.5,-28.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1712 + type: solid_wall + components: + - parent: 857 + pos: 0.5,-27.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1713 + type: solid_wall + components: + - parent: 857 + pos: 0.5,-26.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1714 + type: ReinforcedWindow + components: + - parent: 857 + pos: 51.5,0.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1715 + type: LowWall + components: + - parent: 857 + pos: 51.5,0.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1716 + type: solid_wall + components: + - parent: 857 + pos: 18.5,-23.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1717 + type: solid_wall + components: + - parent: 857 + pos: 19.5,-23.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1718 + type: solid_wall + components: + - parent: 857 + pos: 13.5,-21.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1719 + type: solid_wall + components: + - parent: 857 + pos: 12.5,-21.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1720 + type: solid_wall + components: + - parent: 857 + pos: 1.5,-24.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1721 + type: solid_wall + components: + - parent: 857 + pos: 0.5,-24.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1722 + type: solid_wall + components: + - parent: 857 + pos: 0.5,-25.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1723 + type: solid_wall + components: + - parent: 857 + pos: 8.5,-21.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1724 + type: solid_wall + components: + - parent: 857 + pos: 7.5,-21.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1725 + type: solid_wall + components: + - parent: 857 + pos: 6.5,-21.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1726 + type: solid_wall + components: + - parent: 857 + pos: 6.5,-22.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1727 + type: solid_wall + components: + - parent: 857 + pos: 5.5,-22.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1728 + type: LowWall + components: + - parent: 857 + pos: 5.5,-23.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1729 + type: LowWall + components: + - parent: 857 + pos: 5.5,-24.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1730 + type: LowWall + components: + - parent: 857 + pos: 4.5,-24.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1731 + type: LowWall + components: + - parent: 857 + pos: 3.5,-24.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1732 + type: LowWall + components: + - parent: 857 + pos: 2.5,-24.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1733 + type: LowWall + components: + - parent: 857 + pos: 9.5,-21.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1734 + type: LowWall + components: + - parent: 857 + pos: 10.5,-21.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1735 + type: LowWall + components: + - parent: 857 + pos: 11.5,-21.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1736 + type: solid_wall + components: + - parent: 857 + pos: 45.5,10.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1737 + type: LowWall + components: + - parent: 857 + pos: 34.5,7.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1738 + type: LowWall + components: + - parent: 857 + pos: 32.5,7.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1739 + type: solid_wall + components: + - parent: 857 + pos: 31.5,7.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1740 + type: solid_wall + components: + - parent: 857 + pos: 30.5,7.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1741 + type: solid_wall + components: + - parent: 857 + pos: 29.5,7.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1742 + type: solid_wall + components: + - parent: 857 + pos: 29.5,8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1743 + type: solid_wall + components: + - parent: 857 + pos: 29.5,9.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1744 + type: solid_wall + components: + - parent: 857 + pos: 28.5,7.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1745 + type: solid_wall + components: + - parent: 857 + pos: 30.5,6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1746 + type: solid_wall + components: + - parent: 857 + pos: 30.5,2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1747 + type: solid_wall + components: + - parent: 857 + pos: 30.5,1.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1748 + type: LowWall + components: + - parent: 857 + pos: 32.5,1.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1749 + type: LowWall + components: + - parent: 857 + pos: 34.5,1.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1750 + type: LowWall + components: + - parent: 857 + pos: 30.5,4.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1751 + type: LowWall + components: + - parent: 857 + pos: 30.5,14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1752 + type: LowWall + components: + - parent: 857 + pos: 30.5,15.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1753 + type: LowWall + components: + - parent: 857 + pos: 31.5,15.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1754 + type: LowWall + components: + - parent: 857 + pos: 32.5,15.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1755 + type: LowWall + components: + - parent: 857 + pos: 33.5,15.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1756 + type: LowWall + components: + - parent: 857 + pos: 34.5,15.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1757 + type: LowWall + components: + - parent: 857 + pos: 35.5,15.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1758 + type: LowWall + components: + - parent: 857 + pos: 36.5,15.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1759 + type: LowWall + components: + - parent: 857 + pos: 36.5,14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1760 + type: solid_wall + components: + - parent: 857 + pos: 29.5,11.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1761 + type: solid_wall + components: + - parent: 857 + pos: 29.5,12.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1762 + type: solid_wall + components: + - parent: 857 + pos: 29.5,13.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1763 + type: solid_wall + components: + - parent: 857 + pos: 29.5,14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1764 + type: LowWall + components: + - parent: 857 + pos: 19.5,16.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1765 + type: LowWall + components: + - parent: 857 + pos: 21.5,14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1766 + type: LowWall + components: + - parent: 857 + pos: 23.5,14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1767 + type: solid_wall + components: + - parent: 857 + pos: 25.5,14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1768 + type: LowWall + components: + - parent: 857 + pos: 19.5,14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1769 + type: ReinforcedWindow + components: + - parent: 857 + pos: 21.5,15.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1770 + type: solid_wall + components: + - parent: 857 + pos: 25.5,13.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1771 + type: solid_wall + components: + - parent: 857 + pos: 25.5,12.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1772 + type: solid_wall + components: + - parent: 857 + pos: 25.5,11.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1773 + type: solid_wall + components: + - parent: 857 + pos: 25.5,10.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1774 + type: solid_wall + components: + - parent: 857 + pos: 25.5,8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1775 + type: solid_wall + components: + - parent: 857 + pos: 25.5,7.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1776 + type: solid_wall + components: + - parent: 857 + pos: 26.5,7.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1777 + type: solid_wall + components: + - parent: 857 + pos: 24.5,7.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1778 + type: solid_wall + components: + - parent: 857 + pos: 24.5,6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1779 + type: solid_wall + components: + - parent: 857 + pos: 23.5,6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1780 + type: solid_wall + components: + - parent: 857 + pos: 18.5,6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1781 + type: solid_wall + components: + - parent: 857 + pos: 17.5,6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1782 + type: solid_wall + components: + - parent: 857 + pos: 17.5,7.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1783 + type: solid_wall + components: + - parent: 857 + pos: 17.5,8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1784 + type: solid_wall + components: + - parent: 857 + pos: 17.5,9.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1785 + type: solid_wall + components: + - parent: 857 + pos: 16.5,8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1786 + type: solid_wall + components: + - parent: 857 + pos: 12.5,8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1787 + type: LowWall + components: + - parent: 857 + pos: 19.5,6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1788 + type: LowWall + components: + - parent: 857 + pos: 20.5,6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1789 + type: LowWall + components: + - parent: 857 + pos: 21.5,6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1790 + type: LowWall + components: + - parent: 857 + pos: 22.5,6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1791 + type: LowWall + components: + - parent: 857 + pos: 23.5,15.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1792 + type: LowWall + components: + - parent: 857 + pos: 23.5,16.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1793 + type: SignDirectionalBridge + components: + - parent: 857 + pos: -20.49181,6.256847 + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 1794 + type: SignDirectionalSec + components: + - parent: 857 + pos: 5.9947615,6.5 + rot: 3.141592653589793 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 1795 + type: LowWall + components: + - parent: 857 + pos: 19.5,15.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1796 + type: solid_wall + components: + - parent: 857 + pos: -0.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1797 + type: solid_wall + components: + - parent: 857 + pos: -19.5,-16.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1798 + type: solid_wall + components: + - parent: 857 + pos: -21.5,-16.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1799 + type: solid_wall + components: + - parent: 857 + pos: 17.5,12.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1800 + type: solid_wall + components: + - parent: 857 + pos: 17.5,13.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1801 + type: solid_wall + components: + - parent: 857 + pos: 17.5,14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1802 + type: solid_wall + components: + - parent: 857 + pos: 17.5,15.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1803 + type: solid_wall + components: + - parent: 857 + pos: 16.5,16.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1804 + type: solid_wall + components: + - parent: 857 + pos: 17.5,16.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1805 + type: solid_wall + components: + - parent: 857 + pos: 16.5,13.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1806 + type: solid_wall + components: + - parent: 857 + pos: 15.5,13.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1807 + type: solid_wall + components: + - parent: 857 + pos: 14.5,13.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1808 + type: solid_wall + components: + - parent: 857 + pos: 13.5,13.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1809 + type: solid_wall + components: + - parent: 857 + pos: 12.5,13.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1810 + type: solid_wall + components: + - parent: 857 + pos: 11.5,13.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1811 + type: reinforced_wall + components: + - parent: 857 + pos: 11.5,12.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1812 + type: reinforced_wall + components: + - parent: 857 + pos: 10.5,12.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1813 + type: reinforced_wall + components: + - parent: 857 + pos: 9.5,12.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1814 + type: reinforced_wall + components: + - parent: 857 + pos: 7.5,12.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1815 + type: reinforced_wall + components: + - parent: 857 + pos: 6.5,12.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1816 + type: reinforced_wall + components: + - parent: 857 + pos: 5.5,12.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1817 + type: reinforced_wall + components: + - parent: 857 + pos: 5.5,11.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1818 + type: reinforced_wall + components: + - parent: 857 + pos: 5.5,10.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1819 + type: reinforced_wall + components: + - parent: 857 + pos: 5.5,9.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1820 + type: reinforced_wall + components: + - parent: 857 + pos: 5.5,8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1821 + type: reinforced_wall + components: + - parent: 857 + pos: 5.5,7.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1822 + type: reinforced_wall + components: + - parent: 857 + pos: 5.5,6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1823 + type: reinforced_wall + components: + - parent: 857 + pos: 11.5,6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1824 + type: reinforced_wall + components: + - parent: 857 + pos: 11.5,11.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1825 + type: reinforced_wall + components: + - parent: 857 + pos: 11.5,10.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1826 + type: reinforced_wall + components: + - parent: 857 + pos: 11.5,9.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1827 + type: reinforced_wall + components: + - parent: 857 + pos: 11.5,8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1828 + type: reinforced_wall + components: + - parent: 857 + pos: 11.5,7.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1829 + type: reinforced_wall + components: + - parent: 857 + pos: 10.5,6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1830 + type: reinforced_wall + components: + - parent: 857 + pos: 6.5,6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1831 + type: LowWall + components: + - parent: 857 + pos: 8.5,6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1832 + type: solid_wall + components: + - parent: 857 + pos: 14.5,15.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1833 + type: solid_wall + components: + - parent: 857 + pos: 14.5,16.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1834 + type: solid_wall + components: + - parent: 857 + pos: 14.5,17.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1835 + type: ReinforcedWindow + components: + - parent: 857 + pos: 19.5,14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1836 + type: ReinforcedWindow + components: + - parent: 857 + pos: 19.5,15.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1837 + type: ReinforcedWindow + components: + - parent: 857 + pos: 19.5,16.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1838 + type: solid_wall + components: + - parent: 857 + pos: 14.5,21.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1839 + type: solid_wall + components: + - parent: 857 + pos: -17.5,2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1840 + type: solid_wall + components: + - parent: 857 + pos: -20.5,2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1841 + type: solid_wall + components: + - parent: 857 + pos: -21.5,2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1842 + type: solid_wall + components: + - parent: 857 + pos: 11.5,21.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1843 + type: solid_wall + components: + - parent: 857 + pos: 11.5,19.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1844 + type: solid_wall + components: + - parent: 857 + pos: 11.5,18.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1845 + type: solid_wall + components: + - parent: 857 + pos: 11.5,17.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1846 + type: solid_wall + components: + - parent: 857 + pos: 11.5,16.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1847 + type: solid_wall + components: + - parent: 857 + pos: 11.5,15.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1848 + type: solid_wall + components: + - parent: 857 + pos: 10.5,15.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1849 + type: solid_wall + components: + - parent: 857 + pos: 9.5,15.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1850 + type: Poweredlight + components: + - parent: 857 + pos: -24.5,-9 + rot: 1.5707963267948966 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - powerLoad: 40 + type: PowerReceiver + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 1851 + type: solid_wall + components: + - parent: 857 + pos: -21.5,0.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1852 + type: solid_wall + components: + - parent: 857 + pos: 6.5,15.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1853 + type: solid_wall + components: + - parent: 857 + pos: 5.5,15.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1854 + type: solid_wall + components: + - parent: 857 + pos: 6.5,16.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1855 + type: solid_wall + components: + - parent: 857 + pos: 5.5,13.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1856 + type: solid_wall + components: + - parent: 857 + pos: 6.5,21.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1857 + type: reinforced_wall + components: + - parent: 857 + pos: 10.5,22.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1858 + type: reinforced_wall + components: + - parent: 857 + pos: 9.5,22.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1859 + type: reinforced_wall + components: + - parent: 857 + pos: 8.5,22.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1860 + type: reinforced_wall + components: + - parent: 857 + pos: 7.5,22.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1861 + type: reinforced_wall + components: + - parent: 857 + pos: 6.5,22.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1862 + type: reinforced_wall + components: + - parent: 857 + pos: 5.5,22.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1863 + type: reinforced_wall + components: + - parent: 857 + pos: 10.5,23.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1864 + type: reinforced_wall + components: + - parent: 857 + pos: 10.5,24.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1865 + type: reinforced_wall + components: + - parent: 857 + pos: 10.5,25.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1866 + type: reinforced_wall + components: + - parent: 857 + pos: 10.5,26.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1867 + type: reinforced_wall + components: + - parent: 857 + pos: 10.5,27.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1868 + type: reinforced_wall + components: + - parent: 857 + pos: 10.5,28.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1869 + type: reinforced_wall + components: + - parent: 857 + pos: 10.5,30.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1870 + type: reinforced_wall + components: + - parent: 857 + pos: 10.5,31.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1871 + type: reinforced_wall + components: + - parent: 857 + pos: -3.5,31.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1872 + type: reinforced_wall + components: + - parent: 857 + pos: -3.5,30.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1873 + type: reinforced_wall + components: + - parent: 857 + pos: -3.5,28.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1874 + type: reinforced_wall + components: + - parent: 857 + pos: -3.5,27.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1875 + type: reinforced_wall + components: + - parent: 857 + pos: -3.5,26.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1876 + type: reinforced_wall + components: + - parent: 857 + pos: -3.5,25.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1877 + type: reinforced_wall + components: + - parent: 857 + pos: 1.5,22.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1878 + type: reinforced_wall + components: + - parent: 857 + pos: 0.5,22.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1879 + type: reinforced_wall + components: + - parent: 857 + pos: -0.5,22.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1880 type: AirlockCommandLocked components: - - name: Captain's Office + - name: Head of Personnel's Office type: MetaData - - parent: 15 - pos: 5.5,25.5 - rot: -1.5707963267948966 rad - type: Transform - - access: - - - Captain - type: AccessReader -- uid: 2704 - type: AirlockMaintCommonLocked - components: - - parent: 15 - pos: 6.5,-19.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2705 - type: AirlockMaintCommonLocked - components: - - parent: 15 - pos: 21.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2706 - type: AirlockMaintCommandLocked - components: - - parent: 15 - pos: -1.5,22.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2707 - type: AirlockMedicalGlassLocked - components: - - name: Medical Bay - type: MetaData - - parent: 15 - pos: 10.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2708 - type: AirlockMedicalGlassLocked - components: - - name: Medical Bay - type: MetaData - - parent: 15 - pos: 11.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2709 - type: AirlockMedicalGlassLocked - components: - - name: Medical Storage - type: MetaData - - parent: 15 - pos: 20.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2710 - type: AirlockMedicalGlassLocked - components: - - name: Surgery - type: MetaData - - parent: 15 - pos: 19.5,-18.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2711 - type: AirlockMedicalGlassLocked - components: - - name: Cloning - type: MetaData - - parent: 15 - pos: 8.5,-12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2712 - type: AirlockSecurityGlassLocked - components: - - name: Security Equipment - type: MetaData - - parent: 15 - pos: -10.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2713 - type: AirlockSecurityGlassLocked - components: - - name: Reception Desk - type: MetaData - - parent: 15 - pos: -9.5,9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2714 - type: AirlockMaintCommonLocked - components: - - parent: 15 - pos: 0.5,20.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2715 - type: AirlockMaintMedLocked - components: - - parent: 15 - pos: 14.5,-18.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2716 - type: AirlockMaintMedLocked - components: - - parent: 15 - pos: 20.5,-10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2717 - type: AirlockMaintRnDLocked - components: - - parent: 15 - pos: -11.5,-21.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2718 - type: AirlockScienceLocked - components: - - name: Science - type: MetaData - - parent: 15 - pos: 0.5,-19.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2719 - type: AirlockScienceLocked - components: - - name: Science - type: MetaData - - parent: 15 - pos: 0.5,-20.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2720 - type: AirlockScienceGlassLocked - components: - - name: Research and Development - type: MetaData - - parent: 15 - pos: -3.5,-18.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2721 - type: AirlockMaintCommonLocked - components: - - parent: 15 - pos: -33.5,8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2722 - type: AirlockCommandGlassLocked - components: - - name: Chief Engineer's Office - type: MetaData - - parent: 15 - pos: 38.5,1.5 - rot: -1.5707963267948966 rad - type: Transform - - access: - - - Engineering - - Command - type: AccessReader -- uid: 2723 - type: Catwalk - components: - - parent: 15 - pos: 26.5,9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2724 - type: AirlockMaintCommandLocked - components: - - parent: 15 - pos: 11.5,20.5 + - parent: 857 + pos: 6.5,17.5 rot: -1.5707963267948966 rad type: Transform - access: - - HeadOfPersonnel type: AccessReader -- uid: 2725 - type: AirlockExternalLocked - components: - - parent: 15 - pos: 15.5,16.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2726 - type: Airlock - components: - - name: Custodial Closet - type: MetaData - - parent: 15 - pos: -22.5,9.5 - rot: -1.5707963267948966 rad - type: Transform - - access: - - - Janitor - type: AccessReader -- uid: 2727 - type: AirlockMaintCommonLocked - components: - - parent: 15 - pos: -34.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2728 - type: AirlockMaintCommonLocked - components: - - parent: 15 - pos: -23.5,-9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2729 - type: AirlockMaintCommonLocked - components: - - parent: 15 - pos: 1.5,-7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2730 - type: AirlockVaultLocked - components: - - name: Vault - type: MetaData - - parent: 15 - pos: 0.5,17.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2731 - type: AirlockMaintCommonLocked - components: - - parent: 15 - pos: -8.5,-7.5 - rot: -1.5707963267948966 rad - type: Transform - - access: - - - Service - type: AccessReader -- uid: 2732 - type: AirlockServiceGlassLocked - components: - - name: Kitchen - type: MetaData - - parent: 15 - pos: -10.5,-1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2733 - type: AirlockMaintEngiLocked - components: - - parent: 15 - pos: 28.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2734 - type: AirlockServiceGlassLocked - components: - - name: Bar - type: MetaData - - parent: 15 - pos: -7.5,-4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2735 - type: AirlockSecurityGlassLocked - components: - - name: Brig - type: MetaData - - parent: 15 - pos: -6.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2736 - type: AirlockMaintCommonLocked - components: - - parent: 15 - pos: -16.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2737 - type: AirlockMaintCommonLocked - components: - - parent: 15 - pos: 5.5,14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2738 - type: AirlockMaintRnDLocked - components: - - parent: 15 - pos: -4.5,-11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2739 - type: AirlockMaintIntLocked - components: - - parent: 15 - pos: -12.5,-8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2740 - type: AirlockMaintIntLocked - components: - - parent: 15 - pos: -13.5,-13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2741 - type: AirlockMaintCommonLocked - components: - - parent: 15 - pos: -32.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2742 - type: AirlockMaintCommonLocked - components: - - parent: 15 - pos: -20.5,11.5 - rot: -1.5707963267948966 rad - type: Transform - - access: - - - Janitor - type: AccessReader -- uid: 2743 - type: AirlockEngineeringGlassLocked - components: - - name: Engineering - type: MetaData - - parent: 15 - pos: 30.5,3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2744 - type: AirlockEngineeringGlassLocked - components: - - name: Engineering - type: MetaData - - parent: 15 - pos: 30.5,5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2745 - type: AirlockMedicalGlassLocked - components: - - name: Chemistry - type: MetaData - - parent: 15 - pos: 7.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2746 - type: AirlockMedicalGlassLocked - components: - - name: Chemistry - type: MetaData - - parent: 15 - pos: 17.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2747 - type: AirlockCommandGlassLocked - components: - - name: Chief Medical Officer's Office - type: MetaData - - parent: 15 - pos: 20.5,-13.5 - rot: -1.5707963267948966 rad - type: Transform - - access: - - - Medical - - Command - type: AccessReader -- uid: 2748 - type: AirlockCommandGlassLocked - components: - - name: Server Room - type: MetaData - - parent: 15 - pos: -8.5,-21.5 - rot: -1.5707963267948966 rad - type: Transform - - access: - - - Research - - Command - type: AccessReader -- uid: 2749 - type: AirlockCommandGlassLocked - components: - - name: Research Director's Office - type: MetaData - - parent: 15 - pos: -3.5,-21.5 - rot: -1.5707963267948966 rad - type: Transform - - access: - - - Research - - Command - type: AccessReader -- uid: 2750 - type: AirlockScienceLocked - components: - - name: Testing Area - type: MetaData - - parent: 15 - pos: -12.5,-19.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2751 - type: AirlockScienceLocked - components: - - name: Testing Area - type: MetaData - - parent: 15 - pos: -12.5,-20.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2752 - type: AirlockGlass - components: - - name: Locker Room - type: MetaData - - parent: 15 - pos: -26.5,-0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2753 - type: AirlockServiceGlassLocked - components: - - name: Tool Storage - type: MetaData - - parent: 15 - pos: -25.5,10.5 - rot: -1.5707963267948966 rad - type: Transform - - access: - - - Maintenance - type: AccessReader -- uid: 2754 - type: AirlockServiceGlassLocked - components: - - name: Tool Storage - type: MetaData - - parent: 15 - pos: -25.5,8.5 - rot: -1.5707963267948966 rad - type: Transform - - access: - - - Maintenance - type: AccessReader -- uid: 2755 - type: AirlockGlass - components: - - name: Locker Room - type: MetaData - - parent: 15 - pos: -26.5,-1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2756 - type: AirlockServiceLocked - components: - - name: Theatre - type: MetaData - - parent: 15 - pos: -20.5,-7.5 - rot: -1.5707963267948966 rad - type: Transform - - access: - - - Theatre - type: AccessReader -- uid: 2757 - type: Airlock - components: - - name: Bunk Dorms - type: MetaData - - parent: 15 - pos: -26.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2758 - type: Airlock - components: - - name: Showers - type: MetaData - - parent: 15 - pos: -21.5,-4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2759 - type: AirlockMaintCommonLocked - components: - - parent: 15 - pos: -16.5,-7.5 - rot: -1.5707963267948966 rad - type: Transform - - access: - - - Service - type: AccessReader -- uid: 2760 - type: AirlockMaintCommonLocked - components: - - parent: 15 - pos: -31.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2761 - type: AirlockMaintCommonLocked - components: - - parent: 15 - pos: 27.5,7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2762 - type: Table - components: - - parent: 15 - pos: -8.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2763 - type: Table - components: - - parent: 15 - pos: -9.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2764 - type: Table - components: - - parent: 15 - pos: -7.5,7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2765 - type: Table - components: - - parent: 15 - pos: -7.5,8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2766 - type: ChairOfficeDark - components: - - parent: 15 - pos: -9.5,7.5 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable -- uid: 2767 - type: ChairOfficeDark - components: - - parent: 15 - pos: -8.5,8.5 - type: Transform - - anchored: False - type: Collidable -- uid: 2768 - type: AirlockVaultLocked - components: - - name: Armory - type: MetaData - - parent: 15 - pos: -12.5,17.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2769 - type: AirlockVaultLocked - components: - - name: Armory - type: MetaData - - parent: 15 - pos: -10.5,20.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2770 - type: AirlockCommandGlassLocked - components: - - name: Bridge - type: MetaData - - parent: 15 - pos: 2.5,22.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2771 - type: AirlockCommandGlassLocked - components: - - name: Bridge - type: MetaData - - parent: 15 - pos: 4.5,22.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2772 - type: AirlockCommandGlassLocked - components: - - name: EVA - type: MetaData - - parent: 15 - pos: 7.5,6.5 - rot: -1.5707963267948966 rad - type: Transform - - access: - - - External - type: AccessReader -- uid: 2773 - type: AirlockCommandGlassLocked - components: - - name: EVA - type: MetaData - - parent: 15 - pos: 9.5,6.5 - rot: -1.5707963267948966 rad - type: Transform - - access: - - - External - type: AccessReader -- uid: 2774 - type: AirlockMaintCommandLocked - components: - - parent: 15 - pos: 8.5,12.5 - rot: -1.5707963267948966 rad - type: Transform - - access: - - - External - type: AccessReader -- uid: 2775 - type: AirlockCargoGlassLocked - components: - - name: Cargo Office - type: MetaData - - parent: 15 - pos: 13.5,8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2776 - type: AirlockCargoGlassLocked - components: - - name: Cargo Bay - type: MetaData - - parent: 15 - pos: 17.5,10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2777 - type: AirlockCargoGlassLocked - components: - - name: Cargo Bay - type: MetaData - - parent: 15 - pos: 17.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2778 - type: AirlockExternalLocked - components: - - name: Supply Shuttle Dock - type: MetaData - - parent: 15 - pos: 20.5,14.5 - rot: -1.5707963267948966 rad - type: Transform - - access: - - - Cargo - type: AccessReader -- uid: 2779 - type: AirlockExternalLocked - components: - - name: Supply Shuttle Dock - type: MetaData - - parent: 15 - pos: 20.5,16.5 - rot: -1.5707963267948966 rad - type: Transform - - access: - - - Cargo - type: AccessReader -- uid: 2780 - type: AirlockExternalLocked - components: - - name: Supply Shuttle Dock - type: MetaData - - parent: 15 - pos: 22.5,16.5 - rot: -1.5707963267948966 rad - type: Transform - - access: - - - Cargo - type: AccessReader -- uid: 2781 - type: AirlockExternalLocked - components: - - name: Supply Shuttle Dock - type: MetaData - - parent: 15 - pos: 22.5,14.5 - rot: -1.5707963267948966 rad - type: Transform - - access: - - - Cargo - type: AccessReader -- uid: 2782 - type: AirlockExternalLocked - components: - - parent: 15 - pos: 14.5,14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2783 - type: AirlockCommandGlassLocked - components: - - name: Head of Security's Office - type: MetaData - - parent: 15 - pos: -8.5,18.5 - rot: -1.5707963267948966 rad - type: Transform - - access: - - - Security - - Command - type: AccessReader -- uid: 2784 - type: Poweredlight - components: - - parent: 15 - pos: 17,-20.5 - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2785 - type: Poweredlight - components: - - parent: 15 - pos: 15.5,-18 - rot: 1.5707963267948966 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2786 - type: Poweredlight - components: - - parent: 15 - pos: 20,-17.5 - rot: 3.141592653589793 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2787 +- uid: 1881 type: reinforced_wall components: - - parent: 15 - pos: -15.5,16.5 + - parent: 857 + pos: -2.5,22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2788 - type: Catwalk +- uid: 1882 + type: reinforced_wall components: - - parent: 15 - pos: -1.5,21.5 + - parent: 857 + pos: -3.5,22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2789 - type: AirlockSecurityGlassLocked +- uid: 1883 + type: reinforced_wall components: - - name: Cell 1 - type: MetaData - - parent: 15 - pos: -2.5,9.5 + - parent: 857 + pos: -3.5,23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2790 - type: AirlockSecurityGlassLocked +- uid: 1884 + type: reinforced_wall components: - - name: Cell 2 - type: MetaData - - parent: 15 - pos: 0.5,9.5 + - parent: 857 + pos: -3.5,24.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2791 - type: SuspicionMeleeSpawner - components: - - parent: 15 - pos: -27.5,1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2792 - type: SuspicionMeleeSpawner - components: - - parent: 15 - pos: -28.5,13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2793 - type: SuspicionMeleeSpawner - components: - - parent: 15 - pos: -29.5,10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2794 - type: SuspicionMeleeSpawner - components: - - parent: 15 - pos: -0.5,0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2795 - type: SuspicionMeleeSpawner - components: - - parent: 15 - pos: 6.5,8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2796 - type: SuspicionMeleeSpawner - components: - - parent: 15 - pos: 10.5,8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2797 - type: SuspicionMeleeSpawner - components: - - parent: 15 - pos: 15.5,8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2798 - type: SuspicionMeleeSpawner - components: - - parent: 15 - pos: 10.5,-13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2799 - type: SuspicionMeleeSpawner - components: - - parent: 15 - pos: 18.5,-24.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2800 - type: SuspicionMeleeSpawner - components: - - parent: 15 - pos: 17.5,-20.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2801 - type: SuspicionMeleeSpawner - components: - - parent: 15 - pos: 22.5,-4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2802 - type: SuspicionRifleSpawner - components: - - parent: 15 - pos: 23.5,-0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2803 - type: SuspicionRifleSpawner - components: - - parent: 15 - pos: -2.5,-4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2804 - type: SuspicionRifleSpawner - components: - - parent: 15 - pos: -14.5,-0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2805 - type: SuspicionRifleSpawner - components: - - parent: 15 - pos: -32.5,-8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2806 - type: SuspicionPistolSpawner - components: - - parent: 15 - pos: -18.5,-11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2807 - type: SuspicionPistolSpawner - components: - - parent: 15 - pos: -31.5,8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2808 - type: SuspicionPistolSpawner - components: - - parent: 15 - pos: -20.5,14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2809 - type: SuspicionRifleSpawner - components: - - parent: 15 - pos: -7.5,20.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2810 - type: SuspicionRifleSpawner - components: - - parent: 15 - pos: -7.5,21.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2811 - type: SuspicionPistolSpawner - components: - - parent: 15 - pos: 6.5,20.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2812 - type: SuspicionRifleSpawner - components: - - parent: 15 - pos: 0.5,28.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2813 - type: SuspicionRifleSpawner - components: - - parent: 15 - pos: 6.5,28.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2814 - type: SuspicionPistolSpawner - components: - - parent: 15 - pos: -13.5,24.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2815 - type: SuspicionMeleeSpawner - components: - - parent: 15 - pos: -4.5,20.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2816 - type: SuspicionRifleSpawner - components: - - parent: 15 - pos: 5.5,16.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2817 +- uid: 1885 type: solid_wall components: - - parent: 15 - pos: -21.5,-1.5 + - parent: 857 + pos: 1.5,26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2818 - type: Wire - components: - - parent: 15 - pos: -15.5,-5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2819 - type: Wire - components: - - parent: 15 - pos: -16.5,-5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2820 - type: Wire - components: - - parent: 15 - pos: -16.5,-4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2821 - type: Wire - components: - - parent: 15 - pos: -16.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2822 - type: Wire - components: - - parent: 15 - pos: -16.5,-2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2823 - type: Wire - components: - - parent: 15 - pos: -17.5,-2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2824 - type: Wire - components: - - parent: 15 - pos: -18.5,-2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2825 - type: Wire - components: - - parent: 15 - pos: -19.5,-2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2826 - type: Wire - components: - - parent: 15 - pos: -16.5,-1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2827 - type: Wire - components: - - parent: 15 - pos: -19.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2828 - type: Wire - components: - - parent: 15 - pos: -16.5,-0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2829 - type: Wire - components: - - parent: 15 - pos: -16.5,0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2830 - type: Wire - components: - - parent: 15 - pos: -16.5,1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2831 - type: Wire - components: - - parent: 15 - pos: -16.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2832 - type: Wire - components: - - parent: 15 - pos: -16.5,3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2833 +- uid: 1886 type: solid_wall components: - - parent: 15 - pos: -14.5,-3.5 + - parent: 857 + pos: 1.5,27.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2834 - type: Table - components: - - parent: 15 - pos: -15.5,0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2835 - type: AirlockMaintCommonLocked - components: - - parent: 15 - pos: -14.5,-4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2836 - type: AirlockMaintCommonLocked - components: - - parent: 15 - pos: -16.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2837 - type: Airlock - components: - - name: Hydroponics - type: MetaData - - parent: 15 - pos: -16.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2838 - type: Catwalk - components: - - parent: 15 - pos: -16.5,-4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2839 - type: Catwalk - components: - - parent: 15 - pos: -15.5,-4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2840 - type: Catwalk - components: - - parent: 15 - pos: -15.5,-5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2841 - type: Catwalk - components: - - parent: 15 - pos: -16.5,-5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2842 - type: Catwalk - components: - - parent: 15 - pos: -15.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2843 - type: Poweredlight - components: - - parent: 15 - pos: -20.5,2 - rot: -1.5707963267948966 rad - type: Transform - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2844 - type: Poweredlight - components: - - parent: 15 - pos: -20.5,-3 - rot: 1.5707963267948966 rad - type: Transform - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2845 - type: Poweredlight - components: - - parent: 15 - pos: -16,-1.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2846 - type: TrashSpawner - components: - - parent: 15 - pos: -21.5,10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2847 - type: TrashSpawner - components: - - parent: 15 - pos: -31.5,7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2848 - type: TrashSpawner - components: - - parent: 15 - pos: -32.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2849 - type: TrashSpawner - components: - - parent: 15 - pos: -30.5,14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2850 - type: TrashSpawner - components: - - parent: 15 - pos: -25.5,13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2851 - type: TrashSpawner - components: - - parent: 15 - pos: -23.5,14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2852 - type: TrashSpawner - components: - - parent: 15 - pos: -21.5,12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2853 - type: TrashSpawner - components: - - parent: 15 - pos: -17.5,13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2854 - type: TrashSpawner - components: - - parent: 15 - pos: -15.5,9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2855 - type: TrashSpawner - components: - - parent: 15 - pos: -18.5,19.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2856 - type: TrashSpawner - components: - - parent: 15 - pos: -18.5,25.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2857 - type: TrashSpawner - components: - - parent: 15 - pos: -15.5,24.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2858 - type: TrashSpawner - components: - - parent: 15 - pos: -8.5,25.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2859 - type: TrashSpawner - components: - - parent: 15 - pos: -7.5,23.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2860 - type: TrashSpawner - components: - - parent: 15 - pos: -4.5,22.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2861 - type: TrashSpawner - components: - - parent: 15 - pos: -2.5,20.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2862 - type: TrashSpawner - components: - - parent: 15 - pos: -3.5,7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2863 - type: TrashSpawner - components: - - parent: 15 - pos: 0.5,8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2864 - type: TrashSpawner - components: - - parent: 15 - pos: -36.5,10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2865 - type: TrashSpawner - components: - - parent: 15 - pos: -35.5,-2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2866 - type: TrashSpawner - components: - - parent: 15 - pos: -32.5,5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2867 - type: TrashSpawner - components: - - parent: 15 - pos: -22.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2868 - type: TrashSpawner - components: - - parent: 15 - pos: -30.5,1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2869 - type: TrashSpawner - components: - - parent: 15 - pos: -30.5,-8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2870 - type: TrashSpawner - components: - - parent: 15 - pos: -19.5,-5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2871 - type: TrashSpawner - components: - - parent: 15 - pos: -32.5,-0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2872 - type: TrashSpawner - components: - - parent: 15 - pos: -33.5,-7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2873 - type: TrashSpawner - components: - - parent: 15 - pos: -33.5,-11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2874 - type: TrashSpawner - components: - - parent: 15 - pos: -32.5,-5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2875 - type: TrashSpawner - components: - - parent: 15 - pos: -28.5,-11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2876 - type: TrashSpawner - components: - - parent: 15 - pos: -21.5,-10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2877 - type: SuspicionPistolMagazineSpawner - components: - - parent: 15 - pos: -35.5,0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2878 - type: TrashSpawner - components: - - parent: 15 - pos: -18.5,-13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2879 - type: TrashSpawner - components: - - parent: 15 - pos: -12.5,-15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2880 - type: TrashSpawner - components: - - parent: 15 - pos: -8.5,-15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2881 - type: TrashSpawner - components: - - parent: 15 - pos: -9.5,-12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2882 - type: TrashSpawner - components: - - parent: 15 - pos: -8.5,-11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2883 - type: TrashSpawner - components: - - parent: 15 - pos: -11.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2884 - type: TrashSpawner - components: - - parent: 15 - pos: -16.5,-5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2885 - type: TrashSpawner - components: - - parent: 15 - pos: -6.5,-9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2886 - type: TrashSpawner - components: - - parent: 15 - pos: -2.5,-10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2887 - type: TrashSpawner - components: - - parent: 15 - pos: -0.5,-9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2888 - type: TrashSpawner - components: - - parent: 15 - pos: -0.5,-8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2889 - type: TrashSpawner - components: - - parent: 15 - pos: 0.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2890 - type: TrashSpawner - components: - - parent: 15 - pos: -11.5,-23.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2891 - type: TrashSpawner - components: - - parent: 15 - pos: -11.5,-27.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2892 - type: TrashSpawner - components: - - parent: 15 - pos: -9.5,-25.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2893 - type: TrashSpawner - components: - - parent: 15 - pos: -5.5,-27.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2894 - type: TrashSpawner - components: - - parent: 15 - pos: -2.5,-26.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2895 - type: TrashSpawner - components: - - parent: 15 - pos: -0.5,-22.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2896 - type: TrashSpawner - components: - - parent: 15 - pos: -10.5,-17.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2897 - type: TrashSpawner - components: - - parent: 15 - pos: 7.5,-18.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2898 - type: TrashSpawner - components: - - parent: 15 - pos: 12.5,-19.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2899 - type: TrashSpawner - components: - - parent: 15 - pos: 14.5,-21.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2900 - type: TrashSpawner - components: - - parent: 15 - pos: 14.5,-24.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2901 - type: TrashSpawner - components: - - parent: 15 - pos: 18.5,-25.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2902 - type: TrashSpawner - components: - - parent: 15 - pos: 22.5,-23.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2903 - type: TrashSpawner - components: - - parent: 15 - pos: 21.5,-20.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2904 - type: TrashSpawner - components: - - parent: 15 - pos: 21.5,-17.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2905 - type: TrashSpawner - components: - - parent: 15 - pos: 26.5,-17.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2906 - type: TrashSpawner - components: - - parent: 15 - pos: 27.5,-13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2907 - type: TrashSpawner - components: - - parent: 15 - pos: 24.5,-9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2908 - type: TrashSpawner - components: - - parent: 15 - pos: 27.5,-7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2909 - type: TrashSpawner - components: - - parent: 15 - pos: 27.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2910 - type: TrashSpawner - components: - - parent: 15 - pos: 25.5,-1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2911 - type: TrashSpawner - components: - - parent: 15 - pos: 21.5,-2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2912 - type: TrashSpawner - components: - - parent: 15 - pos: 20.5,0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2913 - type: TrashSpawner - components: - - parent: 15 - pos: 32.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2914 - type: TrashSpawner - components: - - parent: 15 - pos: 37.5,-7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2915 - type: TrashSpawner - components: - - parent: 15 - pos: 37.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2916 - type: TrashSpawner - components: - - parent: 15 - pos: 42.5,-2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2917 - type: TrashSpawner - components: - - parent: 15 - pos: 44.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2918 - type: TrashSpawner - components: - - parent: 15 - pos: 35.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2919 - type: TrashSpawner - components: - - parent: 15 - pos: 27.5,0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2920 - type: TrashSpawner - components: - - parent: 15 - pos: 28.5,8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2921 - type: TrashSpawner - components: - - parent: 15 - pos: 26.5,10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2922 - type: TrashSpawner - components: - - parent: 15 - pos: 27.5,13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2923 - type: TrashSpawner - components: - - parent: 15 - pos: 24.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2924 - type: TrashSpawner - components: - - parent: 15 - pos: 12.5,12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2925 - type: TrashSpawner - components: - - parent: 15 - pos: 12.5,7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2926 - type: TrashSpawner - components: - - parent: 15 - pos: 6.5,1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2927 - type: TrashSpawner - components: - - parent: 15 - pos: 25.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2928 - type: TrashSpawner - components: - - parent: 15 - pos: 19.5,3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2929 - type: TrashSpawner - components: - - parent: 15 - pos: -7.5,5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2930 - type: TrashSpawner - components: - - parent: 15 - pos: -1.5,-0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2931 - type: TrashSpawner - components: - - parent: 15 - pos: -8.5,-1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2932 - type: TrashSpawner - components: - - parent: 15 - pos: -17.5,3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2933 - type: TrashSpawner - components: - - parent: 15 - pos: -25.5,0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2934 - type: TrashSpawner - components: - - parent: 15 - pos: -22.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2935 - type: TrashSpawner - components: - - parent: 15 - pos: 4.5,9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2936 - type: TrashSpawner - components: - - parent: 15 - pos: 1.5,16.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2937 - type: TrashSpawner - components: - - parent: 15 - pos: 13.5,19.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2938 - type: TrashSpawner - components: - - parent: 15 - pos: 12.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2939 - type: TrashSpawner - components: - - parent: 15 - pos: 9.5,13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2940 +- uid: 1887 type: solid_wall components: - - parent: 15 - pos: -19.5,-15.5 + - parent: 857 + pos: 0.5,27.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2941 +- uid: 1888 type: solid_wall components: - - parent: 15 - pos: -19.5,-14.5 + - parent: 857 + pos: -2.5,27.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2942 +- uid: 1889 type: solid_wall components: - - parent: 15 - pos: -19.5,-13.5 + - parent: 857 + pos: 1.5,23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2943 +- uid: 1890 type: solid_wall components: - - parent: 15 - pos: -19.5,-12.5 + - parent: 857 + pos: 5.5,23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2944 +- uid: 1891 type: solid_wall components: - - parent: 15 - pos: -20.5,-12.5 + - parent: 857 + pos: 5.5,24.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2945 +- uid: 1892 type: solid_wall components: - - parent: 15 - pos: -21.5,-12.5 + - parent: 857 + pos: 5.5,26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2946 +- uid: 1893 type: solid_wall components: - - parent: 15 - pos: -22.5,-12.5 + - parent: 857 + pos: 5.5,27.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2947 +- uid: 1894 type: solid_wall components: - - parent: 15 - pos: -23.5,-12.5 + - parent: 857 + pos: 6.5,27.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2948 - type: AirlockMaintCommon +- uid: 1895 + type: solid_wall components: - - parent: 15 - pos: -24.5,-12.5 + - parent: 857 + pos: 7.5,27.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2949 - type: DisposalUnit +- uid: 1896 + type: solid_wall components: - - parent: 15 - pos: -10.5,-17.5 + - parent: 857 + pos: 8.5,27.5 rot: -1.5707963267948966 rad type: Transform - - - containers: - DisposalUnit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 2950 - type: DisposalPipe +- uid: 1897 + type: solid_wall components: - - parent: 15 - pos: -24.5,-10.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 2951 - type: DisposalPipe - components: - - parent: 15 - pos: -25.5,-10.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 2952 - type: DisposalPipe - components: - - parent: 15 - pos: -26.5,-10.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 2953 - type: DisposalUnit - components: - - parent: 15 - pos: -27.5,-8.5 - rot: 1.5707963267948966 rad - type: Transform - - - containers: - DisposalUnit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 2954 - type: DisposalPipe - components: - - parent: 15 - pos: -28.5,-10.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 2955 - type: DisposalPipe - components: - - parent: 15 - pos: -29.5,-10.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 2956 - type: DisposalPipe - components: - - parent: 15 - pos: -30.5,-10.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 2957 - type: DisposalPipe - components: - - parent: 15 - pos: -31.5,-10.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 2958 - type: DisposalBend - components: - - parent: 15 - pos: -32.5,-10.5 - rot: 1.5707963267948966 rad - type: Transform - - containers: - DisposalBend: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 2959 - type: DisposalPipe - components: - - parent: 15 - pos: -32.5,-9.5 + - parent: 857 + pos: 9.5,27.5 rot: -1.5707963267948966 rad type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 2960 - type: DisposalPipe +- uid: 1898 + type: LowWall components: - - parent: 15 - pos: -32.5,-8.5 + - parent: 857 + pos: 3.5,22.5 rot: -1.5707963267948966 rad type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 2961 - type: DisposalPipe +- uid: 1899 + type: LowWall components: - - parent: 15 - pos: -32.5,-7.5 + - parent: 857 + pos: -1.5,27.5 rot: -1.5707963267948966 rad type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 2962 - type: DisposalPipe +- uid: 1900 + type: LowWall components: - - parent: 15 - pos: -32.5,-6.5 + - parent: 857 + pos: -0.5,27.5 rot: -1.5707963267948966 rad type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 2963 - type: DisposalPipe +- uid: 1901 + type: LowWall components: - - parent: 15 - pos: -32.5,-5.5 + - parent: 857 + pos: -3.5,29.5 rot: -1.5707963267948966 rad type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 2964 - type: DisposalPipe +- uid: 1902 + type: LowWall components: - - parent: 15 - pos: -32.5,-4.5 + - parent: 857 + pos: 10.5,29.5 rot: -1.5707963267948966 rad type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 2965 - type: DisposalPipe +- uid: 1903 + type: LowWall components: - - parent: 15 - pos: -32.5,-3.5 + - parent: 857 + pos: 9.5,31.5 rot: -1.5707963267948966 rad type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 2966 - type: DisposalPipe +- uid: 1904 + type: LowWall components: - - parent: 15 - pos: -32.5,-2.5 + - parent: 857 + pos: 9.5,32.5 rot: -1.5707963267948966 rad type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 2967 - type: DisposalPipe +- uid: 1905 + type: LowWall components: - - parent: 15 - pos: -32.5,-1.5 + - parent: 857 + pos: 8.5,32.5 rot: -1.5707963267948966 rad type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 2968 - type: DisposalPipe +- uid: 1906 + type: LowWall components: - - parent: 15 - pos: -32.5,-0.5 + - parent: 857 + pos: 8.5,33.5 rot: -1.5707963267948966 rad type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 2969 - type: DisposalPipe +- uid: 1907 + type: LowWall components: - - parent: 15 - pos: -32.5,0.5 + - parent: 857 + pos: 7.5,33.5 rot: -1.5707963267948966 rad type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 2970 - type: DisposalPipe +- uid: 1908 + type: LowWall components: - - parent: 15 - pos: -32.5,1.5 + - parent: 857 + pos: 6.5,33.5 rot: -1.5707963267948966 rad type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 2971 - type: DisposalPipe +- uid: 1909 + type: LowWall components: - - parent: 15 - pos: -32.5,2.5 + - parent: 857 + pos: 5.5,33.5 rot: -1.5707963267948966 rad type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 2972 - type: DisposalPipe +- uid: 1910 + type: LowWall components: - - parent: 15 - pos: -31.5,3.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 2973 - type: DisposalPipe - components: - - parent: 15 - pos: -30.5,3.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 2974 - type: DisposalPipe - components: - - parent: 15 - pos: -29.5,3.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 2975 - type: DisposalPipe - components: - - parent: 15 - pos: -28.5,4.5 + - parent: 857 + pos: 4.5,33.5 rot: -1.5707963267948966 rad type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 2976 - type: DisposalPipe +- uid: 1911 + type: LowWall components: - - parent: 15 - pos: -27.5,3.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 2977 - type: DisposalPipe - components: - - parent: 15 - pos: -26.5,3.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 2978 - type: DisposalPipe - components: - - parent: 15 - pos: -25.5,3.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 2979 - type: DisposalPipe - components: - - parent: 15 - pos: -24.5,3.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 2980 - type: DisposalPipe - components: - - parent: 15 - pos: -23.5,3.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 2981 - type: DisposalUnit - components: - - parent: 15 - pos: -22.5,6.5 - rot: 3.141592653589793 rad - type: Transform - - - containers: - DisposalUnit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 2982 - type: DisposalPipe - components: - - parent: 15 - pos: -21.5,3.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 2983 - type: DisposalPipe - components: - - parent: 15 - pos: -20.5,3.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 2984 - type: DisposalPipe - components: - - parent: 15 - pos: -19.5,3.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 2985 - type: DisposalPipe - components: - - parent: 15 - pos: -18.5,3.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 2986 - type: DisposalPipe - components: - - parent: 15 - pos: -17.5,3.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 2987 - type: DisposalPipe - components: - - parent: 15 - pos: -16.5,3.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 2988 - type: DisposalPipe - components: - - parent: 15 - pos: -15.5,3.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 2989 - type: DisposalPipe - components: - - parent: 15 - pos: -14.5,3.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 2990 - type: DisposalPipe - components: - - parent: 15 - pos: -13.5,3.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 2991 - type: DisposalUnit - components: - - parent: 15 - pos: -12.5,1.5 + - parent: 857 + pos: 3.5,33.5 rot: -1.5707963267948966 rad type: Transform - - - containers: - DisposalUnit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 2992 - type: DisposalPipe +- uid: 1912 + type: LowWall components: - - parent: 15 - pos: -11.5,3.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 2993 - type: DisposalPipe - components: - - parent: 15 - pos: -10.5,3.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 2994 - type: DisposalPipe - components: - - parent: 15 - pos: -9.5,3.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 2995 - type: DisposalPipe - components: - - parent: 15 - pos: -8.5,3.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 2996 - type: DisposalPipe - components: - - parent: 15 - pos: 1.5,3.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 2997 - type: DisposalPipe - components: - - parent: 15 - pos: 0.5,2.5 - rot: 1.5707963267948966 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 2998 - type: DisposalPipe - components: - - parent: 15 - pos: -0.5,3.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 2999 - type: DisposalPipe - components: - - parent: 15 - pos: -1.5,3.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3000 - type: DisposalPipe - components: - - parent: 15 - pos: -2.5,3.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3001 - type: DisposalPipe - components: - - parent: 15 - pos: -3.5,3.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3002 - type: DisposalPipe - components: - - parent: 15 - pos: -4.5,3.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3003 - type: DisposalPipe - components: - - parent: 15 - pos: -5.5,3.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3004 - type: DisposalPipe - components: - - parent: 15 - pos: -6.5,3.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3005 - type: DisposalPipe - components: - - parent: 15 - pos: -7.5,3.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3006 - type: DisposalBend - components: - - parent: 15 - pos: -17.5,-10.5 + - parent: 857 + pos: 2.5,33.5 rot: -1.5707963267948966 rad type: Transform - - containers: - DisposalBend: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3007 - type: DisposalTrunk +- uid: 1913 + type: LowWall components: - - parent: 15 - pos: -22.5,6.5 + - parent: 857 + pos: 1.5,33.5 rot: -1.5707963267948966 rad type: Transform - - containers: - DisposalEntry: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3008 - type: DisposalPipe +- uid: 1914 + type: LowWall components: - - parent: 15 - pos: -22.5,5.5 + - parent: 857 + pos: 0.5,33.5 rot: -1.5707963267948966 rad type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3009 - type: DisposalPipe +- uid: 1915 + type: LowWall components: - - parent: 15 - pos: -22.5,4.5 + - parent: 857 + pos: -0.5,33.5 rot: -1.5707963267948966 rad type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3010 - type: DisposalBend +- uid: 1916 + type: LowWall components: - - parent: 15 - pos: -32.5,3.5 - type: Transform - - containers: - DisposalBend: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3011 - type: DisposalPipe - components: - - parent: 15 - pos: -23.5,-11.5 + - parent: 857 + pos: -1.5,33.5 rot: -1.5707963267948966 rad type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3012 - type: DisposalPipe +- uid: 1917 + type: LowWall components: - - parent: 15 - pos: -23.5,-12.5 + - parent: 857 + pos: -1.5,32.5 rot: -1.5707963267948966 rad type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3013 - type: DisposalPipe +- uid: 1918 + type: LowWall components: - - parent: 15 - pos: -22.5,-10.5 - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3014 - type: DisposalTrunk - components: - - parent: 15 - pos: -12.5,1.5 - rot: 1.5707963267948966 rad - type: Transform - - containers: - DisposalEntry: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3015 - type: DisposalPipe - components: - - parent: 15 - pos: -12.5,2.5 - rot: 1.5707963267948966 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3016 - type: DisposalPipe - components: - - parent: 15 - pos: -21.5,-10.5 - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3017 - type: DisposalTrunk - components: - - parent: 15 - pos: -27.5,-8.5 + - parent: 857 + pos: -2.5,31.5 rot: -1.5707963267948966 rad type: Transform - - containers: - DisposalEntry: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3018 - type: DisposalPipe +- uid: 1919 + type: LowWall components: - - parent: 15 - pos: -27.5,-9.5 + - parent: 857 + pos: -2.5,32.5 rot: -1.5707963267948966 rad type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3019 - type: DisposalUnit +- uid: 1920 + type: LowWall components: - - parent: 15 - pos: 0.5,1.5 + - parent: 857 + pos: 6.5,19.5 rot: -1.5707963267948966 rad type: Transform - - - containers: - DisposalUnit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 3020 - type: DisposalTrunk +- uid: 1921 + type: LowWall components: - - parent: 15 - pos: 0.5,1.5 - rot: 1.5707963267948966 rad - type: Transform - - containers: - DisposalEntry: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3021 - type: DisposalPipe - components: - - parent: 15 - pos: -20.5,-10.5 - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3022 - type: DisposalPipe - components: - - parent: 15 - pos: 2.5,4.5 + - parent: 857 + pos: 6.5,18.5 rot: -1.5707963267948966 rad type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3023 - type: DisposalPipe +- uid: 1922 + type: reinforced_wall components: - - parent: 15 - pos: 3.5,-9.5 - rot: 1.5707963267948966 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3024 - type: DisposalPipe - components: - - parent: 15 - pos: 4.5,3.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3025 - type: DisposalPipe - components: - - parent: 15 - pos: 29.5,3.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3026 - type: DisposalPipe - components: - - parent: 15 - pos: 28.5,3.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3027 - type: DisposalPipe - components: - - parent: 15 - pos: 27.5,3.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3028 - type: DisposalPipe - components: - - parent: 15 - pos: 26.5,3.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3029 - type: DisposalPipe - components: - - parent: 15 - pos: 25.5,3.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3030 - type: DisposalPipe - components: - - parent: 15 - pos: 24.5,4.5 + - parent: 857 + pos: 1.5,15.5 rot: -1.5707963267948966 rad type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3031 - type: DisposalPipe +- uid: 1923 + type: reinforced_wall components: - - parent: 15 - pos: 23.5,3.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3032 - type: DisposalPipe - components: - - parent: 15 - pos: 22.5,3.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3033 - type: DisposalPipe - components: - - parent: 15 - pos: 21.5,3.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3034 - type: DisposalPipe - components: - - parent: 15 - pos: 20.5,3.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3035 - type: DisposalPipe - components: - - parent: 15 - pos: 19.5,3.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3036 - type: DisposalPipe - components: - - parent: 15 - pos: 18.5,3.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3037 - type: DisposalPipe - components: - - parent: 15 - pos: 17.5,3.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3038 - type: DisposalPipe - components: - - parent: 15 - pos: 16.5,3.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3039 - type: DisposalPipe - components: - - parent: 15 - pos: 15.5,3.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3040 - type: DisposalPipe - components: - - parent: 15 - pos: 14.5,3.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3041 - type: DisposalPipe - components: - - parent: 15 - pos: 13.5,3.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3042 - type: DisposalPipe - components: - - parent: 15 - pos: 12.5,2.5 - rot: 1.5707963267948966 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3043 - type: DisposalPipe - components: - - parent: 15 - pos: 11.5,3.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3044 - type: DisposalPipe - components: - - parent: 15 - pos: 10.5,3.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3045 - type: DisposalPipe - components: - - parent: 15 - pos: 9.5,3.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3046 - type: DisposalPipe - components: - - parent: 15 - pos: 8.5,3.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3047 - type: DisposalPipe - components: - - parent: 15 - pos: 7.5,3.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3048 - type: DisposalPipe - components: - - parent: 15 - pos: 6.5,3.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3049 - type: DisposalPipe - components: - - parent: 15 - pos: 5.5,3.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3050 - type: DisposalUnit - components: - - parent: 15 - pos: 12.5,-2.5 - rot: 3.141592653589793 rad - type: Transform - - - containers: - DisposalUnit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 3051 - type: DisposalTrunk - components: - - parent: 15 - pos: 12.5,-2.5 - rot: 1.5707963267948966 rad - type: Transform - - containers: - DisposalEntry: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3052 - type: ConveyorBelt - components: - - parent: 15 - pos: -22.5,-13.5 - type: Transform -- uid: 3053 - type: DisposalPipe - components: - - parent: 15 - pos: 12.5,-0.5 - rot: 1.5707963267948966 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3054 - type: DisposalPipe - components: - - parent: 15 - pos: 12.5,0.5 - rot: 1.5707963267948966 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3055 - type: DisposalPipe - components: - - parent: 15 - pos: 12.5,1.5 - rot: 1.5707963267948966 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3056 - type: DisposalPipe - components: - - parent: 15 - pos: -19.5,-10.5 - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3057 - type: DisposalUnit - components: - - parent: 15 - pos: 11.5,-11.5 - rot: 3.141592653589793 rad - type: Transform - - - containers: - DisposalUnit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 3058 - type: DisposalTrunk - components: - - parent: 15 - pos: 11.5,-11.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalEntry: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3059 - type: DisposalPipe - components: - - parent: 15 - pos: 10.5,-11.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3060 - type: DisposalPipe - components: - - parent: 15 - pos: 9.5,-11.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3061 - type: DisposalPipe - components: - - parent: 15 - pos: 4.5,-11.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3062 - type: DisposalPipe - components: - - parent: 15 - pos: 8.5,-11.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3063 - type: DisposalPipe - components: - - parent: 15 - pos: 7.5,-11.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3064 - type: DisposalPipe - components: - - parent: 15 - pos: 6.5,-11.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3065 - type: DisposalPipe - components: - - parent: 15 - pos: 5.5,-11.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3066 - type: DisposalBend - components: - - parent: 15 - pos: 3.5,-11.5 - rot: 1.5707963267948966 rad - type: Transform - - containers: - DisposalBend: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3067 - type: DisposalPipe - components: - - parent: 15 - pos: 3.5,-10.5 - rot: 1.5707963267948966 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3068 - type: DisposalPipe - components: - - parent: 15 - pos: 3.5,2.5 - rot: 1.5707963267948966 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3069 - type: DisposalPipe - components: - - parent: 15 - pos: 3.5,1.5 - rot: 1.5707963267948966 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3070 - type: DisposalPipe - components: - - parent: 15 - pos: 3.5,0.5 - rot: 1.5707963267948966 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3071 - type: DisposalPipe - components: - - parent: 15 - pos: 3.5,-0.5 - rot: 1.5707963267948966 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3072 - type: DisposalPipe - components: - - parent: 15 - pos: 3.5,-1.5 - rot: 1.5707963267948966 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3073 - type: DisposalPipe - components: - - parent: 15 - pos: 3.5,-2.5 - rot: 1.5707963267948966 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3074 - type: DisposalPipe - components: - - parent: 15 - pos: 3.5,-3.5 - rot: 1.5707963267948966 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3075 - type: DisposalPipe - components: - - parent: 15 - pos: 3.5,-4.5 - rot: 1.5707963267948966 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3076 - type: DisposalPipe - components: - - parent: 15 - pos: 3.5,-5.5 - rot: 1.5707963267948966 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3077 - type: DisposalPipe - components: - - parent: 15 - pos: 3.5,-6.5 - rot: 1.5707963267948966 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3078 - type: DisposalPipe - components: - - parent: 15 - pos: 3.5,-7.5 - rot: 1.5707963267948966 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3079 - type: DisposalPipe - components: - - parent: 15 - pos: 3.5,-8.5 - rot: 1.5707963267948966 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3080 - type: DisposalPipe - components: - - parent: 15 - pos: -18.5,-10.5 - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3081 - type: DisposalUnit - components: - - parent: 15 - pos: -2.5,29.5 - rot: 3.141592653589793 rad - type: Transform - - - containers: - DisposalUnit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 3082 - type: DisposalTrunk - components: - - parent: 15 - pos: -2.5,29.5 - type: Transform - - containers: - DisposalEntry: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3083 - type: DisposalPipe - components: - - parent: 15 - pos: -1.5,29.5 - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3084 - type: DisposalPipe - components: - - parent: 15 - pos: -0.5,29.5 - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3085 - type: DisposalPipe - components: - - parent: 15 - pos: 0.5,29.5 - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3086 - type: DisposalPipe - components: - - parent: 15 - pos: 1.5,29.5 - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3087 - type: DisposalPipe - components: - - parent: 15 - pos: -17.5,-21.5 - rot: 1.5707963267948966 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3088 - type: DisposalPipe - components: - - parent: 15 - pos: 2.5,28.5 + - parent: 857 + pos: 0.5,15.5 rot: -1.5707963267948966 rad type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3089 - type: DisposalPipe +- uid: 1924 + type: reinforced_wall components: - - parent: 15 - pos: 2.5,27.5 + - parent: 857 + pos: -0.5,15.5 rot: -1.5707963267948966 rad type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3090 - type: DisposalPipe +- uid: 1925 + type: reinforced_wall components: - - parent: 15 - pos: 2.5,26.5 + - parent: 857 + pos: -1.5,15.5 rot: -1.5707963267948966 rad type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3091 - type: DisposalPipe +- uid: 1926 + type: reinforced_wall components: - - parent: 15 - pos: 2.5,25.5 + - parent: 857 + pos: -2.5,15.5 rot: -1.5707963267948966 rad type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3092 - type: DisposalPipe +- uid: 1927 + type: reinforced_wall components: - - parent: 15 - pos: 2.5,24.5 + - parent: 857 + pos: -3.5,15.5 rot: -1.5707963267948966 rad type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3093 - type: DisposalPipe +- uid: 1928 + type: reinforced_wall components: - - parent: 15 - pos: 2.5,23.5 + - parent: 857 + pos: -4.5,15.5 rot: -1.5707963267948966 rad type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3094 - type: DisposalPipe +- uid: 1929 + type: reinforced_wall components: - - parent: 15 - pos: 2.5,22.5 + - parent: 857 + pos: -4.5,16.5 rot: -1.5707963267948966 rad type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3095 - type: DisposalPipe +- uid: 1930 + type: reinforced_wall components: - - parent: 15 - pos: 2.5,21.5 - rot: -1.5707963267948966 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3096 - type: DisposalPipe - components: - - parent: 15 - pos: 2.5,20.5 - rot: -1.5707963267948966 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3097 - type: DisposalPipe - components: - - parent: 15 - pos: 2.5,19.5 - rot: -1.5707963267948966 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3098 - type: DisposalPipe - components: - - parent: 15 - pos: 2.5,18.5 - rot: -1.5707963267948966 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3099 - type: DisposalPipe - components: - - parent: 15 - pos: 1.5,17.5 - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3100 - type: DisposalPipe - components: - - parent: 15 - pos: 2.5,16.5 - rot: -1.5707963267948966 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3101 - type: DisposalPipe - components: - - parent: 15 - pos: 2.5,15.5 - rot: -1.5707963267948966 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3102 - type: DisposalPipe - components: - - parent: 15 - pos: 2.5,14.5 - rot: -1.5707963267948966 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3103 - type: DisposalPipe - components: - - parent: 15 - pos: 2.5,13.5 - rot: -1.5707963267948966 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3104 - type: DisposalPipe - components: - - parent: 15 - pos: 2.5,12.5 - rot: -1.5707963267948966 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3105 - type: DisposalPipe - components: - - parent: 15 - pos: 3.5,11.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3106 - type: DisposalPipe - components: - - parent: 15 - pos: 2.5,10.5 - rot: -1.5707963267948966 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3107 - type: DisposalPipe - components: - - parent: 15 - pos: 2.5,9.5 - rot: -1.5707963267948966 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3108 - type: DisposalPipe - components: - - parent: 15 - pos: 2.5,8.5 - rot: -1.5707963267948966 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3109 - type: DisposalPipe - components: - - parent: 15 - pos: 2.5,7.5 - rot: -1.5707963267948966 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3110 - type: DisposalPipe - components: - - parent: 15 - pos: 2.5,6.5 - rot: -1.5707963267948966 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3111 - type: DisposalPipe - components: - - parent: 15 - pos: 2.5,5.5 - rot: -1.5707963267948966 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3112 - type: DisposalBend - components: - - parent: 15 - pos: 2.5,29.5 - rot: -1.5707963267948966 rad - type: Transform - - containers: - DisposalBend: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3113 - type: DisposalUnit - components: - - parent: 15 - pos: 37.5,6.5 - rot: -1.5707963267948966 rad - type: Transform - - - containers: - DisposalUnit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 3114 - type: DisposalTrunk - components: - - parent: 15 - pos: 37.5,6.5 - rot: -1.5707963267948966 rad - type: Transform - - containers: - DisposalEntry: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3115 - type: DisposalPipe - components: - - parent: 15 - pos: 37.5,5.5 - rot: -1.5707963267948966 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3116 - type: DisposalPipe - components: - - parent: 15 - pos: 37.5,4.5 - rot: -1.5707963267948966 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3117 - type: DisposalBend - components: - - parent: 15 - pos: 37.5,3.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalBend: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3118 - type: DisposalPipe - components: - - parent: 15 - pos: 31.5,3.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3119 - type: DisposalPipe - components: - - parent: 15 - pos: 32.5,3.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3120 - type: DisposalPipe - components: - - parent: 15 - pos: 33.5,3.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3121 - type: DisposalPipe - components: - - parent: 15 - pos: 34.5,2.5 - rot: 1.5707963267948966 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3122 - type: DisposalPipe - components: - - parent: 15 - pos: 35.5,3.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3123 - type: DisposalPipe - components: - - parent: 15 - pos: 36.5,3.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3124 - type: DisposalPipe - components: - - parent: 15 - pos: 30.5,3.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3125 - type: DisposalUnit - components: - - parent: 15 - pos: 34.5,-4.5 - rot: 3.141592653589793 rad - type: Transform - - - containers: - DisposalUnit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 3126 - type: DisposalTrunk - components: - - parent: 15 - pos: 34.5,-4.5 - rot: 1.5707963267948966 rad - type: Transform - - containers: - DisposalEntry: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3127 - type: DisposalPipe - components: - - parent: 15 - pos: 34.5,-3.5 - rot: 1.5707963267948966 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3128 - type: DisposalPipe - components: - - parent: 15 - pos: 34.5,-2.5 - rot: 1.5707963267948966 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3129 - type: DisposalPipe - components: - - parent: 15 - pos: 34.5,-1.5 - rot: 1.5707963267948966 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3130 - type: DisposalPipe - components: - - parent: 15 - pos: 34.5,-0.5 - rot: 1.5707963267948966 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3131 - type: DisposalPipe - components: - - parent: 15 - pos: 34.5,0.5 - rot: 1.5707963267948966 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3132 - type: DisposalPipe - components: - - parent: 15 - pos: 34.5,1.5 - rot: 1.5707963267948966 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3133 - type: DisposalPipe - components: - - parent: 15 - pos: -17.5,-20.5 - rot: 1.5707963267948966 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3134 - type: Recycler - components: - - parent: 15 - pos: -21.5,-13.5 - type: Transform -- uid: 3135 - type: DisposalPipe - components: - - parent: 15 - pos: -17.5,-19.5 - rot: 1.5707963267948966 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3136 - type: DisposalPipe - components: - - parent: 15 - pos: 15.5,-1.5 - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3137 - type: DisposalPipe - components: - - parent: 15 - pos: 14.5,-1.5 - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3138 - type: DisposalPipe - components: - - parent: 15 - pos: 13.5,-1.5 - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3139 - type: DisposalUnit - components: - - parent: 15 - pos: 24.5,8.5 - rot: -1.5707963267948966 rad - type: Transform - - - containers: - DisposalUnit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 3140 - type: DisposalTrunk - components: - - parent: 15 - pos: 24.5,8.5 - rot: -1.5707963267948966 rad - type: Transform - - containers: - DisposalEntry: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3141 - type: DisposalPipe - components: - - parent: 15 - pos: 24.5,7.5 - rot: -1.5707963267948966 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3142 - type: DisposalPipe - components: - - parent: 15 - pos: 24.5,6.5 - rot: -1.5707963267948966 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3143 - type: DisposalPipe - components: - - parent: 15 - pos: 24.5,5.5 - rot: -1.5707963267948966 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3144 - type: DisposalPipe - components: - - parent: 15 - pos: -17.5,-18.5 - rot: 1.5707963267948966 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3145 - type: DisposalUnit - components: - - parent: 15 - pos: 6.5,11.5 - rot: 3.141592653589793 rad - type: Transform - - - containers: - DisposalUnit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 3146 - type: DisposalTrunk - components: - - parent: 15 - pos: 6.5,11.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalEntry: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3147 - type: DisposalPipe - components: - - parent: 15 - pos: 5.5,11.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3148 - type: DisposalPipe - components: - - parent: 15 - pos: 4.5,11.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3149 - type: DisposalPipe - components: - - parent: 15 - pos: -17.5,-17.5 - rot: 1.5707963267948966 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3150 - type: DisposalUnit - components: - - parent: 15 - pos: -5.5,17.5 - rot: -1.5707963267948966 rad - type: Transform - - - containers: - DisposalUnit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 3151 - type: DisposalTrunk - components: - - parent: 15 - pos: -5.5,17.5 - type: Transform - - containers: - DisposalEntry: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3152 - type: DisposalPipe - components: - - parent: 15 + - parent: 857 pos: -4.5,17.5 - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3153 - type: DisposalPipe - components: - - parent: 15 - pos: -3.5,17.5 - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3154 - type: DisposalPipe - components: - - parent: 15 - pos: -2.5,17.5 - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3155 - type: DisposalPipe - components: - - parent: 15 - pos: -1.5,17.5 - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3156 - type: DisposalPipe - components: - - parent: 15 - pos: -0.5,17.5 - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3157 - type: DisposalPipe - components: - - parent: 15 - pos: 0.5,17.5 - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3158 - type: DisposalPipe - components: - - parent: 15 - pos: -17.5,-16.5 - rot: 1.5707963267948966 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3159 - type: DisposalBend - components: - - parent: 15 - pos: -8.5,-15.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalBend: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3160 - type: DisposalUnit - components: - - parent: 15 - pos: -29.5,11.5 rot: -1.5707963267948966 rad type: Transform - - - containers: - DisposalUnit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 3161 - type: VendingMachineYouTool +- uid: 1931 + type: reinforced_wall components: - - parent: 15 - pos: -28.5,11.5 + - parent: 857 + pos: -4.5,18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 3162 - type: DisposalPipe +- uid: 1932 + type: reinforced_wall components: - - parent: 15 - pos: -28.5,9.5 + - parent: 857 + pos: -4.5,19.5 rot: -1.5707963267948966 rad type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3163 - type: DisposalPipe +- uid: 1933 + type: reinforced_wall components: - - parent: 15 - pos: -28.5,8.5 + - parent: 857 + pos: -5.5,19.5 rot: -1.5707963267948966 rad type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3164 - type: DisposalPipe +- uid: 1934 + type: LowWall components: - - parent: 15 - pos: -28.5,7.5 + - parent: 857 + pos: -7.5,18.5 rot: -1.5707963267948966 rad type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3165 - type: DisposalPipe +- uid: 1935 + type: reinforced_wall components: - - parent: 15 + - parent: 857 + pos: -3.5,19.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1936 + type: reinforced_wall + components: + - parent: 857 + pos: -2.5,19.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1937 + type: reinforced_wall + components: + - parent: 857 + pos: -1.5,19.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1938 + type: reinforced_wall + components: + - parent: 857 + pos: -0.5,19.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1939 + type: reinforced_wall + components: + - parent: 857 + pos: 0.5,19.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1940 + type: reinforced_wall + components: + - parent: 857 + pos: 0.5,18.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1941 + type: reinforced_wall + components: + - parent: 857 + pos: 0.5,16.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1942 + type: reinforced_wall + components: + - parent: 857 + pos: -5.5,20.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1943 + type: reinforced_wall + components: + - parent: 857 + pos: -5.5,21.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1944 + type: reinforced_wall + components: + - parent: 857 + pos: -5.5,22.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1945 + type: reinforced_wall + components: + - parent: 857 + pos: -6.5,22.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1946 + type: reinforced_wall + components: + - parent: 857 + pos: -7.5,22.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1947 + type: reinforced_wall + components: + - parent: 857 + pos: -8.5,22.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1948 + type: reinforced_wall + components: + - parent: 857 + pos: -9.5,22.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1949 + type: Window + components: + - parent: 857 + pos: 40.5,1.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1950 + type: reinforced_wall + components: + - parent: 857 + pos: -11.5,22.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1951 + type: reinforced_wall + components: + - parent: 857 + pos: -12.5,22.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1952 + type: reinforced_wall + components: + - parent: 857 + pos: -13.5,22.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1953 + type: reinforced_wall + components: + - parent: 857 + pos: -14.5,22.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1954 + type: reinforced_wall + components: + - parent: 857 + pos: -15.5,22.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1955 + type: reinforced_wall + components: + - parent: 857 + pos: -16.5,22.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1956 + type: reinforced_wall + components: + - parent: 857 + pos: -16.5,23.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1957 + type: reinforced_wall + components: + - parent: 857 + pos: -15.5,23.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1958 + type: reinforced_wall + components: + - parent: 857 + pos: -14.5,23.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1959 + type: reinforced_wall + components: + - parent: 857 + pos: -13.5,23.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1960 + type: reinforced_wall + components: + - parent: 857 + pos: -12.5,23.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1961 + type: reinforced_wall + components: + - parent: 857 + pos: -11.5,23.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1962 + type: reinforced_wall + components: + - parent: 857 + pos: -10.5,23.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1963 + type: Window + components: + - parent: 857 + pos: 39.5,1.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1964 + type: reinforced_wall + components: + - parent: 857 + pos: -16.5,21.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1965 + type: reinforced_wall + components: + - parent: 857 + pos: -16.5,20.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1966 + type: reinforced_wall + components: + - parent: 857 + pos: -16.5,19.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1967 + type: reinforced_wall + components: + - parent: 857 + pos: -16.5,18.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1968 + type: reinforced_wall + components: + - parent: 857 + pos: -16.5,17.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1969 + type: reinforced_wall + components: + - parent: 857 + pos: -15.5,21.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1970 + type: reinforced_wall + components: + - parent: 857 + pos: -15.5,20.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1971 + type: reinforced_wall + components: + - parent: 857 + pos: -15.5,19.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1972 + type: reinforced_wall + components: + - parent: 857 + pos: -15.5,18.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1973 + type: reinforced_wall + components: + - parent: 857 + pos: -15.5,17.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1974 + type: reinforced_wall + components: + - parent: 857 + pos: -14.5,17.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1975 + type: reinforced_wall + components: + - parent: 857 + pos: -13.5,17.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1976 + type: reinforced_wall + components: + - parent: 857 + pos: -11.5,17.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1977 + type: reinforced_wall + components: + - parent: 857 + pos: -10.5,17.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1978 + type: reinforced_wall + components: + - parent: 857 + pos: -10.5,18.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1979 + type: reinforced_wall + components: + - parent: 857 + pos: -10.5,19.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1980 + type: reinforced_wall + components: + - parent: 857 + pos: -14.5,8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1981 + type: reinforced_wall + components: + - parent: 857 + pos: -14.5,7.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1982 + type: reinforced_wall + components: + - parent: 857 + pos: -14.5,6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1983 + type: reinforced_wall + components: + - parent: 857 + pos: -13.5,6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1984 + type: reinforced_wall + components: + - parent: 857 + pos: -12.5,6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1985 + type: reinforced_wall + components: + - parent: 857 + pos: -11.5,6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1986 + type: reinforced_wall + components: + - parent: 857 + pos: -10.5,6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1987 + type: reinforced_wall + components: + - parent: 857 + pos: -10.5,7.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1988 + type: reinforced_wall + components: + - parent: 857 + pos: -10.5,8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1989 + type: reinforced_wall + components: + - parent: 857 + pos: -10.5,9.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1990 + type: reinforced_wall + components: + - parent: 857 + pos: -14.5,12.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1991 + type: reinforced_wall + components: + - parent: 857 + pos: -15.5,12.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1992 + type: reinforced_wall + components: + - parent: 857 + pos: -15.5,13.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1993 + type: reinforced_wall + components: + - parent: 857 + pos: -15.5,14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1994 + type: reinforced_wall + components: + - parent: 857 + pos: -15.5,15.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1995 + type: AirlockMaintSecLocked + components: + - parent: 857 + pos: -14.5,11.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1996 + type: reinforced_wall + components: + - parent: 857 + pos: -14.5,10.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1997 + type: reinforced_wall + components: + - parent: 857 + pos: -14.5,9.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1998 + type: solid_wall + components: + - parent: 857 + pos: -6.5,18.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1999 + type: LowWall + components: + - parent: 857 + pos: -10.5,14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2000 + type: solid_wall + components: + - parent: 857 + pos: -9.5,18.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2001 + type: solid_wall + components: + - parent: 857 + pos: -10.5,16.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2002 + type: solid_wall + components: + - parent: 857 + pos: -10.5,13.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2003 + type: solid_wall + components: + - parent: 857 + pos: -10.5,12.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2004 + type: solid_wall + components: + - parent: 857 + pos: -11.5,12.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2005 + type: solid_wall + components: + - parent: 857 + pos: -12.5,12.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2006 + type: solid_wall + components: + - parent: 857 + pos: -13.5,12.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2007 + type: solid_wall + components: + - parent: 857 + pos: -5.5,18.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2008 + type: reinforced_wall + components: + - parent: 857 + pos: 1.5,14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2009 + type: reinforced_wall + components: + - parent: 857 + pos: 1.5,13.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2010 + type: reinforced_wall + components: + - parent: 857 + pos: 1.5,12.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2011 + type: reinforced_wall + components: + - parent: 857 + pos: 1.5,11.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2012 + type: reinforced_wall + components: + - parent: 857 + pos: 1.5,10.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2013 + type: reinforced_wall + components: + - parent: 857 + pos: 1.5,9.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2014 + type: reinforced_wall + components: + - parent: 857 + pos: 1.5,8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2015 + type: reinforced_wall + components: + - parent: 857 + pos: 1.5,7.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2016 + type: reinforced_wall + components: + - parent: 857 + pos: 1.5,6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2017 + type: reinforced_wall + components: + - parent: 857 + pos: -4.5,6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2018 + type: reinforced_wall + components: + - parent: 857 + pos: -1.5,6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2019 + type: reinforced_wall + components: + - parent: 857 + pos: -7.5,6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2020 + type: solid_wall + components: + - parent: 857 + pos: -4.5,7.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2021 + type: solid_wall + components: + - parent: 857 + pos: -4.5,8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2022 + type: solid_wall + components: + - parent: 857 + pos: -4.5,9.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2023 + type: solid_wall + components: + - parent: 857 + pos: -1.5,9.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2024 + type: solid_wall + components: + - parent: 857 + pos: -1.5,7.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2025 + type: solid_wall + components: + - parent: 857 + pos: -1.5,8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2026 + type: LowWall + components: + - parent: 857 + pos: -0.5,9.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2027 + type: LowWall + components: + - parent: 857 + pos: -3.5,9.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2028 + type: LowWall + components: + - parent: 857 + pos: -7.5,9.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2029 + type: LowWall + components: + - parent: 857 + pos: -8.5,9.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2030 + type: solid_wall + components: + - parent: 857 + pos: -15.5,6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2031 + type: solid_wall + components: + - parent: 857 + pos: -17.5,6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2032 + type: solid_wall + components: + - parent: 857 + pos: -18.5,6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2033 + type: solid_wall + components: + - parent: 857 + pos: -18.5,7.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2034 + type: solid_wall + components: + - parent: 857 + pos: -18.5,8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2035 + type: solid_wall + components: + - parent: 857 + pos: -18.5,9.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2036 + type: solid_wall + components: + - parent: 857 + pos: -18.5,10.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2037 + type: solid_wall + components: + - parent: 857 + pos: -18.5,11.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2038 + type: solid_wall + components: + - parent: 857 + pos: -19.5,11.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2039 + type: solid_wall + components: + - parent: 857 + pos: -18.5,14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2040 + type: solid_wall + components: + - parent: 857 + pos: -19.5,14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2041 + type: solid_wall + components: + - parent: 857 + pos: -19.5,15.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2042 + type: solid_wall + components: + - parent: 857 + pos: -19.5,16.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2043 + type: solid_wall + components: + - parent: 857 + pos: -19.5,17.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2044 + type: solid_wall + components: + - parent: 857 + pos: -19.5,18.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2045 + type: solid_wall + components: + - parent: 857 + pos: -19.5,19.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2046 + type: solid_wall + components: + - parent: 857 + pos: -19.5,20.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2047 + type: solid_wall + components: + - parent: 857 + pos: -19.5,21.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2048 + type: solid_wall + components: + - parent: 857 + pos: -19.5,22.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2049 + type: solid_wall + components: + - parent: 857 + pos: -19.5,23.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2050 + type: solid_wall + components: + - parent: 857 + pos: -19.5,24.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2051 + type: solid_wall + components: + - parent: 857 + pos: -19.5,25.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2052 + type: solid_wall + components: + - parent: 857 + pos: -19.5,26.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2053 + type: solid_wall + components: + - parent: 857 + pos: -18.5,26.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2054 + type: solid_wall + components: + - parent: 857 + pos: -17.5,26.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2055 + type: solid_wall + components: + - parent: 857 + pos: -16.5,26.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2056 + type: solid_wall + components: + - parent: 857 + pos: -15.5,26.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2057 + type: solid_wall + components: + - parent: 857 + pos: -14.5,26.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2058 + type: solid_wall + components: + - parent: 857 + pos: -13.5,26.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2059 + type: solid_wall + components: + - parent: 857 + pos: -12.5,26.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2060 + type: solid_wall + components: + - parent: 857 + pos: -11.5,26.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2061 + type: solid_wall + components: + - parent: 857 + pos: -10.5,26.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2062 + type: solid_wall + components: + - parent: 857 + pos: -9.5,26.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2063 + type: solid_wall + components: + - parent: 857 + pos: -8.5,26.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2064 + type: solid_wall + components: + - parent: 857 + pos: -7.5,26.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2065 + type: solid_wall + components: + - parent: 857 + pos: -6.5,26.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2066 + type: solid_wall + components: + - parent: 857 + pos: -6.5,25.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2067 + type: solid_wall + components: + - parent: 857 + pos: -4.5,25.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2068 + type: solid_wall + components: + - parent: 857 + pos: -5.5,25.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2069 + type: solid_wall + components: + - parent: 857 + pos: -20.5,15.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2070 + type: solid_wall + components: + - parent: 857 + pos: -21.5,15.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2071 + type: solid_wall + components: + - parent: 857 + pos: -22.5,15.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2072 + type: solid_wall + components: + - parent: 857 + pos: -23.5,15.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2073 + type: solid_wall + components: + - parent: 857 + pos: -24.5,15.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2074 + type: solid_wall + components: + - parent: 857 + pos: -25.5,15.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2075 + type: solid_wall + components: + - parent: 857 + pos: -26.5,15.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2076 + type: solid_wall + components: + - parent: 857 + pos: -27.5,15.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2077 + type: solid_wall + components: + - parent: 857 + pos: -28.5,15.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2078 + type: solid_wall + components: + - parent: 857 + pos: -29.5,15.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2079 + type: solid_wall + components: + - parent: 857 + pos: -30.5,15.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2080 + type: solid_wall + components: + - parent: 857 + pos: -31.5,15.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2081 + type: solid_wall + components: + - parent: 857 + pos: -32.5,15.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2082 + type: solid_wall + components: + - parent: 857 + pos: -33.5,15.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2083 + type: solid_wall + components: + - parent: 857 + pos: -33.5,14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2084 + type: solid_wall + components: + - parent: 857 + pos: -33.5,13.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2085 + type: solid_wall + components: + - parent: 857 + pos: -33.5,12.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2086 + type: solid_wall + components: + - parent: 857 + pos: -33.5,11.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2087 + type: solid_wall + components: + - parent: 857 + pos: -33.5,10.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2088 + type: solid_wall + components: + - parent: 857 + pos: -21.5,1.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2089 + type: solid_wall + components: + - parent: 857 + pos: -33.5,7.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2090 + type: solid_wall + components: + - parent: 857 + pos: -33.5,6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2091 + type: solid_wall + components: + - parent: 857 + pos: -32.5,6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2092 + type: solid_wall + components: + - parent: 857 + pos: -31.5,6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2093 + type: solid_wall + components: + - parent: 857 + pos: -30.5,6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2094 + type: LowWall + components: + - parent: 857 pos: -28.5,6.5 rot: -1.5707963267948966 rad type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3166 - type: DisposalPipe +- uid: 2095 + type: Window components: - - parent: 15 - pos: -28.5,5.5 + - parent: 857 + pos: -8.5,2.5 rot: -1.5707963267948966 rad type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3167 - type: DisposalPipe +- uid: 2096 + type: Window components: - - parent: 15 - pos: -16.5,-15.5 - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3168 - type: DisposalUnit - components: - - parent: 15 - pos: -17.5,-22.5 - rot: 3.141592653589793 rad - type: Transform - - - containers: - DisposalUnit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 3169 - type: DisposalTrunk - components: - - parent: 15 - pos: -17.5,-22.5 - rot: 1.5707963267948966 rad - type: Transform - - containers: - DisposalEntry: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3170 - type: DisposalPipe - components: - - parent: 15 - pos: -17.5,-11.5 - rot: 1.5707963267948966 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3171 - type: DisposalPipe - components: - - parent: 15 - pos: -17.5,-12.5 - rot: 1.5707963267948966 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3172 - type: DisposalPipe - components: - - parent: 15 - pos: -17.5,-13.5 - rot: 1.5707963267948966 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3173 - type: DisposalPipe - components: - - parent: 15 - pos: -17.5,-14.5 - rot: 1.5707963267948966 rad - type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3174 - type: DisposalJunctionFlipped - components: - - parent: 15 - pos: 3.5,3.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalJunction: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3175 - type: DisposalJunction - components: - - parent: 15 - pos: 2.5,3.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalJunction: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3176 - type: DisposalJunctionFlipped - components: - - parent: 15 - pos: 0.5,3.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalJunction: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3177 - type: DisposalJunctionFlipped - components: - - parent: 15 - pos: -12.5,3.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalJunction: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3178 - type: DisposalJunction - components: - - parent: 15 - pos: -22.5,3.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalJunction: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3179 - type: DisposalJunction - components: - - parent: 15 - pos: -28.5,3.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalJunction: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3180 - type: DisposalJunctionFlipped - components: - - parent: 15 - pos: -27.5,-10.5 - type: Transform - - containers: - DisposalJunction: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3181 - type: DisposalYJunction - components: - - parent: 15 - pos: -23.5,-10.5 + - parent: 857 + pos: -7.5,2.5 rot: -1.5707963267948966 rad type: Transform - - containers: - DisposalJunction: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3182 - type: DisposalJunction +- uid: 2097 + type: solid_wall components: - - parent: 15 - pos: -17.5,-15.5 - rot: 1.5707963267948966 rad - type: Transform - - containers: - DisposalJunction: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3183 - type: DisposalJunctionFlipped - components: - - parent: 15 - pos: -10.5,-15.5 - rot: 3.141592653589793 rad - type: Transform - - containers: - DisposalJunction: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3184 - type: DisposalJunctionFlipped - components: - - parent: 15 - pos: 2.5,11.5 + - parent: 857 + pos: -26.5,6.5 rot: -1.5707963267948966 rad type: Transform - - containers: - DisposalJunction: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3185 - type: DisposalJunction +- uid: 2098 + type: solid_wall components: - - parent: 15 - pos: 2.5,17.5 + - parent: 857 + pos: -26.5,7.5 rot: -1.5707963267948966 rad type: Transform - - containers: - DisposalJunction: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3186 - type: DisposalJunctionFlipped +- uid: 2099 + type: solid_wall components: - - parent: 15 - pos: 12.5,3.5 - rot: 3.141592653589793 rad + - parent: 857 + pos: -25.5,7.5 + rot: -1.5707963267948966 rad type: Transform - - containers: - DisposalJunction: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3187 - type: DisposalJunction +- uid: 2100 + type: solid_wall components: - - parent: 15 - pos: 12.5,-1.5 - rot: 1.5707963267948966 rad + - parent: 857 + pos: -30.5,7.5 + rot: -1.5707963267948966 rad type: Transform - - containers: - DisposalJunction: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3188 - type: DisposalJunction +- uid: 2101 + type: solid_wall components: - - parent: 15 - pos: 24.5,3.5 - rot: 3.141592653589793 rad + - parent: 857 + pos: -30.5,8.5 + rot: -1.5707963267948966 rad type: Transform - - containers: - DisposalJunction: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3189 - type: DisposalJunctionFlipped +- uid: 2102 + type: solid_wall components: - - parent: 15 - pos: 34.5,3.5 - rot: 3.141592653589793 rad + - parent: 857 + pos: -30.5,9.5 + rot: -1.5707963267948966 rad type: Transform - - containers: - DisposalJunction: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3190 - type: ConveyorSwitch +- uid: 2103 + type: solid_wall components: - - parent: 15 - pos: -23.467268,-14.347846 - rot: 3.141592653589793 rad + - parent: 857 + pos: -30.5,10.5 + rot: -1.5707963267948966 rad type: Transform - - conveyors: [] - switches: [] - type: ConveyorSwitch -- uid: 3191 - type: DisposalPipe +- uid: 2104 + type: solid_wall components: - - parent: 15 - pos: 16.5,-1.5 + - parent: 857 + pos: -30.5,11.5 + rot: -1.5707963267948966 rad type: Transform - - containers: - DisposalTransit: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3192 - type: DisposalBend +- uid: 2105 + type: solid_wall components: - - parent: 15 - pos: 17.5,-1.5 - rot: 3.141592653589793 rad + - parent: 857 + pos: -30.5,12.5 + rot: -1.5707963267948966 rad type: Transform - - containers: - DisposalBend: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3193 - type: DisposalBend +- uid: 2106 + type: solid_wall components: - - parent: 15 - pos: 17.5,-0.5 + - parent: 857 + pos: -28.5,12.5 + rot: -1.5707963267948966 rad type: Transform - - containers: - DisposalBend: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer - -- uid: 3194 - type: Beaker +- uid: 2107 + type: solid_wall components: - - parent: 15 - pos: 18.361881,1.6674205 - rot: 3.141592653589793 rad + - parent: 857 + pos: -27.5,12.5 + rot: -1.5707963267948966 rad type: Transform - - anchored: False - type: Collidable -- uid: 3195 - type: LargeBeaker +- uid: 2108 + type: solid_wall components: - - parent: 15 - pos: 18.611881,1.2455455 - rot: 3.141592653589793 rad + - parent: 857 + pos: -26.5,12.5 + rot: -1.5707963267948966 rad type: Transform - - anchored: False - type: Collidable -- uid: 3196 - type: ConveyorBelt +- uid: 2109 + type: solid_wall components: - - parent: 15 - pos: -23.5,-13.5 + - parent: 857 + pos: -25.5,12.5 + rot: -1.5707963267948966 rad type: Transform -- uid: 3197 - type: AirlockMaintCargo +- uid: 2110 + type: solid_wall components: - - parent: 15 - pos: -24.5,-12.5 + - parent: 857 + pos: -24.5,12.5 + rot: -1.5707963267948966 rad type: Transform -- uid: 3198 - type: SignDirectionalSupply +- uid: 2111 + type: solid_wall components: - - parent: 15 - pos: -25.704908,7.5 - rot: 1.5707963267948966 rad + - parent: 857 + pos: -23.5,12.5 + rot: -1.5707963267948966 rad type: Transform -- uid: 3199 - type: SignDirectionalEvac +- uid: 2112 + type: solid_wall components: - - parent: 15 - pos: -20.488556,6.5 - rot: 1.5707963267948966 rad + - parent: 857 + pos: -22.5,12.5 + rot: -1.5707963267948966 rad type: Transform -- uid: 3200 +- uid: 2113 + type: solid_wall + components: + - parent: 857 + pos: -29.5,12.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2114 + type: solid_wall + components: + - parent: 857 + pos: -22.5,11.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2115 + type: solid_wall + components: + - parent: 857 + pos: -22.5,11.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2116 + type: solid_wall + components: + - parent: 857 + pos: -21.5,11.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2117 + type: solid_wall + components: + - parent: 857 + pos: -22.5,10.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2118 + type: solid_wall + components: + - parent: 857 + pos: -22.5,8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2119 + type: solid_wall + components: + - parent: 857 + pos: -22.5,7.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2120 + type: solid_wall + components: + - parent: 857 + pos: -21.5,7.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2121 + type: solid_wall + components: + - parent: 857 + pos: -21.5,6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2122 + type: solid_wall + components: + - parent: 857 + pos: -20.5,6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2123 + type: solid_wall + components: + - parent: 857 + pos: -19.5,6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2124 + type: solid_wall + components: + - parent: 857 + pos: -25.5,11.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2125 type: LowWall components: - - parent: 15 - pos: 21.5,16.5 + - parent: 857 + pos: -25.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 3201 +- uid: 2126 type: LowWall components: - - parent: 15 - pos: 21.5,15.5 + - parent: 857 + pos: -2.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 3202 - type: solid_wall - components: - - parent: 15 - pos: 18.5,14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 3203 - type: solid_wall - components: - - parent: 15 - pos: 24.5,14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 3204 - type: SignCargoDock - components: - - parent: 15 - pos: 18.501179,14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 3205 - type: SignChem - components: - - parent: 15 - pos: 14.317627,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 3206 - type: SignEVA - components: - - parent: 15 - pos: 10.691145,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 3207 - type: Poweredlight - components: - - parent: 15 - pos: 28.73304,7 - rot: -1.5707963267948966 rad - type: Transform - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 3208 - type: SignToolStorage - components: - - parent: 15 - pos: -26.694574,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 3209 - type: SignGravity - components: - - parent: 15 - pos: 48.325787,-1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 3210 - type: SignMedical - components: - - parent: 15 - pos: 6.500677,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 3211 - type: SignRND - components: - - parent: 15 - pos: -5.506548,-18.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 3212 - type: Poweredlight - components: - - parent: 15 - pos: -15.231159,-17 - rot: -1.5707963267948966 rad - type: Transform - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 3213 - type: Poweredlight - components: - - parent: 15 - pos: -25.939785,7 - type: Transform - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 3214 - type: SignBridge - components: - - parent: 15 - pos: 5.6507263,22.5 - type: Transform -- uid: 3215 - type: SignDirectionalEng - components: - - parent: 15 - pos: 5.987236,6.2578936 - type: Transform -- uid: 3216 - type: PlaqueZum - components: - - parent: 15 - pos: 33.498077,11.399912 - rot: 1.5707963267948966 rad - type: Transform -- uid: 3217 - type: Poweredlight - components: - - parent: 15 - pos: 49.53657,5 - rot: -1.5707963267948966 rad - type: Transform - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 3218 - type: Poweredlight - components: - - parent: 15 - pos: -10,13.5 - type: Transform - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 3219 - type: Poweredlight - components: - - parent: 15 - pos: 41.000477,14 - rot: -1.5707963267948966 rad - type: Transform - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 3220 - type: SignEngineering - components: - - parent: 15 - pos: 30.305984,-0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 3221 - type: Table - components: - - parent: 15 - pos: -14.5,21.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 3222 - type: Table - components: - - parent: 15 - pos: -13.5,21.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 3223 - type: Table - components: - - parent: 15 - pos: -14.5,20.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 3224 - type: TaserGun - components: - - parent: 15 - pos: -13.672081,21.719378 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - containers: - BatteryBarrel-powercell-container: - entities: - - 3225 - type: Content.Server.GameObjects.ContainerSlot - BatteryBarrel-ammo-container: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 3225 - type: PowerCellSmallStandard - components: - - parent: 3224 - type: Transform - - startingCharge: 1000 - type: PowerCell - - anchored: False - type: Collidable -- uid: 3226 - type: TaserGun - components: - - parent: 15 - pos: -14.515831,21.735003 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - containers: - BatteryBarrel-powercell-container: - entities: - - 3227 - type: Content.Server.GameObjects.ContainerSlot - BatteryBarrel-ammo-container: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 3227 - type: PowerCellSmallStandard - components: - - parent: 3226 - type: Transform - - startingCharge: 1000 - type: PowerCell - - anchored: False - type: Collidable -- uid: 3228 - type: Stunbaton - components: - - parent: 15 - pos: -14.609581,20.969378 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - containers: - stunbaton_cell_container: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 3229 - type: Stunbaton - components: - - parent: 15 - pos: -14.484581,20.641253 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable - - containers: - stunbaton_cell_container: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 3230 - type: Chair - components: - - parent: 15 - pos: 8.5,1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 3231 - type: Chair - components: - - parent: 15 - pos: 9.5,1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 3232 - type: Chair - components: - - parent: 15 - pos: 10.5,1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 3233 - type: S - components: - - parent: 15 - pos: -9.816995,-25.23114 - type: Transform - - anchored: False - type: Collidable -- uid: 3234 - type: HatHardhatRed - components: - - parent: 15 - pos: 31.201477,-4.05181 - type: Transform - - anchored: False - type: Collidable -- uid: 3235 - type: HatHardhatWhite - components: - - parent: 15 - pos: 31.623352,-4.14556 - type: Transform - - anchored: False - type: Collidable -- uid: 3236 - type: HatHardhatYellow - components: - - parent: 15 - pos: 31.357727,-4.36431 - type: Transform - - anchored: False - type: Collidable -- uid: 3237 - type: FlashlightLantern - components: - - parent: 15 - pos: 30.545227,-4.17681 - type: Transform - - anchored: False - type: Collidable - - containers: - flashlight_cell_container: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 3238 - type: FlashlightLantern - components: - - parent: 15 - pos: 30.248352,-4.36431 - type: Transform - - anchored: False - type: Collidable - - containers: - flashlight_cell_container: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 3239 - type: RandHandTele - components: - - parent: 15 - pos: 8.379866,26.654026 - type: Transform - - anchored: False - type: Collidable -- uid: 3240 - type: DrinkHotCoffee - components: - - parent: 15 - pos: 8.661116,25.513401 - type: Transform - - caps: PourIn, PourOut, Injectable - type: Solution - - anchored: False - type: Collidable -- uid: 3241 - type: Paper - components: - - parent: 15 - pos: 8.379866,25.982151 - type: Transform - - anchored: False - type: Collidable -- uid: 3242 - type: SignAtmos - components: - - parent: 15 - pos: 31.498556,7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 3243 - type: SignSomethingOld - components: - - parent: 15 - pos: 17.158585,-23.619913 - rot: -1.5707963267948966 rad - type: Transform -- uid: 3244 - type: SignSomethingOld2 - components: - - parent: 15 - pos: 24.996767,-0.60842 - rot: -1.5707963267948966 rad - type: Transform -- uid: 3245 - type: Basketball - components: - - parent: 15 - pos: -1.5183675,-6.4951944 - type: Transform - - anchored: False - type: Collidable -- uid: 3246 - type: WaterTankFull - components: - - parent: 15 - pos: 0.5,-11.5 - type: Transform - - anchored: False - type: Collidable -- uid: 3247 - type: WeldingFuelTank - components: - - parent: 15 - pos: -1.5,-11.5 - type: Transform - - anchored: False - type: Collidable -- uid: 3248 - type: RCD - components: - - parent: 15 - pos: 29.4025,-4.489469 - type: Transform - - anchored: False - type: Collidable -- uid: 3249 - type: RCD - components: - - parent: 15 - pos: 29.55875,-4.333219 - type: Transform - - anchored: False - type: Collidable -- uid: 3250 - type: MaskJoy - components: - - parent: 15 - pos: -9.360208,-25.487799 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable -- uid: 3251 - type: Brutepack - components: - - parent: 15 - pos: 6.839255,-3.3712535 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable -- uid: 3252 - type: solid_wall - components: - - parent: 15 - pos: -25.5,-12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 3253 - type: solid_wall - components: - - parent: 15 - pos: -25.5,-13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 3254 - type: solid_wall - components: - - parent: 15 - pos: -25.5,-14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 3255 - type: solid_wall - components: - - parent: 15 - pos: -25.5,-15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 3256 - type: solid_wall - components: - - parent: 15 - pos: -25.5,-16.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 3257 - type: solid_wall - components: - - parent: 15 - pos: -24.5,-16.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 3258 - type: solid_wall - components: - - parent: 15 - pos: -23.5,-16.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 3259 - type: solid_wall - components: - - parent: 15 - pos: -22.5,-16.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 3260 +- uid: 2127 type: LowWall components: - - parent: 15 - pos: 26.5,14.5 + - parent: 857 + pos: -3.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 3261 +- uid: 2128 type: LowWall components: - - parent: 15 - pos: 27.5,14.5 + - parent: 857 + pos: -0.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 3262 +- uid: 2129 type: LowWall components: - - parent: 15 - pos: 28.5,14.5 + - parent: 857 + pos: 0.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 3263 - type: ReinforcedWindow +- uid: 2130 + type: LowWall components: - - parent: 15 - pos: 26.5,14.5 + - parent: 857 + pos: 14.5,8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 3264 - type: ReinforcedWindow +- uid: 2131 + type: solid_wall components: - - parent: 15 - pos: 27.5,14.5 + - parent: 857 + pos: 30.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 3265 - type: ReinforcedWindow +- uid: 2132 + type: solid_wall components: - - parent: 15 - pos: 28.5,14.5 + - parent: 857 + pos: 30.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 3266 +- uid: 2133 + type: solid_wall + components: + - parent: 857 + pos: 29.5,-0.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2134 + type: solid_wall + components: + - parent: 857 + pos: 28.5,-0.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2135 + type: solid_wall + components: + - parent: 857 + pos: 27.5,-0.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2136 + type: solid_wall + components: + - parent: 857 + pos: 26.5,-0.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2137 + type: solid_wall + components: + - parent: 857 + pos: 25.5,-0.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2138 + type: solid_wall + components: + - parent: 857 + pos: 24.5,-0.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2139 + type: solid_wall + components: + - parent: 857 + pos: 24.5,0.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2140 + type: solid_wall + components: + - parent: 857 + pos: 24.5,1.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2141 + type: solid_wall + components: + - parent: 857 + pos: 24.5,2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2142 + type: solid_wall + components: + - parent: 857 + pos: 23.5,2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2143 + type: solid_wall + components: + - parent: 857 + pos: 22.5,2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2144 + type: solid_wall + components: + - parent: 857 + pos: 19.5,2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2145 + type: solid_wall + components: + - parent: 857 + pos: 18.5,2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2146 + type: solid_wall + components: + - parent: 857 + pos: 17.5,2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2147 + type: solid_wall + components: + - parent: 857 + pos: 16.5,2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2148 + type: solid_wall + components: + - parent: 857 + pos: 15.5,2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2149 + type: solid_wall + components: + - parent: 857 + pos: 14.5,2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2150 + type: solid_wall + components: + - parent: 857 + pos: 13.5,2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2151 + type: solid_wall + components: + - parent: 857 + pos: 12.5,2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2152 + type: solid_wall + components: + - parent: 857 + pos: 6.5,2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2153 + type: solid_wall + components: + - parent: 857 + pos: 5.5,2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2154 + type: solid_wall + components: + - parent: 857 + pos: 5.5,1.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2155 + type: solid_wall + components: + - parent: 857 + pos: 20.5,2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2156 + type: solid_wall + components: + - parent: 857 + pos: 19.5,1.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2157 + type: solid_wall + components: + - parent: 857 + pos: 19.5,0.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2158 + type: solid_wall + components: + - parent: 857 + pos: 19.5,-0.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2159 + type: solid_wall + components: + - parent: 857 + pos: 19.5,-1.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2160 + type: solid_wall + components: + - parent: 857 + pos: 19.5,-2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2161 + type: solid_wall + components: + - parent: 857 + pos: 13.5,-2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2162 + type: solid_wall + components: + - parent: 857 + pos: 13.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2163 + type: solid_wall + components: + - parent: 857 + pos: 14.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2164 + type: solid_wall + components: + - parent: 857 + pos: 13.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2165 + type: solid_wall + components: + - parent: 857 + pos: 5.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2166 + type: solid_wall + components: + - parent: 857 + pos: 5.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2167 + type: solid_wall + components: + - parent: 857 + pos: 5.5,-5.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2168 + type: solid_wall + components: + - parent: 857 + pos: 5.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2169 + type: solid_wall + components: + - parent: 857 + pos: 5.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2170 + type: solid_wall + components: + - parent: 857 + pos: 5.5,-12.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2171 + type: solid_wall + components: + - parent: 857 + pos: 5.5,-11.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2172 + type: LowWall + components: + - parent: 857 + pos: 5.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2173 + type: LowWall + components: + - parent: 857 + pos: 5.5,-9.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2174 + type: LowWall + components: + - parent: 857 + pos: 5.5,-10.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2175 + type: LowWall + components: + - parent: 857 + pos: 13.5,-1.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2176 + type: LowWall + components: + - parent: 857 + pos: 13.5,1.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2177 + type: LowWall + components: + - parent: 857 + pos: 13.5,-0.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2178 + type: LowWall + components: + - parent: 857 + pos: 16.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2179 + type: LowWall + components: + - parent: 857 + pos: 11.5,2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2180 + type: LowWall + components: + - parent: 857 + pos: 10.5,2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2181 + type: LowWall + components: + - parent: 857 + pos: 9.5,2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2182 + type: LowWall + components: + - parent: 857 + pos: 8.5,2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2183 + type: LowWall + components: + - parent: 857 + pos: 7.5,2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2184 + type: LowWall + components: + - parent: 857 + pos: 6.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2185 + type: LowWall + components: + - parent: 857 + pos: 9.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2186 + type: LowWall + components: + - parent: 857 + pos: 8.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2187 + type: LowWall + components: + - parent: 857 + pos: 13.5,-5.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2188 + type: LowWall + components: + - parent: 857 + pos: 13.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2189 + type: LowWall + components: + - parent: 857 + pos: 12.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2190 + type: LowWall + components: + - parent: 857 + pos: 18.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2191 + type: solid_wall + components: + - parent: 857 + pos: 19.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2192 + type: solid_wall + components: + - parent: 857 + pos: 20.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2193 + type: solid_wall + components: + - parent: 857 + pos: 21.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2194 + type: solid_wall + components: + - parent: 857 + pos: 22.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2195 + type: solid_wall + components: + - parent: 857 + pos: 23.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2196 + type: solid_wall + components: + - parent: 857 + pos: 24.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2197 + type: solid_wall + components: + - parent: 857 + pos: 25.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2198 + type: solid_wall + components: + - parent: 857 + pos: 25.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2199 + type: solid_wall + components: + - parent: 857 + pos: 25.5,-5.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2200 + type: solid_wall + components: + - parent: 857 + pos: 25.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2201 + type: solid_wall + components: + - parent: 857 + pos: 25.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2202 + type: solid_wall + components: + - parent: 857 + pos: 24.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2203 + type: solid_wall + components: + - parent: 857 + pos: 23.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2204 + type: solid_wall + components: + - parent: 857 + pos: 22.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2205 + type: solid_wall + components: + - parent: 857 + pos: 21.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2206 + type: solid_wall + components: + - parent: 857 + pos: 20.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2207 + type: solid_wall + components: + - parent: 857 + pos: 20.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2208 + type: solid_wall + components: + - parent: 857 + pos: 16.5,-18.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2209 + type: solid_wall + components: + - parent: 857 + pos: 20.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2210 + type: solid_wall + components: + - parent: 857 + pos: 20.5,-9.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2211 + type: Window + components: + - parent: 857 + pos: 20.5,-14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2212 + type: solid_wall + components: + - parent: 857 + pos: 20.5,-11.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2213 + type: solid_wall + components: + - parent: 857 + pos: 21.5,-11.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2214 + type: solid_wall + components: + - parent: 857 + pos: 22.5,-11.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2215 + type: solid_wall + components: + - parent: 857 + pos: 23.5,-11.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2216 + type: solid_wall + components: + - parent: 857 + pos: 24.5,-11.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2217 + type: solid_wall + components: + - parent: 857 + pos: 25.5,-11.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2218 + type: solid_wall + components: + - parent: 857 + pos: 25.5,-12.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2219 + type: solid_wall + components: + - parent: 857 + pos: 25.5,-13.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2220 + type: solid_wall + components: + - parent: 857 + pos: 25.5,-14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2221 + type: solid_wall + components: + - parent: 857 + pos: 25.5,-15.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2222 + type: solid_wall + components: + - parent: 857 + pos: 25.5,-16.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2223 + type: solid_wall + components: + - parent: 857 + pos: 24.5,-16.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2224 + type: solid_wall + components: + - parent: 857 + pos: 23.5,-16.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2225 + type: solid_wall + components: + - parent: 857 + pos: 22.5,-16.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2226 + type: solid_wall + components: + - parent: 857 + pos: 21.5,-16.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2227 + type: solid_wall + components: + - parent: 857 + pos: 20.5,-16.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2228 + type: Window + components: + - parent: 857 + pos: 20.5,-5.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2229 + type: solid_wall + components: + - parent: 857 + pos: 15.5,-18.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2230 + type: solid_wall + components: + - parent: 857 + pos: 20.5,-17.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2231 + type: solid_wall + components: + - parent: 857 + pos: 20.5,-18.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2232 + type: solid_wall + components: + - parent: 857 + pos: 46.5,5.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2233 + type: solid_wall + components: + - parent: 857 + pos: 45.5,5.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2234 + type: solid_wall + components: + - parent: 857 + pos: 48.5,5.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2235 + type: LowWall + components: + - parent: 857 + pos: 20.5,-14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2236 + type: LowWall + components: + - parent: 857 + pos: 20.5,-5.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2237 + type: LowWall + components: + - parent: 857 + pos: 11.5,-14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2238 + type: LowWall + components: + - parent: 857 + pos: 11.5,-15.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2239 + type: LowWall + components: + - parent: 857 + pos: 9.5,-12.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2240 + type: Window + components: + - parent: 857 + pos: 9.5,-12.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2241 + type: solid_wall + components: + - parent: 857 + pos: 11.5,-12.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2242 + type: Window + components: + - parent: 857 + pos: 11.5,-15.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2243 + type: solid_wall + components: + - parent: 857 + pos: 6.5,-12.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2244 + type: Window + components: + - parent: 857 + pos: 20.5,-12.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2245 + type: solid_wall + components: + - parent: 857 + pos: 6.5,-13.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2246 + type: solid_wall + components: + - parent: 857 + pos: 6.5,-14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2247 + type: solid_wall + components: + - parent: 857 + pos: 6.5,-15.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2248 + type: solid_wall + components: + - parent: 857 + pos: 6.5,-16.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2249 + type: solid_wall + components: + - parent: 857 + pos: 6.5,-17.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2250 + type: solid_wall + components: + - parent: 857 + pos: 7.5,-17.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2251 + type: solid_wall + components: + - parent: 857 + pos: 8.5,-17.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2252 + type: solid_wall + components: + - parent: 857 + pos: 9.5,-17.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2253 + type: solid_wall + components: + - parent: 857 + pos: 10.5,-17.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2254 + type: solid_wall + components: + - parent: 857 + pos: 11.5,-17.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2255 + type: Window + components: + - parent: 857 + pos: 11.5,-14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2256 + type: solid_wall + components: + - parent: 857 + pos: 11.5,-18.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2257 + type: solid_wall + components: + - parent: 857 + pos: 12.5,-18.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2258 + type: solid_wall + components: + - parent: 857 + pos: 13.5,-18.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2259 + type: solid_wall + components: + - parent: 857 + pos: 6.5,-18.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2260 + type: solid_wall + components: + - parent: 857 + pos: 6.5,-20.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2261 + type: solid_wall + components: + - parent: 857 + pos: 28.5,-1.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2262 + type: solid_wall + components: + - parent: 857 + pos: 28.5,-2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2263 + type: solid_wall + components: + - parent: 857 + pos: 28.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2264 + type: solid_wall + components: + - parent: 857 + pos: 28.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2265 + type: solid_wall + components: + - parent: 857 + pos: 28.5,-5.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2266 + type: solid_wall + components: + - parent: 857 + pos: 29.5,-5.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2267 + type: solid_wall + components: + - parent: 857 + pos: 30.5,-5.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2268 + type: solid_wall + components: + - parent: 857 + pos: 31.5,-5.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2269 + type: solid_wall + components: + - parent: 857 + pos: 32.5,-5.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2270 + type: solid_wall + components: + - parent: 857 + pos: 34.5,-5.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2271 + type: solid_wall + components: + - parent: 857 + pos: 35.5,-5.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2272 + type: solid_wall + components: + - parent: 857 + pos: 36.5,-5.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2273 + type: solid_wall + components: + - parent: 857 + pos: 36.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2274 + type: solid_wall + components: + - parent: 857 + pos: 36.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2275 + type: solid_wall + components: + - parent: 857 + pos: 1.5,1.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2276 + type: solid_wall + components: + - parent: 857 + pos: 1.5,2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2277 + type: solid_wall + components: + - parent: 857 + pos: 0.5,2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2278 + type: solid_wall + components: + - parent: 857 + pos: 1.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2279 + type: solid_wall + components: + - parent: 857 + pos: 1.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2280 + type: solid_wall + components: + - parent: 857 + pos: 1.5,-5.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2281 + type: solid_wall + components: + - parent: 857 + pos: 1.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2282 + type: solid_wall + components: + - parent: 857 + pos: 0.5,-5.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2283 + type: solid_wall + components: + - parent: 857 + pos: -0.5,-5.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2284 + type: solid_wall + components: + - parent: 857 + pos: -1.5,-5.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2285 + type: solid_wall + components: + - parent: 857 + pos: -2.5,-5.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2286 + type: solid_wall + components: + - parent: 857 + pos: 1.5,-9.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2287 + type: solid_wall + components: + - parent: 857 + pos: 1.5,-10.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2288 + type: solid_wall + components: + - parent: 857 + pos: 1.5,-11.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2289 + type: solid_wall + components: + - parent: 857 + pos: 1.5,-12.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2290 + type: solid_wall + components: + - parent: 857 + pos: 1.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2291 + type: solid_wall + components: + - parent: 857 + pos: 0.5,-12.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2292 + type: solid_wall + components: + - parent: 857 + pos: -0.5,-12.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2293 + type: solid_wall + components: + - parent: 857 + pos: -1.5,-12.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2294 + type: solid_wall + components: + - parent: 857 + pos: -2.5,-12.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2295 + type: solid_wall + components: + - parent: 857 + pos: 0.5,-13.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2296 + type: solid_wall + components: + - parent: 857 + pos: -5.5,-18.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2297 + type: solid_wall + components: + - parent: 857 + pos: 0.5,-17.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2298 + type: solid_wall + components: + - parent: 857 + pos: 0.5,-18.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2299 + type: solid_wall + components: + - parent: 857 + pos: -0.5,-18.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2300 + type: solid_wall + components: + - parent: 857 + pos: -6.5,-18.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2301 + type: solid_wall + components: + - parent: 857 + pos: -1.5,-18.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2302 + type: solid_wall + components: + - parent: 857 + pos: -2.5,-11.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2303 + type: solid_wall + components: + - parent: 857 + pos: -3.5,-11.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2304 + type: AirlockServiceLocked + components: + - name: Freezer + type: MetaData + - parent: 857 + pos: -12.5,-2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2305 + type: solid_wall + components: + - parent: 857 + pos: -5.5,-11.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2306 + type: solid_wall + components: + - parent: 857 + pos: -6.5,-11.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2307 + type: solid_wall + components: + - parent: 857 + pos: -6.5,-12.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2308 + type: solid_wall + components: + - parent: 857 + pos: -6.5,-13.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2309 + type: solid_wall + components: + - parent: 857 + pos: -6.5,-14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2310 + type: solid_wall + components: + - parent: 857 + pos: -6.5,-15.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2311 + type: solid_wall + components: + - parent: 857 + pos: -6.5,-16.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2312 + type: solid_wall + components: + - parent: 857 + pos: -6.5,-17.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2313 + type: LowWall + components: + - parent: 857 + pos: -2.5,-18.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2314 + type: LowWall + components: + - parent: 857 + pos: -4.5,-18.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2315 + type: LowWall + components: + - parent: 857 + pos: 0.5,-16.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2316 + type: solid_wall + components: + - parent: 857 + pos: -7.5,-21.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2317 + type: solid_wall + components: + - parent: 857 + pos: 1.5,-22.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2318 + type: solid_wall + components: + - parent: 857 + pos: 0.5,-22.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2319 + type: solid_wall + components: + - parent: 857 + pos: 0.5,-21.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2320 + type: solid_wall + components: + - parent: 857 + pos: -0.5,-21.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2321 + type: solid_wall + components: + - parent: 857 + pos: -1.5,-21.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2322 + type: LowWall + components: + - parent: 857 + pos: -4.5,-21.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2323 + type: solid_wall + components: + - parent: 857 + pos: -1.5,-22.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2324 + type: solid_wall + components: + - parent: 857 + pos: -1.5,-23.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2325 + type: solid_wall + components: + - parent: 857 + pos: -1.5,-24.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2326 + type: solid_wall + components: + - parent: 857 + pos: -1.5,-25.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2327 + type: solid_wall + components: + - parent: 857 + pos: -2.5,-25.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2328 + type: solid_wall + components: + - parent: 857 + pos: -3.5,-25.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2329 + type: solid_wall + components: + - parent: 857 + pos: -4.5,-25.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2330 + type: solid_wall + components: + - parent: 857 + pos: -5.5,-25.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2331 + type: solid_wall + components: + - parent: 857 + pos: -6.5,-25.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2332 + type: solid_wall + components: + - parent: 857 + pos: -6.5,-24.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2333 + type: solid_wall + components: + - parent: 857 + pos: -6.5,-23.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2334 + type: solid_wall + components: + - parent: 857 + pos: -6.5,-22.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2335 + type: solid_wall + components: + - parent: 857 + pos: -6.5,-21.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2336 + type: LowWall + components: + - parent: 857 + pos: -2.5,-21.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2337 + type: LowWall + components: + - parent: 857 + pos: -5.5,-21.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2338 + type: solid_wall + components: + - parent: 857 + pos: -9.5,-21.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2339 + type: reinforced_wall + components: + - parent: 857 + pos: -12.5,-27.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2340 + type: reinforced_wall + components: + - parent: 857 + pos: -13.5,-27.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2341 + type: reinforced_wall + components: + - parent: 857 + pos: -14.5,-27.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2342 + type: reinforced_wall + components: + - parent: 857 + pos: -15.5,-27.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2343 + type: reinforced_wall + components: + - parent: 857 + pos: -16.5,-27.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2344 + type: reinforced_wall + components: + - parent: 857 + pos: -17.5,-27.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2345 + type: reinforced_wall + components: + - parent: 857 + pos: -18.5,-27.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2346 + type: reinforced_wall + components: + - parent: 857 + pos: -18.5,-26.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2347 + type: reinforced_wall + components: + - parent: 857 + pos: -18.5,-25.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2348 + type: reinforced_wall + components: + - parent: 857 + pos: -18.5,-24.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2349 + type: reinforced_wall + components: + - parent: 857 + pos: -18.5,-23.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2350 + type: reinforced_wall + components: + - parent: 857 + pos: -17.5,-23.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2351 + type: reinforced_wall + components: + - parent: 857 + pos: -13.5,-23.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2352 + type: reinforced_wall + components: + - parent: 857 + pos: -12.5,-23.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2353 + type: reinforced_wall + components: + - parent: 857 + pos: -12.5,-24.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2354 + type: reinforced_wall + components: + - parent: 857 + pos: -12.5,-25.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2355 + type: reinforced_wall + components: + - parent: 857 + pos: -12.5,-26.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2356 + type: solid_wall + components: + - parent: 857 + pos: -12.5,-28.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2357 + type: solid_wall + components: + - parent: 857 + pos: -11.5,-28.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2358 + type: solid_wall + components: + - parent: 857 + pos: -10.5,-28.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2359 + type: solid_wall + components: + - parent: 857 + pos: -6.5,-28.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2360 + type: solid_wall + components: + - parent: 857 + pos: -5.5,-28.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2361 + type: solid_wall + components: + - parent: 857 + pos: -4.5,-28.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2362 + type: solid_wall + components: + - parent: 857 + pos: -3.5,-28.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2363 + type: solid_wall + components: + - parent: 857 + pos: -2.5,-28.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2364 + type: solid_wall + components: + - parent: 857 + pos: -1.5,-28.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2365 + type: solid_wall + components: + - parent: 857 + pos: -0.5,-28.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2366 + type: solid_wall + components: + - parent: 857 + pos: -10.5,-21.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2367 + type: solid_wall + components: + - parent: 857 + pos: -10.5,-22.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2368 + type: solid_wall + components: + - parent: 857 + pos: -10.5,-23.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2369 + type: solid_wall + components: + - parent: 857 + pos: -10.5,-24.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2370 + type: solid_wall + components: + - parent: 857 + pos: -10.5,-25.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2371 + type: solid_wall + components: + - parent: 857 + pos: -12.5,-22.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2372 + type: solid_wall + components: + - parent: 857 + pos: -12.5,-21.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2373 + type: solid_wall + components: + - parent: 857 + pos: -12.5,-18.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2374 + type: solid_wall + components: + - parent: 857 + pos: -12.5,-17.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2375 + type: solid_wall + components: + - parent: 857 + pos: -12.5,-16.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2376 + type: solid_wall + components: + - parent: 857 + pos: -11.5,-16.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2377 + type: solid_wall + components: + - parent: 857 + pos: -10.5,-16.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2378 + type: solid_wall + components: + - parent: 857 + pos: -9.5,-16.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2379 + type: solid_wall + components: + - parent: 857 + pos: -8.5,-16.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2380 + type: solid_wall + components: + - parent: 857 + pos: -7.5,-16.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2381 + type: solid_wall + components: + - parent: 857 + pos: -13.5,-16.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2382 + type: solid_wall + components: + - parent: 857 + pos: -14.5,-16.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2383 + type: solid_wall + components: + - parent: 857 + pos: -15.5,-16.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2384 + type: solid_wall + components: + - parent: 857 + pos: -17.5,-16.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2385 + type: solid_wall + components: + - parent: 857 + pos: -18.5,-16.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2386 + type: solid_wall + components: + - parent: 857 + pos: -18.5,-17.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2387 + type: solid_wall + components: + - parent: 857 + pos: -18.5,-18.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2388 + type: solid_wall + components: + - parent: 857 + pos: -18.5,-19.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2389 + type: solid_wall + components: + - parent: 857 + pos: -18.5,-20.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2390 + type: solid_wall + components: + - parent: 857 + pos: -18.5,-21.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2391 + type: solid_wall + components: + - parent: 857 + pos: -18.5,-22.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2392 type: Table components: - - parent: 15 - pos: -3.5,18.5 + - parent: 857 + pos: 6.5,28.5 rot: -1.5707963267948966 rad type: Transform -- uid: 3267 +- uid: 2393 type: Table components: - - parent: 15 - pos: -2.5,18.5 + - parent: 857 + pos: 5.5,28.5 rot: -1.5707963267948966 rad type: Transform -- uid: 3268 - type: Table +- uid: 2394 + type: VendingMachineCoffee components: - - parent: 15 - pos: -2.5,16.5 + - parent: 857 + pos: 5.5,-13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 3269 - type: Table +- uid: 2395 + type: ToolboxElectricalFilled components: - - parent: 15 - pos: -3.5,16.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 3270 - type: Bling - components: - - parent: 15 - pos: -2.564289,18.643616 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable -- uid: 3271 - type: Bling - components: - - parent: 15 - pos: -2.861164,18.612366 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable -- uid: 3272 - type: GoldStack - components: - - parent: 15 - pos: -3.064289,16.53424 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable -- uid: 3273 - type: GoldStack - components: - - parent: 15 - pos: -2.861164,16.72174 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable -- uid: 3274 - type: GoldStack - components: - - parent: 15 - pos: -2.673664,16.72174 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable -- uid: 3275 - type: GoldStack - components: - - parent: 15 - pos: -2.611164,16.549866 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable -- uid: 3276 - type: GoldStack - components: - - parent: 15 - pos: -2.798664,16.424866 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable -- uid: 3277 - type: GoldStack - components: - - parent: 15 - pos: -2.283039,16.518616 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable -- uid: 3278 - type: GoldStack - components: - - parent: 15 - pos: -2.439289,16.72174 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable -- uid: 3279 - type: GoldStack - components: - - parent: 15 - pos: -2.579914,16.362366 - rot: -1.5707963267948966 rad - type: Transform - - anchored: False - type: Collidable -- uid: 3280 - type: DrinkGoldenCup - components: - - parent: 15 - pos: -3.470539,16.956116 - rot: -1.5707963267948966 rad - type: Transform - - caps: PourIn, PourOut, Injectable - type: Solution - - anchored: False - type: Collidable -- uid: 3281 - type: ToolboxGoldFilled - components: - - parent: 15 - pos: -3.454914,18.643616 + - parent: 857 + pos: 8.259691,28.555487 rot: -1.5707963267948966 rad type: Transform - anchored: False @@ -37578,40 +32050,747 @@ entities: storagebase: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 3282 - type: SuspicionPistolSpawner +- uid: 2396 + type: solid_wall components: - - parent: 15 - pos: 8.5,-4.5 + - parent: 857 + pos: -16.5,-13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 3283 - type: PlushieCarp +- uid: 2397 + type: solid_wall components: - - parent: 15 - pos: -4.7375913,-3.3900535 + - parent: 857 + pos: -15.5,-13.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2398 + type: solid_wall + components: + - parent: 857 + pos: -14.5,-13.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2399 + type: solid_wall + components: + - parent: 857 + pos: -12.5,-13.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2400 + type: solid_wall + components: + - parent: 857 + pos: -11.5,-13.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2401 + type: solid_wall + components: + - parent: 857 + pos: -10.5,-13.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2402 + type: solid_wall + components: + - parent: 857 + pos: -10.5,-12.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2403 + type: solid_wall + components: + - parent: 857 + pos: -10.5,-11.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2404 + type: solid_wall + components: + - parent: 857 + pos: -10.5,-10.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2405 + type: solid_wall + components: + - parent: 857 + pos: -10.5,-9.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2406 + type: solid_wall + components: + - parent: 857 + pos: -10.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2407 + type: solid_wall + components: + - parent: 857 + pos: -11.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2408 + type: solid_wall + components: + - parent: 857 + pos: -13.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2409 + type: solid_wall + components: + - parent: 857 + pos: -14.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2410 + type: solid_wall + components: + - parent: 857 + pos: -15.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2411 + type: solid_wall + components: + - parent: 857 + pos: -16.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2412 + type: solid_wall + components: + - parent: 857 + pos: -16.5,-9.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2413 + type: solid_wall + components: + - parent: 857 + pos: -16.5,-10.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2414 + type: solid_wall + components: + - parent: 857 + pos: -16.5,-11.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2415 + type: solid_wall + components: + - parent: 857 + pos: -16.5,-12.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2416 + type: solid_wall + components: + - parent: 857 + pos: -9.5,-24.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2417 + type: solid_wall + components: + - parent: 857 + pos: -8.5,-24.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2418 + type: solid_wall + components: + - parent: 857 + pos: -7.5,-24.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2419 + type: solid_wall + components: + - parent: 857 + pos: -2.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2420 + type: solid_wall + components: + - parent: 857 + pos: -2.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2421 + type: solid_wall + components: + - parent: 857 + pos: -2.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2422 + type: solid_wall + components: + - parent: 857 + pos: -3.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2423 + type: solid_wall + components: + - parent: 857 + pos: -4.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2424 + type: solid_wall + components: + - parent: 857 + pos: -5.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2425 + type: solid_wall + components: + - parent: 857 + pos: -6.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2426 + type: solid_wall + components: + - parent: 857 + pos: -7.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2427 + type: solid_wall + components: + - parent: 857 + pos: -8.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2428 + type: solid_wall + components: + - parent: 857 + pos: -8.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2429 + type: solid_wall + components: + - parent: 857 + pos: -8.5,-5.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2430 + type: solid_wall + components: + - parent: 857 + pos: -7.5,-5.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2431 + type: solid_wall + components: + - parent: 857 + pos: -9.5,-5.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2432 + type: solid_wall + components: + - parent: 857 + pos: -10.5,-5.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2433 + type: Table + components: + - parent: 857 + pos: -15.5,-11.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2434 + type: Table + components: + - parent: 857 + pos: -15.5,-12.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2435 + type: Table + components: + - parent: 857 + pos: -29.5,7.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2436 + type: DisposalTrunk + components: + - parent: 857 + pos: -10.5,-17.5 + rot: 1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Breakable + - containers: + DisposalEntry: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer + +- uid: 2437 + type: VendingMachineSovietSoda + components: + - parent: 857 + pos: -11.5,-9.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2438 + type: ChairOfficeDark + components: + - parent: 857 + pos: 40.5,-0.5 + rot: 3.141592653589793 rad + type: Transform + - anchored: False + type: Collidable +- uid: 2439 + type: solid_wall + components: + - parent: 857 + pos: -10.5,2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2440 + type: solid_wall + components: + - parent: 857 + pos: -4.5,2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2441 + type: solid_wall + components: + - parent: 857 + pos: -9.5,2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2442 + type: solid_wall + components: + - parent: 857 + pos: -11.5,2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2443 + type: Table + components: + - parent: 857 + pos: 26.5,0.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2444 + type: Multitool + components: + - parent: 857 + pos: 6.259919,28.557344 rot: -1.5707963267948966 rad type: Transform - anchored: False type: Collidable -- uid: 3284 - type: PowerCellRecharger +- uid: 2445 + type: Medkit components: - - parent: 15 - pos: 39.5,-1.5 + - parent: 857 + pos: -0.959059,28.524237 rot: -1.5707963267948966 rad type: Transform - anchored: False type: Collidable - containers: - PowerCellCharger-powerCellContainer: - type: Content.Server.GameObjects.ContainerSlot + storagebase: + type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 3285 - type: LockerCursed +- uid: 2446 + type: VendingMachineCola components: - - parent: 15 - pos: -8.5,-25.5 + - parent: 857 + pos: 29.5,6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2447 + type: Table + components: + - parent: 857 + pos: 28.5,0.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2448 + type: Table + components: + - parent: 857 + pos: 20.5,7.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2449 + type: Table + components: + - parent: 857 + pos: 19.5,7.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2450 + type: WeldingFuelTank + components: + - parent: 857 + pos: -26.5,11.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 2451 + type: WeldingFuelTank + components: + - parent: 857 + pos: 35.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 2452 + type: WeldingFuelTank + components: + - parent: 857 + pos: -15.5,-9.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 2453 + type: DrinkMugMoebius + components: + - parent: 857 + pos: -8.476567,-17.420076 + rot: -1.5707963267948966 rad + type: Transform + - caps: PourIn, PourOut, Injectable + type: Solution + - anchored: False + type: Collidable +- uid: 2454 + type: VendingMachineSnack + components: + - parent: 857 + pos: 9.5,28.5 + rot: 3.141592653589793 rad + type: Transform +- uid: 2455 + type: Table + components: + - parent: 857 + pos: 0.5,28.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2456 + type: Table + components: + - parent: 857 + pos: 1.5,28.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2457 + type: Table + components: + - parent: 857 + pos: -0.5,28.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2458 + type: solid_wall + components: + - parent: 857 + pos: -21.5,-9.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2459 + type: solid_wall + components: + - parent: 857 + pos: -22.5,-9.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2460 + type: Paper + components: + - parent: 857 + pos: 9.543142,17.067865 + rot: 3.141592653589793 rad + type: Transform + - anchored: False + type: Collidable +- uid: 2461 + type: solid_wall + components: + - parent: 857 + pos: -24.5,-9.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2462 + type: solid_wall + components: + - parent: 857 + pos: -25.5,-9.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2463 + type: solid_wall + components: + - parent: 857 + pos: -26.5,-9.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2464 + type: solid_wall + components: + - parent: 857 + pos: -27.5,-9.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2465 + type: solid_wall + components: + - parent: 857 + pos: -28.5,-9.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2466 + type: solid_wall + components: + - parent: 857 + pos: -29.5,-9.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2467 + type: solid_wall + components: + - parent: 857 + pos: -30.5,-9.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2468 + type: solid_wall + components: + - parent: 857 + pos: -31.5,-9.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2469 + type: solid_wall + components: + - parent: 857 + pos: -31.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2470 + type: solid_wall + components: + - parent: 857 + pos: -31.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2471 + type: Table + components: + - parent: 857 + pos: -1.5,28.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2472 + type: Table + components: + - parent: 857 + pos: -2.5,28.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2473 + type: solid_wall + components: + - parent: 857 + pos: -34.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2474 + type: solid_wall + components: + - parent: 857 + pos: -34.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2475 + type: solid_wall + components: + - parent: 857 + pos: -31.5,-5.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2476 + type: solid_wall + components: + - parent: 857 + pos: -31.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2477 + type: solid_wall + components: + - parent: 857 + pos: -31.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2478 + type: solid_wall + components: + - parent: 857 + pos: -30.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2479 + type: solid_wall + components: + - parent: 857 + pos: -29.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2480 + type: solid_wall + components: + - parent: 857 + pos: -28.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2481 + type: solid_wall + components: + - parent: 857 + pos: -27.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2482 + type: solid_wall + components: + - parent: 857 + pos: -26.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2483 + type: solid_wall + components: + - parent: 857 + pos: -26.5,-2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2484 + type: solid_wall + components: + - parent: 857 + pos: -26.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2485 + type: solid_wall + components: + - parent: 857 + pos: -26.5,-5.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2486 + type: solid_wall + components: + - parent: 857 + pos: -26.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2487 + type: solid_wall + components: + - parent: 857 + pos: -26.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2488 + type: Table + components: + - parent: 857 + pos: -7.5,20.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2489 + type: solid_wall + components: + - parent: 857 + pos: -21.5,-5.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2490 + type: solid_wall + components: + - parent: 857 + pos: -21.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2491 + type: solid_wall + components: + - parent: 857 + pos: -20.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2492 + type: solid_wall + components: + - parent: 857 + pos: -19.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2493 + type: solid_wall + components: + - parent: 857 + pos: -18.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2494 + type: solid_wall + components: + - parent: 857 + pos: -17.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2495 + type: SpawnPointLatejoin + components: + - parent: 857 + pos: -36.5,-5.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2496 + type: SpawnPointLatejoin + components: + - parent: 857 + pos: -36.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2497 + type: CrateInternals + components: + - parent: 857 + pos: 42.5,13.5 rot: -1.5707963267948966 rad type: Transform - anchored: False @@ -37622,528 +32801,13181 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 3286 - type: hemostat +- uid: 2498 + type: CrateRadiation components: - - parent: 15 - pos: 19.655668,-21.300453 + - parent: 857 + pos: 43.5,13.5 rot: -1.5707963267948966 rad type: Transform - anchored: False type: Collidable -- uid: 3287 - type: Bed + - IsPlaceable: False + type: PlaceableSurface + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 2499 + type: solid_wall components: - - parent: 15 - pos: 18.5,-20.5 + - parent: 857 + pos: -17.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 3288 - type: BedsheetMedical +- uid: 2500 + type: solid_wall components: - - parent: 15 - pos: 18.5,-20.5 + - parent: 857 + pos: -17.5,-5.5 rot: -1.5707963267948966 rad type: Transform - - anchored: False - type: Collidable -- uid: 3289 - type: drill +- uid: 2501 + type: solid_wall components: - - parent: 15 - pos: 19.515043,-22.566078 + - parent: 857 + pos: -17.5,-3.5 rot: -1.5707963267948966 rad type: Transform - - anchored: False - type: Collidable -- uid: 3290 - type: SignSurgery +- uid: 2502 + type: solid_wall components: - - parent: 15 - pos: 18.296293,-18.5 + - parent: 857 + pos: -18.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 3291 - type: ToyMouse +- uid: 2503 + type: solid_wall components: - - parent: 15 - pos: 31.376545,-7.1625524 + - parent: 857 + pos: -19.5,-3.5 rot: -1.5707963267948966 rad type: Transform - - anchored: False - type: Collidable -- uid: 3292 - type: retractor +- uid: 2504 + type: solid_wall components: - - parent: 15 - pos: 19.482815,-21.853302 + - parent: 857 + pos: -20.5,-3.5 rot: -1.5707963267948966 rad type: Transform - - anchored: False - type: Collidable -- uid: 3293 - type: DisgustingSweptSoup +- uid: 2505 + type: solid_wall components: - - parent: 15 - pos: -14.96041,24.545767 + - parent: 857 + pos: -21.5,-3.5 rot: -1.5707963267948966 rad type: Transform - - anchored: False - type: Collidable -- uid: 3294 - type: DrinkBottleRum +- uid: 2506 + type: solid_wall components: - - parent: 15 - pos: -15.694785,24.608267 + - parent: 857 + pos: -21.5,-2.5 rot: -1.5707963267948966 rad type: Transform - - caps: PourIn, PourOut, Injectable - type: Solution - - anchored: False - type: Collidable -- uid: 3295 - type: scalpel +- uid: 2507 + type: reinforced_wall components: - - parent: 15 - pos: 19.190952,-21.29313 + - parent: 857 + pos: 11.5,22.5 rot: -1.5707963267948966 rad type: Transform - - anchored: False - type: Collidable -- uid: 3296 - type: ToyPhazon +- uid: 2508 + type: reinforced_wall components: - - parent: 15 - pos: 9.449931,16.636608 + - parent: 857 + pos: 14.5,23.5 rot: -1.5707963267948966 rad type: Transform - - anchored: False - type: Collidable -- uid: 3297 - type: FoodMint +- uid: 2509 + type: reinforced_wall components: - - parent: 15 - pos: -2.776661,-3.3271997 + - parent: 857 + pos: 13.5,22.5 rot: -1.5707963267948966 rad type: Transform - - anchored: False - type: Collidable -- uid: 3298 - type: GlovesLatex +- uid: 2510 + type: reinforced_wall components: - - parent: 15 - pos: 21.618128,-4.4133806 + - parent: 857 + pos: 14.5,22.5 rot: -1.5707963267948966 rad type: Transform - - anchored: False - type: Collidable -- uid: 3299 - type: GlovesLatex +- uid: 2511 + type: reinforced_wall components: - - parent: 15 - pos: 22.086878,-4.4133806 + - parent: 857 + pos: 14.5,24.5 rot: -1.5707963267948966 rad type: Transform - - anchored: False - type: Collidable -- uid: 3300 - type: JawsOfLife +- uid: 2512 + type: reinforced_wall components: - - parent: 15 - pos: 39.53893,-0.77325034 + - parent: 857 + pos: 14.5,25.5 rot: -1.5707963267948966 rad type: Transform - - useSound: /Audio/Items/jaws_pry.ogg - type: Tool - - anchored: False - type: Collidable -- uid: 3301 - type: ShoesCoder +- uid: 2513 + type: reinforced_wall components: - - parent: 15 - pos: 47.437466,-6.6893435 + - parent: 857 + pos: -14.5,15.5 rot: -1.5707963267948966 rad type: Transform - - anchored: False - type: Collidable -- uid: 3302 - type: bone_saw +- uid: 2514 + type: reinforced_wall components: - - parent: 15 - pos: 19.49593,-21.552101 + - parent: 857 + pos: -14.5,16.5 rot: -1.5707963267948966 rad type: Transform - - anchored: False - type: Collidable -- uid: 3303 - type: Table +- uid: 2515 + type: reinforced_wall components: - - parent: 15 - pos: -19.5,-9.5 + - parent: 857 + pos: -16.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 3304 - type: Poweredlight +- uid: 2516 + type: SalternApc components: - - parent: 15 - pos: -18.5,-7 + - parent: 857 + pos: 9.5,27.5 + rot: -1.5707963267948966 rad + type: Transform + - drawRate: 2000 + type: PowerConsumer +- uid: 2517 + type: SalternApc + components: + - parent: 857 + pos: -2.5,27.5 + rot: -1.5707963267948966 rad + type: Transform + - drawRate: 2000 + type: PowerConsumer +- uid: 2518 + type: SalternApc + components: + - parent: 857 + pos: 9.5,22.5 + rot: -1.5707963267948966 rad + type: Transform + - drawRate: 2000 + type: PowerConsumer +- uid: 2519 + type: SalternApc + components: + - parent: 857 + pos: 24.5,14.5 + rot: -1.5707963267948966 rad + type: Transform + - drawRate: 2000 + type: PowerConsumer +- uid: 2520 + type: SalternApc + components: + - parent: 857 + pos: 28.5,14.5 + rot: -1.5707963267948966 rad + type: Transform + - drawRate: 2000 + type: PowerConsumer +- uid: 2521 + type: SalternApc + components: + - parent: 857 + pos: 47.5,-1.5 + rot: -1.5707963267948966 rad + type: Transform + - drawRate: 2000 + type: PowerConsumer +- uid: 2522 + type: SalternApc + components: + - parent: 857 + pos: 31.5,1.5 + rot: -1.5707963267948966 rad + type: Transform + - drawRate: 2000 + type: PowerConsumer +- uid: 2523 + type: SalternApc + components: + - parent: 857 + pos: 43.5,10.5 + rot: -1.5707963267948966 rad + type: Transform + - drawRate: 2000 + type: PowerConsumer +- uid: 2524 + type: SalternApc + components: + - parent: 857 + pos: 12.5,13.5 + rot: -1.5707963267948966 rad + type: Transform + - drawRate: 2000 + type: PowerConsumer +- uid: 2525 + type: SalternApc + components: + - parent: 857 + pos: 7.5,-17.5 + rot: -1.5707963267948966 rad + type: Transform + - drawRate: 2000 + type: PowerConsumer +- uid: 2526 + type: SalternApc + components: + - parent: 857 + pos: 22.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform + - drawRate: 2000 + type: PowerConsumer +- uid: 2527 + type: SalternApc + components: + - parent: 857 + pos: 16.5,2.5 + rot: -1.5707963267948966 rad + type: Transform + - drawRate: 2000 + type: PowerConsumer +- uid: 2528 + type: PoweredSmallLight + components: + - parent: 857 + pos: -15.498537,16.019438 rot: -1.5707963267948966 rad type: Transform - containers: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 3305 - type: FoodBanana +- uid: 2529 + type: SalternApc components: - - parent: 15 - pos: -19.728624,-9.576498 + - parent: 857 + pos: -3.5,15.5 rot: -1.5707963267948966 rad type: Transform - - anchored: False - type: Collidable -- uid: 3306 - type: FoodBanana + - drawRate: 2000 + type: PowerConsumer +- uid: 2530 + type: SalternApc components: - - parent: 15 - pos: -19.603624,-9.388998 + - parent: 857 + pos: -28.5,12.5 rot: -1.5707963267948966 rad type: Transform - - anchored: False - type: Collidable -- uid: 3307 - type: FoodBanana + - drawRate: 2000 + type: PowerConsumer +- uid: 2531 + type: SalternApc components: - - parent: 15 - pos: -19.463,-9.482748 + - parent: 857 + pos: -39.5,11.5 rot: -1.5707963267948966 rad type: Transform - - anchored: False - type: Collidable -- uid: 3308 - type: FoodBananaCreamPie + - drawRate: 2000 + type: PowerConsumer +- uid: 2532 + type: SalternApc components: - - parent: 15 - pos: -18.947374,-9.467123 + - parent: 857 + pos: -11.5,2.5 rot: -1.5707963267948966 rad type: Transform - - anchored: False - type: Collidable -- uid: 3309 - type: FoodBananaCreamPie + - drawRate: 2000 + type: PowerConsumer +- uid: 2533 + type: SalternApc components: - - parent: 15 - pos: -18.509874,-9.279623 + - parent: 857 + pos: -5.5,-8.5 rot: -1.5707963267948966 rad type: Transform - - anchored: False - type: Collidable -- uid: 3310 - type: SuspicionShotgunMagazineSpawner + - drawRate: 2000 + type: PowerConsumer +- uid: 2534 + type: SalternApc components: - - parent: 15 - pos: -6.5,-3.5 + - parent: 857 + pos: -20.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 3311 - type: SuspicionShotgunMagazineSpawner + - drawRate: 2000 + type: PowerConsumer +- uid: 2535 + type: ApcExtensionCable components: - - parent: 15 - pos: -7.5,-3.5 + - parent: 857 + pos: -14.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 3312 - type: SuspicionShotgunSpawner + - deadThreshold: 100 + type: Destructible +- uid: 2536 + type: SalternApc components: - - parent: 15 - pos: -7.5,-6.5 + - parent: 857 + pos: -30.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 3313 - type: SuspicionSniperSpawner + - drawRate: 2000 + type: PowerConsumer +- uid: 2537 + type: SalternApc components: - - parent: 15 - pos: -8.5,-12.5 + - parent: 857 + pos: -1.5,-18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 3314 - type: SuspicionRifleMagazineSpawner + - drawRate: 2000 + type: PowerConsumer +- uid: 2538 + type: SalternApc components: - - parent: 15 - pos: -13.5,-6.5 + - parent: 857 + pos: -9.75476,-21.5 rot: -1.5707963267948966 rad type: Transform -- uid: 3315 - type: SuspicionGrenadesSpawner + - drawRate: 2000 + type: PowerConsumer +- uid: 2539 + type: SalternApc components: - - parent: 15 - pos: 15.5,-0.5 + - parent: 857 + pos: -14.5,-16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 3316 - type: SuspicionGrenadesSpawner + - drawRate: 2000 + type: PowerConsumer +- uid: 2540 + type: ApcExtensionCable components: - - parent: 15 - pos: 18.5,1.5 + - parent: 857 + pos: -28.5,12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 3317 - type: SuspicionHitscanSpawner + - deadThreshold: 100 + type: Destructible +- uid: 2541 + type: ApcExtensionCable components: - - parent: 15 - pos: 25.5,0.5 + - parent: 857 + pos: -28.5,11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 3318 - type: SuspicionGrenadesSpawner + - deadThreshold: 100 + type: Destructible +- uid: 2542 + type: ApcExtensionCable components: - - parent: 15 - pos: 0.5,-15.5 + - parent: 857 + pos: -28.5,10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 3319 - type: SuspicionGrenadesSpawner + - deadThreshold: 100 + type: Destructible +- uid: 2543 + type: ApcExtensionCable components: - - parent: 15 - pos: -8.5,-17.5 + - parent: 857 + pos: -28.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 3320 - type: SuspicionMagnumMagazineSpawner + - deadThreshold: 100 + type: Destructible +- uid: 2544 + type: ApcExtensionCable components: - - parent: 15 - pos: 14.5,-2.5 + - parent: 857 + pos: -28.5,8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 3321 - type: SuspicionRevolverSpawner + - deadThreshold: 100 + type: Destructible +- uid: 2545 + type: ApcExtensionCable components: - - parent: 15 - pos: 15.5,-3.5 + - parent: 857 + pos: -27.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 3322 - type: SuspicionMagnumMagazineSpawner + - deadThreshold: 100 + type: Destructible +- uid: 2546 + type: ApcExtensionCable components: - - parent: 15 - pos: 16.5,7.5 + - parent: 857 + pos: -26.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 3323 - type: SuspicionSMGSpawner + - deadThreshold: 100 + type: Destructible +- uid: 2547 + type: ApcExtensionCable components: - - parent: 15 - pos: -7.5,8.5 + - parent: 857 + pos: -25.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 3324 - type: SuspicionRifleMagazineSpawner + - deadThreshold: 100 + type: Destructible +- uid: 2548 + type: ApcExtensionCable components: - - parent: 15 - pos: -7.5,7.5 + - parent: 857 + pos: -26.5,8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 3325 - type: SuspicionShotgunSpawner + - deadThreshold: 100 + type: Destructible +- uid: 2549 + type: ApcExtensionCable components: - - parent: 15 - pos: -29.5,-5.5 + - parent: 857 + pos: -26.5,7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 3326 - type: SuspicionShotgunMagazineSpawner + - deadThreshold: 100 + type: Destructible +- uid: 2550 + type: ApcExtensionCable components: - - parent: 15 - pos: -30.5,-4.5 + - parent: 857 + pos: -24.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 3327 - type: SuspicionShotgunMagazineSpawner + - deadThreshold: 100 + type: Destructible +- uid: 2551 + type: ApcExtensionCable components: - - parent: 15 - pos: -29.5,-4.5 + - parent: 857 + pos: -23.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 3328 - type: SuspicionPistolMagazineSpawner + - deadThreshold: 100 + type: Destructible +- uid: 2552 + type: ApcExtensionCable components: - - parent: 15 - pos: -3.5,0.5 + - parent: 857 + pos: -22.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 3329 - type: SuspicionPistolMagazineSpawner + - deadThreshold: 100 + type: Destructible +- uid: 2553 + type: ApcExtensionCable components: - - parent: 15 - pos: -10.5,1.5 + - parent: 857 + pos: -21.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 3330 - type: SuspicionPistolMagazineSpawner + - deadThreshold: 100 + type: Destructible +- uid: 2554 + type: ApcExtensionCable components: - - parent: 15 - pos: -9.5,6.5 + - parent: 857 + pos: -20.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 3331 - type: SuspicionPistolMagazineSpawner + - deadThreshold: 100 + type: Destructible +- uid: 2555 + type: ApcExtensionCable components: - - parent: 15 - pos: -29.5,9.5 + - parent: 857 + pos: -19.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 3332 - type: SuspicionPistolMagazineSpawner + - deadThreshold: 100 + type: Destructible +- uid: 2556 + type: ApcExtensionCable components: - - parent: 15 - pos: -31.5,13.5 + - parent: 857 + pos: -23.5,8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 3333 - type: SuspicionPistolSpawner + - deadThreshold: 100 + type: Destructible +- uid: 2557 + type: ApcExtensionCable components: - - parent: 15 - pos: -5.5,24.5 + - parent: 857 + pos: -23.5,7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 3334 - type: SuspicionPistolSpawner + - deadThreshold: 100 + type: Destructible +- uid: 2558 + type: ApcExtensionCable components: - - parent: 15 - pos: -10.5,-0.5 + - parent: 857 + pos: -23.5,7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 3335 - type: SuspicionHitscanSpawner + - deadThreshold: 100 + type: Destructible +- uid: 2559 + type: ApcExtensionCable components: - - parent: 15 - pos: -14.5,18.5 + - parent: 857 + pos: -23.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 3336 - type: SuspicionRevolverSpawner + - deadThreshold: 100 + type: Destructible +- uid: 2560 + type: ApcExtensionCable components: - - parent: 15 - pos: -14.5,19.5 + - parent: 857 + pos: -28.5,13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 3337 - type: SuspicionPistolSpawner + - deadThreshold: 100 + type: Destructible +- uid: 2561 + type: ApcExtensionCable components: - - parent: 15 - pos: -13.5,18.5 + - parent: 857 + pos: -28.5,14.5 rot: -1.5707963267948966 rad type: Transform -- uid: 3338 - type: SuspicionRifleSpawner + - deadThreshold: 100 + type: Destructible +- uid: 2562 + type: ApcExtensionCable components: - - parent: 15 - pos: -13.5,19.5 + - parent: 857 + pos: -17.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 3339 - type: SuspicionSMGSpawner + - deadThreshold: 100 + type: Destructible +- uid: 2563 + type: ApcExtensionCable components: - - parent: 15 - pos: -13.5,20.5 + - parent: 857 + pos: -16.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 3340 - type: SuspicionShotgunSpawner + - deadThreshold: 100 + type: Destructible +- uid: 2564 + type: ApcExtensionCable components: - - parent: 15 - pos: -12.5,20.5 + - parent: 857 + pos: -16.5,8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 3341 - type: SuspicionSniperSpawner + - deadThreshold: 100 + type: Destructible +- uid: 2565 + type: ApcExtensionCable components: - - parent: 15 - pos: -12.5,19.5 + - parent: 857 + pos: -16.5,7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 3342 - type: SuspicionLaunchersSpawner + - deadThreshold: 100 + type: Destructible +- uid: 2566 + type: SalternApc components: - - parent: 15 + - parent: 857 + pos: -16.302551,15.5 + rot: -1.5707963267948966 rad + type: Transform + - drawRate: 2000 + type: PowerConsumer +- uid: 2567 + type: ApcExtensionCable + components: + - parent: 857 + pos: -16.5,15.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2568 + type: ApcExtensionCable + components: + - parent: 857 + pos: -17.5,15.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2569 + type: ApcExtensionCable + components: + - parent: 857 + pos: -17.5,16.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2570 + type: ApcExtensionCable + components: + - parent: 857 + pos: -17.5,17.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2571 + type: ApcExtensionCable + components: + - parent: 857 + pos: -17.5,18.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2572 + type: ApcExtensionCable + components: + - parent: 857 + pos: -17.5,19.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2573 + type: ApcExtensionCable + components: + - parent: 857 + pos: -17.5,20.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2574 + type: ApcExtensionCable + components: + - parent: 857 + pos: -17.5,21.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2575 + type: ApcExtensionCable + components: + - parent: 857 + pos: -17.5,22.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2576 + type: ApcExtensionCable + components: + - parent: 857 + pos: -17.5,23.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2577 + type: ApcExtensionCable + components: + - parent: 857 + pos: -17.5,24.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2578 + type: ApcExtensionCable + components: + - parent: 857 + pos: -16.5,24.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2579 + type: ApcExtensionCable + components: + - parent: 857 + pos: -15.5,24.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2580 + type: ApcExtensionCable + components: + - parent: 857 + pos: -14.5,24.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2581 + type: ApcExtensionCable + components: + - parent: 857 + pos: -13.5,24.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2582 + type: ApcExtensionCable + components: + - parent: 857 + pos: -12.5,24.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2583 + type: ApcExtensionCable + components: + - parent: 857 + pos: -11.5,24.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2584 + type: ApcExtensionCable + components: + - parent: 857 + pos: -10.5,24.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2585 + type: ApcExtensionCable + components: + - parent: 857 + pos: -9.5,24.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2586 + type: ApcExtensionCable + components: + - parent: 857 + pos: -8.5,24.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2587 + type: ApcExtensionCable + components: + - parent: 857 + pos: -7.5,24.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2588 + type: ApcExtensionCable + components: + - parent: 857 + pos: -12.5,12.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2589 + type: ApcExtensionCable + components: + - parent: 857 + pos: -12.5,11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2590 + type: ApcExtensionCable + components: + - parent: 857 + pos: -13.5,11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2591 + type: ApcExtensionCable + components: + - parent: 857 + pos: -12.5,10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2592 + type: ApcExtensionCable + components: + - parent: 857 + pos: -12.5,9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2593 + type: ApcExtensionCable + components: + - parent: 857 + pos: -12.5,7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2594 + type: ApcExtensionCable + components: + - parent: 857 + pos: -12.5,8.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2595 + type: ApcExtensionCable + components: + - parent: 857 + pos: -11.5,7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2596 + type: ApcExtensionCable + components: + - parent: 857 + pos: -11.5,10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2597 + type: ApcExtensionCable + components: + - parent: 857 + pos: -9.5,10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2598 + type: ApcExtensionCable + components: + - parent: 857 + pos: -10.5,10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2599 + type: ApcExtensionCable + components: + - parent: 857 + pos: -8.5,10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2600 + type: ApcExtensionCable + components: + - parent: 857 + pos: -7.5,10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2601 + type: ApcExtensionCable + components: + - parent: 857 + pos: -6.5,10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2602 + type: ApcExtensionCable + components: + - parent: 857 + pos: -5.5,10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2603 + type: ApcExtensionCable + components: + - parent: 857 + pos: -4.5,10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2604 + type: ApcExtensionCable + components: + - parent: 857 + pos: -3.5,10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2605 + type: ApcExtensionCable + components: + - parent: 857 + pos: -2.5,10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2606 + type: ApcExtensionCable + components: + - parent: 857 + pos: -1.5,10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2607 + type: ApcExtensionCable + components: + - parent: 857 + pos: -0.5,10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2608 + type: ApcExtensionCable + components: + - parent: 857 + pos: 0.5,10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2609 + type: ApcExtensionCable + components: + - parent: 857 + pos: -5.5,9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2610 + type: ApcExtensionCable + components: + - parent: 857 + pos: -5.5,8.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2611 + type: ApcExtensionCable + components: + - parent: 857 + pos: -5.5,7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2612 + type: ApcExtensionCable + components: + - parent: 857 + pos: 0.5,9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2613 + type: ApcExtensionCable + components: + - parent: 857 + pos: 0.5,8.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2614 + type: ApcExtensionCable + components: + - parent: 857 + pos: 0.5,7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2615 + type: ApcExtensionCable + components: + - parent: 857 + pos: 0.5,6.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2616 + type: ApcExtensionCable + components: + - parent: 857 + pos: 0.5,6.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2617 + type: ApcExtensionCable + components: + - parent: 857 + pos: -0.5,6.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2618 + type: ApcExtensionCable + components: + - parent: 857 + pos: -3.5,15.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2619 + type: ApcExtensionCable + components: + - parent: 857 + pos: -3.5,16.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2620 + type: ApcExtensionCable + components: + - parent: 857 + pos: -3.5,17.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2621 + type: ApcExtensionCable + components: + - parent: 857 + pos: -3.5,18.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2622 + type: ApcExtensionCable + components: + - parent: 857 + pos: -2.5,18.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2623 + type: ApcExtensionCable + components: + - parent: 857 + pos: -1.5,18.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2624 + type: ApcExtensionCable + components: + - parent: 857 + pos: -0.5,18.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2625 + type: ApcExtensionCable + components: + - parent: 857 + pos: -3.5,15.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2626 + type: ApcExtensionCable + components: + - parent: 857 + pos: -3.5,14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2627 + type: ApcExtensionCable + components: + - parent: 857 + pos: -4.5,14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2628 + type: ApcExtensionCable + components: + - parent: 857 + pos: -5.5,14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2629 + type: ApcExtensionCable + components: + - parent: 857 + pos: -6.5,14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2630 + type: ApcExtensionCable + components: + - parent: 857 + pos: -7.5,14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2631 + type: ApcExtensionCable + components: + - parent: 857 + pos: -8.5,14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2632 + type: ApcExtensionCable + components: + - parent: 857 + pos: -9.5,14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2633 + type: ApcExtensionCable + components: + - parent: 857 + pos: -10.5,14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2634 + type: ApcExtensionCable + components: + - parent: 857 + pos: -11.5,14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2635 + type: ApcExtensionCable + components: + - parent: 857 + pos: -12.5,14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2636 + type: ApcExtensionCable + components: + - parent: 857 + pos: -12.5,15.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2637 + type: ApcExtensionCable + components: + - parent: 857 + pos: -12.5,16.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2638 + type: ApcExtensionCable + components: + - parent: 857 + pos: -7.5,15.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2639 + type: ApcExtensionCable + components: + - parent: 857 + pos: -7.5,16.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2640 + type: ApcExtensionCable + components: + - parent: 857 + pos: -7.5,17.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2641 + type: ApcExtensionCable + components: + - parent: 857 + pos: -6.5,17.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2642 + type: ApcExtensionCable + components: + - parent: 857 + pos: -8.5,17.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2643 + type: ApcExtensionCable + components: + - parent: 857 + pos: -8.5,18.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2644 + type: ApcExtensionCable + components: + - parent: 857 + pos: -8.5,19.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2645 + type: ApcExtensionCable + components: + - parent: 857 + pos: -8.5,20.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2646 + type: ApcExtensionCable + components: + - parent: 857 + pos: -9.5,20.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2647 + type: ApcExtensionCable + components: + - parent: 857 + pos: -8.5,21.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2648 + type: ApcExtensionCable + components: + - parent: 857 + pos: -7.5,21.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2649 + type: ApcExtensionCable + components: + - parent: 857 + pos: -12.5,17.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2650 + type: ApcExtensionCable + components: + - parent: 857 pos: -12.5,18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 3343 - type: SuspicionGrenadesSpawner + - deadThreshold: 100 + type: Destructible +- uid: 2651 + type: ApcExtensionCable components: - - parent: 15 - pos: -11.5,20.5 + - parent: 857 + pos: -12.5,19.5 rot: -1.5707963267948966 rad type: Transform -- uid: 3344 - type: SuspicionGrenadesSpawner + - deadThreshold: 100 + type: Destructible +- uid: 2652 + type: ApcExtensionCable components: - - parent: 15 - pos: -11.5,19.5 + - parent: 857 + pos: -12.5,20.5 rot: -1.5707963267948966 rad type: Transform -- uid: 3345 - type: SuspicionGrenadesSpawner + - deadThreshold: 100 + type: Destructible +- uid: 2653 + type: ApcExtensionCable components: - - parent: 15 - pos: -11.5,18.5 + - parent: 857 + pos: -13.5,20.5 rot: -1.5707963267948966 rad type: Transform -- uid: 3346 - type: SuspicionShotgunMagazineSpawner + - deadThreshold: 100 + type: Destructible +- uid: 2654 + type: ApcExtensionCable components: - - parent: 15 - pos: -35.5,-7.5 + - parent: 857 + pos: -14.5,20.5 rot: -1.5707963267948966 rad type: Transform -- uid: 3347 - type: SuspicionShotgunMagazineSpawner + - deadThreshold: 100 + type: Destructible +- uid: 2655 + type: ApcExtensionCable components: - - parent: 15 + - parent: 857 + pos: -3.5,14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2656 + type: ApcExtensionCable + components: + - parent: 857 + pos: -2.5,14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2657 + type: ApcExtensionCable + components: + - parent: 857 + pos: -1.5,14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2658 + type: ApcExtensionCable + components: + - parent: 857 + pos: -0.5,14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2659 + type: ApcExtensionCable + components: + - parent: 857 + pos: 0.5,14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2660 + type: ApcExtensionCable + components: + - parent: 857 + pos: 1.5,14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2661 + type: ApcExtensionCable + components: + - parent: 857 + pos: 0.5,13.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2662 + type: ApcExtensionCable + components: + - parent: 857 + pos: 0.5,12.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2663 + type: ApcExtensionCable + components: + - parent: 857 + pos: -39.5,11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2664 + type: ApcExtensionCable + components: + - parent: 857 + pos: -39.5,10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2665 + type: ApcExtensionCable + components: + - parent: 857 + pos: -38.5,10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2666 + type: ApcExtensionCable + components: + - parent: 857 + pos: -37.5,10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2667 + type: ApcExtensionCable + components: + - parent: 857 + pos: -36.5,10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2668 + type: ApcExtensionCable + components: + - parent: 857 + pos: -36.5,9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2669 + type: ApcExtensionCable + components: + - parent: 857 + pos: -36.5,8.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2670 + type: ApcExtensionCable + components: + - parent: 857 + pos: -36.5,7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2671 + type: ApcExtensionCable + components: + - parent: 857 + pos: -36.5,6.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2672 + type: ApcExtensionCable + components: + - parent: 857 + pos: -36.5,5.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2673 + type: ApcExtensionCable + components: + - parent: 857 + pos: -36.5,4.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2674 + type: ApcExtensionCable + components: + - parent: 857 + pos: -36.5,3.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2675 + type: ApcExtensionCable + components: + - parent: 857 + pos: -36.5,2.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2676 + type: ApcExtensionCable + components: + - parent: 857 + pos: -36.5,1.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2677 + type: ApcExtensionCable + components: + - parent: 857 + pos: -36.5,0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2678 + type: ApcExtensionCable + components: + - parent: 857 + pos: -36.5,-0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2679 + type: ApcExtensionCable + components: + - parent: 857 + pos: -36.5,-1.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2680 + type: ApcExtensionCable + components: + - parent: 857 + pos: -36.5,-2.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2681 + type: ApcExtensionCable + components: + - parent: 857 + pos: -36.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2682 + type: ApcExtensionCable + components: + - parent: 857 + pos: -36.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2683 + type: ApcExtensionCable + components: + - parent: 857 + pos: -36.5,-5.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2684 + type: ApcExtensionCable + components: + - parent: 857 + pos: -36.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2685 + type: ApcExtensionCable + components: + - parent: 857 pos: -35.5,-6.5 rot: -1.5707963267948966 rad type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2686 + type: ApcExtensionCable + components: + - parent: 857 + pos: -35.5,2.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2687 + type: ApcExtensionCable + components: + - parent: 857 + pos: -35.5,5.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2688 + type: ApcExtensionCable + components: + - parent: 857 + pos: -34.5,5.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2689 + type: ApcExtensionCable + components: + - parent: 857 + pos: -33.5,5.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2690 + type: ApcExtensionCable + components: + - parent: 857 + pos: -32.5,5.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2691 + type: ApcExtensionCable + components: + - parent: 857 + pos: -35.5,8.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2692 + type: ApcExtensionCable + components: + - parent: 857 + pos: -34.5,8.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2693 + type: ApcExtensionCable + components: + - parent: 857 + pos: -37.5,8.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2694 + type: ApcExtensionCable + components: + - parent: 857 + pos: -38.5,8.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2695 + type: ApcExtensionCable + components: + - parent: 857 + pos: -39.5,8.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2696 + type: ApcExtensionCable + components: + - parent: 857 + pos: -40.5,8.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2697 + type: ApcExtensionCable + components: + - parent: 857 + pos: -37.5,4.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2698 + type: ApcExtensionCable + components: + - parent: 857 + pos: -38.5,4.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2699 + type: ApcExtensionCable + components: + - parent: 857 + pos: -39.5,4.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2700 + type: ApcExtensionCable + components: + - parent: 857 + pos: -40.5,4.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2701 + type: ApcExtensionCable + components: + - parent: 857 + pos: -37.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2702 + type: ApcExtensionCable + components: + - parent: 857 + pos: -38.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2703 + type: ApcExtensionCable + components: + - parent: 857 + pos: -18.5,9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2704 + type: ApcExtensionCable + components: + - parent: 857 + pos: -17.5,7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2705 + type: ApcExtensionCable + components: + - parent: 857 + pos: -18.5,7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2706 + type: ApcExtensionCable + components: + - parent: 857 + pos: -30.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2707 + type: ApcExtensionCable + components: + - parent: 857 + pos: -30.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2708 + type: ApcExtensionCable + components: + - parent: 857 + pos: -30.5,-5.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2709 + type: ApcExtensionCable + components: + - parent: 857 + pos: -30.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2710 + type: ApcExtensionCable + components: + - parent: 857 + pos: -30.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2711 + type: ApcExtensionCable + components: + - parent: 857 + pos: -29.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2712 + type: ApcExtensionCable + components: + - parent: 857 + pos: -28.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2713 + type: ApcExtensionCable + components: + - parent: 857 + pos: -27.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2714 + type: ApcExtensionCable + components: + - parent: 857 + pos: -26.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2715 + type: ApcExtensionCable + components: + - parent: 857 + pos: -25.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2716 + type: ApcExtensionCable + components: + - parent: 857 + pos: -25.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2717 + type: ApcExtensionCable + components: + - parent: 857 + pos: -24.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2718 + type: ApcExtensionCable + components: + - parent: 857 + pos: -23.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2719 + type: ApcExtensionCable + components: + - parent: 857 + pos: -23.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2720 + type: ApcExtensionCable + components: + - parent: 857 + pos: -20.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2721 + type: ApcExtensionCable + components: + - parent: 857 + pos: -30.5,-2.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2722 + type: ApcExtensionCable + components: + - parent: 857 + pos: -30.5,-1.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2723 + type: ApcExtensionCable + components: + - parent: 857 + pos: -30.5,-0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2724 + type: ApcExtensionCable + components: + - parent: 857 + pos: -30.5,0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2725 + type: ApcExtensionCable + components: + - parent: 857 + pos: -30.5,1.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2726 + type: ApcExtensionCable + components: + - parent: 857 + pos: -29.5,0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2727 + type: ApcExtensionCable + components: + - parent: 857 + pos: -28.5,0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2728 + type: ApcExtensionCable + components: + - parent: 857 + pos: -27.5,0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2729 + type: ApcExtensionCable + components: + - parent: 857 + pos: -27.5,-0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2730 + type: ApcExtensionCable + components: + - parent: 857 + pos: -27.5,-1.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2731 + type: solid_wall + components: + - parent: 857 + pos: -31.5,1.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2732 + type: ApcExtensionCable + components: + - parent: 857 + pos: -31.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2733 + type: ApcExtensionCable + components: + - parent: 857 + pos: -32.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2734 + type: ApcExtensionCable + components: + - parent: 857 + pos: -32.5,-5.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2735 + type: ApcExtensionCable + components: + - parent: 857 + pos: -32.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2736 + type: ApcExtensionCable + components: + - parent: 857 + pos: -32.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2737 + type: ApcExtensionCable + components: + - parent: 857 + pos: -32.5,-2.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2738 + type: ApcExtensionCable + components: + - parent: 857 + pos: -32.5,-1.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2739 + type: ApcExtensionCable + components: + - parent: 857 + pos: -32.5,-0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2740 + type: ApcExtensionCable + components: + - parent: 857 + pos: -32.5,0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2741 + type: ApcExtensionCable + components: + - parent: 857 + pos: -32.5,1.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2742 + type: ApcExtensionCable + components: + - parent: 857 + pos: -20.5,-12.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2743 + type: ApcExtensionCable + components: + - parent: 857 + pos: -20.5,-13.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2744 + type: ApcExtensionCable + components: + - parent: 857 + pos: -20.5,-14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2745 + type: ApcExtensionCable + components: + - parent: 857 + pos: -21.5,-14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2746 + type: ApcExtensionCable + components: + - parent: 857 + pos: -22.5,-14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2747 + type: ApcExtensionCable + components: + - parent: 857 + pos: -22.5,-14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2748 + type: ApcExtensionCable + components: + - parent: 857 + pos: -23.5,-14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2749 + type: ApcExtensionCable + components: + - parent: 857 + pos: -24.5,-14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2750 + type: ApcExtensionCable + components: + - parent: 857 + pos: -24.5,-13.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2751 + type: ApcExtensionCable + components: + - parent: 857 + pos: -14.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2752 + type: ApcExtensionCable + components: + - parent: 857 + pos: -14.5,-9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2753 + type: ApcExtensionCable + components: + - parent: 857 + pos: -14.5,-10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2754 + type: ApcExtensionCable + components: + - parent: 857 + pos: -14.5,-10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2755 + type: ApcExtensionCable + components: + - parent: 857 + pos: -14.5,-11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2756 + type: ApcExtensionCable + components: + - parent: 857 + pos: -13.5,-11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2757 + type: ApcExtensionCable + components: + - parent: 857 + pos: -12.5,-11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2758 + type: ApcExtensionCable + components: + - parent: 857 + pos: -11.5,-11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2759 + type: ApcExtensionCable + components: + - parent: 857 + pos: -12.5,-10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2760 + type: ApcExtensionCable + components: + - parent: 857 + pos: -12.5,-9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2761 + type: ApcExtensionCable + components: + - parent: 857 + pos: -13.5,-12.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2762 + type: ApcExtensionCable + components: + - parent: 857 + pos: -12.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2763 + type: ApcExtensionCable + components: + - parent: 857 + pos: -16.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2764 + type: ApcExtensionCable + components: + - parent: 857 + pos: -15.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2765 + type: ApcExtensionCable + components: + - parent: 857 + pos: -14.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2766 + type: ApcExtensionCable + components: + - parent: 857 + pos: -17.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2767 + type: ApcExtensionCable + components: + - parent: 857 + pos: -18.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2768 + type: ApcExtensionCable + components: + - parent: 857 + pos: -19.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2769 + type: ApcExtensionCable + components: + - parent: 857 + pos: -20.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2770 + type: ApcExtensionCable + components: + - parent: 857 + pos: -18.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2771 + type: ApcExtensionCable + components: + - parent: 857 + pos: -18.5,-5.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2772 + type: ApcExtensionCable + components: + - parent: 857 + pos: -18.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2773 + type: ApcExtensionCable + components: + - parent: 857 + pos: -19.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2774 + type: ApcExtensionCable + components: + - parent: 857 + pos: -20.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2775 + type: ApcExtensionCable + components: + - parent: 857 + pos: -21.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2776 + type: ApcExtensionCable + components: + - parent: 857 + pos: -22.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2777 + type: ApcExtensionCable + components: + - parent: 857 + pos: -22.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2778 + type: ApcExtensionCable + components: + - parent: 857 + pos: -22.5,-2.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2779 + type: ApcExtensionCable + components: + - parent: 857 + pos: -22.5,-2.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2780 + type: ApcExtensionCable + components: + - parent: 857 + pos: -22.5,-1.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2781 + type: ApcExtensionCable + components: + - parent: 857 + pos: -22.5,-0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2782 + type: ApcExtensionCable + components: + - parent: 857 + pos: -22.5,0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2783 + type: ApcExtensionCable + components: + - parent: 857 + pos: -22.5,1.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2784 + type: ApcExtensionCable + components: + - parent: 857 + pos: -22.5,2.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2785 + type: ApcExtensionCable + components: + - parent: 857 + pos: -15.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2786 + type: ApcExtensionCable + components: + - parent: 857 + pos: -15.5,-5.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2787 + type: ApcExtensionCable + components: + - parent: 857 + pos: -15.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2788 + type: ApcExtensionCable + components: + - parent: 857 + pos: -11.5,2.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2789 + type: ApcExtensionCable + components: + - parent: 857 + pos: -11.5,1.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2790 + type: ApcExtensionCable + components: + - parent: 857 + pos: -11.5,0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2791 + type: ApcExtensionCable + components: + - parent: 857 + pos: -11.5,-0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2792 + type: ApcExtensionCable + components: + - parent: 857 + pos: -11.5,-1.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2793 + type: ApcExtensionCable + components: + - parent: 857 + pos: -11.5,-2.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2794 + type: ApcExtensionCable + components: + - parent: 857 + pos: -11.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2795 + type: ApcExtensionCable + components: + - parent: 857 + pos: -11.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2796 + type: ApcExtensionCable + components: + - parent: 857 + pos: -12.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2797 + type: ApcExtensionCable + components: + - parent: 857 + pos: -12.5,0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2798 + type: ApcExtensionCable + components: + - parent: 857 + pos: -13.5,0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2799 + type: ApcExtensionCable + components: + - parent: 857 + pos: -14.5,0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2800 + type: ApcExtensionCable + components: + - parent: 857 + pos: -14.5,0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2801 + type: SalternApc + components: + - parent: 857 + pos: -14.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform + - drawRate: 2000 + type: PowerConsumer +- uid: 2802 + type: ApcExtensionCable + components: + - parent: 857 + pos: -15.5,0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2803 + type: ApcExtensionCable + components: + - parent: 857 + pos: -16.5,0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2804 + type: ApcExtensionCable + components: + - parent: 857 + pos: -17.5,0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2805 + type: ApcExtensionCable + components: + - parent: 857 + pos: -18.5,0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2806 + type: ApcExtensionCable + components: + - parent: 857 + pos: -19.5,0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2807 + type: ApcExtensionCable + components: + - parent: 857 + pos: -20.5,0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2808 + type: ApcExtensionCable + components: + - parent: 857 + pos: -20.5,1.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2809 + type: ApcExtensionCable + components: + - parent: 857 + pos: -16.5,-0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2810 + type: ApcExtensionCable + components: + - parent: 857 + pos: -16.5,-1.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2811 + type: ApcExtensionCable + components: + - parent: 857 + pos: -12.5,-1.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2812 + type: ApcExtensionCable + components: + - parent: 857 + pos: -12.5,-1.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2813 + type: ApcExtensionCable + components: + - parent: 857 + pos: -13.5,-1.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2814 + type: ApcExtensionCable + components: + - parent: 857 + pos: -20.5,-0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2815 + type: ApcExtensionCable + components: + - parent: 857 + pos: -20.5,-0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2816 + type: ApcExtensionCable + components: + - parent: 857 + pos: -20.5,-1.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2817 + type: ApcExtensionCable + components: + - parent: 857 + pos: -20.5,-2.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2818 + type: ApcExtensionCable + components: + - parent: 857 + pos: -10.5,0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2819 + type: ApcExtensionCable + components: + - parent: 857 + pos: -9.5,0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2820 + type: ApcExtensionCable + components: + - parent: 857 + pos: -8.5,0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2821 + type: ApcExtensionCable + components: + - parent: 857 + pos: -7.5,0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2822 + type: ApcExtensionCable + components: + - parent: 857 + pos: -6.5,0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2823 + type: ApcExtensionCable + components: + - parent: 857 + pos: -5.5,0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2824 + type: ApcExtensionCable + components: + - parent: 857 + pos: -4.5,0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2825 + type: ApcExtensionCable + components: + - parent: 857 + pos: -3.5,0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2826 + type: ApcExtensionCable + components: + - parent: 857 + pos: -2.5,0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2827 + type: ApcExtensionCable + components: + - parent: 857 + pos: -1.5,0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2828 + type: ApcExtensionCable + components: + - parent: 857 + pos: -0.5,0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2829 + type: ApcExtensionCable + components: + - parent: 857 + pos: 0.5,0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2830 + type: ApcExtensionCable + components: + - parent: 857 + pos: -0.5,0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2831 + type: ApcExtensionCable + components: + - parent: 857 + pos: -0.5,-0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2832 + type: ApcExtensionCable + components: + - parent: 857 + pos: -0.5,-1.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2833 + type: ApcExtensionCable + components: + - parent: 857 + pos: -0.5,-2.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2834 + type: ApcExtensionCable + components: + - parent: 857 + pos: -0.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2835 + type: ApcExtensionCable + components: + - parent: 857 + pos: -0.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2836 + type: ApcExtensionCable + components: + - parent: 857 + pos: 0.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2837 + type: ApcExtensionCable + components: + - parent: 857 + pos: -5.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2838 + type: ApcExtensionCable + components: + - parent: 857 + pos: -5.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2839 + type: ApcExtensionCable + components: + - parent: 857 + pos: -4.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2840 + type: ApcExtensionCable + components: + - parent: 857 + pos: -3.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2841 + type: ApcExtensionCable + components: + - parent: 857 + pos: -6.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2842 + type: ApcExtensionCable + components: + - parent: 857 + pos: -6.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2843 + type: ApcExtensionCable + components: + - parent: 857 + pos: -7.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2844 + type: ApcExtensionCable + components: + - parent: 857 + pos: -6.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2845 + type: ApcExtensionCable + components: + - parent: 857 + pos: -6.5,-5.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2846 + type: ApcExtensionCable + components: + - parent: 857 + pos: -6.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2847 + type: ApcExtensionCable + components: + - parent: 857 + pos: -5.5,-9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2848 + type: ApcExtensionCable + components: + - parent: 857 + pos: -5.5,-10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2849 + type: ApcExtensionCable + components: + - parent: 857 + pos: -4.5,-10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2850 + type: ApcExtensionCable + components: + - parent: 857 + pos: -4.5,-10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2851 + type: ApcExtensionCable + components: + - parent: 857 + pos: -3.5,-10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2852 + type: ApcExtensionCable + components: + - parent: 857 + pos: -2.5,-10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2853 + type: ApcExtensionCable + components: + - parent: 857 + pos: -1.5,-10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2854 + type: ApcExtensionCable + components: + - parent: 857 + pos: -0.5,-10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2855 + type: ApcExtensionCable + components: + - parent: 857 + pos: 0.5,-10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2856 + type: ApcExtensionCable + components: + - parent: 857 + pos: 0.5,-9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2857 + type: ApcExtensionCable + components: + - parent: 857 + pos: 0.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2858 + type: ApcExtensionCable + components: + - parent: 857 + pos: 0.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2859 + type: ApcExtensionCable + components: + - parent: 857 + pos: -0.5,-11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2860 + type: ApcExtensionCable + components: + - parent: 857 + pos: -1.5,-18.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2861 + type: ApcExtensionCable + components: + - parent: 857 + pos: -1.5,-19.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2862 + type: ApcExtensionCable + components: + - parent: 857 + pos: -1.5,-20.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2863 + type: ApcExtensionCable + components: + - parent: 857 + pos: -0.5,-19.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2864 + type: ApcExtensionCable + components: + - parent: 857 + pos: -2.5,-19.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2865 + type: ApcExtensionCable + components: + - parent: 857 + pos: -3.5,-19.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2866 + type: ApcExtensionCable + components: + - parent: 857 + pos: -4.5,-19.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2867 + type: ApcExtensionCable + components: + - parent: 857 + pos: -3.5,-20.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2868 + type: ApcExtensionCable + components: + - parent: 857 + pos: -3.5,-21.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2869 + type: ApcExtensionCable + components: + - parent: 857 + pos: -3.5,-23.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2870 + type: ApcExtensionCable + components: + - parent: 857 + pos: -3.5,-22.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2871 + type: ApcExtensionCable + components: + - parent: 857 + pos: -2.5,-23.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2872 + type: ApcExtensionCable + components: + - parent: 857 + pos: -9.5,-21.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2873 + type: ApcExtensionCable + components: + - parent: 857 + pos: -9.5,-22.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2874 + type: ApcExtensionCable + components: + - parent: 857 + pos: -9.5,-23.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2875 + type: ApcExtensionCable + components: + - parent: 857 + pos: -8.5,-23.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2876 + type: ApcExtensionCable + components: + - parent: 857 + pos: -7.5,-23.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2877 + type: ApcExtensionCable + components: + - parent: 857 + pos: -7.5,-24.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2878 + type: ApcExtensionCable + components: + - parent: 857 + pos: -7.5,-25.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2879 + type: ApcExtensionCable + components: + - parent: 857 + pos: -9.5,-20.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2880 + type: ApcExtensionCable + components: + - parent: 857 + pos: -10.5,-20.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2881 + type: ApcExtensionCable + components: + - parent: 857 + pos: -11.5,-20.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2882 + type: ApcExtensionCable + components: + - parent: 857 + pos: -11.5,-19.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2883 + type: ApcExtensionCable + components: + - parent: 857 + pos: -9.5,-19.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2884 + type: ApcExtensionCable + components: + - parent: 857 + pos: -9.5,-18.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2885 + type: ApcExtensionCable + components: + - parent: 857 + pos: -9.5,-17.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2886 + type: ApcExtensionCable + components: + - parent: 857 + pos: -8.5,-17.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2887 + type: ApcExtensionCable + components: + - parent: 857 + pos: -3.5,-18.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2888 + type: ApcExtensionCable + components: + - parent: 857 + pos: -3.5,-17.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2889 + type: ApcExtensionCable + components: + - parent: 857 + pos: -3.5,-17.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2890 + type: ApcExtensionCable + components: + - parent: 857 + pos: -3.5,-16.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2891 + type: ApcExtensionCable + components: + - parent: 857 + pos: -3.5,-15.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2892 + type: ApcExtensionCable + components: + - parent: 857 + pos: -3.5,-14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2893 + type: ApcExtensionCable + components: + - parent: 857 + pos: -3.5,-13.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2894 + type: ApcExtensionCable + components: + - parent: 857 + pos: -3.5,-12.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2895 + type: ApcExtensionCable + components: + - parent: 857 + pos: -2.5,-13.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2896 + type: ApcExtensionCable + components: + - parent: 857 + pos: -1.5,-13.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2897 + type: ApcExtensionCable + components: + - parent: 857 + pos: -1.5,-17.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2898 + type: ApcExtensionCable + components: + - parent: 857 + pos: -0.5,-17.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2899 + type: ApcExtensionCable + components: + - parent: 857 + pos: 0.5,-17.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2900 + type: ApcExtensionCable + components: + - parent: 857 + pos: -4.5,-14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2901 + type: ApcExtensionCable + components: + - parent: 857 + pos: -4.5,-12.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2902 + type: ApcExtensionCable + components: + - parent: 857 + pos: -4.5,-17.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2903 + type: ApcExtensionCable + components: + - parent: 857 + pos: -5.5,-12.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2904 + type: ApcExtensionCable + components: + - parent: 857 + pos: -6.5,-12.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2905 + type: ApcExtensionCable + components: + - parent: 857 + pos: -5.5,-14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2906 + type: ApcExtensionCable + components: + - parent: 857 + pos: -14.5,-16.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2907 + type: ApcExtensionCable + components: + - parent: 857 + pos: -14.5,-17.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2908 + type: ApcExtensionCable + components: + - parent: 857 + pos: -14.5,-18.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2909 + type: ApcExtensionCable + components: + - parent: 857 + pos: -14.5,-19.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2910 + type: ApcExtensionCable + components: + - parent: 857 + pos: -14.5,-20.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2911 + type: ApcExtensionCable + components: + - parent: 857 + pos: -14.5,-21.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2912 + type: ApcExtensionCable + components: + - parent: 857 + pos: -14.5,-22.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2913 + type: ApcExtensionCable + components: + - parent: 857 + pos: -14.5,-23.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2914 + type: ApcExtensionCable + components: + - parent: 857 + pos: -14.5,-24.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2915 + type: ApcExtensionCable + components: + - parent: 857 + pos: -14.5,-25.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2916 + type: ApcExtensionCable + components: + - parent: 857 + pos: -15.5,-25.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2917 + type: ApcExtensionCable + components: + - parent: 857 + pos: -16.5,-25.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2918 + type: ApcExtensionCable + components: + - parent: 857 + pos: -15.5,-22.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2919 + type: ApcExtensionCable + components: + - parent: 857 + pos: -16.5,-22.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2920 + type: ApcExtensionCable + components: + - parent: 857 + pos: -17.5,-22.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2921 + type: ApcExtensionCable + components: + - parent: 857 + pos: -1.5,-23.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2922 + type: ApcExtensionCable + components: + - parent: 857 + pos: -0.5,-23.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2923 + type: ApcExtensionCable + components: + - parent: 857 + pos: 0.5,-23.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2924 + type: ApcExtensionCable + components: + - parent: 857 + pos: 7.5,-17.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2925 + type: ApcExtensionCable + components: + - parent: 857 + pos: 7.5,-18.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2926 + type: ApcExtensionCable + components: + - parent: 857 + pos: 7.5,-19.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2927 + type: ApcExtensionCable + components: + - parent: 857 + pos: 8.5,-18.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2928 + type: ApcExtensionCable + components: + - parent: 857 + pos: 9.5,-18.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2929 + type: ApcExtensionCable + components: + - parent: 857 + pos: 10.5,-18.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2930 + type: ApcExtensionCable + components: + - parent: 857 + pos: 10.5,-19.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2931 + type: ApcExtensionCable + components: + - parent: 857 + pos: 11.5,-19.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2932 + type: ApcExtensionCable + components: + - parent: 857 + pos: 12.5,-19.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2933 + type: ApcExtensionCable + components: + - parent: 857 + pos: 13.5,-19.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2934 + type: ApcExtensionCable + components: + - parent: 857 + pos: 14.5,-19.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2935 + type: ApcExtensionCable + components: + - parent: 857 + pos: 15.5,-19.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2936 + type: ApcExtensionCable + components: + - parent: 857 + pos: 7.5,-16.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2937 + type: ApcExtensionCable + components: + - parent: 857 + pos: 7.5,-15.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2938 + type: ApcExtensionCable + components: + - parent: 857 + pos: 7.5,-14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2939 + type: ApcExtensionCable + components: + - parent: 857 + pos: 7.5,-13.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2940 + type: ApcExtensionCable + components: + - parent: 857 + pos: 6.5,-13.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2941 + type: ApcExtensionCable + components: + - parent: 857 + pos: 5.5,-13.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2942 + type: ApcExtensionCable + components: + - parent: 857 + pos: 8.5,-13.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2943 + type: ApcExtensionCable + components: + - parent: 857 + pos: 9.5,-13.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2944 + type: ApcExtensionCable + components: + - parent: 857 + pos: 10.5,-13.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2945 + type: ApcExtensionCable + components: + - parent: 857 + pos: 11.5,-13.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2946 + type: ApcExtensionCable + components: + - parent: 857 + pos: 22.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2947 + type: ApcExtensionCable + components: + - parent: 857 + pos: 22.5,-5.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2948 + type: ApcExtensionCable + components: + - parent: 857 + pos: 23.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2949 + type: ApcExtensionCable + components: + - parent: 857 + pos: 24.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2950 + type: ApcExtensionCable + components: + - parent: 857 + pos: 25.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2951 + type: ApcExtensionCable + components: + - parent: 857 + pos: 22.5,-2.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2952 + type: ApcExtensionCable + components: + - parent: 857 + pos: 22.5,-1.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2953 + type: ApcExtensionCable + components: + - parent: 857 + pos: 22.5,-0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2954 + type: ApcExtensionCable + components: + - parent: 857 + pos: 22.5,0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2955 + type: ApcExtensionCable + components: + - parent: 857 + pos: 22.5,1.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2956 + type: ApcExtensionCable + components: + - parent: 857 + pos: 21.5,1.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2957 + type: ApcExtensionCable + components: + - parent: 857 + pos: 23.5,0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2958 + type: ApcExtensionCable + components: + - parent: 857 + pos: 23.5,-1.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2959 + type: ApcExtensionCable + components: + - parent: 857 + pos: 24.5,-1.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2960 + type: ApcExtensionCable + components: + - parent: 857 + pos: 25.5,-1.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2961 + type: ApcExtensionCable + components: + - parent: 857 + pos: 22.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2962 + type: ApcExtensionCable + components: + - parent: 857 + pos: 21.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2963 + type: ApcExtensionCable + components: + - parent: 857 + pos: 20.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2964 + type: ApcExtensionCable + components: + - parent: 857 + pos: 19.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2965 + type: ApcExtensionCable + components: + - parent: 857 + pos: 18.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2966 + type: ApcExtensionCable + components: + - parent: 857 + pos: 18.5,-5.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2967 + type: ApcExtensionCable + components: + - parent: 857 + pos: 18.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2968 + type: ApcExtensionCable + components: + - parent: 857 + pos: 18.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2969 + type: ApcExtensionCable + components: + - parent: 857 + pos: 18.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2970 + type: ApcExtensionCable + components: + - parent: 857 + pos: 18.5,-9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2971 + type: ApcExtensionCable + components: + - parent: 857 + pos: 18.5,-10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2972 + type: ApcExtensionCable + components: + - parent: 857 + pos: 18.5,-11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2973 + type: ApcExtensionCable + components: + - parent: 857 + pos: 18.5,-12.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2974 + type: ApcExtensionCable + components: + - parent: 857 + pos: 18.5,-13.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2975 + type: ApcExtensionCable + components: + - parent: 857 + pos: 18.5,-14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2976 + type: ApcExtensionCable + components: + - parent: 857 + pos: 18.5,-15.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2977 + type: ApcExtensionCable + components: + - parent: 857 + pos: 18.5,-16.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2978 + type: ApcExtensionCable + components: + - parent: 857 + pos: 18.5,-17.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2979 + type: ApcExtensionCable + components: + - parent: 857 + pos: 18.5,-18.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2980 + type: ApcExtensionCable + components: + - parent: 857 + pos: 18.5,-19.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2981 + type: ApcExtensionCable + components: + - parent: 857 + pos: 18.5,-20.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2982 + type: ApcExtensionCable + components: + - parent: 857 + pos: 19.5,-13.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2983 + type: ApcExtensionCable + components: + - parent: 857 + pos: 20.5,-13.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2984 + type: ApcExtensionCable + components: + - parent: 857 + pos: 21.5,-13.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2985 + type: ApcExtensionCable + components: + - parent: 857 + pos: 22.5,-13.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2986 + type: ApcExtensionCable + components: + - parent: 857 + pos: 22.5,-13.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2987 + type: ApcExtensionCable + components: + - parent: 857 + pos: 23.5,-13.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2988 + type: ApcExtensionCable + components: + - parent: 857 + pos: 23.5,-14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2989 + type: ApcExtensionCable + components: + - parent: 857 + pos: 8.5,-12.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2990 + type: ApcExtensionCable + components: + - parent: 857 + pos: 8.5,-11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2991 + type: ApcExtensionCable + components: + - parent: 857 + pos: 7.5,-11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2992 + type: ApcExtensionCable + components: + - parent: 857 + pos: 9.5,-11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2993 + type: ApcExtensionCable + components: + - parent: 857 + pos: 10.5,-11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2994 + type: ApcExtensionCable + components: + - parent: 857 + pos: 7.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2995 + type: ApcExtensionCable + components: + - parent: 857 + pos: 8.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2996 + type: ApcExtensionCable + components: + - parent: 857 + pos: 9.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2997 + type: ApcExtensionCable + components: + - parent: 857 + pos: 10.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2998 + type: ApcExtensionCable + components: + - parent: 857 + pos: 11.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 2999 + type: ApcExtensionCable + components: + - parent: 857 + pos: 12.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3000 + type: ApcExtensionCable + components: + - parent: 857 + pos: 13.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3001 + type: ApcExtensionCable + components: + - parent: 857 + pos: 14.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3002 + type: ApcExtensionCable + components: + - parent: 857 + pos: 15.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3003 + type: ApcExtensionCable + components: + - parent: 857 + pos: 16.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3004 + type: ApcExtensionCable + components: + - parent: 857 + pos: 17.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3005 + type: ApcExtensionCable + components: + - parent: 857 + pos: 18.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3006 + type: ApcExtensionCable + components: + - parent: 857 + pos: 17.5,-17.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3007 + type: ApcExtensionCable + components: + - parent: 857 + pos: 16.5,-17.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3008 + type: ApcExtensionCable + components: + - parent: 857 + pos: 15.5,-17.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3009 + type: ApcExtensionCable + components: + - parent: 857 + pos: 16.5,2.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3010 + type: ApcExtensionCable + components: + - parent: 857 + pos: 16.5,1.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3011 + type: ApcExtensionCable + components: + - parent: 857 + pos: 17.5,1.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3012 + type: ApcExtensionCable + components: + - parent: 857 + pos: 18.5,1.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3013 + type: ApcExtensionCable + components: + - parent: 857 + pos: 15.5,1.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3014 + type: ApcExtensionCable + components: + - parent: 857 + pos: 14.5,1.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3015 + type: ApcExtensionCable + components: + - parent: 857 + pos: 13.5,1.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3016 + type: ApcExtensionCable + components: + - parent: 857 + pos: 12.5,1.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3017 + type: ApcExtensionCable + components: + - parent: 857 + pos: 11.5,1.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3018 + type: ApcExtensionCable + components: + - parent: 857 + pos: 10.5,1.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3019 + type: ApcExtensionCable + components: + - parent: 857 + pos: 9.5,1.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3020 + type: ApcExtensionCable + components: + - parent: 857 + pos: 8.5,1.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3021 + type: ApcExtensionCable + components: + - parent: 857 + pos: 7.5,1.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3022 + type: ApcExtensionCable + components: + - parent: 857 + pos: 6.5,1.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3023 + type: ApcExtensionCable + components: + - parent: 857 + pos: 16.5,0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3024 + type: ApcExtensionCable + components: + - parent: 857 + pos: 16.5,-0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3025 + type: ApcExtensionCable + components: + - parent: 857 + pos: 17.5,-0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3026 + type: ApcExtensionCable + components: + - parent: 857 + pos: 18.5,-0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3027 + type: ApcExtensionCable + components: + - parent: 857 + pos: 9.5,0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3028 + type: ApcExtensionCable + components: + - parent: 857 + pos: 9.5,-0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3029 + type: ApcExtensionCable + components: + - parent: 857 + pos: 9.5,-1.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3030 + type: ApcExtensionCable + components: + - parent: 857 + pos: 9.5,-2.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3031 + type: ApcExtensionCable + components: + - parent: 857 + pos: 9.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3032 + type: ApcExtensionCable + components: + - parent: 857 + pos: 9.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3033 + type: ApcExtensionCable + components: + - parent: 857 + pos: 8.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3034 + type: ApcExtensionCable + components: + - parent: 857 + pos: 7.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3035 + type: ApcExtensionCable + components: + - parent: 857 + pos: 6.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3036 + type: ApcExtensionCable + components: + - parent: 857 + pos: 10.5,-2.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3037 + type: ApcExtensionCable + components: + - parent: 857 + pos: 11.5,-2.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3038 + type: ApcExtensionCable + components: + - parent: 857 + pos: 6.5,-17.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3039 + type: ApcExtensionCable + components: + - parent: 857 + pos: 1.5,-23.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3040 + type: ApcExtensionCable + components: + - parent: 857 + pos: 2.5,-23.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3041 + type: ApcExtensionCable + components: + - parent: 857 + pos: 3.5,-23.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3042 + type: ApcExtensionCable + components: + - parent: 857 + pos: 3.5,-22.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3043 + type: ApcExtensionCable + components: + - parent: 857 + pos: 3.5,-21.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3044 + type: ApcExtensionCable + components: + - parent: 857 + pos: 2.5,-21.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3045 + type: ApcExtensionCable + components: + - parent: 857 + pos: 4.5,-21.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3046 + type: ApcExtensionCable + components: + - parent: 857 + pos: 22.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3047 + type: ApcExtensionCable + components: + - parent: 857 + pos: 31.5,1.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3048 + type: ApcExtensionCable + components: + - parent: 857 + pos: 31.5,0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3049 + type: ApcExtensionCable + components: + - parent: 857 + pos: 31.5,-0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3050 + type: ApcExtensionCable + components: + - parent: 857 + pos: 31.5,-1.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3051 + type: ApcExtensionCable + components: + - parent: 857 + pos: 31.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3052 + type: ApcExtensionCable + components: + - parent: 857 + pos: 31.5,-2.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3053 + type: ApcExtensionCable + components: + - parent: 857 + pos: 30.5,-2.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3054 + type: ApcExtensionCable + components: + - parent: 857 + pos: 29.5,-2.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3055 + type: ApcExtensionCable + components: + - parent: 857 + pos: 32.5,-2.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3056 + type: ApcExtensionCable + components: + - parent: 857 + pos: 33.5,-2.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3057 + type: ApcExtensionCable + components: + - parent: 857 + pos: 34.5,-2.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3058 + type: ApcExtensionCable + components: + - parent: 857 + pos: 35.5,-2.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3059 + type: ApcExtensionCable + components: + - parent: 857 + pos: 31.5,1.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3060 + type: ApcExtensionCable + components: + - parent: 857 + pos: 31.5,2.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3061 + type: ApcExtensionCable + components: + - parent: 857 + pos: 31.5,3.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3062 + type: ApcExtensionCable + components: + - parent: 857 + pos: 31.5,4.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3063 + type: ApcExtensionCable + components: + - parent: 857 + pos: 32.5,4.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3064 + type: ApcExtensionCable + components: + - parent: 857 + pos: 33.5,4.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3065 + type: ApcExtensionCable + components: + - parent: 857 + pos: 34.5,4.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3066 + type: ApcExtensionCable + components: + - parent: 857 + pos: 35.5,4.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3067 + type: ApcExtensionCable + components: + - parent: 857 + pos: 36.5,4.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3068 + type: ApcExtensionCable + components: + - parent: 857 + pos: 37.5,4.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3069 + type: ApcExtensionCable + components: + - parent: 857 + pos: 38.5,4.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3070 + type: ApcExtensionCable + components: + - parent: 857 + pos: 38.5,3.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3071 + type: ApcExtensionCable + components: + - parent: 857 + pos: 38.5,2.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3072 + type: ApcExtensionCable + components: + - parent: 857 + pos: 38.5,1.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3073 + type: ApcExtensionCable + components: + - parent: 857 + pos: 38.5,0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3074 + type: ApcExtensionCable + components: + - parent: 857 + pos: 38.5,-0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3075 + type: ApcExtensionCable + components: + - parent: 857 + pos: 38.5,-1.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3076 + type: ApcExtensionCable + components: + - parent: 857 + pos: 43.5,10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3077 + type: ApcExtensionCable + components: + - parent: 857 + pos: 43.5,9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3078 + type: ApcExtensionCable + components: + - parent: 857 + pos: 42.5,9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3079 + type: ApcExtensionCable + components: + - parent: 857 + pos: 41.5,9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3080 + type: ApcExtensionCable + components: + - parent: 857 + pos: 39.5,9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3081 + type: ApcExtensionCable + components: + - parent: 857 + pos: 38.5,9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3082 + type: ApcExtensionCable + components: + - parent: 857 + pos: 40.5,9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3083 + type: ApcExtensionCable + components: + - parent: 857 + pos: 38.5,8.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3084 + type: ApcExtensionCable + components: + - parent: 857 + pos: 38.5,7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3085 + type: ApcExtensionCable + components: + - parent: 857 + pos: 38.5,6.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3086 + type: ApcExtensionCable + components: + - parent: 857 + pos: 44.5,9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3087 + type: ApcExtensionCable + components: + - parent: 857 + pos: 44.5,8.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3088 + type: ApcExtensionCable + components: + - parent: 857 + pos: 44.5,7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3089 + type: ApcExtensionCable + components: + - parent: 857 + pos: 44.5,6.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3090 + type: ApcExtensionCable + components: + - parent: 857 + pos: 44.5,5.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3091 + type: ApcExtensionCable + components: + - parent: 857 + pos: 44.5,4.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3092 + type: ApcExtensionCable + components: + - parent: 857 + pos: 45.5,4.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3093 + type: ApcExtensionCable + components: + - parent: 857 + pos: 46.5,4.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3094 + type: ApcExtensionCable + components: + - parent: 857 + pos: 47.5,4.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3095 + type: ApcExtensionCable + components: + - parent: 857 + pos: 48.5,4.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3096 + type: ApcExtensionCable + components: + - parent: 857 + pos: 49.5,4.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3097 + type: ApcExtensionCable + components: + - parent: 857 + pos: 33.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3098 + type: ApcExtensionCable + components: + - parent: 857 + pos: 33.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3099 + type: ApcExtensionCable + components: + - parent: 857 + pos: 43.5,4.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3100 + type: ApcExtensionCable + components: + - parent: 857 + pos: 43.5,3.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3101 + type: ApcExtensionCable + components: + - parent: 857 + pos: 43.5,2.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3102 + type: ApcExtensionCable + components: + - parent: 857 + pos: 43.5,1.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3103 + type: ApcExtensionCable + components: + - parent: 857 + pos: 43.5,0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3104 + type: ApcExtensionCable + components: + - parent: 857 + pos: 43.5,-0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3105 + type: ApcExtensionCable + components: + - parent: 857 + pos: 43.5,-1.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3106 + type: ApcExtensionCable + components: + - parent: 857 + pos: 43.5,-2.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3107 + type: ApcExtensionCable + components: + - parent: 857 + pos: 43.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3108 + type: ApcExtensionCable + components: + - parent: 857 + pos: 42.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3109 + type: ApcExtensionCable + components: + - parent: 857 + pos: 41.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3110 + type: ApcExtensionCable + components: + - parent: 857 + pos: 40.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3111 + type: ApcExtensionCable + components: + - parent: 857 + pos: 39.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3112 + type: ApcExtensionCable + components: + - parent: 857 + pos: 38.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3113 + type: ApcExtensionCable + components: + - parent: 857 + pos: 37.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3114 + type: ApcExtensionCable + components: + - parent: 857 + pos: 37.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3115 + type: ApcExtensionCable + components: + - parent: 857 + pos: 37.5,-5.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3116 + type: ApcExtensionCable + components: + - parent: 857 + pos: 37.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3117 + type: ApcExtensionCable + components: + - parent: 857 + pos: 36.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3118 + type: ApcExtensionCable + components: + - parent: 857 + pos: 35.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3119 + type: ApcExtensionCable + components: + - parent: 857 + pos: 34.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3120 + type: ApcExtensionCable + components: + - parent: 857 + pos: 33.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3121 + type: ApcExtensionCable + components: + - parent: 857 + pos: 32.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3122 + type: ApcExtensionCable + components: + - parent: 857 + pos: 31.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3123 + type: ApcExtensionCable + components: + - parent: 857 + pos: 30.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3124 + type: ApcExtensionCable + components: + - parent: 857 + pos: 29.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3125 + type: ApcExtensionCable + components: + - parent: 857 + pos: 28.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3126 + type: ApcExtensionCable + components: + - parent: 857 + pos: 27.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3127 + type: ApcExtensionCable + components: + - parent: 857 + pos: 27.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3128 + type: ApcExtensionCable + components: + - parent: 857 + pos: 27.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3129 + type: ApcExtensionCable + components: + - parent: 857 + pos: 27.5,-9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3130 + type: ApcExtensionCable + components: + - parent: 857 + pos: 27.5,-10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3131 + type: ApcExtensionCable + components: + - parent: 857 + pos: 27.5,-11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3132 + type: ApcExtensionCable + components: + - parent: 857 + pos: 27.5,-12.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3133 + type: ApcExtensionCable + components: + - parent: 857 + pos: 27.5,-13.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3134 + type: ApcExtensionCable + components: + - parent: 857 + pos: 27.5,-14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3135 + type: ApcExtensionCable + components: + - parent: 857 + pos: 27.5,-15.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3136 + type: ApcExtensionCable + components: + - parent: 857 + pos: 27.5,-16.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3137 + type: ApcExtensionCable + components: + - parent: 857 + pos: 27.5,-17.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3138 + type: ApcExtensionCable + components: + - parent: 857 + pos: 27.5,-18.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3139 + type: ApcExtensionCable + components: + - parent: 857 + pos: 26.5,-18.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3140 + type: ApcExtensionCable + components: + - parent: 857 + pos: 25.5,-18.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3141 + type: ApcExtensionCable + components: + - parent: 857 + pos: 24.5,-18.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3142 + type: ApcExtensionCable + components: + - parent: 857 + pos: 47.5,-1.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3143 + type: ApcExtensionCable + components: + - parent: 857 + pos: 47.5,-2.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3144 + type: ApcExtensionCable + components: + - parent: 857 + pos: 47.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3145 + type: ApcExtensionCable + components: + - parent: 857 + pos: 48.5,-2.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3146 + type: ApcExtensionCable + components: + - parent: 857 + pos: 49.5,-2.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3147 + type: ApcExtensionCable + components: + - parent: 857 + pos: 50.5,-2.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3148 + type: ApcExtensionCable + components: + - parent: 857 + pos: 51.5,-2.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3149 + type: ApcExtensionCable + components: + - parent: 857 + pos: 51.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3150 + type: ApcExtensionCable + components: + - parent: 857 + pos: 51.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3151 + type: ApcExtensionCable + components: + - parent: 857 + pos: 41.5,10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3152 + type: ApcExtensionCable + components: + - parent: 857 + pos: 41.5,11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3153 + type: ApcExtensionCable + components: + - parent: 857 + pos: 41.5,12.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3154 + type: ApcExtensionCable + components: + - parent: 857 + pos: 41.5,13.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3155 + type: ApcExtensionCable + components: + - parent: 857 + pos: 28.5,14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3156 + type: ApcExtensionCable + components: + - parent: 857 + pos: 28.5,13.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3157 + type: ApcExtensionCable + components: + - parent: 857 + pos: 28.5,12.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3158 + type: ApcExtensionCable + components: + - parent: 857 + pos: 28.5,11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3159 + type: ApcExtensionCable + components: + - parent: 857 + pos: 28.5,10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3160 + type: ApcExtensionCable + components: + - parent: 857 + pos: 29.5,10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3161 + type: ApcExtensionCable + components: + - parent: 857 + pos: 28.5,9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3162 + type: ApcExtensionCable + components: + - parent: 857 + pos: 27.5,9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3163 + type: ApcExtensionCable + components: + - parent: 857 + pos: 26.5,9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3164 + type: ApcExtensionCable + components: + - parent: 857 + pos: 25.5,9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3165 + type: ApcExtensionCable + components: + - parent: 857 + pos: 26.5,10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3166 + type: ApcExtensionCable + components: + - parent: 857 + pos: 26.5,11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3167 + type: ApcExtensionCable + components: + - parent: 857 + pos: 27.5,8.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3168 + type: ApcExtensionCable + components: + - parent: 857 + pos: 27.5,7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3169 + type: ApcExtensionCable + components: + - parent: 857 + pos: 30.5,10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3170 + type: ApcExtensionCable + components: + - parent: 857 + pos: 31.5,10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3171 + type: ApcExtensionCable + components: + - parent: 857 + pos: 32.5,10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3172 + type: ApcExtensionCable + components: + - parent: 857 + pos: 33.5,10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3173 + type: ApcExtensionCable + components: + - parent: 857 + pos: 34.5,10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3174 + type: ApcExtensionCable + components: + - parent: 857 + pos: 35.5,10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3175 + type: ApcExtensionCable + components: + - parent: 857 + pos: 36.5,10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3176 + type: ApcExtensionCable + components: + - parent: 857 + pos: 30.5,9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3177 + type: ApcExtensionCable + components: + - parent: 857 + pos: 33.5,9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3178 + type: ApcExtensionCable + components: + - parent: 857 + pos: 35.5,9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3179 + type: ApcExtensionCable + components: + - parent: 857 + pos: 35.5,8.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3180 + type: ApcExtensionCable + components: + - parent: 857 + pos: 35.5,7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3181 + type: ApcExtensionCable + components: + - parent: 857 + pos: 36.5,11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3182 + type: ApcExtensionCable + components: + - parent: 857 + pos: 36.5,12.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3183 + type: ApcExtensionCable + components: + - parent: 857 + pos: 30.5,11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3184 + type: ApcExtensionCable + components: + - parent: 857 + pos: 30.5,12.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3185 + type: ApcExtensionCable + components: + - parent: 857 + pos: 24.5,14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3186 + type: ApcExtensionCable + components: + - parent: 857 + pos: 24.5,13.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3187 + type: ApcExtensionCable + components: + - parent: 857 + pos: 23.5,13.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3188 + type: ApcExtensionCable + components: + - parent: 857 + pos: 22.5,13.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3189 + type: ApcExtensionCable + components: + - parent: 857 + pos: 22.5,14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3190 + type: ApcExtensionCable + components: + - parent: 857 + pos: 22.5,14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3191 + type: ApcExtensionCable + components: + - parent: 857 + pos: 22.5,15.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3192 + type: ApcExtensionCable + components: + - parent: 857 + pos: 21.5,13.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3193 + type: ApcExtensionCable + components: + - parent: 857 + pos: 20.5,13.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3194 + type: ApcExtensionCable + components: + - parent: 857 + pos: 20.5,14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3195 + type: ApcExtensionCable + components: + - parent: 857 + pos: 20.5,15.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3196 + type: ApcExtensionCable + components: + - parent: 857 + pos: 19.5,13.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3197 + type: ApcExtensionCable + components: + - parent: 857 + pos: 18.5,13.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3198 + type: ApcExtensionCable + components: + - parent: 857 + pos: 21.5,12.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3199 + type: ApcExtensionCable + components: + - parent: 857 + pos: 21.5,11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3200 + type: ApcExtensionCable + components: + - parent: 857 + pos: 21.5,10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3201 + type: ApcExtensionCable + components: + - parent: 857 + pos: 21.5,9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3202 + type: ApcExtensionCable + components: + - parent: 857 + pos: 21.5,8.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3203 + type: ApcExtensionCable + components: + - parent: 857 + pos: 22.5,8.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3204 + type: ApcExtensionCable + components: + - parent: 857 + pos: 23.5,8.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3205 + type: ApcExtensionCable + components: + - parent: 857 + pos: 20.5,8.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3206 + type: ApcExtensionCable + components: + - parent: 857 + pos: 19.5,8.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3207 + type: ApcExtensionCable + components: + - parent: 857 + pos: 18.5,8.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3208 + type: ApcExtensionCable + components: + - parent: 857 + pos: 17.5,8.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3209 + type: ApcExtensionCable + components: + - parent: 857 + pos: 18.5,12.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3210 + type: ApcExtensionCable + components: + - parent: 857 + pos: 18.5,11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3211 + type: ApcExtensionCable + components: + - parent: 857 + pos: 12.5,13.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3212 + type: ApcExtensionCable + components: + - parent: 857 + pos: 12.5,12.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3213 + type: ApcExtensionCable + components: + - parent: 857 + pos: 12.5,11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3214 + type: ApcExtensionCable + components: + - parent: 857 + pos: 12.5,10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3215 + type: ApcExtensionCable + components: + - parent: 857 + pos: 13.5,10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3216 + type: ApcExtensionCable + components: + - parent: 857 + pos: 14.5,10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3217 + type: ApcExtensionCable + components: + - parent: 857 + pos: 15.5,10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3218 + type: ApcExtensionCable + components: + - parent: 857 + pos: 16.5,10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3219 + type: ApcExtensionCable + components: + - parent: 857 + pos: 15.5,11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3220 + type: ApcExtensionCable + components: + - parent: 857 + pos: 13.5,9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3221 + type: ApcExtensionCable + components: + - parent: 857 + pos: 11.5,10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3222 + type: ApcExtensionCable + components: + - parent: 857 + pos: 10.5,10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3223 + type: ApcExtensionCable + components: + - parent: 857 + pos: 9.5,10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3224 + type: ApcExtensionCable + components: + - parent: 857 + pos: 8.5,10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3225 + type: ApcExtensionCable + components: + - parent: 857 + pos: 7.5,10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3226 + type: ApcExtensionCable + components: + - parent: 857 + pos: 6.5,10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3227 + type: ApcExtensionCable + components: + - parent: 857 + pos: 8.5,11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3228 + type: ApcExtensionCable + components: + - parent: 857 + pos: 8.5,9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3229 + type: ApcExtensionCable + components: + - parent: 857 + pos: 8.5,8.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3230 + type: ApcExtensionCable + components: + - parent: 857 + pos: 8.5,7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3231 + type: ApcExtensionCable + components: + - parent: 857 + pos: 8.5,6.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3232 + type: ApcExtensionCable + components: + - parent: 857 + pos: 12.5,13.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3233 + type: ApcExtensionCable + components: + - parent: 857 + pos: 12.5,14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3234 + type: ApcExtensionCable + components: + - parent: 857 + pos: 11.5,14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3235 + type: ApcExtensionCable + components: + - parent: 857 + pos: 10.5,14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3236 + type: ApcExtensionCable + components: + - parent: 857 + pos: 9.5,14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3237 + type: ApcExtensionCable + components: + - parent: 857 + pos: 8.5,14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3238 + type: ApcExtensionCable + components: + - parent: 857 + pos: 7.5,14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3239 + type: ApcExtensionCable + components: + - parent: 857 + pos: 6.5,14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3240 + type: ApcExtensionCable + components: + - parent: 857 + pos: 12.5,14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3241 + type: ApcExtensionCable + components: + - parent: 857 + pos: 13.5,14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3242 + type: ApcExtensionCable + components: + - parent: 857 + pos: 14.5,14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3243 + type: ApcExtensionCable + components: + - parent: 857 + pos: 15.5,14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3244 + type: ApcExtensionCable + components: + - parent: 857 + pos: 15.5,15.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3245 + type: ApcExtensionCable + components: + - parent: 857 + pos: 13.5,16.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3246 + type: ApcExtensionCable + components: + - parent: 857 + pos: 13.5,15.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3247 + type: ApcExtensionCable + components: + - parent: 857 + pos: 9.5,22.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3248 + type: ApcExtensionCable + components: + - parent: 857 + pos: 9.5,21.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3249 + type: ApcExtensionCable + components: + - parent: 857 + pos: 9.5,20.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3250 + type: ApcExtensionCable + components: + - parent: 857 + pos: 9.5,19.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3251 + type: ApcExtensionCable + components: + - parent: 857 + pos: 9.5,18.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3252 + type: ApcExtensionCable + components: + - parent: 857 + pos: 9.5,17.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3253 + type: ApcExtensionCable + components: + - parent: 857 + pos: 9.5,16.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3254 + type: ApcExtensionCable + components: + - parent: 857 + pos: 10.5,20.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3255 + type: ApcExtensionCable + components: + - parent: 857 + pos: 8.5,17.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3256 + type: ApcExtensionCable + components: + - parent: 857 + pos: 8.5,17.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3257 + type: ApcExtensionCable + components: + - parent: 857 + pos: 7.5,17.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3258 + type: ApcExtensionCable + components: + - parent: 857 + pos: 8.5,20.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3259 + type: ApcExtensionCable + components: + - parent: 857 + pos: 6.5,17.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3260 + type: ApcExtensionCable + components: + - parent: 857 + pos: 5.5,17.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3261 + type: ApcExtensionCable + components: + - parent: 857 + pos: 5.5,16.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3262 + type: ApcExtensionCable + components: + - parent: 857 + pos: 4.5,17.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3263 + type: ApcExtensionCable + components: + - parent: 857 + pos: 3.5,17.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3264 + type: ApcExtensionCable + components: + - parent: 857 + pos: 3.5,18.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3265 + type: ApcExtensionCable + components: + - parent: 857 + pos: 3.5,19.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3266 + type: ApcExtensionCable + components: + - parent: 857 + pos: 3.5,20.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3267 + type: ApcExtensionCable + components: + - parent: 857 + pos: 3.5,20.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3268 + type: ApcExtensionCable + components: + - parent: 857 + pos: 3.5,21.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3269 + type: ApcExtensionCable + components: + - parent: 857 + pos: 3.5,22.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3270 + type: ApcExtensionCable + components: + - parent: 857 + pos: 2.5,20.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3271 + type: ApcExtensionCable + components: + - parent: 857 + pos: 1.5,20.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3272 + type: ApcExtensionCable + components: + - parent: 857 + pos: 9.5,27.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3273 + type: ApcExtensionCable + components: + - parent: 857 + pos: 9.5,26.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3274 + type: ApcExtensionCable + components: + - parent: 857 + pos: 9.5,25.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3275 + type: ApcExtensionCable + components: + - parent: 857 + pos: 9.5,24.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3276 + type: ApcExtensionCable + components: + - parent: 857 + pos: 8.5,24.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3277 + type: ApcExtensionCable + components: + - parent: 857 + pos: 7.5,24.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3278 + type: ApcExtensionCable + components: + - parent: 857 + pos: 6.5,24.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3279 + type: ApcExtensionCable + components: + - parent: 857 + pos: 9.5,28.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3280 + type: ApcExtensionCable + components: + - parent: 857 + pos: 9.5,29.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3281 + type: ApcExtensionCable + components: + - parent: 857 + pos: 9.5,30.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3282 + type: ApcExtensionCable + components: + - parent: 857 + pos: 8.5,30.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3283 + type: ApcExtensionCable + components: + - parent: 857 + pos: 7.5,30.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3284 + type: ApcExtensionCable + components: + - parent: 857 + pos: 6.5,30.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3285 + type: ApcExtensionCable + components: + - parent: 857 + pos: 6.5,31.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3286 + type: ApcExtensionCable + components: + - parent: 857 + pos: -2.5,27.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3287 + type: ApcExtensionCable + components: + - parent: 857 + pos: -2.5,28.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3288 + type: ApcExtensionCable + components: + - parent: 857 + pos: -2.5,29.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3289 + type: ApcExtensionCable + components: + - parent: 857 + pos: -2.5,30.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3290 + type: ApcExtensionCable + components: + - parent: 857 + pos: -1.5,30.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3291 + type: ApcExtensionCable + components: + - parent: 857 + pos: -0.5,30.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3292 + type: ApcExtensionCable + components: + - parent: 857 + pos: 0.5,30.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3293 + type: ApcExtensionCable + components: + - parent: 857 + pos: 1.5,30.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3294 + type: ApcExtensionCable + components: + - parent: 857 + pos: 2.5,30.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3295 + type: ApcExtensionCable + components: + - parent: 857 + pos: 3.5,30.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3296 + type: ApcExtensionCable + components: + - parent: 857 + pos: 0.5,31.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3297 + type: ApcExtensionCable + components: + - parent: 857 + pos: 3.5,31.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3298 + type: ApcExtensionCable + components: + - parent: 857 + pos: -2.5,26.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3299 + type: ApcExtensionCable + components: + - parent: 857 + pos: -2.5,25.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3300 + type: ApcExtensionCable + components: + - parent: 857 + pos: -1.5,25.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3301 + type: ApcExtensionCable + components: + - parent: 857 + pos: -0.5,25.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3302 + type: ApcExtensionCable + components: + - parent: 857 + pos: 0.5,25.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3303 + type: ApcExtensionCable + components: + - parent: 857 + pos: 0.5,24.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3304 + type: ApcExtensionCable + components: + - parent: 857 + pos: -2.5,24.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3305 + type: ApcExtensionCable + components: + - parent: 857 + pos: -2.5,23.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3306 + type: ApcExtensionCable + components: + - parent: 857 + pos: -1.5,23.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3307 + type: SalternSmes + components: + - parent: 857 + pos: 42.5,5.5 + rot: -1.5707963267948966 rad + type: Transform + - supplyRate: 14000 + type: PowerSupplier +- uid: 3308 + type: SalternSmes + components: + - parent: 857 + pos: 40.5,5.5 + rot: -1.5707963267948966 rad + type: Transform + - supplyRate: 14000 + type: PowerSupplier +- uid: 3309 + type: HVWire + components: + - parent: 857 + pos: 41.5,6.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3310 + type: HVWire + components: + - parent: 857 + pos: 41.5,5.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3311 + type: HVWire + components: + - parent: 857 + pos: 42.5,4.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3312 + type: HVWire + components: + - parent: 857 + pos: 42.5,3.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3313 + type: HVWire + components: + - parent: 857 + pos: 42.5,2.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3314 + type: HVWire + components: + - parent: 857 + pos: 42.5,1.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3315 + type: HVWire + components: + - parent: 857 + pos: 42.5,0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3316 + type: HVWire + components: + - parent: 857 + pos: 42.5,-0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3317 + type: HVWire + components: + - parent: 857 + pos: 42.5,-1.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3318 + type: HVWire + components: + - parent: 857 + pos: 42.5,-2.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3319 + type: HVWire + components: + - parent: 857 + pos: 42.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3320 + type: HVWire + components: + - parent: 857 + pos: 42.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3321 + type: HVWire + components: + - parent: 857 + pos: 42.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3322 + type: HVWire + components: + - parent: 857 + pos: 41.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3323 + type: HVWire + components: + - parent: 857 + pos: 40.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3324 + type: HVWire + components: + - parent: 857 + pos: 39.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3325 + type: HVWire + components: + - parent: 857 + pos: 38.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3326 + type: HVWire + components: + - parent: 857 + pos: 38.5,-5.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3327 + type: HVWire + components: + - parent: 857 + pos: 38.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3328 + type: HVWire + components: + - parent: 857 + pos: 38.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3329 + type: HVWire + components: + - parent: 857 + pos: 37.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3330 + type: HVWire + components: + - parent: 857 + pos: 36.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3331 + type: HVWire + components: + - parent: 857 + pos: 35.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3332 + type: HVWire + components: + - parent: 857 + pos: 34.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3333 + type: HVWire + components: + - parent: 857 + pos: 33.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3334 + type: HVWire + components: + - parent: 857 + pos: 32.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3335 + type: HVWire + components: + - parent: 857 + pos: 31.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3336 + type: HVWire + components: + - parent: 857 + pos: 30.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3337 + type: HVWire + components: + - parent: 857 + pos: 29.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3338 + type: HVWire + components: + - parent: 857 + pos: 28.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3339 + type: HVWire + components: + - parent: 857 + pos: 27.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3340 + type: HVWire + components: + - parent: 857 + pos: 26.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3341 + type: HVWire + components: + - parent: 857 + pos: 26.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3342 + type: HVWire + components: + - parent: 857 + pos: 26.5,-9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3343 + type: HVWire + components: + - parent: 857 + pos: 26.5,-10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3344 + type: HVWire + components: + - parent: 857 + pos: 26.5,-11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3345 + type: HVWire + components: + - parent: 857 + pos: 26.5,-12.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3346 + type: HVWire + components: + - parent: 857 + pos: 26.5,-13.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3347 + type: HVWire + components: + - parent: 857 + pos: 26.5,-14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible - uid: 3348 - type: SuspicionRifleMagazineSpawner + type: HVWire components: - - parent: 15 - pos: -35.5,-4.5 + - parent: 857 + pos: 26.5,-15.5 rot: -1.5707963267948966 rad type: Transform + - deadThreshold: 100 + type: Destructible - uid: 3349 - type: SuspicionRifleMagazineSpawner + type: HVWire components: - - parent: 15 - pos: -35.5,-3.5 + - parent: 857 + pos: 26.5,-16.5 rot: -1.5707963267948966 rad type: Transform + - deadThreshold: 100 + type: Destructible - uid: 3350 - type: SuspicionPistolMagazineSpawner + type: HVWire components: - - parent: 15 - pos: -35.5,-0.5 + - parent: 857 + pos: 26.5,-17.5 rot: -1.5707963267948966 rad type: Transform + - deadThreshold: 100 + type: Destructible - uid: 3351 - type: SuspicionShotgunMagazineSpawner + type: HVWire components: - - parent: 15 - pos: -23.5,-13.5 + - parent: 857 + pos: 25.5,-9.5 rot: -1.5707963267948966 rad type: Transform + - deadThreshold: 100 + type: Destructible - uid: 3352 - type: SuspicionShotgunSpawner + type: HVWire components: - - parent: 15 + - parent: 857 + pos: 24.5,-9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3353 + type: HVWire + components: + - parent: 857 + pos: 23.5,-9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3354 + type: HVWire + components: + - parent: 857 + pos: 22.5,-9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3355 + type: HVWire + components: + - parent: 857 + pos: 21.5,-9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3356 + type: HVWire + components: + - parent: 857 + pos: 25.5,-17.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3357 + type: HVWire + components: + - parent: 857 + pos: 24.5,-17.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3358 + type: HVWire + components: + - parent: 857 + pos: 23.5,-17.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3359 + type: HVWire + components: + - parent: 857 + pos: 22.5,-17.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3360 + type: HVWire + components: + - parent: 857 + pos: 22.5,-18.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3361 + type: HVWire + components: + - parent: 857 + pos: 22.5,-19.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3362 + type: HVWire + components: + - parent: 857 + pos: 22.5,-20.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3363 + type: HVWire + components: + - parent: 857 + pos: 22.5,-21.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3364 + type: HVWire + components: + - parent: 857 + pos: 22.5,-22.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3365 + type: HVWire + components: + - parent: 857 + pos: 22.5,-23.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3366 + type: HVWire + components: + - parent: 857 + pos: 22.5,-24.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3367 + type: HVWire + components: + - parent: 857 + pos: 22.5,-25.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3368 + type: HVWire + components: + - parent: 857 + pos: 21.5,-25.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3369 + type: HVWire + components: + - parent: 857 + pos: 20.5,-25.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3370 + type: HVWire + components: + - parent: 857 + pos: 19.5,-25.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3371 + type: HVWire + components: + - parent: 857 + pos: 18.5,-25.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3372 + type: HVWire + components: + - parent: 857 + pos: 17.5,-25.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3373 + type: HVWire + components: + - parent: 857 + pos: 16.5,-25.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3374 + type: HVWire + components: + - parent: 857 + pos: 15.5,-25.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3375 + type: HVWire + components: + - parent: 857 + pos: 14.5,-25.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3376 + type: HVWire + components: + - parent: 857 + pos: 14.5,-24.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3377 + type: HVWire + components: + - parent: 857 + pos: 14.5,-23.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3378 + type: HVWire + components: + - parent: 857 + pos: 14.5,-22.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3379 + type: HVWire + components: + - parent: 857 + pos: 14.5,-21.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3380 + type: HVWire + components: + - parent: 857 + pos: 14.5,-20.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3381 + type: HVWire + components: + - parent: 857 + pos: 13.5,-20.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3382 + type: HVWire + components: + - parent: 857 + pos: 12.5,-20.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3383 + type: HVWire + components: + - parent: 857 + pos: 11.5,-20.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3384 + type: HVWire + components: + - parent: 857 + pos: 10.5,-20.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3385 + type: HVWire + components: + - parent: 857 + pos: 9.5,-20.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3386 + type: HVWire + components: + - parent: 857 + pos: 8.5,-20.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3387 + type: HVWire + components: + - parent: 857 + pos: 7.5,-20.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3388 + type: HVWire + components: + - parent: 857 + pos: 6.5,-20.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3389 + type: HVWire + components: + - parent: 857 + pos: 5.5,-20.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3390 + type: HVWire + components: + - parent: 857 + pos: 4.5,-20.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3391 + type: HVWire + components: + - parent: 857 + pos: 3.5,-20.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3392 + type: HVWire + components: + - parent: 857 + pos: 2.5,-20.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3393 + type: HVWire + components: + - parent: 857 + pos: 2.5,-21.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3394 + type: HVWire + components: + - parent: 857 + pos: 2.5,-22.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3395 + type: HVWire + components: + - parent: 857 + pos: 2.5,-23.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3396 + type: HVWire + components: + - parent: 857 + pos: 1.5,-23.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3397 + type: HVWire + components: + - parent: 857 + pos: -0.5,-23.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3398 + type: HVWire + components: + - parent: 857 + pos: 0.5,-23.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3399 + type: HVWire + components: + - parent: 857 + pos: -0.5,-24.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3400 + type: HVWire + components: + - parent: 857 + pos: -0.5,-25.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3401 + type: HVWire + components: + - parent: 857 + pos: -0.5,-26.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3402 + type: HVWire + components: + - parent: 857 + pos: -1.5,-26.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3403 + type: HVWire + components: + - parent: 857 + pos: -2.5,-26.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3404 + type: HVWire + components: + - parent: 857 + pos: -3.5,-26.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3405 + type: HVWire + components: + - parent: 857 + pos: -4.5,-26.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3406 + type: HVWire + components: + - parent: 857 + pos: -5.5,-26.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3407 + type: HVWire + components: + - parent: 857 + pos: -6.5,-26.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3408 + type: HVWire + components: + - parent: 857 + pos: -7.5,-26.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3409 + type: HVWire + components: + - parent: 857 + pos: -8.5,-26.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3410 + type: HVWire + components: + - parent: 857 + pos: -9.5,-26.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3411 + type: HVWire + components: + - parent: 857 + pos: -10.5,-26.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3412 + type: HVWire + components: + - parent: 857 + pos: -11.5,-26.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3413 + type: HVWire + components: + - parent: 857 + pos: -11.5,-26.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3414 + type: HVWire + components: + - parent: 857 + pos: -11.5,-25.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3415 + type: HVWire + components: + - parent: 857 + pos: -11.5,-24.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3416 + type: HVWire + components: + - parent: 857 + pos: -11.5,-23.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3417 + type: HVWire + components: + - parent: 857 + pos: -11.5,-22.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3418 + type: HVWire + components: + - parent: 857 + pos: -11.5,-21.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3419 + type: HVWire + components: + - parent: 857 + pos: -11.5,-20.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3420 + type: HVWire + components: + - parent: 857 + pos: -11.5,-19.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3421 + type: HVWire + components: + - parent: 857 + pos: -11.5,-18.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3422 + type: HVWire + components: + - parent: 857 + pos: -11.5,-17.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3423 + type: HVWire + components: + - parent: 857 + pos: -11.5,-16.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3424 + type: HVWire + components: + - parent: 857 + pos: -11.5,-15.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3425 + type: HVWire + components: + - parent: 857 + pos: -11.5,-14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3426 + type: HVWire + components: + - parent: 857 + pos: -10.5,-14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3427 + type: HVWire + components: + - parent: 857 + pos: -9.5,-14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3428 + type: HVWire + components: + - parent: 857 + pos: -9.5,-13.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3429 + type: HVWire + components: + - parent: 857 + pos: -9.5,-12.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3430 + type: HVWire + components: + - parent: 857 + pos: -9.5,-11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3431 + type: HVWire + components: + - parent: 857 + pos: -9.5,-10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3432 + type: HVWire + components: + - parent: 857 + pos: -8.5,-10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3433 + type: HVWire + components: + - parent: 857 + pos: -7.5,-10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3434 + type: HVWire + components: + - parent: 857 + pos: -6.5,-10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3435 + type: HVWire + components: + - parent: 857 + pos: -5.5,-10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3436 + type: HVWire + components: + - parent: 857 + pos: -4.5,-10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3437 + type: HVWire + components: + - parent: 857 + pos: -3.5,-10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3438 + type: HVWire + components: + - parent: 857 + pos: -2.5,-10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3439 + type: HVWire + components: + - parent: 857 + pos: -1.5,-10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3440 + type: HVWire + components: + - parent: 857 + pos: -0.5,-10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3441 + type: HVWire + components: + - parent: 857 + pos: 0.5,-10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3442 + type: HVWire + components: + - parent: 857 + pos: 0.5,-9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3443 + type: HVWire + components: + - parent: 857 + pos: 0.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3444 + type: HVWire + components: + - parent: 857 + pos: 0.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3445 + type: HVWire + components: + - parent: 857 + pos: 0.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3446 + type: HVWire + components: + - parent: 857 + pos: -12.5,-14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3447 + type: HVWire + components: + - parent: 857 + pos: -13.5,-14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3448 + type: HVWire + components: + - parent: 857 + pos: -14.5,-14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3449 + type: HVWire + components: + - parent: 857 pos: -15.5,-14.5 rot: -1.5707963267948966 rad type: Transform -- uid: 3353 - type: SuspicionHitscanSpawner + - deadThreshold: 100 + type: Destructible +- uid: 3450 + type: HVWire components: - - parent: 15 - pos: -15.5,-11.5 + - parent: 857 + pos: -16.5,-14.5 rot: -1.5707963267948966 rad type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3451 + type: HVWire + components: + - parent: 857 + pos: -17.5,-14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3452 + type: HVWire + components: + - parent: 857 + pos: -18.5,-14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3453 + type: HVWire + components: + - parent: 857 + pos: -18.5,-13.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3454 + type: HVWire + components: + - parent: 857 + pos: -18.5,-12.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3455 + type: HVWire + components: + - parent: 857 + pos: -18.5,-11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3456 + type: HVWire + components: + - parent: 857 + pos: -18.5,-11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3457 + type: HVWire + components: + - parent: 857 + pos: -19.5,-11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3458 + type: HVWire + components: + - parent: 857 + pos: -20.5,-11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3459 + type: HVWire + components: + - parent: 857 + pos: -21.5,-11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3460 + type: HVWire + components: + - parent: 857 + pos: -22.5,-11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3461 + type: HVWire + components: + - parent: 857 + pos: -23.5,-11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3462 + type: HVWire + components: + - parent: 857 + pos: -24.5,-11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3463 + type: HVWire + components: + - parent: 857 + pos: -25.5,-11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3464 + type: HVWire + components: + - parent: 857 + pos: -26.5,-11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3465 + type: HVWire + components: + - parent: 857 + pos: -27.5,-11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3466 + type: HVWire + components: + - parent: 857 + pos: -21.5,-10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3467 + type: HVWire + components: + - parent: 857 + pos: -28.5,-11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3468 + type: HVWire + components: + - parent: 857 + pos: -29.5,-11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3469 + type: HVWire + components: + - parent: 857 + pos: -30.5,-11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3470 + type: HVWire + components: + - parent: 857 + pos: -31.5,-11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3471 + type: HVWire + components: + - parent: 857 + pos: -32.5,-11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3472 + type: HVWire + components: + - parent: 857 + pos: -33.5,-11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3473 + type: HVWire + components: + - parent: 857 + pos: -33.5,-10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3474 + type: HVWire + components: + - parent: 857 + pos: -33.5,-9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3475 + type: HVWire + components: + - parent: 857 + pos: -33.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3476 + type: HVWire + components: + - parent: 857 + pos: -33.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3477 + type: HVWire + components: + - parent: 857 + pos: -33.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3478 + type: HVWire + components: + - parent: 857 + pos: -33.5,-5.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3479 + type: HVWire + components: + - parent: 857 + pos: -33.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3480 + type: HVWire + components: + - parent: 857 + pos: -33.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3481 + type: HVWire + components: + - parent: 857 + pos: -33.5,-2.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3482 + type: HVWire + components: + - parent: 857 + pos: -33.5,-1.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3483 + type: HVWire + components: + - parent: 857 + pos: -33.5,-0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3484 + type: HVWire + components: + - parent: 857 + pos: -33.5,0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3485 + type: HVWire + components: + - parent: 857 + pos: -32.5,0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3486 + type: HVWire + components: + - parent: 857 + pos: -32.5,1.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3487 + type: HVWire + components: + - parent: 857 + pos: -32.5,2.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3488 + type: HVWire + components: + - parent: 857 + pos: -32.5,3.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3489 + type: HVWire + components: + - parent: 857 + pos: -32.5,4.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3490 + type: HVWire + components: + - parent: 857 + pos: -32.5,5.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3491 + type: HVWire + components: + - parent: 857 + pos: -32.5,6.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3492 + type: HVWire + components: + - parent: 857 + pos: -32.5,7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3493 + type: HVWire + components: + - parent: 857 + pos: -32.5,8.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3494 + type: HVWire + components: + - parent: 857 + pos: -32.5,9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3495 + type: HVWire + components: + - parent: 857 + pos: -32.5,10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3496 + type: HVWire + components: + - parent: 857 + pos: -32.5,11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3497 + type: HVWire + components: + - parent: 857 + pos: -32.5,12.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3498 + type: HVWire + components: + - parent: 857 + pos: -32.5,13.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3499 + type: HVWire + components: + - parent: 857 + pos: -32.5,14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3500 + type: HVWire + components: + - parent: 857 + pos: -32.5,14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3501 + type: HVWire + components: + - parent: 857 + pos: -31.5,14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3502 + type: HVWire + components: + - parent: 857 + pos: -30.5,14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3503 + type: HVWire + components: + - parent: 857 + pos: -29.5,14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3504 + type: HVWire + components: + - parent: 857 + pos: -28.5,14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3505 + type: HVWire + components: + - parent: 857 + pos: -27.5,14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3506 + type: HVWire + components: + - parent: 857 + pos: -26.5,14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3507 + type: HVWire + components: + - parent: 857 + pos: -25.5,14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3508 + type: HVWire + components: + - parent: 857 + pos: -24.5,14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3509 + type: HVWire + components: + - parent: 857 + pos: -23.5,14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3510 + type: HVWire + components: + - parent: 857 + pos: -22.5,14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3511 + type: HVWire + components: + - parent: 857 + pos: -21.5,14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3512 + type: HVWire + components: + - parent: 857 + pos: -20.5,14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3513 + type: HVWire + components: + - parent: 857 + pos: -20.5,13.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3514 + type: HVWire + components: + - parent: 857 + pos: -19.5,13.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3515 + type: HVWire + components: + - parent: 857 + pos: -18.5,13.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3516 + type: HVWire + components: + - parent: 857 + pos: -18.5,13.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3517 + type: HVWire + components: + - parent: 857 + pos: -17.5,13.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3518 + type: HVWire + components: + - parent: 857 + pos: -17.5,14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3519 + type: HVWire + components: + - parent: 857 + pos: -17.5,15.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3520 + type: HVWire + components: + - parent: 857 + pos: -18.5,16.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3521 + type: HVWire + components: + - parent: 857 + pos: -17.5,16.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3522 + type: HVWire + components: + - parent: 857 + pos: -16.5,16.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3523 + type: HVWire + components: + - parent: 857 + pos: -15.5,16.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3524 + type: HVWire + components: + - parent: 857 + pos: -18.5,17.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3525 + type: HVWire + components: + - parent: 857 + pos: -18.5,18.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3526 + type: HVWire + components: + - parent: 857 + pos: -18.5,19.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3527 + type: HVWire + components: + - parent: 857 + pos: -18.5,20.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3528 + type: HVWire + components: + - parent: 857 + pos: -18.5,21.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3529 + type: HVWire + components: + - parent: 857 + pos: -18.5,22.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3530 + type: HVWire + components: + - parent: 857 + pos: -18.5,23.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3531 + type: HVWire + components: + - parent: 857 + pos: -18.5,24.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3532 + type: HVWire + components: + - parent: 857 + pos: -18.5,25.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3533 + type: HVWire + components: + - parent: 857 + pos: -17.5,25.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3534 + type: HVWire + components: + - parent: 857 + pos: -16.5,25.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3535 + type: HVWire + components: + - parent: 857 + pos: -15.5,25.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3536 + type: HVWire + components: + - parent: 857 + pos: -14.5,25.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3537 + type: HVWire + components: + - parent: 857 + pos: -13.5,25.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3538 + type: HVWire + components: + - parent: 857 + pos: -12.5,25.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3539 + type: HVWire + components: + - parent: 857 + pos: -11.5,25.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3540 + type: HVWire + components: + - parent: 857 + pos: -10.5,25.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3541 + type: HVWire + components: + - parent: 857 + pos: -9.5,25.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3542 + type: HVWire + components: + - parent: 857 + pos: -8.5,25.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3543 + type: HVWire + components: + - parent: 857 + pos: -7.5,25.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3544 + type: HVWire + components: + - parent: 857 + pos: -7.5,24.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3545 + type: HVWire + components: + - parent: 857 + pos: -6.5,24.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3546 + type: HVWire + components: + - parent: 857 + pos: -5.5,24.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3547 + type: HVWire + components: + - parent: 857 + pos: -4.5,24.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3548 + type: HVWire + components: + - parent: 857 + pos: -4.5,24.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3549 + type: HVWire + components: + - parent: 857 + pos: -4.5,23.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3550 + type: HVWire + components: + - parent: 857 + pos: -4.5,22.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3551 + type: HVWire + components: + - parent: 857 + pos: -4.5,21.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3552 + type: HVWire + components: + - parent: 857 + pos: -4.5,21.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3553 + type: HVWire + components: + - parent: 857 + pos: -3.5,21.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3554 + type: HVWire + components: + - parent: 857 + pos: -2.5,21.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3555 + type: HVWire + components: + - parent: 857 + pos: -1.5,21.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3556 + type: HVWire + components: + - parent: 857 + pos: -0.5,21.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3557 + type: HVWire + components: + - parent: 857 + pos: -0.5,20.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3558 + type: HVWire + components: + - parent: 857 + pos: 0.5,20.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3559 + type: HVWire + components: + - parent: 857 + pos: 1.5,20.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3560 + type: HVWire + components: + - parent: 857 + pos: 2.5,20.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3561 + type: HVWire + components: + - parent: 857 + pos: 3.5,20.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3562 + type: HVWire + components: + - parent: 857 + pos: 4.5,20.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3563 + type: HVWire + components: + - parent: 857 + pos: 5.5,20.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3564 + type: HVWire + components: + - parent: 857 + pos: 6.5,20.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3565 + type: HVWire + components: + - parent: 857 + pos: 7.5,20.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3566 + type: HVWire + components: + - parent: 857 + pos: 8.5,20.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3567 + type: HVWire + components: + - parent: 857 + pos: 9.5,20.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3568 + type: HVWire + components: + - parent: 857 + pos: 10.5,20.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3569 + type: HVWire + components: + - parent: 857 + pos: 11.5,20.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3570 + type: HVWire + components: + - parent: 857 + pos: 12.5,20.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3571 + type: HVWire + components: + - parent: 857 + pos: 12.5,21.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3572 + type: HVWire + components: + - parent: 857 + pos: 12.5,22.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3573 + type: HVWire + components: + - parent: 857 + pos: 12.5,23.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3574 + type: HVWire + components: + - parent: 857 + pos: 12.5,24.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3575 + type: HVWire + components: + - parent: 857 + pos: 11.5,24.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3576 + type: HVWire + components: + - parent: 857 + pos: 12.5,20.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3577 + type: HVWire + components: + - parent: 857 + pos: 12.5,19.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3578 + type: HVWire + components: + - parent: 857 + pos: 12.5,18.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3579 + type: HVWire + components: + - parent: 857 + pos: 12.5,17.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3580 + type: HVWire + components: + - parent: 857 + pos: 12.5,16.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3581 + type: HVWire + components: + - parent: 857 + pos: 12.5,15.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3582 + type: HVWire + components: + - parent: 857 + pos: 12.5,14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3583 + type: HVWire + components: + - parent: 857 + pos: 11.5,14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3584 + type: HVWire + components: + - parent: 857 + pos: 10.5,14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3585 + type: HVWire + components: + - parent: 857 + pos: 10.5,13.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3586 + type: HVWire + components: + - parent: 857 + pos: 10.5,12.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3587 + type: HVWire + components: + - parent: 857 + pos: 10.5,11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3588 + type: HVWire + components: + - parent: 857 + pos: 11.5,11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3589 + type: HVWire + components: + - parent: 857 + pos: 12.5,11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3590 + type: HVWire + components: + - parent: 857 + pos: 13.5,11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3591 + type: HVWire + components: + - parent: 857 + pos: 14.5,11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3592 + type: HVWire + components: + - parent: 857 + pos: 15.5,11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3593 + type: HVWire + components: + - parent: 857 + pos: 16.5,11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3594 + type: HVWire + components: + - parent: 857 + pos: 17.5,11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3595 + type: HVWire + components: + - parent: 857 + pos: 18.5,11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3596 + type: HVWire + components: + - parent: 857 + pos: 19.5,11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3597 + type: HVWire + components: + - parent: 857 + pos: 20.5,11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3598 + type: HVWire + components: + - parent: 857 + pos: 21.5,11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3599 + type: HVWire + components: + - parent: 857 + pos: 22.5,11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3600 + type: HVWire + components: + - parent: 857 + pos: 23.5,11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3601 + type: HVWire + components: + - parent: 857 + pos: 24.5,11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3602 + type: HVWire + components: + - parent: 857 + pos: 25.5,11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3603 + type: HVWire + components: + - parent: 857 + pos: 26.5,11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3604 + type: HVWire + components: + - parent: 857 + pos: 27.5,11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3605 + type: HVWire + components: + - parent: 857 + pos: 27.5,12.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3606 + type: HVWire + components: + - parent: 857 + pos: 27.5,13.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3607 + type: HVWire + components: + - parent: 857 + pos: 28.5,11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3608 + type: HVWire + components: + - parent: 857 + pos: 29.5,11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3609 + type: HVWire + components: + - parent: 857 + pos: 30.5,11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3610 + type: HVWire + components: + - parent: 857 + pos: 31.5,11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3611 + type: HVWire + components: + - parent: 857 + pos: 32.5,11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3612 + type: HVWire + components: + - parent: 857 + pos: 33.5,11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3613 + type: HVWire + components: + - parent: 857 + pos: 34.5,11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3614 + type: HVWire + components: + - parent: 857 + pos: 34.5,10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3615 + type: HVWire + components: + - parent: 857 + pos: 34.5,9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3616 + type: HVWire + components: + - parent: 857 + pos: 34.5,8.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3617 + type: HVWire + components: + - parent: 857 + pos: 34.5,7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3618 + type: HVWire + components: + - parent: 857 + pos: 34.5,6.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3619 + type: HVWire + components: + - parent: 857 + pos: 34.5,5.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3620 + type: HVWire + components: + - parent: 857 + pos: 35.5,5.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3621 + type: HVWire + components: + - parent: 857 + pos: 36.5,5.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3622 + type: HVWire + components: + - parent: 857 + pos: 37.5,5.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3623 + type: HVWire + components: + - parent: 857 + pos: 38.5,5.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3624 + type: HVWire + components: + - parent: 857 + pos: 39.5,5.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3625 + type: SalternSubstation + components: + - parent: 857 + pos: 42.5,-0.5 + rot: -1.5707963267948966 rad + type: Transform + - drawRate: 6500 + type: PowerConsumer + - supplyRate: 6000 + type: PowerSupplier +- uid: 3626 + type: SalternSubstation + components: + - parent: 857 + pos: 27.5,13.5 + rot: -1.5707963267948966 rad + type: Transform + - drawRate: 6500 + type: PowerConsumer + - supplyRate: 6000 + type: PowerSupplier +- uid: 3627 + type: SalternSubstation + components: + - parent: 857 + pos: 11.5,24.5 + rot: -1.5707963267948966 rad + type: Transform + - drawRate: 6500 + type: PowerConsumer + - supplyRate: 6000 + type: PowerSupplier +- uid: 3628 + type: SalternSubstation + components: + - parent: 857 + pos: 21.5,-9.5 + rot: -1.5707963267948966 rad + type: Transform + - drawRate: 6500 + type: PowerConsumer + - supplyRate: 6000 + type: PowerSupplier +- uid: 3629 + type: SalternSubstation + components: + - parent: 857 + pos: -15.5,16.5 + rot: -1.5707963267948966 rad + type: Transform + - drawRate: 6500 + type: PowerConsumer + - supplyRate: 6000 + type: PowerSupplier +- uid: 3630 + type: SalternSubstation + components: + - parent: 857 + pos: -0.5,-22.5 + rot: -1.5707963267948966 rad + type: Transform + - drawRate: 6500 + type: PowerConsumer + - supplyRate: 6000 + type: PowerSupplier +- uid: 3631 + type: HVWire + components: + - parent: 857 + pos: -0.5,-22.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3632 + type: SalternSubstation + components: + - parent: 857 + pos: 0.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform + - drawRate: 6500 + type: PowerConsumer + - supplyRate: 6000 + type: PowerSupplier +- uid: 3633 + type: SalternSubstation + components: + - parent: 857 + pos: -21.5,-10.5 + rot: -1.5707963267948966 rad + type: Transform + - drawRate: 6500 + type: PowerConsumer + - supplyRate: 6000 + type: PowerSupplier +- uid: 3634 + type: SalternSubstation + components: + - parent: 857 + pos: -32.5,7.5 + rot: -1.5707963267948966 rad + type: Transform + - drawRate: 6500 + type: PowerConsumer + - supplyRate: 6000 + type: PowerSupplier +- uid: 3635 + type: MVWire + components: + - parent: 857 + pos: 27.5,13.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3636 + type: MVWire + components: + - parent: 857 + pos: 28.5,13.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3637 + type: MVWire + components: + - parent: 857 + pos: 28.5,14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3638 + type: MVWire + components: + - parent: 857 + pos: 26.5,13.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3639 + type: MVWire + components: + - parent: 857 + pos: 25.5,13.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3640 + type: MVWire + components: + - parent: 857 + pos: 24.5,13.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3641 + type: MVWire + components: + - parent: 857 + pos: 24.5,14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3642 + type: MVWire + components: + - parent: 857 + pos: 24.5,12.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3643 + type: MVWire + components: + - parent: 857 + pos: 23.5,12.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3644 + type: MVWire + components: + - parent: 857 + pos: 22.5,12.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3645 + type: MVWire + components: + - parent: 857 + pos: 21.5,12.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3646 + type: MVWire + components: + - parent: 857 + pos: 20.5,12.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3647 + type: MVWire + components: + - parent: 857 + pos: 19.5,12.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3648 + type: MVWire + components: + - parent: 857 + pos: 18.5,12.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3649 + type: MVWire + components: + - parent: 857 + pos: 17.5,12.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3650 + type: MVWire + components: + - parent: 857 + pos: 16.5,12.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3651 + type: MVWire + components: + - parent: 857 + pos: 15.5,12.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3652 + type: MVWire + components: + - parent: 857 + pos: 14.5,12.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3653 + type: MVWire + components: + - parent: 857 + pos: 13.5,12.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3654 + type: MVWire + components: + - parent: 857 + pos: 12.5,12.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3655 + type: MVWire + components: + - parent: 857 + pos: 12.5,13.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3656 + type: MVWire + components: + - parent: 857 + pos: 11.5,24.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3657 + type: MVWire + components: + - parent: 857 + pos: 9.5,24.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3658 + type: MVWire + components: + - parent: 857 + pos: 10.5,24.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3659 + type: MVWire + components: + - parent: 857 + pos: 9.5,23.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3660 + type: MVWire + components: + - parent: 857 + pos: 9.5,22.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3661 + type: MVWire + components: + - parent: 857 + pos: 9.5,24.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3662 + type: MVWire + components: + - parent: 857 + pos: 9.5,25.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3663 + type: MVWire + components: + - parent: 857 + pos: 9.5,26.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3664 + type: MVWire + components: + - parent: 857 + pos: 9.5,26.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3665 + type: MVWire + components: + - parent: 857 + pos: 9.5,27.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3666 + type: MVWire + components: + - parent: 857 + pos: 8.5,25.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3667 + type: MVWire + components: + - parent: 857 + pos: 7.5,25.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3668 + type: MVWire + components: + - parent: 857 + pos: 6.5,25.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3669 + type: MVWire + components: + - parent: 857 + pos: 5.5,25.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3670 + type: MVWire + components: + - parent: 857 + pos: 4.5,25.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3671 + type: MVWire + components: + - parent: 857 + pos: 3.5,25.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3672 + type: MVWire + components: + - parent: 857 + pos: 2.5,25.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3673 + type: MVWire + components: + - parent: 857 + pos: 1.5,25.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3674 + type: MVWire + components: + - parent: 857 + pos: 0.5,25.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3675 + type: MVWire + components: + - parent: 857 + pos: 0.5,26.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3676 + type: MVWire + components: + - parent: 857 + pos: 0.5,26.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3677 + type: MVWire + components: + - parent: 857 + pos: -0.5,26.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3678 + type: MVWire + components: + - parent: 857 + pos: -1.5,26.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3679 + type: MVWire + components: + - parent: 857 + pos: -2.5,26.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3680 + type: MVWire + components: + - parent: 857 + pos: -2.5,27.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3681 + type: MVWire + components: + - parent: 857 + pos: 42.5,-0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3682 + type: MVWire + components: + - parent: 857 + pos: 43.5,-0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3683 + type: MVWire + components: + - parent: 857 + pos: 43.5,0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3684 + type: MVWire + components: + - parent: 857 + pos: 43.5,1.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3685 + type: MVWire + components: + - parent: 857 + pos: 44.5,1.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3686 + type: MVWire + components: + - parent: 857 + pos: 45.5,1.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3687 + type: MVWire + components: + - parent: 857 + pos: 46.5,1.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3688 + type: MVWire + components: + - parent: 857 + pos: 47.5,1.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3689 + type: MVWire + components: + - parent: 857 + pos: 48.5,1.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3690 + type: MVWire + components: + - parent: 857 + pos: 48.5,0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3691 + type: MVWire + components: + - parent: 857 + pos: 48.5,-0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3692 + type: MVWire + components: + - parent: 857 + pos: 48.5,-1.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3693 + type: MVWire + components: + - parent: 857 + pos: 48.5,-2.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3694 + type: MVWire + components: + - parent: 857 + pos: 47.5,-2.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3695 + type: MVWire + components: + - parent: 857 + pos: 47.5,-1.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3696 + type: MVWire + components: + - parent: 857 + pos: 41.5,-0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3697 + type: MVWire + components: + - parent: 857 + pos: 40.5,-0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3698 + type: MVWire + components: + - parent: 857 + pos: 39.5,-0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3699 + type: MVWire + components: + - parent: 857 + pos: 38.5,-0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3700 + type: MVWire + components: + - parent: 857 + pos: 37.5,-0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3701 + type: MVWire + components: + - parent: 857 + pos: 36.5,-0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3702 + type: MVWire + components: + - parent: 857 + pos: 35.5,-0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3703 + type: MVWire + components: + - parent: 857 + pos: 34.5,-0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3704 + type: MVWire + components: + - parent: 857 + pos: 33.5,-0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3705 + type: MVWire + components: + - parent: 857 + pos: 32.5,-0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3706 + type: MVWire + components: + - parent: 857 + pos: 32.5,0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3707 + type: MVWire + components: + - parent: 857 + pos: 31.5,0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3708 + type: MVWire + components: + - parent: 857 + pos: 31.5,1.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3709 + type: MVWire + components: + - parent: 857 + pos: 43.5,2.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3710 + type: MVWire + components: + - parent: 857 + pos: 43.5,3.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3711 + type: MVWire + components: + - parent: 857 + pos: 43.5,4.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3712 + type: MVWire + components: + - parent: 857 + pos: 43.5,5.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3713 + type: MVWire + components: + - parent: 857 + pos: 43.5,6.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3714 + type: MVWire + components: + - parent: 857 + pos: 43.5,7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3715 + type: MVWire + components: + - parent: 857 + pos: 43.5,8.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3716 + type: MVWire + components: + - parent: 857 + pos: 43.5,9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3717 + type: MVWire + components: + - parent: 857 + pos: 43.5,10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3718 + type: MVWire + components: + - parent: 857 + pos: 21.5,-9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3719 + type: MVWire + components: + - parent: 857 + pos: 21.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3720 + type: MVWire + components: + - parent: 857 + pos: 21.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3721 + type: MVWire + components: + - parent: 857 + pos: 21.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3722 + type: MVWire + components: + - parent: 857 + pos: 21.5,-5.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3723 + type: MVWire + components: + - parent: 857 + pos: 21.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3724 + type: MVWire + components: + - parent: 857 + pos: 22.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3725 + type: MVWire + components: + - parent: 857 + pos: 22.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3726 + type: MVWire + components: + - parent: 857 + pos: 20.5,-9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3727 + type: MVWire + components: + - parent: 857 + pos: 19.5,-9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3728 + type: MVWire + components: + - parent: 857 + pos: 21.5,-9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3729 + type: MVWire + components: + - parent: 857 + pos: 18.5,-9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3730 + type: MVWire + components: + - parent: 857 + pos: 17.5,-9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3731 + type: MVWire + components: + - parent: 857 + pos: 16.5,-9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3732 + type: MVWire + components: + - parent: 857 + pos: 15.5,-9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3733 + type: MVWire + components: + - parent: 857 + pos: 14.5,-9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3734 + type: MVWire + components: + - parent: 857 + pos: 13.5,-9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3735 + type: MVWire + components: + - parent: 857 + pos: 12.5,-9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3736 + type: MVWire + components: + - parent: 857 + pos: 11.5,-9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3737 + type: MVWire + components: + - parent: 857 + pos: 10.5,-9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3738 + type: MVWire + components: + - parent: 857 + pos: 9.5,-9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3739 + type: MVWire + components: + - parent: 857 + pos: 8.5,-9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3740 + type: MVWire + components: + - parent: 857 + pos: 8.5,-10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3741 + type: MVWire + components: + - parent: 857 + pos: 8.5,-11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3742 + type: MVWire + components: + - parent: 857 + pos: 8.5,-12.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3743 + type: MVWire + components: + - parent: 857 + pos: 8.5,-13.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3744 + type: MVWire + components: + - parent: 857 + pos: 8.5,-14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3745 + type: MVWire + components: + - parent: 857 + pos: 8.5,-15.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3746 + type: MVWire + components: + - parent: 857 + pos: 8.5,-16.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3747 + type: MVWire + components: + - parent: 857 + pos: 7.5,-16.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3748 + type: MVWire + components: + - parent: 857 + pos: 7.5,-17.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3749 + type: MVWire + components: + - parent: 857 + pos: 15.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3750 + type: MVWire + components: + - parent: 857 + pos: 15.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3751 + type: MVWire + components: + - parent: 857 + pos: 15.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3752 + type: MVWire + components: + - parent: 857 + pos: 15.5,-5.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3753 + type: MVWire + components: + - parent: 857 + pos: 15.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3754 + type: MVWire + components: + - parent: 857 + pos: 15.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3755 + type: MVWire + components: + - parent: 857 + pos: 15.5,-2.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3756 + type: MVWire + components: + - parent: 857 + pos: 15.5,-1.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3757 + type: MVWire + components: + - parent: 857 + pos: 15.5,-0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3758 + type: MVWire + components: + - parent: 857 + pos: 15.5,0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3759 + type: MVWire + components: + - parent: 857 + pos: 15.5,1.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3760 + type: MVWire + components: + - parent: 857 + pos: 16.5,1.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3761 + type: MVWire + components: + - parent: 857 + pos: 16.5,2.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3762 + type: MVWire + components: + - parent: 857 + pos: -0.5,-22.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3763 + type: MVWire + components: + - parent: 857 + pos: -0.5,-21.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3764 + type: MVWire + components: + - parent: 857 + pos: -0.5,-20.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3765 + type: MVWire + components: + - parent: 857 + pos: -16.5,15.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3766 + type: MVWire + components: + - parent: 857 + pos: -1.5,-19.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3767 + type: MVWire + components: + - parent: 857 + pos: -1.5,-18.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3768 + type: MVWire + components: + - parent: 857 + pos: -1.5,-20.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3769 + type: MVWire + components: + - parent: 857 + pos: -2.5,-20.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3770 + type: MVWire + components: + - parent: 857 + pos: -3.5,-20.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3771 + type: MVWire + components: + - parent: 857 + pos: -4.5,-20.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3772 + type: MVWire + components: + - parent: 857 + pos: -5.5,-20.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3773 + type: MVWire + components: + - parent: 857 + pos: -6.5,-20.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3774 + type: MVWire + components: + - parent: 857 + pos: -7.5,-20.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3775 + type: MVWire + components: + - parent: 857 + pos: -8.5,-20.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3776 + type: MVWire + components: + - parent: 857 + pos: -9.5,-20.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3777 + type: MVWire + components: + - parent: 857 + pos: -9.5,-21.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3778 + type: MVWire + components: + - parent: 857 + pos: -10.5,-20.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3779 + type: MVWire + components: + - parent: 857 + pos: -11.5,-20.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3780 + type: MVWire + components: + - parent: 857 + pos: -12.5,-20.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3781 + type: MVWire + components: + - parent: 857 + pos: -13.5,-20.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3782 + type: MVWire + components: + - parent: 857 + pos: -13.5,-19.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3783 + type: MVWire + components: + - parent: 857 + pos: -13.5,-18.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3784 + type: MVWire + components: + - parent: 857 + pos: -13.5,-17.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3785 + type: MVWire + components: + - parent: 857 + pos: -14.5,-17.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3786 + type: MVWire + components: + - parent: 857 + pos: -14.5,-16.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3787 + type: MVWire + components: + - parent: 857 + pos: 0.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3788 + type: MVWire + components: + - parent: 857 + pos: 0.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3789 + type: MVWire + components: + - parent: 857 + pos: 0.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3790 + type: MVWire + components: + - parent: 857 + pos: -0.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3791 + type: MVWire + components: + - parent: 857 + pos: -1.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3792 + type: MVWire + components: + - parent: 857 + pos: -1.5,-9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3793 + type: MVWire + components: + - parent: 857 + pos: -2.5,-9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3794 + type: MVWire + components: + - parent: 857 + pos: -3.5,-9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3795 + type: MVWire + components: + - parent: 857 + pos: -4.5,-9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3796 + type: MVWire + components: + - parent: 857 + pos: -5.5,-9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3797 + type: MVWire + components: + - parent: 857 + pos: -5.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3798 + type: MVWire + components: + - parent: 857 + pos: -6.5,-9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3799 + type: MVWire + components: + - parent: 857 + pos: -7.5,-9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3800 + type: MVWire + components: + - parent: 857 + pos: -8.5,-9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3801 + type: MVWire + components: + - parent: 857 + pos: -9.5,-9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3802 + type: MVWire + components: + - parent: 857 + pos: -9.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3803 + type: MVWire + components: + - parent: 857 + pos: -9.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3804 + type: MVWire + components: + - parent: 857 + pos: -9.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3805 + type: MVWire + components: + - parent: 857 + pos: -10.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3806 + type: MVWire + components: + - parent: 857 + pos: -11.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3807 + type: MVWire + components: + - parent: 857 + pos: -12.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3808 + type: MVWire + components: + - parent: 857 + pos: -12.5,-5.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3809 + type: MVWire + components: + - parent: 857 + pos: -12.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3810 + type: MVWire + components: + - parent: 857 + pos: -12.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3811 + type: MVWire + components: + - parent: 857 + pos: -12.5,-2.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3812 + type: MVWire + components: + - parent: 857 + pos: -12.5,-1.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3813 + type: MVWire + components: + - parent: 857 + pos: -12.5,-0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3814 + type: MVWire + components: + - parent: 857 + pos: -12.5,0.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3815 + type: MVWire + components: + - parent: 857 + pos: -12.5,1.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3816 + type: MVWire + components: + - parent: 857 + pos: -11.5,1.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3817 + type: MVWire + components: + - parent: 857 + pos: -11.5,2.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3818 + type: MVWire + components: + - parent: 857 + pos: -21.5,-10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3819 + type: MVWire + components: + - parent: 857 + pos: -21.5,-9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3820 + type: MVWire + components: + - parent: 857 + pos: -21.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3821 + type: MVWire + components: + - parent: 857 + pos: -20.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3822 + type: MVWire + components: + - parent: 857 + pos: -19.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3823 + type: MVWire + components: + - parent: 857 + pos: -18.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3824 + type: MVWire + components: + - parent: 857 + pos: -17.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3825 + type: MVWire + components: + - parent: 857 + pos: -17.5,-9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3826 + type: MVWire + components: + - parent: 857 + pos: -16.5,-9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3827 + type: MVWire + components: + - parent: 857 + pos: -15.5,-9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3828 + type: MVWire + components: + - parent: 857 + pos: -14.5,-9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3829 + type: MVWire + components: + - parent: 857 + pos: -14.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3830 + type: MVWire + components: + - parent: 857 + pos: -22.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3831 + type: MVWire + components: + - parent: 857 + pos: -21.5,-11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3832 + type: MVWire + components: + - parent: 857 + pos: -21.5,-12.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3833 + type: MVWire + components: + - parent: 857 + pos: -20.5,-12.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3834 + type: MVWire + components: + - parent: 857 + pos: -23.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3835 + type: MVWire + components: + - parent: 857 + pos: -24.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3836 + type: MVWire + components: + - parent: 857 + pos: -25.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3837 + type: MVWire + components: + - parent: 857 + pos: -26.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3838 + type: MVWire + components: + - parent: 857 + pos: -27.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3839 + type: MVWire + components: + - parent: 857 + pos: -28.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3840 + type: MVWire + components: + - parent: 857 + pos: -29.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3841 + type: MVWire + components: + - parent: 857 + pos: -29.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3842 + type: MVWire + components: + - parent: 857 + pos: -29.5,-6.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3843 + type: MVWire + components: + - parent: 857 + pos: -29.5,-5.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3844 + type: MVWire + components: + - parent: 857 + pos: -29.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3845 + type: MVWire + components: + - parent: 857 + pos: -30.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3846 + type: MVWire + components: + - parent: 857 + pos: -30.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3847 + type: MVWire + components: + - parent: 857 + pos: -32.5,7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3848 + type: MVWire + components: + - parent: 857 + pos: -32.5,8.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3849 + type: MVWire + components: + - parent: 857 + pos: -32.5,9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3850 + type: MVWire + components: + - parent: 857 + pos: -33.5,9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3851 + type: MVWire + components: + - parent: 857 + pos: -34.5,9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3852 + type: MVWire + components: + - parent: 857 + pos: -35.5,9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3853 + type: MVWire + components: + - parent: 857 + pos: -36.5,9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3854 + type: MVWire + components: + - parent: 857 + pos: -37.5,9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3855 + type: MVWire + components: + - parent: 857 + pos: -38.5,9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3856 + type: MVWire + components: + - parent: 857 + pos: -38.5,10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3857 + type: MVWire + components: + - parent: 857 + pos: -39.5,10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3858 + type: MVWire + components: + - parent: 857 + pos: -39.5,11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3859 + type: MVWire + components: + - parent: 857 + pos: -28.5,12.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3860 + type: MVWire + components: + - parent: 857 + pos: -31.5,9.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3861 + type: MVWire + components: + - parent: 857 + pos: -31.5,10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3862 + type: MVWire + components: + - parent: 857 + pos: -31.5,11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3863 + type: MVWire + components: + - parent: 857 + pos: -31.5,12.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3864 + type: MVWire + components: + - parent: 857 + pos: -31.5,13.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3865 + type: MVWire + components: + - parent: 857 + pos: -30.5,13.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3866 + type: MVWire + components: + - parent: 857 + pos: -29.5,13.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3867 + type: MVWire + components: + - parent: 857 + pos: -28.5,13.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3868 + type: MVWire + components: + - parent: 857 + pos: -15.5,16.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3869 + type: MVWire + components: + - parent: 857 + pos: -14.5,16.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3870 + type: MVWire + components: + - parent: 857 + pos: -13.5,16.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3871 + type: MVWire + components: + - parent: 857 + pos: -13.5,15.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3872 + type: MVWire + components: + - parent: 857 + pos: -13.5,14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3873 + type: MVWire + components: + - parent: 857 + pos: -13.5,13.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3874 + type: MVWire + components: + - parent: 857 + pos: -12.5,13.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3875 + type: MVWire + components: + - parent: 857 + pos: -12.5,12.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3876 + type: MVWire + components: + - parent: 857 + pos: -11.5,13.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3877 + type: MVWire + components: + - parent: 857 + pos: -10.5,13.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3878 + type: MVWire + components: + - parent: 857 + pos: -9.5,13.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3879 + type: MVWire + components: + - parent: 857 + pos: -8.5,13.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3880 + type: MVWire + components: + - parent: 857 + pos: -7.5,13.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3881 + type: MVWire + components: + - parent: 857 + pos: -6.5,13.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3882 + type: MVWire + components: + - parent: 857 + pos: -5.5,13.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3883 + type: MVWire + components: + - parent: 857 + pos: -4.5,13.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3884 + type: MVWire + components: + - parent: 857 + pos: -3.5,13.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3885 + type: MVWire + components: + - parent: 857 + pos: -3.5,14.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3886 + type: MVWire + components: + - parent: 857 + pos: -3.5,15.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3887 + type: MVWire + components: + - parent: 857 + pos: -15.5,16.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3888 + type: MVWire + components: + - parent: 857 + pos: -16.5,16.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3889 + type: solid_wall + components: + - parent: 857 + pos: 23.5,-9.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3890 + type: PoweredSmallLight + components: + - parent: 857 + pos: 22.528679,-9.003884 + rot: 1.5707963267948966 rad + type: Transform + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 3891 + type: ApcExtensionCable + components: + - parent: 857 + pos: 22.5,-7.5 + rot: 1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3892 + type: AirlockMaintMedLocked + components: + - parent: 857 + pos: 23.5,-10.5 + rot: 1.5707963267948966 rad + type: Transform +- uid: 3893 + type: AirlockMaintSecLocked + components: + - parent: 857 + pos: -16.5,16.5 + rot: 1.5707963267948966 rad + type: Transform +- uid: 3894 + type: AirlockMaintCommandLocked + components: + - parent: 857 + pos: 12.5,22.5 + rot: 1.5707963267948966 rad + type: Transform +- uid: 3895 + type: EmergencyLight + components: + - parent: 857 + pos: 44.486908,10 + rot: -1.5707963267948966 rad + type: Transform + - powerLoad: 1 + type: PowerReceiver + - startingCharge: 30000 + type: Battery +- uid: 3896 + type: EmergencyLight + components: + - parent: 857 + pos: 47.22923,-3 + type: Transform + - powerLoad: 1 + type: PowerReceiver + - startingCharge: 30000 + type: Battery +- uid: 3897 + type: EmergencyLight + components: + - parent: 857 + pos: 29.299644,-7.5 + type: Transform + - powerLoad: 1 + type: PowerReceiver + - startingCharge: 30000 + type: Battery +- uid: 3898 + type: EmergencyLight + components: + - parent: 857 + pos: 31.467993,-4.5 + rot: 1.5707963267948966 rad + type: Transform + - powerLoad: 1 + type: PowerReceiver + - startingCharge: 30000 + type: Battery +- uid: 3899 + type: EmergencyLight + components: + - parent: 857 + pos: 30.278831,9.5 + type: Transform + - powerLoad: 1 + type: PowerReceiver + - startingCharge: 30000 + type: Battery +- uid: 3900 + type: EmergencyLight + components: + - parent: 857 + pos: 18.260162,9.5 + type: Transform + - powerLoad: 1 + type: PowerReceiver + - startingCharge: 30000 + type: Battery +- uid: 3901 + type: EmergencyLight + components: + - parent: 857 + pos: 26.46292,-1 + rot: -1.5707963267948966 rad + type: Transform + - powerLoad: 1 + type: PowerReceiver + - startingCharge: 30000 + type: Battery +- uid: 3902 + type: EmergencyLight + components: + - parent: 857 + pos: 17.399544,2 + rot: -1.5707963267948966 rad + type: Transform + - powerLoad: 1 + type: PowerReceiver + - startingCharge: 30000 + type: Battery +- uid: 3903 + type: EmergencyLight + components: + - parent: 857 + pos: 7.2721233,-15.5 + type: Transform + - powerLoad: 1 + type: PowerReceiver + - startingCharge: 30000 + type: Battery +- uid: 3904 + type: EmergencyLight + components: + - parent: 857 + pos: 7.3033733,-20.5 + type: Transform + - powerLoad: 1 + type: PowerReceiver + - startingCharge: 30000 + type: Battery +- uid: 3905 + type: EmergencyLight + components: + - parent: 857 + pos: -10.487591,2 + rot: -1.5707963267948966 rad + type: Transform + - powerLoad: 1 + type: PowerReceiver + - startingCharge: 30000 + type: Battery +- uid: 3906 + type: EmergencyLight + components: + - parent: 857 + pos: -2.7508366,15 + rot: -1.5707963267948966 rad + type: Transform + - powerLoad: 1 + type: PowerReceiver + - startingCharge: 30000 + type: Battery +- uid: 3907 + type: EmergencyLight + components: + - parent: 857 + pos: 5.701264,16.5 + rot: 3.141592653589793 rad + type: Transform + - powerLoad: 1 + type: PowerReceiver + - startingCharge: 30000 + type: Battery +- uid: 3908 + type: EmergencyLight + components: + - parent: 857 + pos: 6.2924953,10.5 + type: Transform + - powerLoad: 1 + type: PowerReceiver + - startingCharge: 30000 + type: Battery +- uid: 3909 + type: EmergencyLight + components: + - parent: 857 + pos: 12.41432,9.5 + rot: 1.5707963267948966 rad + type: Transform + - powerLoad: 1 + type: PowerReceiver + - startingCharge: 30000 + type: Battery +- uid: 3910 + type: EmergencyLight + components: + - parent: 857 + pos: 16.47682,3.5 + rot: 1.5707963267948966 rad + type: Transform + - powerLoad: 1 + type: PowerReceiver + - startingCharge: 30000 + type: Battery +- uid: 3911 + type: EmergencyLight + components: + - parent: 857 + pos: -24.514448,12 + rot: -1.5707963267948966 rad + type: Transform + - powerLoad: 1 + type: PowerReceiver + - startingCharge: 30000 + type: Battery +- uid: 3912 + type: EmergencyLight + components: + - parent: 857 + pos: -38.507736,11 + rot: -1.5707963267948966 rad + type: Transform + - powerLoad: 1 + type: PowerReceiver + - startingCharge: 30000 + type: Battery +- uid: 3913 + type: EmergencyLight + components: + - parent: 857 + pos: -35.163986,-4.5 + rot: 3.141592653589793 rad + type: Transform + - powerLoad: 1 + type: PowerReceiver + - startingCharge: 30000 + type: Battery +- uid: 3914 + type: EmergencyLight + components: + - parent: 857 + pos: -22.347473,-1.5 + rot: 3.141592653589793 rad + type: Transform + - powerLoad: 1 + type: PowerReceiver + - startingCharge: 30000 + type: Battery +- uid: 3915 + type: EmergencyLight + components: + - parent: 857 + pos: -20.745232,-0.5 + type: Transform + - powerLoad: 1 + type: PowerReceiver + - startingCharge: 30000 + type: Battery +- uid: 3916 + type: EmergencyLight + components: + - parent: 857 + pos: -13.885857,-9 + rot: -1.5707963267948966 rad + type: Transform + - powerLoad: 1 + type: PowerReceiver + - startingCharge: 30000 + type: Battery +- uid: 3917 + type: EmergencyLight + components: + - parent: 857 + pos: -4.8114204,-9 + rot: -1.5707963267948966 rad + type: Transform + - powerLoad: 1 + type: PowerReceiver + - startingCharge: 30000 + type: Battery +- uid: 3918 + type: EmergencyLight + components: + - parent: 857 + pos: 10.68897,19.5 + rot: 3.141592653589793 rad + type: Transform + - powerLoad: 1 + type: PowerReceiver + - startingCharge: 30000 + type: Battery +- uid: 3919 + type: EmergencyLight + components: + - parent: 857 + pos: 8.923345,28.5 + rot: 1.5707963267948966 rad + type: Transform + - powerLoad: 1 + type: PowerReceiver + - startingCharge: 30000 + type: Battery +- uid: 3920 + type: EmergencyLight + components: + - parent: 857 + pos: -2.4985301,28.5 + rot: 1.5707963267948966 rad + type: Transform + - powerLoad: 1 + type: PowerReceiver + - startingCharge: 30000 + type: Battery +- uid: 3921 + type: EmergencyLight + components: + - parent: 857 + pos: -2.7641551,26.5 + type: Transform + - powerLoad: 1 + type: PowerReceiver + - startingCharge: 30000 + type: Battery +- uid: 3922 + type: EmergencyLight + components: + - parent: 857 + pos: 9.704595,26.5 + rot: 3.141592653589793 rad + type: Transform + - powerLoad: 1 + type: PowerReceiver + - startingCharge: 30000 + type: Battery +- uid: 3923 + type: EmergencyLight + components: + - parent: 857 + pos: -12.509865,6 + rot: -1.5707963267948966 rad + type: Transform + - powerLoad: 1 + type: PowerReceiver + - startingCharge: 30000 + type: Battery +- uid: 3924 + type: ApcExtensionCable + components: + - parent: 857 + pos: -24.5,10.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3925 + type: ApcExtensionCable + components: + - parent: 857 + pos: -24.5,11.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3926 + type: HVWire + components: + - parent: 857 + pos: 41.5,7.5 + rot: -1.5707963267948966 rad + type: Transform + - deadThreshold: 100 + type: Destructible +- uid: 3927 + type: SalternGenerator + components: + - parent: 857 + pos: 40.5,7.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3928 + type: SalternGenerator + components: + - parent: 857 + pos: 42.5,7.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3929 + type: Poweredlight + components: + - parent: 857 + pos: -13.924418,16.541348 + type: Transform + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 3930 + type: PoweredSmallLight + components: + - parent: 857 + pos: -1.4929452,19.970068 + rot: -1.5707963267948966 rad + type: Transform + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 3931 + type: PoweredSmallLight + components: + - parent: 857 + pos: -15.494916,16.030584 + rot: -1.5707963267948966 rad + type: Transform + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 3932 + type: PoweredSmallLight + components: + - parent: 857 + pos: -15.494916,16.030584 + rot: -1.5707963267948966 rad + type: Transform + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 3933 + type: PoweredSmallLight + components: + - parent: 857 + pos: -15.494916,15.968084 + rot: -1.5707963267948966 rad + type: Transform + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 3934 + type: SalternApc + components: + - parent: 857 + pos: -12.5,12.5 + rot: -1.5707963267948966 rad + type: Transform + - drawRate: 2000 + type: PowerConsumer +- uid: 3935 + type: EmergencyLight + components: + - parent: 857 + pos: -13.5,-17 + rot: -1.5707963267948966 rad + type: Transform + - powerLoad: 1 + type: PowerReceiver + - startingCharge: 30000 + type: Battery +- uid: 3936 + type: EmergencyLight + components: + - parent: 857 + pos: -10.5,-17 + rot: -1.5707963267948966 rad + type: Transform + - powerLoad: 1 + type: PowerReceiver + - startingCharge: 30000 + type: Battery +- uid: 3937 + type: EmergencyLight + components: + - parent: 857 + pos: 5.7693076,-15.5 + rot: 3.141592653589793 rad + type: Transform + - powerLoad: 1 + type: PowerReceiver + - startingCharge: 30000 + type: Battery +- uid: 3938 + type: EmergencyLight + components: + - parent: 857 + pos: 2.2274737,8.5 + type: Transform + - powerLoad: 1 + type: PowerReceiver + - startingCharge: 30000 + type: Battery +- uid: 3939 + type: CrateLightBulb + components: + - parent: 857 + pos: 27.48989,-1.4 + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 3940 + type: MetalStack + components: + - parent: 857 + pos: 47.585052,4.443361 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 3941 + type: Table + components: + - parent: 857 + pos: 46.5,4.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3942 + type: Table + components: + - parent: 857 + pos: 48.5,4.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3943 + type: Table + components: + - parent: 857 + pos: 47.5,4.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3944 + type: Table + components: + - parent: 857 + pos: 49.5,4.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3945 + type: Table + components: + - parent: 857 + pos: 50.5,4.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3946 + type: HVWireStack + components: + - parent: 857 + pos: 50.5,4.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 3947 + type: MVWireStack + components: + - parent: 857 + pos: 50.288177,4.693361 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 3948 + type: ApcExtensionCableStack + components: + - parent: 857 + pos: 50.053802,4.474611 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 3949 + type: GlassStack + components: + - parent: 857 + pos: 49.131927,4.677736 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 3950 + type: GlassStack + components: + - parent: 857 + pos: 48.788177,4.505861 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 3951 + type: MetalStack + components: + - parent: 857 + pos: 48.038177,4.677736 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 3952 + type: CrateGeneric + components: + - parent: 857 + pos: 45.585052,4.6 + rot: 1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 3953 + type: Crowbar + components: + - parent: 857 + pos: -29.463713,8.897233 + rot: 1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 3954 + type: Crowbar + components: + - parent: 857 + pos: -15.314676,-12.357978 + rot: 1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 3955 + type: Crowbar + components: + - parent: 857 + pos: -15.502176,-11.748603 + rot: 1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 3956 + type: CrowbarRed + components: + - parent: 857 + pos: -38.496082,2.6274996 + rot: 1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable ... diff --git a/Resources/Maps/stationstation.yml b/Resources/Maps/stationstation.yml index 6446ad62dd..99af47d155 100644 --- a/Resources/Maps/stationstation.yml +++ b/Resources/Maps/stationstation.yml @@ -99,1094 +99,3766 @@ grids: tiles: OAAAADgAAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADsAAAA7AAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7AAAAPgAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOwAAADsAAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADsAAAA7AAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7AAAAOwAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOwAAADsAAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADsAAAA7AAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7AAAAOwAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOwAAADsAAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADsAAAA7AAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7AAAAOwAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOwAAADsAAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== entities: - uid: 0 + type: GlassStack + components: + - parent: 216 + pos: 8.560405,21.456738 + type: Transform + - anchored: False + type: Collidable +- uid: 1 + type: solid_wall + components: + - parent: 216 + pos: 8.5,-2.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 2 + type: LightTube + components: + - parent: 3 + type: Transform + - anchored: False + type: Collidable +- uid: 3 + type: Poweredlight + components: + - parent: 216 + pos: 8,16.5 + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - flags: + - None + type: Destructible + - containers: + light_bulb: + entities: + - 2 + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 4 + type: CableStack1 + components: + - parent: 216 + pos: 10.577456,21.424059 + type: Transform + - anchored: False + type: Collidable +- uid: 5 + type: ChairOfficeLight + components: + - parent: 216 + pos: 9.5,18.5 + rot: 3.141592653589793 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 6 + type: ChairOfficeLight + components: + - parent: 216 + pos: 9.5,16.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 7 + type: Chair + components: + - parent: 216 + pos: 12.5,17.5 + type: Transform + - flags: + - None + type: Destructible +- uid: 8 + type: solid_wall + components: + - parent: 216 + pos: 8.5,-1.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 9 + type: solid_wall + components: + - parent: 216 + pos: 8.5,-0.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 10 + type: solid_wall + components: + - parent: 216 + pos: 8.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 11 + type: Table + components: + - parent: 216 + pos: 13.5,17.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 12 + type: Table + components: + - parent: 216 + pos: 11.5,21.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 13 + type: Table + components: + - parent: 216 + pos: 10.5,21.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 14 + type: Table + components: + - parent: 216 + pos: 9.5,21.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 15 + type: Table + components: + - parent: 216 + pos: 8.5,21.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 16 + type: Autolathe + components: + - parent: 216 + pos: -4.5,-5.5 + type: Transform + - recipes: + - Brutepack + - Ointment + - LightTube + - LightBulb + - MetalStack + - GlassStack + - Wirecutter + - Screwdriver + - Welder + - Wrench + - Crowbar + - Multitool + type: LatheDatabase +- uid: 17 + type: Autolathe + components: + - parent: 216 + pos: 13.5,18.5 + type: Transform + - recipes: + - Brutepack + - Ointment + - LightTube + - LightBulb + - MetalStack + - GlassStack + - Wirecutter + - Screwdriver + - Welder + - Wrench + - Crowbar + - Multitool + type: LatheDatabase +- uid: 18 + type: Protolathe + components: + - parent: 216 + pos: 8.5,17.5 + type: Transform + - protolatherecipes: + - Brutepack + - Ointment + - LightTube + - LightBulb + - MetalStack + - GlassStack + - Wirecutter + - Screwdriver + - Welder + - Wrench + - Crowbar + - Multitool + type: ProtolatheDatabase +- uid: 19 + type: BaseResearchAndDevelopmentPointSource + components: + - parent: 216 + pos: 13.5,16.5 + type: Transform +- uid: 20 + type: ComputerResearchAndDevelopment + components: + - parent: 216 + pos: 8.5,18.5 + type: Transform +- uid: 21 + type: ResearchAndDevelopmentServer + components: + - parent: 216 + pos: 11.5,24.5 + rot: 1.5707963267948966 rad + type: Transform + - points: 343000 + type: ResearchServer +- uid: 22 + type: LightBulb + components: + - parent: 23 + type: Transform + - anchored: False + type: Collidable +- uid: 23 + type: PoweredSmallLight + components: + - parent: 216 + pos: 7.5,26 + rot: 1.5707963267948966 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - flags: + - None + type: Destructible + - containers: + light_bulb: + entities: + - 22 + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 24 + type: Catwalk + components: + - parent: 216 + pos: 13.5,24.5 + rot: 3.141592653589793 rad + type: Transform +- uid: 25 + type: LightBulb + components: + - parent: 26 + type: Transform + - anchored: False + type: Collidable +- uid: 26 + type: PoweredSmallLight + components: + - parent: 216 + pos: 11,24.5 + rot: 3.141592653589793 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - flags: + - None + type: Destructible + - containers: + light_bulb: + entities: + - 25 + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 27 + type: Poweredlight + components: + - parent: 216 + pos: 2,23.5 + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - flags: + - None + type: Destructible + - containers: + light_bulb: + entities: + - 28 + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 28 + type: LightTube + components: + - parent: 27 + type: Transform + - anchored: False + type: Collidable +- uid: 29 + type: LightTube + components: + - parent: 30 + type: Transform + - anchored: False + type: Collidable +- uid: 30 + type: Poweredlight + components: + - parent: 216 + pos: 2,17.5 + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - flags: + - None + type: Destructible + - containers: + light_bulb: + entities: + - 29 + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 31 + type: LightBulb + components: + - parent: 32 + type: Transform + - anchored: False + type: Collidable +- uid: 32 + type: PoweredSmallLight + components: + - parent: 216 + pos: 18,17.5 + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - flags: + - None + type: Destructible + - containers: + light_bulb: + entities: + - 31 + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 33 + type: LightTube + components: + - parent: 34 + type: Transform + - anchored: False + type: Collidable +- uid: 34 + type: Poweredlight + components: + - parent: 216 + pos: 18,27.5 + rot: 3.141592653589793 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - flags: + - None + type: Destructible + - containers: + light_bulb: + entities: + - 33 + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 35 + type: LightTube + components: + - parent: 36 + type: Transform + - anchored: False + type: Collidable +- uid: 36 + type: Poweredlight + components: + - parent: 216 + pos: 18,22.5 + rot: 3.141592653589793 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - flags: + - None + type: Destructible + - containers: + light_bulb: + entities: + - 35 + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 37 + type: Poweredlight + components: + - parent: 216 + pos: 14,18.5 + rot: 3.141592653589793 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - flags: + - None + type: Destructible + - containers: + light_bulb: + entities: + - 38 + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 38 + type: LightTube + components: + - parent: 37 + type: Transform + - anchored: False + type: Collidable +- uid: 39 + type: LightTube + components: + - parent: 40 + type: Transform + - anchored: False + type: Collidable +- uid: 40 + type: Poweredlight + components: + - parent: 216 + pos: 12.5,12 + rot: 1.5707963267948966 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - flags: + - None + type: Destructible + - containers: + light_bulb: + entities: + - 39 + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 41 + type: LightTube + components: + - parent: 42 + type: Transform + - anchored: False + type: Collidable +- uid: 42 + type: Poweredlight + components: + - parent: 216 + pos: 6.5,12 + rot: 1.5707963267948966 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - flags: + - None + type: Destructible + - containers: + light_bulb: + entities: + - 41 + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 43 + type: Table + components: + - parent: 216 + pos: 9.5,15.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 44 + type: Airlock + components: + - parent: 216 + pos: 7.5,20.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 45 + type: Airlock + components: + - parent: 216 + pos: 5.5,15.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 46 + type: AirlockScience + components: + - parent: 216 + pos: 16.5,15.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 47 + type: AirlockScience + components: + - parent: 216 + pos: 16.5,18.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 48 + type: AirlockScience + components: + - parent: 216 + pos: 14.5,24.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 49 + type: AirlockScienceGlass + components: + - parent: 216 + pos: 14.5,20.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 50 + type: solid_wall + components: + - parent: 216 + pos: 1.5,23.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 51 + type: solid_wall + components: + - parent: 216 + pos: 1.5,22.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 52 + type: solid_wall + components: + - parent: 216 + pos: 1.5,21.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 53 + type: solid_wall + components: + - parent: 216 + pos: 1.5,20.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 54 + type: solid_wall + components: + - parent: 216 + pos: 1.5,19.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 55 + type: solid_wall + components: + - parent: 216 + pos: 1.5,18.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 56 + type: solid_wall + components: + - parent: 216 + pos: 1.5,17.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 57 + type: solid_wall + components: + - parent: 216 + pos: 1.5,16.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 58 + type: solid_wall + components: + - parent: 216 + pos: 1.5,15.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 59 + type: Catwalk + components: + - parent: 216 + pos: 6.5,20.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 60 + type: Catwalk + components: + - parent: 216 + pos: 6.5,24.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 61 + type: Catwalk + components: + - parent: 216 + pos: 5.5,16.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 62 + type: solid_wall + components: + - parent: 216 + pos: 7.5,28.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 63 + type: solid_wall + components: + - parent: 216 + pos: 7.5,27.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 64 + type: solid_wall + components: + - parent: 216 + pos: 7.5,21.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 65 + type: solid_wall + components: + - parent: 216 + pos: 7.5,26.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 66 + type: solid_wall + components: + - parent: 216 + pos: 4.5,27.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 67 + type: solid_wall + components: + - parent: 216 + pos: 4.5,26.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 68 + type: solid_wall + components: + - parent: 216 + pos: 4.5,25.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 69 + type: solid_wall + components: + - parent: 216 + pos: 10.5,24.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 70 + type: solid_wall + components: + - parent: 216 + pos: 10.5,23.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 71 + type: solid_wall + components: + - parent: 216 + pos: 10.5,25.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 72 + type: solid_wall + components: + - parent: 216 + pos: 4.5,28.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 73 + type: solid_wall + components: + - parent: 216 + pos: 8.5,26.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 74 + type: solid_wall + components: + - parent: 216 + pos: 9.5,26.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 75 + type: solid_wall + components: + - parent: 216 + pos: 10.5,26.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 76 + type: solid_wall + components: + - parent: 216 + pos: 11.5,26.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 77 + type: solid_wall + components: + - parent: 216 + pos: 12.5,26.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 78 + type: solid_wall + components: + - parent: 216 + pos: 13.5,26.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 79 + type: solid_wall + components: + - parent: 216 + pos: 18.5,28.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 80 + type: solid_wall + components: + - parent: 216 + pos: 18.5,27.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 81 + type: solid_wall + components: + - parent: 216 + pos: 18.5,26.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 82 + type: solid_wall + components: + - parent: 216 + pos: 18.5,25.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 83 + type: solid_wall + components: + - parent: 216 + pos: 18.5,24.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 84 + type: solid_wall + components: + - parent: 216 + pos: 18.5,23.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 85 + type: solid_wall + components: + - parent: 216 + pos: 14.5,28.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 86 + type: solid_wall + components: + - parent: 216 + pos: 14.5,27.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 87 + type: solid_wall + components: + - parent: 216 + pos: 14.5,26.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 88 + type: solid_wall + components: + - parent: 216 + pos: 14.5,25.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 89 + type: solid_wall + components: + - parent: 216 + pos: 14.5,23.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 90 + type: solid_wall + components: + - parent: 216 + pos: 13.5,22.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 91 + type: solid_wall + components: + - parent: 216 + pos: 12.5,22.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 92 + type: solid_wall + components: + - parent: 216 + pos: 11.5,22.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 93 + type: solid_wall + components: + - parent: 216 + pos: 10.5,22.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 94 + type: solid_wall + components: + - parent: 216 + pos: 9.5,22.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 95 + type: solid_wall + components: + - parent: 216 + pos: 8.5,22.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 96 + type: solid_wall + components: + - parent: 216 + pos: 14.5,22.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 97 + type: solid_wall + components: + - parent: 216 + pos: 14.5,21.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 98 + type: solid_wall + components: + - parent: 216 + pos: 7.5,22.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 99 + type: solid_wall + components: + - parent: 216 + pos: 6.5,15.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 100 + type: solid_wall + components: + - parent: 216 + pos: 28.5,15.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 101 + type: solid_wall + components: + - parent: 216 + pos: 27.5,15.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 102 + type: solid_wall + components: + - parent: 216 + pos: 26.5,15.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 103 + type: solid_wall + components: + - parent: 216 + pos: 25.5,15.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 104 + type: solid_wall + components: + - parent: 216 + pos: 24.5,15.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 105 + type: solid_wall + components: + - parent: 216 + pos: 23.5,15.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 106 + type: solid_wall + components: + - parent: 216 + pos: 22.5,15.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 107 + type: solid_wall + components: + - parent: 216 + pos: 21.5,15.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 108 + type: solid_wall + components: + - parent: 216 + pos: 20.5,15.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 109 + type: solid_wall + components: + - parent: 216 + pos: 19.5,15.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 110 + type: solid_wall + components: + - parent: 216 + pos: 18.5,22.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 111 + type: solid_wall + components: + - parent: 216 + pos: 18.5,21.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 112 + type: solid_wall + components: + - parent: 216 + pos: 18.5,20.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 113 + type: solid_wall + components: + - parent: 216 + pos: 18.5,19.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 114 + type: solid_wall + components: + - parent: 216 + pos: 18.5,18.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 115 + type: solid_wall + components: + - parent: 216 + pos: 18.5,17.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 116 + type: solid_wall + components: + - parent: 216 + pos: 18.5,16.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 117 + type: solid_wall + components: + - parent: 216 + pos: 18.5,15.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 118 + type: solid_wall + components: + - parent: 216 + pos: 17.5,15.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 119 + type: solid_wall + components: + - parent: 216 + pos: 17.5,18.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 120 + type: solid_wall + components: + - parent: 216 + pos: 15.5,18.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 121 + type: solid_wall + components: + - parent: 216 + pos: 14.5,19.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 122 + type: solid_wall + components: + - parent: 216 + pos: 14.5,18.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 123 + type: solid_wall + components: + - parent: 216 + pos: 14.5,17.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 124 + type: solid_wall + components: + - parent: 216 + pos: 14.5,16.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 125 + type: solid_wall + components: + - parent: 216 + pos: 15.5,15.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 126 + type: solid_wall + components: + - parent: 216 + pos: 14.5,15.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 127 + type: solid_wall + components: + - parent: 216 + pos: 13.5,15.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 128 + type: solid_wall + components: + - parent: 216 + pos: 12.5,15.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 129 + type: solid_wall + components: + - parent: 216 + pos: 11.5,15.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 130 + type: solid_wall + components: + - parent: 216 + pos: 10.5,15.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 131 + type: solid_wall + components: + - parent: 216 + pos: 8.5,15.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 132 + type: solid_wall + components: + - parent: 216 + pos: 7.5,19.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 133 + type: solid_wall + components: + - parent: 216 + pos: 7.5,18.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 134 + type: solid_wall + components: + - parent: 216 + pos: 7.5,17.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 135 + type: solid_wall + components: + - parent: 216 + pos: 7.5,16.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 136 + type: solid_wall + components: + - parent: 216 + pos: 7.5,15.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 137 + type: solid_wall + components: + - parent: 216 + pos: 4.5,15.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 138 + type: solid_wall + components: + - parent: 216 + pos: 4.5,16.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 139 + type: solid_wall + components: + - parent: 216 + pos: 4.5,17.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 140 + type: solid_wall + components: + - parent: 216 + pos: 4.5,18.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 141 + type: solid_wall + components: + - parent: 216 + pos: 4.5,19.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 142 + type: solid_wall + components: + - parent: 216 + pos: 4.5,20.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 143 + type: solid_wall + components: + - parent: 216 + pos: 4.5,21.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 144 + type: solid_wall + components: + - parent: 216 + pos: 4.5,22.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 145 + type: solid_wall + components: + - parent: 216 + pos: 4.5,23.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 146 + type: solid_wall + components: + - parent: 216 + pos: 4.5,24.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 147 + type: LockerChemistry + components: + - parent: 216 + pos: 27.5,6.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - flags: + - None + type: Destructible + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 148 + type: LockerMedical + components: + - parent: 216 + pos: 27.5,5.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - flags: + - None + type: Destructible + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 149 + type: LockerMedical + components: + - parent: 216 + pos: 29.5,-1.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - flags: + - None + type: Destructible + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 150 + type: LockerMedical + components: + - parent: 216 + pos: 30.5,-1.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - flags: + - None + type: Destructible + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 151 + type: CrateMedical + components: + - parent: 216 + pos: 31.5,-1.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - flags: + - None + type: Destructible + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 152 + type: CrateMedical + components: + - parent: 216 + pos: 32.5,-1.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - flags: + - None + type: Destructible + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 153 + type: Beaker + components: + - parent: 216 + pos: 33.62275,-4.634824 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 154 + type: Beaker + components: + - parent: 216 + pos: 33.62275,-4.228574 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 155 + type: Beaker + components: + - parent: 216 + pos: 33.388374,-4.431699 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 156 + type: Beaker + components: + - parent: 216 + pos: 33.357124,-4.166074 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 157 + type: Beaker + components: + - parent: 216 + pos: 33.357124,-4.837949 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 158 + type: LargeBeaker + components: + - parent: 216 + pos: 33.544624,-5.572324 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 159 + type: LargeBeaker + components: + - parent: 216 + pos: 33.294624,-5.181699 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 160 + type: LargeBeaker + components: + - parent: 216 + pos: 33.18525,-5.681699 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 161 + type: Table + components: + - parent: 216 + pos: 33.5,-5.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 162 + type: Table + components: + - parent: 216 + pos: 33.5,-4.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 163 + type: Table + components: + - parent: 216 + pos: 33.5,-3.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 164 + type: Table + components: + - parent: 216 + pos: 33.5,-2.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 165 + type: Table + components: + - parent: 216 + pos: 33.5,-1.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 166 + type: SpawnPointLatejoin + components: + - parent: 216 + pos: 19.5,-3.5 + rot: 1.5707963267948966 rad + type: Transform +- uid: 167 + type: SpawnPointLatejoin + components: + - parent: 216 + pos: 17.5,8.5 + rot: 1.5707963267948966 rad + type: Transform +- uid: 168 + type: Ointment + components: + - parent: 216 + pos: 18.77326,6.653532 + rot: 1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 169 + type: Ointment + components: + - parent: 216 + pos: 18.49201,6.059782 + rot: 1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 170 + type: Brutepack + components: + - parent: 216 + pos: 18.601385,5.512907 + rot: 1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 171 + type: Brutepack + components: + - parent: 216 + pos: 18.476385,4.841032 + rot: 1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 172 + type: LightTube + components: + - parent: 173 + type: Transform + - anchored: False + type: Collidable +- uid: 173 + type: Poweredlight + components: + - parent: 216 + pos: 23.5,-6 + rot: 1.5707963267948966 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - flags: + - None + type: Destructible + - containers: + light_bulb: + entities: + - 172 + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 174 + type: ComputerMedicalRecords + components: + - parent: 216 + pos: 22.5,-5.5 + rot: 1.5707963267948966 rad + type: Transform +- uid: 175 + type: MedkitFilled + components: + - parent: 216 + pos: 13.632214,1.5673001 + rot: 3.141592653589793 rad + type: Transform + - anchored: False + type: Collidable + - containers: + storagebase: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 176 + type: MedkitFilled + components: + - parent: 216 + pos: 13.460339,0.6141751 + rot: 3.141592653589793 rad + type: Transform + - anchored: False + type: Collidable + - containers: + storagebase: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 177 + type: VendingMachineWallMedical + components: + - parent: 216 + pos: 1.5,-3.5 + rot: 3.141592653589793 rad + type: Transform + - flags: + - None + type: Breakable +- uid: 178 + type: VendingMachineMedical + components: + - parent: 216 + pos: 25.5,-5.5 + rot: 3.141592653589793 rad + type: Transform + - flags: + - None + type: Breakable +- uid: 179 + type: VendingMachineMedical + components: + - parent: 216 + pos: 27.5,-5.5 + rot: 3.141592653589793 rad + type: Transform + - flags: + - None + type: Breakable +- uid: 180 + type: VendingMachineMedical + components: + - parent: 216 + pos: 29.5,3.5 + rot: 3.141592653589793 rad + type: Transform + - flags: + - None + type: Breakable +- uid: 181 + type: LightTube + components: + - parent: 182 + type: Transform + - anchored: False + type: Collidable +- uid: 182 + type: Poweredlight + components: + - parent: 216 + pos: 28,7.5 + rot: 3.141592653589793 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - flags: + - None + type: Destructible + - containers: + light_bulb: + entities: + - 181 + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 183 + type: LightTube + components: + - parent: 184 + type: Transform + - anchored: False + type: Collidable +- uid: 184 + type: Poweredlight + components: + - parent: 216 + pos: 30,1.5 + rot: 3.141592653589793 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - flags: + - None + type: Destructible + - containers: + light_bulb: + entities: + - 183 + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 185 + type: LightTube + components: + - parent: 186 + type: Transform + - anchored: False + type: Collidable +- uid: 186 + type: Poweredlight + components: + - parent: 216 + pos: 31.5,-6 + rot: 1.5707963267948966 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - flags: + - None + type: Destructible + - containers: + light_bulb: + entities: + - 185 + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 187 + type: solid_wall + components: + - parent: 216 + pos: 6.5,2.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 188 + type: solid_wall + components: + - parent: 216 + pos: 5.5,2.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 189 + type: Table + components: + - parent: 216 + pos: 24.5,-5.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 190 + type: Table + components: + - parent: 216 + pos: 23.5,-5.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 191 + type: LightTube + components: + - parent: 192 + type: Transform + - anchored: False + type: Collidable +- uid: 192 + type: Poweredlight + components: + - parent: 216 + pos: 16.5,-6 + rot: 1.5707963267948966 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - flags: + - None + type: Destructible + - containers: + light_bulb: + entities: + - 191 + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 193 + type: LightTube + components: + - parent: 194 + type: Transform + - anchored: False + type: Collidable +- uid: 194 + type: Poweredlight + components: + - parent: 216 + pos: 22,9.5 + rot: 3.141592653589793 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - flags: + - None + type: Destructible + - containers: + light_bulb: + entities: + - 193 + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 195 + type: LightTube + components: + - parent: 196 + type: Transform + - anchored: False + type: Collidable +- uid: 196 + type: Poweredlight + components: + - parent: 216 + pos: 14,9.5 + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - flags: + - None + type: Destructible + - containers: + light_bulb: + entities: + - 195 + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 197 + type: solid_wall + components: + - parent: 216 + pos: 8.5,2.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 198 + type: LightTube + components: + - parent: 199 + type: Transform + - anchored: False + type: Collidable +- uid: 199 + type: Poweredlight + components: + - parent: 216 + pos: 13.5,3 + rot: -1.5707963267948966 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - flags: + - None + type: Destructible + - containers: + light_bulb: + entities: + - 198 + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 200 + type: LightTube + components: + - parent: 201 + type: Transform + - anchored: False + type: Collidable +- uid: 201 + type: Poweredlight + components: + - parent: 216 + pos: 22.5,3 + rot: -1.5707963267948966 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - flags: + - None + type: Destructible + - containers: + light_bulb: + entities: + - 200 + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 202 + type: LightTube + components: + - parent: 203 + type: Transform + - anchored: False + type: Collidable +- uid: 203 + type: Poweredlight + components: + - parent: 216 + pos: 17.5,4 + rot: 1.5707963267948966 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - flags: + - None + type: Destructible + - containers: + light_bulb: + entities: + - 202 + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 204 + type: solid_wall + components: + - parent: 216 + pos: 7.5,2.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 205 + type: solid_wall + components: + - parent: 216 + pos: 8.5,0.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 206 + type: Airlock + components: + - parent: 216 + pos: 13.5,10.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 207 + type: Airlock + components: + - parent: 216 + pos: 4.5,10.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 208 + type: Airlock + components: + - parent: 216 + pos: 1.5,10.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 209 + type: Poweredlight + components: + - parent: 216 + pos: 8,-1.5 + rot: 3.141592653589793 rad + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - flags: + - None + type: Destructible + - containers: + light_bulb: + entities: + - 306 + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 210 + type: solid_wall + components: + - parent: 216 + pos: 8.5,1.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 211 + type: Beaker + components: + - parent: 216 + pos: 25.291822,10.667244 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 212 + type: Beaker + components: + - parent: 216 + pos: 24.541822,10.635994 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 213 + type: Beaker + components: + - parent: 216 + pos: 26.416822,10.651619 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 214 + type: AirlockMedicalGlass + components: + - parent: 216 + pos: 26.5,4.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 215 + type: AirlockMedicalGlass + components: + - parent: 216 + pos: 20.5,3.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 216 components: - parent: null type: Transform - index: 0 type: MapGrid -- uid: 1 +- uid: 217 type: LaserGun components: - - parent: 0 + - parent: 216 pos: -1.47174,4.550247 rot: -1.5707963267949 rad type: Transform + - anchored: False + type: Collidable - startingCharge: 1000 type: PowerCell - containers: BatteryBarrel-powercell-container: entities: - - 969 + - 383 type: Content.Server.GameObjects.ContainerSlot BatteryBarrel-ammo-container: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2 +- uid: 218 type: LaserGun components: - - parent: 0 + - parent: 216 pos: -0.6748645,4.487747 rot: -1.5707963267949 rad type: Transform + - anchored: False + type: Collidable - startingCharge: 1000 type: PowerCell - containers: BatteryBarrel-powercell-container: entities: - - 970 + - 384 type: Content.Server.GameObjects.ContainerSlot BatteryBarrel-ammo-container: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 3 +- uid: 219 type: Brutepack components: - - parent: 0 + - parent: 216 pos: -2.106966,-1.457896 rot: -1.5707963267949 rad type: Transform -- uid: 4 + - anchored: False + type: Collidable +- uid: 220 type: Ointment components: - - parent: 0 + - parent: 216 pos: -1.481966,-1.317271 rot: -1.5707963267949 rad type: Transform -- uid: 5 + - anchored: False + type: Collidable +- uid: 221 type: Spear components: - - parent: 0 + - parent: 216 pos: -4.144312,7.499083 rot: -1.5707963267949 rad type: Transform -- uid: 6 + - anchored: False + type: Collidable +- uid: 222 type: Spear components: - - parent: 0 + - parent: 216 pos: -1.238062,7.436583 rot: -1.5707963267949 rad type: Transform -- uid: 7 + - anchored: False + type: Collidable +- uid: 223 type: PowerCellSmallHigh components: - - parent: 0 + - parent: 216 pos: -2.67511,-10.351 rot: -1.5707963267949 rad type: Transform - - startingCharge: 1000 - type: PowerCell -- uid: 8 + - anchored: False + type: Collidable +- uid: 224 type: PowerCellSmallHigh components: - - parent: 0 + - parent: 216 pos: -2.55011,-10.6635 rot: -1.5707963267949 rad type: Transform - - startingCharge: 1000 - type: PowerCell -- uid: 9 + - anchored: False + type: Collidable +- uid: 225 type: OuterclothingVest components: - - parent: 0 + - parent: 216 pos: 1.412994,7.507263 rot: -1.5707963267949 rad type: Transform -- uid: 10 + - anchored: False + type: Collidable +- uid: 226 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -7.5,0.5 rot: -1.5707963267949 rad type: Transform -- uid: 11 + - flags: + - None + type: Destructible +- uid: 227 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -7.5,-0.5 rot: -1.5707963267949 rad type: Transform -- uid: 12 + - flags: + - None + type: Destructible +- uid: 228 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -7.5,-1.5 rot: -1.5707963267949 rad type: Transform -- uid: 13 + - flags: + - None + type: Destructible +- uid: 229 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -7.5,-2.5 rot: -1.5707963267949 rad type: Transform -- uid: 14 + - flags: + - None + type: Destructible +- uid: 230 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -7.5,-3.5 rot: -1.5707963267949 rad type: Transform -- uid: 15 + - flags: + - None + type: Destructible +- uid: 231 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 0.5,-14.5 rot: -1.5707963267949 rad type: Transform -- uid: 16 + - flags: + - None + type: Destructible +- uid: 232 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -0.5,-14.5 rot: -1.5707963267949 rad type: Transform -- uid: 17 + - flags: + - None + type: Destructible +- uid: 233 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 3.5,-14.5 rot: -1.5707963267949 rad type: Transform -- uid: 18 + - flags: + - None + type: Destructible +- uid: 234 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 4.5,-14.5 rot: -1.5707963267949 rad type: Transform -- uid: 19 + - flags: + - None + type: Destructible +- uid: 235 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -7.5,-10.5 rot: -1.5707963267949 rad type: Transform -- uid: 20 + - flags: + - None + type: Destructible +- uid: 236 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -7.5,-11.5 rot: -1.5707963267949 rad type: Transform -- uid: 21 + - flags: + - None + type: Destructible +- uid: 237 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -7.5,-12.5 rot: -1.5707963267949 rad type: Transform -- uid: 22 + - flags: + - None + type: Destructible +- uid: 238 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -7.5,-13.5 rot: -1.5707963267949 rad type: Transform -- uid: 23 + - flags: + - None + type: Destructible +- uid: 239 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 2.5,-14.5 rot: -1.5707963267949 rad type: Transform -- uid: 24 + - flags: + - None + type: Destructible +- uid: 240 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 1.5,-14.5 rot: -1.5707963267949 rad type: Transform -- uid: 25 + - flags: + - None + type: Destructible +- uid: 241 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -1.5,-14.5 rot: -1.5707963267949 rad type: Transform -- uid: 26 + - flags: + - None + type: Destructible +- uid: 242 type: PoweredSmallLight components: - - parent: 0 + - parent: 216 pos: -4.5,-5 rot: 1.5707963267949 rad type: Transform - color: '#FFFFFFFF' type: PointLight + - flags: + - None + type: Destructible - containers: light_bulb: entities: - - 30 + - 246 type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 27 +- uid: 243 type: MetalStack components: - - parent: 0 + - parent: 216 pos: -15.5,-5.5 rot: -1.5707963267949 rad type: Transform -- uid: 28 - type: Wire + - anchored: False + type: Collidable +- uid: 244 + type: AirlockMedicalGlass components: - - parent: 0 - pos: 8.5,-8.5 - rot: -1.5707963267949 rad + - parent: 216 + pos: 16.5,3.5 + rot: -1.5707963267948966 rad type: Transform -- uid: 29 + - flags: + - None + type: Destructible +- uid: 245 type: PoweredSmallLight components: - - parent: 0 + - parent: 216 pos: 0.5,-5 rot: 1.5707963267949 rad type: Transform - color: '#FFFFFFFF' type: PointLight + - flags: + - None + type: Destructible - containers: light_bulb: entities: - - 170 + - 385 type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 30 +- uid: 246 type: LightBulb components: - - parent: 26 + - parent: 242 type: Transform -- uid: 31 - type: Wire + - anchored: False + type: Collidable +- uid: 247 + type: AirlockMedicalGlass components: - - parent: 0 - pos: -6.5,-11.5 - rot: -1.5707963267949 rad + - parent: 216 + pos: 15.5,3.5 + rot: -1.5707963267948966 rad type: Transform -- uid: 32 + - flags: + - None + type: Destructible +- uid: 248 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -7.5,-9.5 rot: -1.5707963267949 rad type: Transform -- uid: 33 + - flags: + - None + type: Destructible +- uid: 249 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -10.5,-7.5 rot: -1.5707963267949 rad type: Transform -- uid: 34 + - flags: + - None + type: Destructible +- uid: 250 type: AirlockEngineering components: - - parent: 0 + - parent: 216 pos: -12.5,1.5 rot: -1.5707963267949 rad type: Transform -- uid: 35 + - flags: + - None + type: Destructible +- uid: 251 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -10.5,-5.5 rot: -1.5707963267949 rad type: Transform -- uid: 36 + - flags: + - None + type: Destructible +- uid: 252 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -10.5,-4.5 rot: -1.5707963267949 rad type: Transform -- uid: 37 + - flags: + - None + type: Destructible +- uid: 253 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -10.5,-3.5 rot: -1.5707963267949 rad type: Transform -- uid: 38 + - flags: + - None + type: Destructible +- uid: 254 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -10.5,-2.5 rot: -1.5707963267949 rad type: Transform -- uid: 39 + - flags: + - None + type: Destructible +- uid: 255 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -10.5,-1.5 rot: -1.5707963267949 rad type: Transform -- uid: 40 + - flags: + - None + type: Destructible +- uid: 256 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -3.5,-14.5 rot: -1.5707963267949 rad type: Transform -- uid: 41 + - flags: + - None + type: Destructible +- uid: 257 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 1.5,-4.5 rot: -1.5707963267949 rad type: Transform -- uid: 42 + - flags: + - None + type: Destructible +- uid: 258 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 0.5,-4.5 rot: -1.5707963267949 rad type: Transform -- uid: 43 + - flags: + - None + type: Destructible +- uid: 259 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -0.5,-4.5 rot: -1.5707963267949 rad type: Transform -- uid: 44 + - flags: + - None + type: Destructible +- uid: 260 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -1.5,-4.5 rot: -1.5707963267949 rad type: Transform -- uid: 45 + - flags: + - None + type: Destructible +- uid: 261 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -2.5,-4.5 rot: -1.5707963267949 rad type: Transform -- uid: 46 + - flags: + - None + type: Destructible +- uid: 262 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -3.5,-4.5 rot: -1.5707963267949 rad type: Transform -- uid: 47 + - flags: + - None + type: Destructible +- uid: 263 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -4.5,-4.5 rot: -1.5707963267949 rad type: Transform -- uid: 48 + - flags: + - None + type: Destructible +- uid: 264 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -5.5,-4.5 rot: -1.5707963267949 rad type: Transform -- uid: 49 + - flags: + - None + type: Destructible +- uid: 265 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -6.5,-4.5 rot: -1.5707963267949 rad type: Transform -- uid: 50 + - flags: + - None + type: Destructible +- uid: 266 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 4.5,-4.5 rot: -1.5707963267949 rad type: Transform -- uid: 51 + - flags: + - None + type: Destructible +- uid: 267 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 5.5,-4.5 rot: -1.5707963267949 rad type: Transform -- uid: 52 + - flags: + - None + type: Destructible +- uid: 268 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 6.5,-4.5 rot: -1.5707963267949 rad type: Transform -- uid: 53 + - flags: + - None + type: Destructible +- uid: 269 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -7.5,-14.5 rot: -1.5707963267949 rad type: Transform -- uid: 54 + - flags: + - None + type: Destructible +- uid: 270 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -2.5,-14.5 rot: -1.5707963267949 rad type: Transform -- uid: 55 + - flags: + - None + type: Destructible +- uid: 271 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -6.5,-14.5 rot: -1.5707963267949 rad type: Transform -- uid: 56 + - flags: + - None + type: Destructible +- uid: 272 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -5.5,-14.5 rot: -1.5707963267949 rad type: Transform -- uid: 57 + - flags: + - None + type: Destructible +- uid: 273 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -4.5,-14.5 rot: -1.5707963267949 rad type: Transform -- uid: 58 + - flags: + - None + type: Destructible +- uid: 274 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 6.5,-10.5 rot: -1.5707963267949 rad type: Transform -- uid: 59 + - flags: + - None + type: Destructible +- uid: 275 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 6.5,-11.5 rot: -1.5707963267949 rad type: Transform -- uid: 60 + - flags: + - None + type: Destructible +- uid: 276 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 6.5,-12.5 rot: -1.5707963267949 rad type: Transform -- uid: 61 + - flags: + - None + type: Destructible +- uid: 277 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 6.5,-13.5 rot: -1.5707963267949 rad type: Transform -- uid: 62 + - flags: + - None + type: Destructible +- uid: 278 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 6.5,-14.5 rot: -1.5707963267949 rad type: Transform -- uid: 63 + - flags: + - None + type: Destructible +- uid: 279 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 5.5,-14.5 rot: -1.5707963267949 rad type: Transform -- uid: 64 + - flags: + - None + type: Destructible +- uid: 280 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -7.5,-8.5 rot: -1.5707963267949 rad type: Transform -- uid: 65 + - flags: + - None + type: Destructible +- uid: 281 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -7.5,-7.5 rot: -1.5707963267949 rad type: Transform -- uid: 66 + - flags: + - None + type: Destructible +- uid: 282 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -8.5,-8.5 rot: -1.5707963267949 rad type: Transform -- uid: 67 + - flags: + - None + type: Destructible +- uid: 283 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -9.5,-8.5 rot: -1.5707963267949 rad type: Transform -- uid: 68 + - flags: + - None + type: Destructible +- uid: 284 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -10.5,-8.5 rot: -1.5707963267949 rad type: Transform -- uid: 69 + - flags: + - None + type: Destructible +- uid: 285 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -7.5,-5.5 rot: -1.5707963267949 rad type: Transform -- uid: 70 + - flags: + - None + type: Destructible +- uid: 286 type: Catwalk components: - - parent: 0 + - parent: 216 pos: -6.5,-6.5 rot: -1.5707963267949 rad type: Transform -- uid: 71 +- uid: 287 type: Catwalk components: - - parent: 0 + - parent: 216 pos: -8.5,-6.5 rot: -1.5707963267949 rad type: Transform -- uid: 72 +- uid: 288 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 5.5,-7.5 rot: -1.5707963267949 rad type: Transform -- uid: 73 + - flags: + - None + type: Destructible +- uid: 289 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 5.5,-9.5 rot: -1.5707963267949 rad type: Transform -- uid: 74 + - flags: + - None + type: Destructible +- uid: 290 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 6.5,-9.5 rot: -1.5707963267949 rad type: Transform -- uid: 75 + - flags: + - None + type: Destructible +- uid: 291 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 6.5,-7.5 rot: -1.5707963267949 rad type: Transform -- uid: 76 + - flags: + - None + type: Destructible +- uid: 292 type: Catwalk components: - - parent: 0 + - parent: 216 pos: 4.5,-8.5 rot: -1.5707963267949 rad type: Transform -- uid: 77 +- uid: 293 type: LargeBeaker components: - - parent: 0 + - parent: 216 pos: 23.494947,7.0422435 rot: -1.5707963267948966 rad type: Transform -- uid: 78 + - anchored: False + type: Collidable +- uid: 294 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 7.5,-9.5 rot: -1.5707963267949 rad type: Transform -- uid: 79 + - flags: + - None + type: Destructible +- uid: 295 type: AirlockExternal components: - - parent: 0 + - parent: 216 pos: 7.5,-8.5 rot: -1.5707963267949 rad type: Transform -- uid: 80 + - flags: + - None + type: Destructible +- uid: 296 type: AirlockExternal components: - - parent: 0 + - parent: 216 pos: 5.5,-8.5 rot: -1.5707963267949 rad type: Transform -- uid: 81 + - flags: + - None + type: Destructible +- uid: 297 type: AirlockEngineering components: - - parent: 0 + - parent: 216 pos: -7.5,-6.5 rot: -1.5707963267949 rad type: Transform -- uid: 82 + - flags: + - None + type: Destructible +- uid: 298 type: AirlockEngineering components: - - parent: 0 + - parent: 216 pos: 3.5,-4.5 rot: -1.5707963267949 rad type: Transform -- uid: 83 + - flags: + - None + type: Destructible +- uid: 299 type: AirlockEngineering components: - - parent: 0 + - parent: 216 pos: 2.5,-4.5 rot: -1.5707963267949 rad type: Transform -- uid: 84 + - flags: + - None + type: Destructible +- uid: 300 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 6.5,-6.5 rot: -1.5707963267949 rad type: Transform -- uid: 85 + - flags: + - None + type: Destructible +- uid: 301 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 6.5,-5.5 rot: -1.5707963267949 rad type: Transform -- uid: 86 + - flags: + - None + type: Destructible +- uid: 302 type: Table components: - - parent: 0 + - parent: 216 pos: -3.5,-5.5 rot: -1.5707963267949 rad type: Transform -- uid: 87 + - flags: + - None + type: Destructible +- uid: 303 type: Table components: - - parent: 0 + - parent: 216 pos: -2.5,-5.5 rot: -1.5707963267949 rad type: Transform -- uid: 88 + - flags: + - None + type: Destructible +- uid: 304 type: Table components: - - parent: 0 + - parent: 216 pos: -1.5,-5.5 rot: -1.5707963267949 rad type: Transform -- uid: 89 + - flags: + - None + type: Destructible +- uid: 305 type: Table components: - - parent: 0 + - parent: 216 pos: -0.5,-5.5 rot: -1.5707963267949 rad type: Transform -- uid: 90 - type: WirelessMachine + - flags: + - None + type: Destructible +- uid: 306 + type: LightTube components: - - parent: 0 - pos: 5.5,-5.5 - rot: -1.5707963267949 rad + - parent: 209 type: Transform -- uid: 91 + - anchored: False + type: Collidable +- uid: 307 type: CrateGeneric components: - - parent: 0 + - parent: 216 pos: 5.5,-6.5 rot: -1.5707963267949 rad type: Transform + - anchored: False + type: Collidable - IsPlaceable: False type: PlaceableSurface + - flags: + - None + type: Destructible - containers: storagebase: type: Robust.Server.GameObjects.Components.Container.Container EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 92 - type: Wire +- uid: 308 + type: Table components: - - parent: 0 - pos: -6.5,-6.5 - rot: -1.5707963267949 rad + - parent: 216 + pos: 23.5,5.5 + rot: -1.5707963267948966 rad type: Transform -- uid: 93 - type: Wire + - flags: + - None + type: Destructible +- uid: 309 + type: Table components: - - parent: 0 - pos: -7.5,-6.5 - rot: -1.5707963267949 rad + - parent: 216 + pos: 23.5,6.5 + rot: -1.5707963267948966 rad type: Transform -- uid: 94 - type: Wire - components: - - parent: 0 - pos: -8.5,-6.5 - rot: -1.5707963267949 rad - type: Transform -- uid: 95 - type: Wire - components: - - parent: 0 - pos: -8.5,-5.5 - rot: -1.5707963267949 rad - type: Transform -- uid: 96 - type: Wire - components: - - parent: 0 - pos: -8.5,-4.5 - rot: -1.5707963267949 rad - type: Transform -- uid: 97 - type: Wire - components: - - parent: 0 - pos: -8.5,-3.5 - rot: -1.5707963267949 rad - type: Transform -- uid: 98 - type: Wire - components: - - parent: 0 - pos: -8.5,-2.5 - rot: -1.5707963267949 rad - type: Transform -- uid: 99 - type: Wire - components: - - parent: 0 - pos: -8.5,-1.5 - rot: -1.5707963267949 rad - type: Transform -- uid: 100 - type: Wire - components: - - parent: 0 - pos: -6.5,-7.5 - rot: -1.5707963267949 rad - type: Transform -- uid: 101 - type: Wire - components: - - parent: 0 - pos: -6.5,-8.5 - rot: -1.5707963267949 rad - type: Transform -- uid: 102 - type: Wire - components: - - parent: 0 - pos: -6.5,-9.5 - rot: -1.5707963267949 rad - type: Transform -- uid: 103 - type: Wire - components: - - parent: 0 - pos: -6.5,-10.5 - rot: -1.5707963267949 rad - type: Transform -- uid: 104 - type: Wire - components: - - parent: 0 - pos: 4.5,-8.5 - rot: -1.5707963267949 rad - type: Transform -- uid: 105 - type: Wire - components: - - parent: 0 - pos: 4.5,-9.5 - rot: -1.5707963267949 rad - type: Transform -- uid: 106 - type: Wire - components: - - parent: 0 - pos: 4.5,-10.5 - rot: -1.5707963267949 rad - type: Transform -- uid: 107 - type: Wire - components: - - parent: 0 - pos: 4.5,-11.5 - rot: -1.5707963267949 rad - type: Transform -- uid: 108 - type: Wire - components: - - parent: 0 - pos: 5.5,-8.5 - rot: -1.5707963267949 rad - type: Transform -- uid: 109 - type: Wire - components: - - parent: 0 - pos: 6.5,-8.5 - rot: -1.5707963267949 rad - type: Transform -- uid: 110 - type: Wire - components: - - parent: 0 - pos: 7.5,-8.5 - rot: -1.5707963267949 rad - type: Transform -- uid: 111 + - flags: + - None + type: Destructible +- uid: 310 type: Catwalk components: - - parent: 0 + - parent: 216 + pos: 12.5,10.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 311 + type: Catwalk + components: + - parent: 216 + pos: 5.5,10.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 312 + type: solid_wall + components: + - parent: 216 + pos: 1.5,14.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 313 + type: solid_wall + components: + - parent: 216 + pos: 1.5,13.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 314 + type: solid_wall + components: + - parent: 216 + pos: 1.5,12.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 315 + type: solid_wall + components: + - parent: 216 + pos: -7.5,11.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 316 + type: solid_wall + components: + - parent: 216 + pos: -6.5,11.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 317 + type: solid_wall + components: + - parent: 216 + pos: -5.5,11.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 318 + type: solid_wall + components: + - parent: 216 + pos: -4.5,11.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 319 + type: solid_wall + components: + - parent: 216 + pos: -3.5,11.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 320 + type: solid_wall + components: + - parent: 216 + pos: -2.5,11.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 321 + type: solid_wall + components: + - parent: 216 + pos: -1.5,11.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 322 + type: solid_wall + components: + - parent: 216 + pos: -0.5,11.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 323 + type: solid_wall + components: + - parent: 216 + pos: 0.5,11.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 324 + type: solid_wall + components: + - parent: 216 + pos: 1.5,11.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 325 + type: solid_wall + components: + - parent: 216 + pos: 1.5,9.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 326 + type: solid_wall + components: + - parent: 216 + pos: 4.5,9.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 327 + type: Catwalk + components: + - parent: 216 pos: 2.5,-11.5 rot: -1.5707963267949 rad type: Transform -- uid: 112 +- uid: 328 type: Catwalk components: - - parent: 0 + - parent: 216 pos: -4.5,-11.5 rot: -1.5707963267949 rad type: Transform -- uid: 113 - type: Wire +- uid: 329 + type: solid_wall components: - - parent: 0 - pos: 3.5,-11.5 - rot: -1.5707963267949 rad + - parent: 216 + pos: 12.5,8.5 + rot: -1.5707963267948966 rad type: Transform -- uid: 114 - type: Wire + - flags: + - None + type: Destructible +- uid: 330 + type: solid_wall components: - - parent: 0 - pos: 2.5,-11.5 - rot: -1.5707963267949 rad + - parent: 216 + pos: 11.5,8.5 + rot: -1.5707963267948966 rad type: Transform -- uid: 115 - type: Wire + - flags: + - None + type: Destructible +- uid: 331 + type: solid_wall components: - - parent: 0 - pos: 1.5,-11.5 - rot: -1.5707963267949 rad + - parent: 216 + pos: 10.5,8.5 + rot: -1.5707963267948966 rad type: Transform -- uid: 116 - type: Wire + - flags: + - None + type: Destructible +- uid: 332 + type: solid_wall components: - - parent: 0 - pos: 0.5,-11.5 - rot: -1.5707963267949 rad + - parent: 216 + pos: 9.5,8.5 + rot: -1.5707963267948966 rad type: Transform -- uid: 117 - type: Wire + - flags: + - None + type: Destructible +- uid: 333 + type: solid_wall components: - - parent: 0 - pos: -0.5,-11.5 - rot: -1.5707963267949 rad + - parent: 216 + pos: 8.5,8.5 + rot: -1.5707963267948966 rad type: Transform -- uid: 118 - type: Wire + - flags: + - None + type: Destructible +- uid: 334 + type: solid_wall components: - - parent: 0 - pos: -1.5,-11.5 - rot: -1.5707963267949 rad + - parent: 216 + pos: 7.5,8.5 + rot: -1.5707963267948966 rad type: Transform -- uid: 119 - type: Wire + - flags: + - None + type: Destructible +- uid: 335 + type: solid_wall components: - - parent: 0 - pos: -2.5,-11.5 - rot: -1.5707963267949 rad + - parent: 216 + pos: 6.5,8.5 + rot: -1.5707963267948966 rad type: Transform -- uid: 120 - type: Wire + - flags: + - None + type: Destructible +- uid: 336 + type: solid_wall components: - - parent: 0 - pos: -3.5,-11.5 - rot: -1.5707963267949 rad + - parent: 216 + pos: 5.5,8.5 + rot: -1.5707963267948966 rad type: Transform -- uid: 121 - type: Wire + - flags: + - None + type: Destructible +- uid: 337 + type: solid_wall components: - - parent: 0 - pos: -4.5,-11.5 - rot: -1.5707963267949 rad + - parent: 216 + pos: 4.5,11.5 + rot: -1.5707963267948966 rad type: Transform -- uid: 122 - type: Wire + - flags: + - None + type: Destructible +- uid: 338 + type: solid_wall components: - - parent: 0 - pos: -5.5,-11.5 - rot: -1.5707963267949 rad + - parent: 216 + pos: 5.5,11.5 + rot: -1.5707963267948966 rad type: Transform -- uid: 123 - type: Wire + - flags: + - None + type: Destructible +- uid: 339 + type: solid_wall components: - - parent: 0 - pos: 1.5,-12.5 - rot: -1.5707963267949 rad + - parent: 216 + pos: 6.5,11.5 + rot: -1.5707963267948966 rad type: Transform -- uid: 124 - type: Wire + - flags: + - None + type: Destructible +- uid: 340 + type: solid_wall components: - - parent: 0 - pos: 1.5,-13.5 - rot: -1.5707963267949 rad + - parent: 216 + pos: 7.5,11.5 + rot: -1.5707963267948966 rad type: Transform -- uid: 125 - type: Wire + - flags: + - None + type: Destructible +- uid: 341 + type: solid_wall components: - - parent: 0 - pos: 2.5,-13.5 - rot: -1.5707963267949 rad + - parent: 216 + pos: 8.5,11.5 + rot: -1.5707963267948966 rad type: Transform -- uid: 126 - type: Wire + - flags: + - None + type: Destructible +- uid: 342 + type: solid_wall components: - - parent: 0 - pos: -2.5,-12.5 - rot: -1.5707963267949 rad + - parent: 216 + pos: 9.5,11.5 + rot: -1.5707963267948966 rad type: Transform -- uid: 127 - type: Wire + - flags: + - None + type: Destructible +- uid: 343 + type: solid_wall components: - - parent: 0 - pos: -2.5,-13.5 - rot: -1.5707963267949 rad + - parent: 216 + pos: 10.5,11.5 + rot: -1.5707963267948966 rad type: Transform -- uid: 128 - type: Wire + - flags: + - None + type: Destructible +- uid: 344 + type: solid_wall components: - - parent: 0 - pos: -3.5,-13.5 - rot: -1.5707963267949 rad + - parent: 216 + pos: 11.5,11.5 + rot: -1.5707963267948966 rad type: Transform -- uid: 129 - type: Wire + - flags: + - None + type: Destructible +- uid: 345 + type: solid_wall components: - - parent: 0 - pos: -1.5,-13.5 - rot: -1.5707963267949 rad + - parent: 216 + pos: 12.5,11.5 + rot: -1.5707963267948966 rad type: Transform -- uid: 130 - type: Generator + - flags: + - None + type: Destructible +- uid: 346 + type: MetalStack components: - - parent: 0 - pos: 2.5,-13.5 - rot: -1.5707963267949 rad + - parent: 216 + pos: 9.435405,21.503613 type: Transform -- uid: 131 - type: Generator + - anchored: False + type: Collidable +- uid: 347 + type: MetalStack components: - - parent: 0 - pos: 1.5,-13.5 - rot: -1.5707963267949 rad + - parent: 216 + pos: 9.654155,21.628613 type: Transform -- uid: 132 - type: SmesDry + - anchored: False + type: Collidable +- uid: 348 + type: MagazinePistolSmg components: - - parent: 0 - pos: -1.5,-13.5 - rot: -1.5707963267949 rad + - parent: 484 type: Transform - - supplyRate: 1000 - type: PowerSupplier -- uid: 133 - type: SmesDry + - anchored: False + type: Collidable + - containers: + RangedMagazine-magazine: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 349 + type: MagazinePistolSmg components: - - parent: 0 - pos: -2.5,-13.5 - rot: -1.5707963267949 rad + - parent: 485 type: Transform - - supplyRate: 1000 - type: PowerSupplier -- uid: 134 - type: SmesDry - components: - - parent: 0 - pos: -3.5,-13.5 - rot: -1.5707963267949 rad - type: Transform - - supplyRate: 1000 - type: PowerSupplier -- uid: 135 + - anchored: False + type: Collidable + - containers: + RangedMagazine-magazine: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 350 type: Multitool components: - - parent: 0 + - parent: 216 pos: -1.249865,-10.43489 rot: -1.5707963267949 rad type: Transform -- uid: 136 + - anchored: False + type: Collidable +- uid: 351 type: Catwalk components: - - parent: 0 + - parent: 216 pos: -2.5,-12.5 rot: -1.5707963267949 rad type: Transform -- uid: 137 +- uid: 352 type: Catwalk components: - - parent: 0 + - parent: 216 pos: 1.5,-12.5 rot: -1.5707963267949 rad type: Transform -- uid: 138 +- uid: 353 type: SpawnPointLatejoin components: - - parent: 0 + - parent: 216 pos: -1.5,-8.5 rot: -1.5707963267949 rad type: Transform -- uid: 139 +- uid: 354 type: SpawnPointLatejoin components: - - parent: 0 + - parent: 216 pos: 0.5,-8.5 rot: -1.5707963267949 rad type: Transform -- uid: 140 +- uid: 355 type: Table components: - - parent: 0 + - parent: 216 pos: -3.5,-10.5 rot: -1.5707963267949 rad type: Transform -- uid: 141 + - flags: + - None + type: Destructible +- uid: 356 type: Table components: - - parent: 0 + - parent: 216 pos: -2.5,-10.5 rot: -1.5707963267949 rad type: Transform -- uid: 142 + - flags: + - None + type: Destructible +- uid: 357 type: Table components: - - parent: 0 + - parent: 216 pos: -1.5,-10.5 rot: -1.5707963267949 rad type: Transform -- uid: 143 + - flags: + - None + type: Destructible +- uid: 358 type: Table components: - - parent: 0 + - parent: 216 pos: -0.5,-10.5 rot: -1.5707963267949 rad type: Transform -- uid: 144 + - flags: + - None + type: Destructible +- uid: 359 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -7.5,-4.5 rot: -1.5707963267949 rad type: Transform -- uid: 145 + - flags: + - None + type: Destructible +- uid: 360 type: SpawnPointLatejoin components: - - parent: 0 + - parent: 216 pos: -3.5,-8.5 rot: -1.5707963267949 rad type: Transform -- uid: 146 +- uid: 361 type: OuterclothingVest components: - - parent: 0 + - parent: 216 pos: 0.5223687,7.507263 rot: -1.5707963267949 rad type: Transform -- uid: 147 + - anchored: False + type: Collidable +- uid: 362 type: LockerGeneric components: - - parent: 0 + - parent: 216 pos: 1.5,-10.5 rot: -1.5707963267949 rad type: Transform + - anchored: False + type: Collidable - IsPlaceable: False type: PlaceableSurface + - flags: + - None + type: Destructible - containers: storagebase: type: Robust.Server.GameObjects.Components.Container.Container @@ -1195,37 +3867,46 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 148 +- uid: 363 type: MedkitFilled components: - - parent: 0 + - parent: 216 pos: -3.209215,-1.486604 rot: -1.5707963267949 rad type: Transform + - anchored: False + type: Collidable - containers: storagebase: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 149 +- uid: 364 type: MedkitFilled components: - - parent: 0 + - parent: 216 pos: -4.146715,-1.408479 rot: -1.5707963267949 rad type: Transform + - anchored: False + type: Collidable - containers: storagebase: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 150 +- uid: 365 type: LockerGeneric components: - - parent: 0 + - parent: 216 pos: 0.5,-10.5 rot: -1.5707963267949 rad type: Transform + - anchored: False + type: Collidable - IsPlaceable: False type: PlaceableSurface + - flags: + - None + type: Destructible - containers: storagebase: type: Robust.Server.GameObjects.Components.Container.Container @@ -1234,31 +3915,33 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 151 +- uid: 366 type: FireExtinguisher components: - - parent: 0 + - parent: 216 pos: -1.297692,-5.396082 rot: -1.5707963267949 rad type: Transform -- uid: 152 + - anchored: False + type: Collidable +- uid: 367 type: SpawnPointLatejoin components: - - parent: 0 + - parent: 216 pos: -0.5,-0.5 rot: -1.5707963267949 rad type: Transform -- uid: 153 +- uid: 368 type: SpawnPointLatejoin components: - - parent: 0 + - parent: 216 pos: -5.5,-0.5 rot: -1.5707963267949 rad type: Transform -- uid: 154 +- uid: 369 type: ComputerSupplyRequest components: - - parent: 0 + - parent: 216 pos: 0.5,-5.5 rot: -1.5707963267949 rad type: Transform @@ -1267,10 +3950,10 @@ entities: - cargo.flashlight - cargo.Medkit type: GalacticMarket -- uid: 155 +- uid: 370 type: ComputerSupplyOrdering components: - - parent: 0 + - parent: 216 pos: 0.5,0.5 rot: -1.5707963267949 rad type: Transform @@ -1279,6066 +3962,3636 @@ entities: - cargo.flashlight - cargo.Medkit type: GalacticMarket -- uid: 156 +- uid: 371 type: Table components: - - parent: 0 + - parent: 216 pos: -4.5,-1.5 rot: -1.5707963267949 rad type: Transform -- uid: 157 + - flags: + - None + type: Destructible +- uid: 372 type: Table components: - - parent: 0 + - parent: 216 pos: -1.5,-1.5 rot: -1.5707963267949 rad type: Transform -- uid: 158 + - flags: + - None + type: Destructible +- uid: 373 type: Table components: - - parent: 0 + - parent: 216 pos: -2.5,-1.5 rot: -1.5707963267949 rad type: Transform -- uid: 159 + - flags: + - None + type: Destructible +- uid: 374 type: Table components: - - parent: 0 + - parent: 216 pos: -3.5,-1.5 rot: -1.5707963267949 rad type: Transform -- uid: 160 - type: WirelessMachine + - flags: + - None + type: Destructible +- uid: 375 + type: GravityGenerator components: - - parent: 0 - pos: -6.5,0.5 - rot: -1.5707963267949 rad + - parent: 216 + pos: 6.5,0.5 + rot: -1.5707963267948966 rad type: Transform -- uid: 161 + - flags: + - None + type: Breakable +- uid: 376 type: Catwalk components: - - parent: 0 + - parent: 216 pos: 4.5,-13.5 rot: -1.5707963267949 rad type: Transform -- uid: 162 +- uid: 377 type: Catwalk components: - - parent: 0 + - parent: 216 pos: -5.5,-13.5 rot: -1.5707963267949 rad type: Transform -- uid: 163 - type: Wire +- uid: 378 + type: solid_wall components: - - parent: 0 - pos: -6.5,-12.5 - rot: -1.5707963267949 rad + - parent: 216 + pos: 13.5,11.5 + rot: -1.5707963267948966 rad type: Transform -- uid: 164 - type: Wire + - flags: + - None + type: Destructible +- uid: 379 + type: solid_wall components: - - parent: 0 - pos: -6.5,-13.5 - rot: -1.5707963267949 rad + - parent: 216 + pos: 14.5,11.5 + rot: -1.5707963267948966 rad type: Transform -- uid: 165 - type: Wire + - flags: + - None + type: Destructible +- uid: 380 + type: solid_wall components: - - parent: 0 - pos: 5.5,-11.5 - rot: -1.5707963267949 rad + - parent: 216 + pos: 13.5,9.5 + rot: -1.5707963267948966 rad type: Transform -- uid: 166 - type: Wire + - flags: + - None + type: Destructible +- uid: 381 + type: solid_wall components: - - parent: 0 - pos: 5.5,-12.5 - rot: -1.5707963267949 rad + - parent: 216 + pos: 13.5,8.5 + rot: -1.5707963267948966 rad type: Transform -- uid: 167 - type: Wire + - flags: + - None + type: Destructible +- uid: 382 + type: solid_wall components: - - parent: 0 - pos: 5.5,-13.5 - rot: -1.5707963267949 rad + - parent: 216 + pos: 13.5,7.5 + rot: -1.5707963267948966 rad type: Transform -- uid: 168 - type: WiredMachine + - flags: + - None + type: Destructible +- uid: 383 + type: PowerCellSmallStandard components: - - parent: 0 - pos: 5.5,-13.5 - rot: -1.5707963267949 rad + - parent: 217 type: Transform -- uid: 169 - type: WiredMachine + - anchored: False + type: Collidable +- uid: 384 + type: PowerCellSmallStandard components: - - parent: 0 - pos: -6.5,-13.5 - rot: -1.5707963267949 rad + - parent: 218 type: Transform -- uid: 170 + - anchored: False + type: Collidable +- uid: 385 type: LightBulb components: - - parent: 29 + - parent: 245 type: Transform -- uid: 171 + - anchored: False + type: Collidable +- uid: 386 type: WallLight components: - - parent: 0 + - parent: 216 pos: -0.5,-14 rot: 1.5707963267949 rad type: Transform -- uid: 172 +- uid: 387 type: SpawnPointLatejoin components: - - parent: 0 + - parent: 216 pos: -9.5,-5.5 rot: -1.5707963267949 rad type: Transform -- uid: 173 +- uid: 388 type: SpawnPointLatejoin components: - - parent: 0 + - parent: 216 pos: -0.5,5.5 rot: -1.5707963267949 rad type: Transform -- uid: 174 +- uid: 389 type: SpawnPointLatejoin components: - - parent: 0 + - parent: 216 pos: -5.5,5.5 rot: -1.5707963267949 rad type: Transform -- uid: 175 +- uid: 390 type: SpawnPointLatejoin components: - - parent: 0 + - parent: 216 pos: -0.5,-2.5 rot: -1.5707963267949 rad type: Transform -- uid: 176 +- uid: 391 type: SpawnPointLatejoin components: - - parent: 0 + - parent: 216 pos: -5.5,-2.5 rot: -1.5707963267949 rad type: Transform -- uid: 177 +- uid: 392 type: Catwalk components: - - parent: 0 + - parent: 216 pos: 9.5,0.5 rot: -1.5707963267949 rad type: Transform -- uid: 178 +- uid: 393 type: Catwalk components: - - parent: 0 + - parent: 216 pos: 9.5,1.5 rot: -1.5707963267949 rad type: Transform -- uid: 179 +- uid: 394 type: Catwalk components: - - parent: 0 + - parent: 216 pos: 9.5,2.5 rot: -1.5707963267949 rad type: Transform -- uid: 180 +- uid: 395 type: Catwalk components: - - parent: 0 + - parent: 216 pos: 9.5,3.5 rot: -1.5707963267949 rad type: Transform -- uid: 181 +- uid: 396 type: Catwalk components: - - parent: 0 + - parent: 216 pos: 9.5,4.5 rot: -1.5707963267949 rad type: Transform -- uid: 182 +- uid: 397 type: VendingMachineYouTool components: - - parent: 0 + - parent: 216 pos: -11.5,-0.5 rot: -1.5707963267949 rad type: Transform -- uid: 183 - type: Generator + - flags: + - None + type: Breakable +- uid: 398 + type: CableStack1 components: - - parent: 0 - pos: 0.5,-13.5 - rot: -1.5707963267949 rad + - parent: 216 + pos: 10.561831,21.767809 type: Transform -- uid: 184 - type: Wire + - anchored: False + type: Collidable +- uid: 399 + type: solid_wall components: - - parent: 0 - pos: 3.5,-13.5 - rot: -1.5707963267949 rad + - parent: 216 + pos: 13.5,6.5 + rot: -1.5707963267948966 rad type: Transform -- uid: 185 - type: Wire + - flags: + - None + type: Destructible +- uid: 400 + type: solid_wall components: - - parent: 0 - pos: 0.5,-13.5 - rot: -1.5707963267949 rad + - parent: 216 + pos: 13.5,5.5 + rot: -1.5707963267948966 rad type: Transform -- uid: 186 - type: Generator + - flags: + - None + type: Destructible +- uid: 401 + type: GlassStack components: - - parent: 0 - pos: 3.5,-13.5 - rot: -1.5707963267949 rad + - parent: 216 + pos: 8.57603,21.566113 type: Transform -- uid: 187 + - anchored: False + type: Collidable +- uid: 402 type: Table components: - - parent: 0 + - parent: 216 pos: -6.5,7.5 rot: -1.5707963267949 rad type: Transform -- uid: 188 + - flags: + - None + type: Destructible +- uid: 403 type: Table components: - - parent: 0 + - parent: 216 pos: -5.5,7.5 rot: -1.5707963267949 rad type: Transform -- uid: 189 + - flags: + - None + type: Destructible +- uid: 404 type: Table components: - - parent: 0 + - parent: 216 pos: -4.5,7.5 rot: -1.5707963267949 rad type: Transform -- uid: 190 + - flags: + - None + type: Destructible +- uid: 405 type: Table components: - - parent: 0 + - parent: 216 pos: -3.5,7.5 rot: -1.5707963267949 rad type: Transform -- uid: 191 + - flags: + - None + type: Destructible +- uid: 406 type: Table components: - - parent: 0 + - parent: 216 pos: -2.5,7.5 rot: -1.5707963267949 rad type: Transform -- uid: 192 + - flags: + - None + type: Destructible +- uid: 407 type: Table components: - - parent: 0 + - parent: 216 pos: -1.5,7.5 rot: -1.5707963267949 rad type: Transform -- uid: 193 + - flags: + - None + type: Destructible +- uid: 408 type: Table components: - - parent: 0 + - parent: 216 pos: -0.5,7.5 rot: -1.5707963267949 rad type: Transform -- uid: 194 + - flags: + - None + type: Destructible +- uid: 409 type: Table components: - - parent: 0 + - parent: 216 pos: 0.5,7.5 rot: -1.5707963267949 rad type: Transform -- uid: 195 + - flags: + - None + type: Destructible +- uid: 410 type: Table components: - - parent: 0 + - parent: 216 pos: 1.5,7.5 rot: -1.5707963267949 rad type: Transform -- uid: 196 + - flags: + - None + type: Destructible +- uid: 411 type: Table components: - - parent: 0 + - parent: 216 pos: -4.5,4.5 rot: -1.5707963267949 rad type: Transform -- uid: 197 + - flags: + - None + type: Destructible +- uid: 412 type: Table components: - - parent: 0 + - parent: 216 pos: -3.5,4.5 rot: -1.5707963267949 rad type: Transform -- uid: 198 + - flags: + - None + type: Destructible +- uid: 413 type: Table components: - - parent: 0 + - parent: 216 pos: -2.5,4.5 rot: -1.5707963267949 rad type: Transform -- uid: 199 + - flags: + - None + type: Destructible +- uid: 414 type: Table components: - - parent: 0 + - parent: 216 pos: -1.5,4.5 rot: -1.5707963267949 rad type: Transform -- uid: 200 + - flags: + - None + type: Destructible +- uid: 415 type: Table components: - - parent: 0 + - parent: 216 pos: -0.5,4.5 rot: -1.5707963267949 rad type: Transform -- uid: 201 + - flags: + - None + type: Destructible +- uid: 416 type: AirlockMedicalGlass components: - - parent: 0 + - parent: 216 pos: 26.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 202 + - flags: + - None + type: Destructible +- uid: 417 type: AirlockMedicalGlass components: - - parent: 0 + - parent: 216 pos: 28.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 203 + - flags: + - None + type: Destructible +- uid: 418 type: Catwalk components: - - parent: 0 + - parent: 216 pos: -9.5,0.5 rot: -1.5707963267949 rad type: Transform -- uid: 204 - type: Wire - components: - - parent: 0 - pos: -8.5,-0.5 - rot: -1.5707963267949 rad - type: Transform -- uid: 205 - type: Wire - components: - - parent: 0 - pos: -8.5,0.5 - rot: -1.5707963267949 rad - type: Transform -- uid: 206 - type: Wire - components: - - parent: 0 - pos: -9.5,0.5 - rot: -1.5707963267949 rad - type: Transform -- uid: 207 - type: Wire - components: - - parent: 0 - pos: -9.5,1.5 - rot: -1.5707963267949 rad - type: Transform -- uid: 208 +- uid: 419 type: solid_wall components: - - parent: 0 + - parent: 216 + pos: 13.5,4.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 420 + type: solid_wall + components: + - parent: 216 + pos: 25.5,4.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 421 + type: solid_wall + components: + - parent: 216 + pos: 23.5,4.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 422 + type: solid_wall + components: + - parent: 216 + pos: 17.5,3.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 423 + type: solid_wall + components: + - parent: 216 pos: -10.5,-0.5 rot: -1.5707963267949 rad type: Transform -- uid: 209 + - flags: + - None + type: Destructible +- uid: 424 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -10.5,0.5 rot: -1.5707963267949 rad type: Transform -- uid: 210 + - flags: + - None + type: Destructible +- uid: 425 type: Airlock components: - - parent: 0 + - parent: 216 pos: -9.5,1.5 rot: -1.5707963267949 rad type: Transform -- uid: 211 + - flags: + - None + type: Destructible +- uid: 426 type: LightTube components: - - parent: 212 + - parent: 427 type: Transform -- uid: 212 + - anchored: False + type: Collidable +- uid: 427 type: Poweredlight components: - - parent: 0 + - parent: 216 pos: 0.5,1 rot: -1.5707963267949 rad type: Transform - color: '#FFFFFFFF' type: PointLight + - flags: + - None + type: Destructible - containers: light_bulb: entities: - - 211 + - 426 type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 213 +- uid: 428 type: ChairOfficeLight components: - - parent: 0 + - parent: 216 pos: -3.5,-0.5 rot: -1.5707963267949 rad type: Transform -- uid: 214 + - flags: + - None + type: Destructible +- uid: 429 type: ChairOfficeDark components: - - parent: 0 + - parent: 216 pos: 0.5,-6.5 rot: 1.5707963267949 rad type: Transform -- uid: 215 + - flags: + - None + type: Destructible +- uid: 430 type: Poweredlight components: - - parent: 0 + - parent: 216 pos: -6.5,1 rot: -1.5707963267949 rad type: Transform - color: '#FFFFFFFF' type: PointLight + - flags: + - None + type: Destructible - containers: light_bulb: entities: - - 316 + - 531 type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 216 +- uid: 431 type: MetalStack components: - - parent: 0 + - parent: 216 pos: -15.5,-5.5 rot: -1.5707963267949 rad type: Transform -- uid: 217 + - anchored: False + type: Collidable +- uid: 432 type: Stool components: - - parent: 0 + - parent: 216 pos: -1.5,-9.5 rot: 1.5707963267949 rad type: Transform -- uid: 218 + - flags: + - None + type: Destructible +- uid: 433 type: ChairOfficeLight components: - - parent: 0 + - parent: 216 pos: -3.5,-2.5 rot: 1.5707963267949 rad type: Transform -- uid: 219 + - flags: + - None + type: Destructible +- uid: 434 type: ChairOfficeLight components: - - parent: 0 + - parent: 216 pos: -2.5,-2.5 rot: 1.5707963267949 rad type: Transform -- uid: 220 + - flags: + - None + type: Destructible +- uid: 435 type: ChairOfficeLight components: - - parent: 0 + - parent: 216 pos: -2.5,-0.5 rot: -1.5707963267949 rad type: Transform -- uid: 221 + - flags: + - None + type: Destructible +- uid: 436 type: Stool components: - - parent: 0 + - parent: 216 pos: -2.5,-6.5 rot: 1.5707963267949 rad type: Transform -- uid: 222 + - flags: + - None + type: Destructible +- uid: 437 type: LightBulb components: - - parent: 251 + - parent: 466 type: Transform -- uid: 223 - type: APC - components: - - parent: 0 - pos: -6.5,-7.5 - rot: -1.5707963267949 rad - type: Transform -- uid: 224 - type: Wire - components: - - parent: 0 - pos: -9.5,2.5 - rot: -1.5707963267949 rad - type: Transform -- uid: 225 - type: Wire - components: - - parent: 0 - pos: -9.5,3.5 - rot: -1.5707963267949 rad - type: Transform -- uid: 226 - type: Wire - components: - - parent: 0 - pos: -8.5,3.5 - rot: -1.5707963267949 rad - type: Transform -- uid: 227 - type: Wire - components: - - parent: 0 - pos: -7.5,3.5 - rot: -1.5707963267949 rad - type: Transform -- uid: 228 - type: Wire - components: - - parent: 0 - pos: -6.5,3.5 - rot: -1.5707963267949 rad - type: Transform -- uid: 229 - type: Wire - components: - - parent: 0 - pos: -5.5,3.5 - rot: -1.5707963267949 rad - type: Transform -- uid: 230 - type: Wire - components: - - parent: 0 - pos: -4.5,3.5 - rot: -1.5707963267949 rad - type: Transform -- uid: 231 - type: Wire - components: - - parent: 0 - pos: -3.5,3.5 - rot: -1.5707963267949 rad - type: Transform -- uid: 232 - type: Wire - components: - - parent: 0 - pos: -2.5,3.5 - rot: -1.5707963267949 rad - type: Transform -- uid: 233 - type: Wire - components: - - parent: 0 - pos: -1.5,3.5 - rot: -1.5707963267949 rad - type: Transform -- uid: 234 - type: Wire - components: - - parent: 0 - pos: -0.5,3.5 - rot: -1.5707963267949 rad - type: Transform -- uid: 235 - type: Wire - components: - - parent: 0 - pos: 0.5,3.5 - rot: -1.5707963267949 rad - type: Transform -- uid: 236 - type: LargeBeaker - components: - - parent: 0 - pos: 23.510572,7.7141185 - rot: -1.5707963267948966 rad - type: Transform -- uid: 237 - type: Catwalk - components: - - parent: 0 - pos: 9.5,-0.5 - rot: -1.5707963267949 rad - type: Transform -- uid: 238 - type: Catwalk - components: - - parent: 0 - pos: 9.5,-1.5 - rot: -1.5707963267949 rad - type: Transform -- uid: 239 - type: Catwalk - components: - - parent: 0 - pos: 9.5,-2.5 - rot: -1.5707963267949 rad - type: Transform -- uid: 240 - type: Catwalk - components: - - parent: 0 - pos: 9.5,-3.5 - rot: -1.5707963267949 rad - type: Transform -- uid: 241 - type: Catwalk - components: - - parent: 0 - pos: 9.5,-4.5 - rot: -1.5707963267949 rad - type: Transform -- uid: 242 - type: Catwalk - components: - - parent: 0 - pos: 9.5,-5.5 - rot: -1.5707963267949 rad - type: Transform -- uid: 243 - type: Catwalk - components: - - parent: 0 - pos: 9.5,-6.5 - rot: -1.5707963267949 rad - type: Transform -- uid: 244 - type: Catwalk - components: - - parent: 0 - pos: 9.5,-7.5 - rot: -1.5707963267949 rad - type: Transform -- uid: 245 - type: Catwalk - components: - - parent: 0 - pos: 9.5,-8.5 - rot: -1.5707963267949 rad - type: Transform -- uid: 246 - type: Catwalk - components: - - parent: 0 - pos: 9.5,-9.5 - rot: -1.5707963267949 rad - type: Transform -- uid: 247 - type: Catwalk - components: - - parent: 0 - pos: 9.5,-10.5 - rot: -1.5707963267949 rad - type: Transform -- uid: 248 - type: Catwalk - components: - - parent: 0 - pos: 9.5,-11.5 - rot: -1.5707963267949 rad - type: Transform -- uid: 249 - type: Catwalk - components: - - parent: 0 - pos: 8.5,-8.5 - rot: -1.5707963267949 rad - type: Transform -- uid: 250 - type: APC - components: - - parent: 0 - pos: 4.5,-9.5 - rot: -1.5707963267949 rad - type: Transform -- uid: 251 - type: PoweredSmallLight - components: - - parent: 0 - pos: 5,-9.5 - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - containers: - light_bulb: - entities: - - 222 - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 252 - type: solid_wall - components: - - parent: 0 - pos: 7.5,-7.5 - rot: -1.5707963267949 rad - type: Transform -- uid: 253 - type: ToolboxElectricalFilled - components: - - parent: 0 - pos: -0.8099712,-5.21454 - rot: -1.5707963267949 rad - type: Transform - - containers: - storagebase: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 254 - type: ToolboxElectricalFilled - components: - - parent: 0 - pos: -0.5597038,-5.679647 - rot: -1.5707963267949 rad - type: Transform - - containers: - storagebase: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 255 - type: FlashlightLantern - components: - - parent: 0 - pos: -1.934832,-5.154238 - rot: -1.5707963267949 rad - type: Transform - - containers: - flashlight_cell_container: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 256 - type: FlashlightLantern - components: - - parent: 0 - pos: -2.017696,-5.71715 - rot: -1.5707963267949 rad - type: Transform - - containers: - flashlight_cell_container: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 257 - type: Crowbar - components: - - parent: 0 - pos: -2.861032,-5.524786 - rot: -1.5707963267949 rad - type: Transform -- uid: 258 - type: UniformEngineering - components: - - parent: 0 - pos: -0.6474335,-10.27245 - rot: -1.5707963267949 rad - type: Transform -- uid: 259 - type: GasMaskClothing - components: - - parent: 0 - pos: -0.2880585,-10.69432 - rot: -1.5707963267949 rad - type: Transform -- uid: 260 - type: OuterclothingVest - components: - - parent: 0 - pos: -0.9130585,-10.66307 - rot: -1.5707963267949 rad - type: Transform -- uid: 261 - type: UtilityBeltClothingFilled - components: - - parent: 0 - pos: -1.895102,-10.33495 - rot: -1.5707963267949 rad - type: Transform - - containers: - storagebase: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 262 - type: UtilityBeltClothingFilled - components: - - parent: 0 - pos: -1.770102,-10.63182 - rot: -1.5707963267949 rad - type: Transform - - containers: - storagebase: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 263 - type: MagazinePistolSmg - components: - - parent: 0 - pos: -6.605512,7.638151 - rot: -1.5707963267949 rad - type: Transform - - containers: - magazine_bullet_container: - type: Robust.Server.GameObjects.Components.Container.Container - RangedMagazine-magazine: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 264 - type: MagazinePistolSmg - components: - - parent: 0 - pos: -6.339887,7.669401 - rot: -1.5707963267949 rad - type: Transform - - containers: - magazine_bullet_container: - type: Robust.Server.GameObjects.Components.Container.Container - RangedMagazine-magazine: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 265 - type: MagazinePistolSmg - components: - - parent: 0 - pos: -6.027387,7.622526 - rot: -1.5707963267949 rad - type: Transform - - containers: - magazine_bullet_container: - type: Robust.Server.GameObjects.Components.Container.Container - RangedMagazine-magazine: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 266 - type: BackpackClothing - components: - - parent: 0 - pos: -5.089887,7.591276 - rot: -1.5707963267949 rad - type: Transform - - containers: - storagebase: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 267 - type: BackpackClothing - components: - - parent: 0 - pos: -4.683637,7.606901 - rot: -1.5707963267949 rad - type: Transform - - containers: - storagebase: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 268 - type: GlovesBlack - components: - - parent: 0 - pos: -3.386762,7.466276 - rot: -1.5707963267949 rad - type: Transform -- uid: 269 - type: SmgC20r - components: - - parent: 0 - pos: -2.524035,7.579326 - rot: -1.5707963267949 rad - type: Transform - - containers: - ballistics_chamber_0: - type: Content.Server.GameObjects.ContainerSlot - ballistic_gun_magazine: - type: Content.Server.GameObjects.ContainerSlot - MagazineBarrel-chamber: - type: Content.Server.GameObjects.ContainerSlot - MagazineBarrel-magazine: - entities: - - 971 - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 270 - type: SmgC20r - components: - - parent: 0 - pos: -1.94591,7.485576 - rot: -1.5707963267949 rad - type: Transform - - containers: - ballistics_chamber_0: - type: Content.Server.GameObjects.ContainerSlot - ballistic_gun_magazine: - type: Content.Server.GameObjects.ContainerSlot - MagazineBarrel-chamber: - type: Content.Server.GameObjects.ContainerSlot - MagazineBarrel-magazine: - entities: - - 972 - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 271 - type: solid_wall - components: - - parent: 0 - pos: -10.5,1.5 - rot: -1.5707963267949 rad - type: Transform -- uid: 272 - type: solid_wall - components: - - parent: 0 - pos: -11.5,4.5 - rot: -1.5707963267949 rad - type: Transform -- uid: 273 - type: solid_wall - components: - - parent: 0 - pos: -10.5,4.5 - rot: -1.5707963267949 rad - type: Transform -- uid: 274 - type: solid_wall - components: - - parent: 0 - pos: -9.5,4.5 - rot: -1.5707963267949 rad - type: Transform -- uid: 275 - type: solid_wall - components: - - parent: 0 - pos: -8.5,4.5 - rot: -1.5707963267949 rad - type: Transform -- uid: 276 - type: solid_wall - components: - - parent: 0 - pos: -7.5,4.5 - rot: -1.5707963267949 rad - type: Transform -- uid: 277 - type: solid_wall - components: - - parent: 0 - pos: -8.5,1.5 - rot: -1.5707963267949 rad - type: Transform -- uid: 278 - type: solid_wall - components: - - parent: 0 - pos: -5.5,1.5 - rot: -1.5707963267949 rad - type: Transform -- uid: 279 - type: solid_wall - components: - - parent: 0 - pos: -6.5,1.5 - rot: -1.5707963267949 rad - type: Transform -- uid: 280 - type: solid_wall - components: - - parent: 0 - pos: -7.5,1.5 - rot: -1.5707963267949 rad - type: Transform -- uid: 281 - type: solid_wall - components: - - parent: 0 - pos: -0.5,1.5 - rot: -1.5707963267949 rad - type: Transform -- uid: 282 - type: solid_wall - components: - - parent: 0 - pos: 0.5,1.5 - rot: -1.5707963267949 rad - type: Transform -- uid: 283 - type: solid_wall - components: - - parent: 0 - pos: 1.5,1.5 - rot: -1.5707963267949 rad - type: Transform -- uid: 284 - type: solid_wall - components: - - parent: 0 - pos: 1.5,0.5 - rot: -1.5707963267949 rad - type: Transform -- uid: 285 - type: solid_wall - components: - - parent: 0 - pos: 1.5,-3.5 - rot: -1.5707963267949 rad - type: Transform -- uid: 286 - type: solid_wall - components: - - parent: 0 - pos: 4.5,-3.5 - rot: -1.5707963267949 rad - type: Transform -- uid: 287 + - anchored: False + type: Collidable +- uid: 438 type: WardrobeScience components: - - parent: 0 - pos: 13.5,21.5 + - parent: 216 + pos: 12.5,21.5 rot: -1.5707963267948966 rad type: Transform + - anchored: False + type: Collidable - IsPlaceable: False type: PlaceableSurface + - flags: + - None + type: Destructible - containers: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 288 +- uid: 439 type: solid_wall components: - - parent: 0 + - parent: 216 + pos: 18.5,3.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 440 + type: solid_wall + components: + - parent: 216 + pos: 19.5,3.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 441 + type: solid_wall + components: + - parent: 216 + pos: 21.5,3.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 442 + type: solid_wall + components: + - parent: 216 + pos: 22.5,3.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 443 + type: solid_wall + components: + - parent: 216 + pos: 22.5,4.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 444 + type: solid_wall + components: + - parent: 216 + pos: 22.5,5.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 445 + type: solid_wall + components: + - parent: 216 + pos: 22.5,6.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 446 + type: solid_wall + components: + - parent: 216 + pos: 22.5,7.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 447 + type: solid_wall + components: + - parent: 216 + pos: 22.5,9.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 448 + type: solid_wall + components: + - parent: 216 + pos: 22.5,10.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 449 + type: solid_wall + components: + - parent: 216 + pos: 21.5,11.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 450 + type: solid_wall + components: + - parent: 216 + pos: 22.5,11.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 451 + type: LargeBeaker + components: + - parent: 216 + pos: 23.510572,7.7141185 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 452 + type: Catwalk + components: + - parent: 216 + pos: 9.5,-0.5 + rot: -1.5707963267949 rad + type: Transform +- uid: 453 + type: Catwalk + components: + - parent: 216 + pos: 9.5,-1.5 + rot: -1.5707963267949 rad + type: Transform +- uid: 454 + type: Catwalk + components: + - parent: 216 + pos: 9.5,-2.5 + rot: -1.5707963267949 rad + type: Transform +- uid: 455 + type: Catwalk + components: + - parent: 216 + pos: 9.5,-3.5 + rot: -1.5707963267949 rad + type: Transform +- uid: 456 + type: Catwalk + components: + - parent: 216 + pos: 9.5,-4.5 + rot: -1.5707963267949 rad + type: Transform +- uid: 457 + type: Catwalk + components: + - parent: 216 + pos: 9.5,-5.5 + rot: -1.5707963267949 rad + type: Transform +- uid: 458 + type: Catwalk + components: + - parent: 216 + pos: 9.5,-6.5 + rot: -1.5707963267949 rad + type: Transform +- uid: 459 + type: Catwalk + components: + - parent: 216 + pos: 9.5,-7.5 + rot: -1.5707963267949 rad + type: Transform +- uid: 460 + type: Catwalk + components: + - parent: 216 + pos: 9.5,-8.5 + rot: -1.5707963267949 rad + type: Transform +- uid: 461 + type: Catwalk + components: + - parent: 216 + pos: 9.5,-9.5 + rot: -1.5707963267949 rad + type: Transform +- uid: 462 + type: Catwalk + components: + - parent: 216 + pos: 9.5,-10.5 + rot: -1.5707963267949 rad + type: Transform +- uid: 463 + type: Catwalk + components: + - parent: 216 + pos: 9.5,-11.5 + rot: -1.5707963267949 rad + type: Transform +- uid: 464 + type: Catwalk + components: + - parent: 216 + pos: 8.5,-8.5 + rot: -1.5707963267949 rad + type: Transform +- uid: 465 + type: AirlockEngineering + components: + - parent: 216 + pos: 4.5,-2.5 + rot: -1.5707963267948966 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 466 + type: PoweredSmallLight + components: + - parent: 216 + pos: 5,-9.5 + type: Transform + - color: '#FFFFFFFF' + type: PointLight + - flags: + - None + type: Destructible + - containers: + light_bulb: + entities: + - 437 + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 467 + type: solid_wall + components: + - parent: 216 + pos: 7.5,-7.5 + rot: -1.5707963267949 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 468 + type: ToolboxElectricalFilled + components: + - parent: 216 + pos: -0.8099712,-5.21454 + rot: -1.5707963267949 rad + type: Transform + - anchored: False + type: Collidable + - containers: + storagebase: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 469 + type: ToolboxElectricalFilled + components: + - parent: 216 + pos: -0.5597038,-5.679647 + rot: -1.5707963267949 rad + type: Transform + - anchored: False + type: Collidable + - containers: + storagebase: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 470 + type: FlashlightLantern + components: + - parent: 216 + pos: -1.934832,-5.154238 + rot: -1.5707963267949 rad + type: Transform + - anchored: False + type: Collidable + - containers: + flashlight_cell_container: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 471 + type: FlashlightLantern + components: + - parent: 216 + pos: -2.017696,-5.71715 + rot: -1.5707963267949 rad + type: Transform + - anchored: False + type: Collidable + - containers: + flashlight_cell_container: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 472 + type: Crowbar + components: + - parent: 216 + pos: -2.861032,-5.524786 + rot: -1.5707963267949 rad + type: Transform + - anchored: False + type: Collidable +- uid: 473 + type: UniformEngineering + components: + - parent: 216 + pos: -0.6474335,-10.27245 + rot: -1.5707963267949 rad + type: Transform + - anchored: False + type: Collidable +- uid: 474 + type: GasMaskClothing + components: + - parent: 216 + pos: -0.2880585,-10.69432 + rot: -1.5707963267949 rad + type: Transform + - anchored: False + type: Collidable +- uid: 475 + type: OuterclothingVest + components: + - parent: 216 + pos: -0.9130585,-10.66307 + rot: -1.5707963267949 rad + type: Transform + - anchored: False + type: Collidable +- uid: 476 + type: UtilityBeltClothingFilled + components: + - parent: 216 + pos: -1.895102,-10.33495 + rot: -1.5707963267949 rad + type: Transform + - anchored: False + type: Collidable + - containers: + storagebase: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 477 + type: UtilityBeltClothingFilled + components: + - parent: 216 + pos: -1.770102,-10.63182 + rot: -1.5707963267949 rad + type: Transform + - anchored: False + type: Collidable + - containers: + storagebase: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 478 + type: MagazinePistolSmg + components: + - parent: 216 + pos: -6.605512,7.638151 + rot: -1.5707963267949 rad + type: Transform + - anchored: False + type: Collidable + - containers: + magazine_bullet_container: + type: Robust.Server.GameObjects.Components.Container.Container + RangedMagazine-magazine: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 479 + type: MagazinePistolSmg + components: + - parent: 216 + pos: -6.339887,7.669401 + rot: -1.5707963267949 rad + type: Transform + - anchored: False + type: Collidable + - containers: + magazine_bullet_container: + type: Robust.Server.GameObjects.Components.Container.Container + RangedMagazine-magazine: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 480 + type: MagazinePistolSmg + components: + - parent: 216 + pos: -6.027387,7.622526 + rot: -1.5707963267949 rad + type: Transform + - anchored: False + type: Collidable + - containers: + magazine_bullet_container: + type: Robust.Server.GameObjects.Components.Container.Container + RangedMagazine-magazine: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 481 + type: BackpackClothing + components: + - parent: 216 + pos: -5.089887,7.591276 + rot: -1.5707963267949 rad + type: Transform + - anchored: False + type: Collidable + - containers: + storagebase: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 482 + type: BackpackClothing + components: + - parent: 216 + pos: -4.683637,7.606901 + rot: -1.5707963267949 rad + type: Transform + - anchored: False + type: Collidable + - containers: + storagebase: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 483 + type: GlovesBlack + components: + - parent: 216 + pos: -3.386762,7.466276 + rot: -1.5707963267949 rad + type: Transform + - anchored: False + type: Collidable +- uid: 484 + type: SmgC20r + components: + - parent: 216 + pos: -2.524035,7.579326 + rot: -1.5707963267949 rad + type: Transform + - maxAngle: 59.99999999999999 + type: MagazineBarrel + - anchored: False + type: Collidable + - containers: + ballistics_chamber_0: + type: Content.Server.GameObjects.ContainerSlot + ballistic_gun_magazine: + type: Content.Server.GameObjects.ContainerSlot + MagazineBarrel-chamber: + type: Content.Server.GameObjects.ContainerSlot + MagazineBarrel-magazine: + entities: + - 348 + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 485 + type: SmgC20r + components: + - parent: 216 + pos: -1.94591,7.485576 + rot: -1.5707963267949 rad + type: Transform + - maxAngle: 59.99999999999999 + type: MagazineBarrel + - anchored: False + type: Collidable + - containers: + ballistics_chamber_0: + type: Content.Server.GameObjects.ContainerSlot + ballistic_gun_magazine: + type: Content.Server.GameObjects.ContainerSlot + MagazineBarrel-chamber: + type: Content.Server.GameObjects.ContainerSlot + MagazineBarrel-magazine: + entities: + - 349 + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 486 + type: solid_wall + components: + - parent: 216 + pos: -10.5,1.5 + rot: -1.5707963267949 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 487 + type: solid_wall + components: + - parent: 216 + pos: -11.5,4.5 + rot: -1.5707963267949 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 488 + type: solid_wall + components: + - parent: 216 + pos: -10.5,4.5 + rot: -1.5707963267949 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 489 + type: solid_wall + components: + - parent: 216 + pos: -9.5,4.5 + rot: -1.5707963267949 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 490 + type: solid_wall + components: + - parent: 216 + pos: -8.5,4.5 + rot: -1.5707963267949 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 491 + type: solid_wall + components: + - parent: 216 + pos: -7.5,4.5 + rot: -1.5707963267949 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 492 + type: solid_wall + components: + - parent: 216 + pos: -8.5,1.5 + rot: -1.5707963267949 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 493 + type: solid_wall + components: + - parent: 216 + pos: -5.5,1.5 + rot: -1.5707963267949 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 494 + type: solid_wall + components: + - parent: 216 + pos: -6.5,1.5 + rot: -1.5707963267949 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 495 + type: solid_wall + components: + - parent: 216 + pos: -7.5,1.5 + rot: -1.5707963267949 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 496 + type: solid_wall + components: + - parent: 216 + pos: -0.5,1.5 + rot: -1.5707963267949 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 497 + type: solid_wall + components: + - parent: 216 + pos: 0.5,1.5 + rot: -1.5707963267949 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 498 + type: solid_wall + components: + - parent: 216 + pos: 1.5,1.5 + rot: -1.5707963267949 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 499 + type: solid_wall + components: + - parent: 216 + pos: 1.5,0.5 + rot: -1.5707963267949 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 500 + type: solid_wall + components: + - parent: 216 + pos: 1.5,-3.5 + rot: -1.5707963267949 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 501 + type: solid_wall + components: + - parent: 216 + pos: 4.5,-3.5 + rot: -1.5707963267949 rad + type: Transform + - flags: + - None + type: Destructible +- uid: 502 + type: WardrobeScience + components: + - parent: 216 + pos: 13.5,21.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - flags: + - None + type: Destructible + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 503 + type: solid_wall + components: + - parent: 216 pos: 4.5,-1.5 rot: -1.5707963267949 rad type: Transform -- uid: 289 + - flags: + - None + type: Destructible +- uid: 504 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 4.5,-0.5 rot: -1.5707963267949 rad type: Transform -- uid: 290 + - flags: + - None + type: Destructible +- uid: 505 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 4.5,0.5 rot: -1.5707963267949 rad type: Transform -- uid: 291 + - flags: + - None + type: Destructible +- uid: 506 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 4.5,1.5 rot: -1.5707963267949 rad type: Transform -- uid: 292 + - flags: + - None + type: Destructible +- uid: 507 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 4.5,2.5 rot: -1.5707963267949 rad type: Transform -- uid: 293 + - flags: + - None + type: Destructible +- uid: 508 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 4.5,3.5 rot: -1.5707963267949 rad type: Transform -- uid: 294 + - flags: + - None + type: Destructible +- uid: 509 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 4.5,4.5 rot: -1.5707963267949 rad type: Transform -- uid: 295 + - flags: + - None + type: Destructible +- uid: 510 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 4.5,5.5 rot: -1.5707963267949 rad type: Transform -- uid: 296 + - flags: + - None + type: Destructible +- uid: 511 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 4.5,6.5 rot: -1.5707963267949 rad type: Transform -- uid: 297 + - flags: + - None + type: Destructible +- uid: 512 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 4.5,7.5 rot: -1.5707963267949 rad type: Transform -- uid: 298 + - flags: + - None + type: Destructible +- uid: 513 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 4.5,8.5 rot: -1.5707963267949 rad type: Transform -- uid: 299 + - flags: + - None + type: Destructible +- uid: 514 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 1.5,8.5 rot: -1.5707963267949 rad type: Transform -- uid: 300 + - flags: + - None + type: Destructible +- uid: 515 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 0.5,8.5 rot: -1.5707963267949 rad type: Transform -- uid: 301 + - flags: + - None + type: Destructible +- uid: 516 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -0.5,8.5 rot: -1.5707963267949 rad type: Transform -- uid: 302 + - flags: + - None + type: Destructible +- uid: 517 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -1.5,8.5 rot: -1.5707963267949 rad type: Transform -- uid: 303 + - flags: + - None + type: Destructible +- uid: 518 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -2.5,8.5 rot: -1.5707963267949 rad type: Transform -- uid: 304 + - flags: + - None + type: Destructible +- uid: 519 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -3.5,8.5 rot: -1.5707963267949 rad type: Transform -- uid: 305 + - flags: + - None + type: Destructible +- uid: 520 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -4.5,8.5 rot: -1.5707963267949 rad type: Transform -- uid: 306 + - flags: + - None + type: Destructible +- uid: 521 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -5.5,8.5 rot: -1.5707963267949 rad type: Transform -- uid: 307 + - flags: + - None + type: Destructible +- uid: 522 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -6.5,8.5 rot: -1.5707963267949 rad type: Transform -- uid: 308 + - flags: + - None + type: Destructible +- uid: 523 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -7.5,8.5 rot: -1.5707963267949 rad type: Transform -- uid: 309 + - flags: + - None + type: Destructible +- uid: 524 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -7.5,7.5 rot: -1.5707963267949 rad type: Transform -- uid: 310 + - flags: + - None + type: Destructible +- uid: 525 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -7.5,6.5 rot: -1.5707963267949 rad type: Transform -- uid: 311 + - flags: + - None + type: Destructible +- uid: 526 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -7.5,5.5 rot: -1.5707963267949 rad type: Transform -- uid: 312 + - flags: + - None + type: Destructible +- uid: 527 type: GlovesLeather components: - - parent: 0 + - parent: 216 pos: -4.332221,4.64238 rot: -1.5707963267949 rad type: Transform -- uid: 313 + - anchored: False + type: Collidable +- uid: 528 type: GlovesLeather components: - - parent: 0 + - parent: 216 pos: -3.519721,4.64238 rot: -1.5707963267949 rad type: Transform -- uid: 314 + - anchored: False + type: Collidable +- uid: 529 type: GlovesLeather components: - - parent: 0 + - parent: 216 pos: -2.597846,4.61113 rot: -1.5707963267949 rad type: Transform -- uid: 315 + - anchored: False + type: Collidable +- uid: 530 type: LedLightTube components: - - parent: 0 + - parent: 216 pos: -3.511025,-10.35149 rot: -1.5707963267949 rad type: Transform - color: '#EEEEFFFF' type: Sprite -- uid: 316 + - anchored: False + type: Collidable +- uid: 531 type: LightTube components: - - parent: 215 + - parent: 430 type: Transform -- uid: 317 + - anchored: False + type: Collidable +- uid: 532 type: Poweredlight components: - - parent: 0 + - parent: 216 pos: -1.5,8 rot: -1.5707963267949 rad type: Transform - color: '#FFFFFFFF' type: PointLight + - flags: + - None + type: Destructible - containers: light_bulb: entities: - - 318 + - 533 type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 318 +- uid: 533 type: LightTube components: - - parent: 317 + - parent: 532 type: Transform -- uid: 319 + - anchored: False + type: Collidable +- uid: 534 type: Poweredlight components: - - parent: 0 + - parent: 216 pos: 4,3.5 rot: 3.14159265358979 rad type: Transform - color: '#FFFFFFFF' type: PointLight + - flags: + - None + type: Destructible - containers: light_bulb: entities: - - 320 + - 535 type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 320 +- uid: 535 type: LightTube components: - - parent: 319 + - parent: 534 type: Transform -- uid: 321 + - anchored: False + type: Collidable +- uid: 536 type: WallLight components: - - parent: 0 + - parent: 216 pos: -7,-10.5 type: Transform -- uid: 322 +- uid: 537 type: PoweredSmallLight components: - - parent: 0 + - parent: 216 pos: -10,-5.5 rot: 3.14159265358979 rad type: Transform - color: '#FFFFFFFF' type: PointLight + - flags: + - None + type: Destructible - containers: light_bulb: entities: - - 323 + - 538 type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 323 +- uid: 538 type: LightBulb components: - - parent: 322 + - parent: 537 type: Transform -- uid: 324 + - anchored: False + type: Collidable +- uid: 539 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -15.5,2.5 rot: -1.5707963267949 rad type: Transform -- uid: 325 + - flags: + - None + type: Destructible +- uid: 540 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -15.5,4.5 rot: -1.5707963267949 rad type: Transform -- uid: 326 + - flags: + - None + type: Destructible +- uid: 541 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -15.5,3.5 rot: -1.5707963267949 rad type: Transform -- uid: 327 + - flags: + - None + type: Destructible +- uid: 542 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -14.5,4.5 rot: -1.5707963267949 rad type: Transform -- uid: 328 + - flags: + - None + type: Destructible +- uid: 543 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -12.5,4.5 rot: -1.5707963267949 rad type: Transform -- uid: 329 + - flags: + - None + type: Destructible +- uid: 544 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -15.5,1.5 rot: -1.5707963267949 rad type: Transform -- uid: 330 + - flags: + - None + type: Destructible +- uid: 545 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -14.5,1.5 rot: -1.5707963267949 rad type: Transform -- uid: 331 + - flags: + - None + type: Destructible +- uid: 546 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -11.5,1.5 rot: -1.5707963267949 rad type: Transform -- uid: 332 + - flags: + - None + type: Destructible +- uid: 547 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -14.5,5.5 rot: -1.5707963267949 rad type: Transform -- uid: 333 + - flags: + - None + type: Destructible +- uid: 548 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -14.5,6.5 rot: -1.5707963267949 rad type: Transform -- uid: 334 + - flags: + - None + type: Destructible +- uid: 549 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -12.5,6.5 rot: -1.5707963267949 rad type: Transform -- uid: 335 + - flags: + - None + type: Destructible +- uid: 550 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -12.5,5.5 rot: -1.5707963267949 rad type: Transform -- uid: 336 + - flags: + - None + type: Destructible +- uid: 551 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -16.5,1.5 rot: -1.5707963267949 rad type: Transform -- uid: 337 + - flags: + - None + type: Destructible +- uid: 552 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -16.5,0.5 rot: -1.5707963267949 rad type: Transform -- uid: 338 + - flags: + - None + type: Destructible +- uid: 553 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -16.5,-0.5 rot: -1.5707963267949 rad type: Transform -- uid: 339 + - flags: + - None + type: Destructible +- uid: 554 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -16.5,-1.5 rot: -1.5707963267949 rad type: Transform -- uid: 340 + - flags: + - None + type: Destructible +- uid: 555 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -16.5,-2.5 rot: -1.5707963267949 rad type: Transform -- uid: 341 + - flags: + - None + type: Destructible +- uid: 556 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -16.5,-3.5 rot: -1.5707963267949 rad type: Transform -- uid: 342 + - flags: + - None + type: Destructible +- uid: 557 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -16.5,-4.5 rot: -1.5707963267949 rad type: Transform -- uid: 343 + - flags: + - None + type: Destructible +- uid: 558 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -16.5,-5.5 rot: -1.5707963267949 rad type: Transform -- uid: 344 + - flags: + - None + type: Destructible +- uid: 559 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -16.5,-6.5 rot: -1.5707963267949 rad type: Transform -- uid: 345 + - flags: + - None + type: Destructible +- uid: 560 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -16.5,-7.5 rot: -1.5707963267949 rad type: Transform -- uid: 346 + - flags: + - None + type: Destructible +- uid: 561 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -16.5,-8.5 rot: -1.5707963267949 rad type: Transform -- uid: 347 + - flags: + - None + type: Destructible +- uid: 562 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -15.5,-8.5 rot: -1.5707963267949 rad type: Transform -- uid: 348 + - flags: + - None + type: Destructible +- uid: 563 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -14.5,-8.5 rot: -1.5707963267949 rad type: Transform -- uid: 349 + - flags: + - None + type: Destructible +- uid: 564 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -13.5,-8.5 rot: -1.5707963267949 rad type: Transform -- uid: 350 + - flags: + - None + type: Destructible +- uid: 565 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -12.5,-8.5 rot: -1.5707963267949 rad type: Transform -- uid: 351 + - flags: + - None + type: Destructible +- uid: 566 type: solid_wall components: - - parent: 0 + - parent: 216 pos: -11.5,-8.5 rot: -1.5707963267949 rad type: Transform -- uid: 352 + - flags: + - None + type: Destructible +- uid: 567 type: AirlockExternal components: - - parent: 0 + - parent: 216 pos: -13.5,4.5 rot: -1.5707963267949 rad type: Transform -- uid: 353 + - flags: + - None + type: Destructible +- uid: 568 type: AirlockExternal components: - - parent: 0 + - parent: 216 pos: -13.5,6.5 rot: -1.5707963267949 rad type: Transform -- uid: 354 + - flags: + - None + type: Destructible +- uid: 569 type: AirlockEngineering components: - - parent: 0 + - parent: 216 pos: -13.5,1.5 rot: -1.5707963267949 rad type: Transform -- uid: 355 + - flags: + - None + type: Destructible +- uid: 570 type: Table components: - - parent: 0 + - parent: 216 pos: -15.5,-5.5 rot: -1.5707963267949 rad type: Transform -- uid: 356 + - flags: + - None + type: Destructible +- uid: 571 type: Table components: - - parent: 0 + - parent: 216 pos: -15.5,-1.5 rot: -1.5707963267949 rad type: Transform -- uid: 357 - type: Wire + - flags: + - None + type: Destructible +- uid: 572 + type: solid_wall components: - - parent: 0 - pos: -9.5,4.5 - rot: -1.5707963267949 rad + - parent: 216 + pos: 23.5,11.5 + rot: -1.5707963267948966 rad type: Transform -- uid: 358 - type: Wire + - flags: + - None + type: Destructible +- uid: 573 + type: solid_wall components: - - parent: 0 - pos: -13.5,-7.5 - rot: -1.5707963267949 rad + - parent: 216 + pos: 24.5,11.5 + rot: -1.5707963267948966 rad type: Transform -- uid: 359 - type: Wire + - flags: + - None + type: Destructible +- uid: 574 + type: solid_wall components: - - parent: 0 - pos: -9.5,3.5 - rot: -1.5707963267949 rad + - parent: 216 + pos: 25.5,11.5 + rot: -1.5707963267948966 rad type: Transform -- uid: 360 + - flags: + - None + type: Destructible +- uid: 575 type: Table components: - - parent: 0 + - parent: 216 pos: -15.5,-0.5 rot: -1.5707963267949 rad type: Transform -- uid: 361 + - flags: + - None + type: Destructible +- uid: 576 type: Catwalk components: - - parent: 0 + - parent: 216 pos: -14.5,7.5 rot: -1.5707963267949 rad type: Transform -- uid: 362 +- uid: 577 type: Catwalk components: - - parent: 0 + - parent: 216 pos: -13.5,7.5 rot: -1.5707963267949 rad type: Transform -- uid: 363 +- uid: 578 type: Catwalk components: - - parent: 0 + - parent: 216 pos: -12.5,7.5 rot: -1.5707963267949 rad type: Transform -- uid: 364 +- uid: 579 type: LockerToolFilled components: - - parent: 0 + - parent: 216 pos: -11.5,-5.5 rot: -1.5707963267949 rad type: Transform + - anchored: False + type: Collidable - IsPlaceable: False type: PlaceableSurface + - flags: + - None + type: Destructible - containers: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 365 +- uid: 580 type: LockerToolFilled components: - - parent: 0 + - parent: 216 pos: -11.5,-4.5 rot: -1.5707963267949 rad type: Transform + - anchored: False + type: Collidable - IsPlaceable: False type: PlaceableSurface + - flags: + - None + type: Destructible - containers: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 366 +- uid: 581 type: LockerToolFilled components: - - parent: 0 + - parent: 216 pos: -11.5,-3.5 rot: -1.5707963267949 rad type: Transform + - anchored: False + type: Collidable - IsPlaceable: False type: PlaceableSurface + - flags: + - None + type: Destructible - containers: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 367 +- uid: 582 type: LockerToolFilled components: - - parent: 0 + - parent: 216 pos: -11.5,-2.5 rot: -1.5707963267949 rad type: Transform + - anchored: False + type: Collidable - IsPlaceable: False type: PlaceableSurface + - flags: + - None + type: Destructible - containers: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 368 +- uid: 583 type: LockerToolFilled components: - - parent: 0 + - parent: 216 pos: -11.5,-1.5 rot: -1.5707963267949 rad type: Transform + - anchored: False + type: Collidable - IsPlaceable: False type: PlaceableSurface + - flags: + - None + type: Destructible - containers: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 369 +- uid: 584 type: GlassStack components: - - parent: 0 + - parent: 216 pos: -15.5,-3.5 rot: -1.5707963267949 rad type: Transform -- uid: 370 + - anchored: False + type: Collidable +- uid: 585 type: AirlockEngineering components: - - parent: 0 + - parent: 216 pos: -10.5,-6.5 rot: -1.5707963267949 rad type: Transform -- uid: 371 + - flags: + - None + type: Destructible +- uid: 586 type: Autolathe components: - - parent: 0 + - parent: 216 pos: -14.5,-7.5 rot: -1.5707963267949 rad type: Transform -- uid: 372 + - recipes: + - Brutepack + - Ointment + - LightTube + - LightBulb + - MetalStack + - GlassStack + - Wirecutter + - Screwdriver + - Welder + - Wrench + - Crowbar + - Multitool + type: LatheDatabase +- uid: 587 type: Autolathe components: - - parent: 0 + - parent: 216 pos: -13.5,-7.5 rot: -1.5707963267949 rad type: Transform -- uid: 373 + - recipes: + - Brutepack + - Ointment + - LightTube + - LightBulb + - MetalStack + - GlassStack + - Wirecutter + - Screwdriver + - Welder + - Wrench + - Crowbar + - Multitool + type: LatheDatabase +- uid: 588 type: Autolathe components: - - parent: 0 + - parent: 216 pos: -12.5,-7.5 rot: -1.5707963267949 rad type: Transform -- uid: 374 + - recipes: + - Brutepack + - Ointment + - LightTube + - LightBulb + - MetalStack + - GlassStack + - Wirecutter + - Screwdriver + - Welder + - Wrench + - Crowbar + - Multitool + type: LatheDatabase +- uid: 589 type: Poweredlight components: - - parent: 0 + - parent: 216 pos: -11,-5.5 rot: 3.14159265358979 rad type: Transform - color: '#FFFFFFFF' type: PointLight + - flags: + - None + type: Destructible - containers: light_bulb: entities: - - 375 + - 590 type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 375 +- uid: 590 type: LightTube components: - - parent: 374 + - parent: 589 type: Transform -- uid: 376 + - anchored: False + type: Collidable +- uid: 591 type: Poweredlight components: - - parent: 0 + - parent: 216 pos: -11,-0.5 rot: 3.14159265358979 rad type: Transform - color: '#FFFFFFFF' type: PointLight + - flags: + - None + type: Destructible - containers: light_bulb: entities: - - 377 + - 592 type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 377 +- uid: 592 type: LightTube components: - - parent: 376 + - parent: 591 type: Transform -- uid: 378 + - anchored: False + type: Collidable +- uid: 593 type: Poweredlight components: - - parent: 0 + - parent: 216 pos: -16,-0.5 type: Transform - color: '#FFFFFFFF' type: PointLight + - flags: + - None + type: Destructible - containers: light_bulb: entities: - - 379 + - 594 type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 379 +- uid: 594 type: LightTube components: - - parent: 378 + - parent: 593 type: Transform -- uid: 380 + - anchored: False + type: Collidable +- uid: 595 type: Poweredlight components: - - parent: 0 + - parent: 216 pos: -16,-5.5 type: Transform - color: '#FFFFFFFF' type: PointLight + - flags: + - None + type: Destructible - containers: light_bulb: entities: - - 381 + - 596 type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 381 +- uid: 596 type: LightTube components: - - parent: 380 + - parent: 595 type: Transform -- uid: 382 + - anchored: False + type: Collidable +- uid: 597 type: Poweredlight components: - - parent: 0 + - parent: 216 pos: -15,3.5 type: Transform - color: '#FFFFFFFF' type: PointLight + - flags: + - None + type: Destructible - containers: light_bulb: entities: - - 383 + - 598 type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 383 +- uid: 598 type: LightTube components: - - parent: 382 + - parent: 597 type: Transform -- uid: 384 + - anchored: False + type: Collidable +- uid: 599 type: PoweredSmallLight components: - - parent: 0 + - parent: 216 pos: -14.5,7 rot: -1.5707963267949 rad type: Transform - color: '#FFFFFFFF' type: PointLight + - flags: + - None + type: Destructible - containers: light_bulb: entities: - - 385 + - 600 type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 385 +- uid: 600 type: LightBulb components: - - parent: 384 + - parent: 599 type: Transform -- uid: 386 + - anchored: False + type: Collidable +- uid: 601 type: CableStack1 components: - - parent: 0 + - parent: 216 pos: -15.5,-0.5 rot: -1.5707963267949 rad type: Transform -- uid: 387 + - anchored: False + type: Collidable +- uid: 602 type: CableStack1 components: - - parent: 0 + - parent: 216 pos: -15.5,-0.5 rot: -1.5707963267949 rad type: Transform -- uid: 388 - type: Wire + - anchored: False + type: Collidable +- uid: 603 + type: solid_wall components: - - parent: 0 - pos: -14.5,-7.5 - rot: -1.5707963267949 rad + - parent: 216 + pos: 26.5,11.5 + rot: -1.5707963267948966 rad type: Transform -- uid: 389 - type: Wire + - flags: + - None + type: Destructible +- uid: 604 + type: solid_wall components: - - parent: 0 - pos: -12.5,-7.5 - rot: -1.5707963267949 rad + - parent: 216 + pos: 27.5,11.5 + rot: -1.5707963267948966 rad type: Transform -- uid: 390 + - flags: + - None + type: Destructible +- uid: 605 type: Catwalk components: - - parent: 0 + - parent: 216 pos: -11.5,-6.5 rot: -1.5707963267949 rad type: Transform -- uid: 391 +- uid: 606 type: Catwalk components: - - parent: 0 + - parent: 216 pos: -9.5,-6.5 rot: -1.5707963267949 rad type: Transform -- uid: 392 +- uid: 607 type: Poweredlight components: - - parent: 0 + - parent: 216 pos: -10.5,4 rot: -1.5707963267949 rad type: Transform - color: '#FFFFFFFF' type: PointLight + - flags: + - None + type: Destructible - containers: light_bulb: entities: - - 393 + - 608 type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 393 +- uid: 608 type: LightTube components: - - parent: 392 + - parent: 607 type: Transform -- uid: 394 + - anchored: False + type: Collidable +- uid: 609 type: MetalStack components: - - parent: 0 + - parent: 216 pos: -15.5,-4.5 rot: -1.5707963267949 rad type: Transform -- uid: 395 + - anchored: False + type: Collidable +- uid: 610 type: MetalStack components: - - parent: 0 + - parent: 216 pos: -15.5,-4.5 rot: -1.5707963267949 rad type: Transform -- uid: 396 - type: APC + - anchored: False + type: Collidable +- uid: 611 + type: solid_wall components: - - parent: 0 - pos: -9.5,4.5 - rot: -1.5707963267949 rad + - parent: 216 + pos: 7.5,-4.5 + rot: -1.5707963267948966 rad type: Transform -- uid: 397 - type: APC + - flags: + - None + type: Destructible +- uid: 612 + type: solid_wall components: - - parent: 0 - pos: -16.5,-2.5 - rot: -1.5707963267949 rad + - parent: 216 + pos: 8.5,-4.5 + rot: -1.5707963267948966 rad type: Transform -- uid: 398 - type: Wire + - flags: + - None + type: Destructible +- uid: 613 + type: solid_wall components: - - parent: 0 - pos: -16.5,-2.5 - rot: -1.5707963267949 rad + - parent: 216 + pos: 28.5,11.5 + rot: -1.5707963267948966 rad type: Transform -- uid: 399 - type: Wire + - flags: + - None + type: Destructible +- uid: 614 + type: solid_wall components: - - parent: 0 - pos: -15.5,-2.5 - rot: -1.5707963267949 rad + - parent: 216 + pos: 28.5,10.5 + rot: -1.5707963267948966 rad type: Transform -- uid: 400 - type: Wire + - flags: + - None + type: Destructible +- uid: 615 + type: solid_wall components: - - parent: 0 - pos: -14.5,-2.5 - rot: -1.5707963267949 rad + - parent: 216 + pos: 28.5,9.5 + rot: -1.5707963267948966 rad type: Transform -- uid: 401 - type: Wire + - flags: + - None + type: Destructible +- uid: 616 + type: solid_wall components: - - parent: 0 - pos: -13.5,-2.5 - rot: -1.5707963267949 rad + - parent: 216 + pos: 28.5,8.5 + rot: -1.5707963267948966 rad type: Transform -- uid: 402 - type: Wire + - flags: + - None + type: Destructible +- uid: 617 + type: solid_wall components: - - parent: 0 - pos: -13.5,-3.5 - rot: -1.5707963267949 rad + - parent: 216 + pos: 28.5,7.5 + rot: -1.5707963267948966 rad type: Transform -- uid: 403 - type: Wire + - flags: + - None + type: Destructible +- uid: 618 + type: solid_wall components: - - parent: 0 - pos: -13.5,-4.5 - rot: -1.5707963267949 rad + - parent: 216 + pos: 28.5,6.5 + rot: -1.5707963267948966 rad type: Transform -- uid: 404 - type: Wire + - flags: + - None + type: Destructible +- uid: 619 + type: solid_wall components: - - parent: 0 - pos: -13.5,-5.5 - rot: -1.5707963267949 rad + - parent: 216 + pos: 28.5,5.5 + rot: -1.5707963267948966 rad type: Transform -- uid: 405 - type: Wire + - flags: + - None + type: Destructible +- uid: 620 + type: solid_wall components: - - parent: 0 - pos: -13.5,-6.5 - rot: -1.5707963267949 rad + - parent: 216 + pos: 26.5,-2.5 + rot: -1.5707963267948966 rad type: Transform -- uid: 406 - type: Wire + - flags: + - None + type: Destructible +- uid: 621 + type: solid_wall components: - - parent: 0 - pos: -12.5,-6.5 - rot: -1.5707963267949 rad + - parent: 216 + pos: 26.5,-1.5 + rot: -1.5707963267948966 rad type: Transform -- uid: 407 - type: Wire + - flags: + - None + type: Destructible +- uid: 622 + type: solid_wall components: - - parent: 0 - pos: -11.5,-6.5 - rot: -1.5707963267949 rad + - parent: 216 + pos: 25.5,-0.5 + rot: -1.5707963267948966 rad type: Transform -- uid: 408 - type: Wire + - flags: + - None + type: Destructible +- uid: 623 + type: solid_wall components: - - parent: 0 - pos: -10.5,-6.5 - rot: -1.5707963267949 rad + - parent: 216 + pos: 26.5,-0.5 + rot: -1.5707963267948966 rad type: Transform -- uid: 409 - type: Wire + - flags: + - None + type: Destructible +- uid: 624 + type: solid_wall components: - - parent: 0 - pos: -9.5,-6.5 - rot: -1.5707963267949 rad + - parent: 216 + pos: 27.5,-0.5 + rot: -1.5707963267948966 rad type: Transform -- uid: 410 + - flags: + - None + type: Destructible +- uid: 625 type: Table components: - - parent: 0 + - parent: 216 pos: -15.5,-4.5 rot: -1.5707963267949 rad type: Transform -- uid: 411 + - flags: + - None + type: Destructible +- uid: 626 type: Table components: - - parent: 0 + - parent: 216 pos: -15.5,-3.5 rot: -1.5707963267949 rad type: Transform -- uid: 412 + - flags: + - None + type: Destructible +- uid: 627 type: Table components: - - parent: 0 + - parent: 216 pos: -15.5,0.5 rot: -1.5707963267949 rad type: Transform -- uid: 413 + - flags: + - None + type: Destructible +- uid: 628 type: CableStack1 components: - - parent: 0 + - parent: 216 pos: -15.5,0.5 rot: -1.5707963267949 rad type: Transform -- uid: 414 + - anchored: False + type: Collidable +- uid: 629 type: CableStack1 components: - - parent: 0 + - parent: 216 pos: -15.5,0.5 rot: -1.5707963267949 rad type: Transform -- uid: 415 + - anchored: False + type: Collidable +- uid: 630 type: GlassStack components: - - parent: 0 + - parent: 216 pos: -15.5,-1.5 rot: -1.5707963267949 rad type: Transform -- uid: 416 + - anchored: False + type: Collidable +- uid: 631 type: GlassStack components: - - parent: 0 + - parent: 216 pos: -15.5,-1.5 rot: -1.5707963267949 rad type: Transform -- uid: 417 + - anchored: False + type: Collidable +- uid: 632 type: GlassStack components: - - parent: 0 + - parent: 216 pos: -15.5,-3.5 rot: -1.5707963267949 rad type: Transform -- uid: 418 + - anchored: False + type: Collidable +- uid: 633 type: VendingMachineEngivend components: - - parent: 0 + - parent: 216 pos: -11.5,0.5 rot: -1.5707963267949 rad type: Transform -- uid: 419 + - flags: + - None + type: Breakable +- uid: 634 type: Table components: - - parent: 0 + - parent: 216 pos: 18.5,4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 420 + - flags: + - None + type: Destructible +- uid: 635 type: Table components: - - parent: 0 + - parent: 216 pos: 21.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 421 + - flags: + - None + type: Destructible +- uid: 636 type: Table components: - - parent: 0 + - parent: 216 pos: 20.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 422 + - flags: + - None + type: Destructible +- uid: 637 type: Table components: - - parent: 0 + - parent: 216 pos: 18.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 423 + - flags: + - None + type: Destructible +- uid: 638 type: Table components: - - parent: 0 + - parent: 216 pos: 19.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 424 + - flags: + - None + type: Destructible +- uid: 639 type: Table components: - - parent: 0 + - parent: 216 pos: 18.5,5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 425 + - flags: + - None + type: Destructible +- uid: 640 type: Table components: - - parent: 0 + - parent: 216 pos: 22.5,8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 426 + - flags: + - None + type: Destructible +- uid: 641 type: Table components: - - parent: 0 + - parent: 216 pos: 24.5,4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 427 + - flags: + - None + type: Destructible +- uid: 642 type: ChairOfficeLight components: - - parent: 0 + - parent: 216 pos: 19.5,4.5 rot: 3.141592653589793 rad type: Transform -- uid: 428 + - flags: + - None + type: Destructible +- uid: 643 type: ChairOfficeLight components: - - parent: 0 + - parent: 216 pos: 20.5,5.5 rot: 1.5707963267948966 rad type: Transform -- uid: 429 + - flags: + - None + type: Destructible +- uid: 644 type: ChairOfficeLight components: - - parent: 0 + - parent: 216 pos: 23.5,8.5 rot: 3.141592653589793 rad type: Transform -- uid: 430 + - flags: + - None + type: Destructible +- uid: 645 type: ChairOfficeLight components: - - parent: 0 + - parent: 216 pos: 24.5,5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 431 + - flags: + - None + type: Destructible +- uid: 646 type: Chair components: - - parent: 0 + - parent: 216 pos: 14.5,6.5 type: Transform -- uid: 432 + - flags: + - None + type: Destructible +- uid: 647 type: Chair components: - - parent: 0 + - parent: 216 pos: 14.5,8.5 type: Transform -- uid: 433 + - flags: + - None + type: Destructible +- uid: 648 type: Chair components: - - parent: 0 + - parent: 216 pos: 14.5,7.5 type: Transform -- uid: 434 + - flags: + - None + type: Destructible +- uid: 649 type: chem_dispenser components: - - parent: 0 + - parent: 216 pos: 23.5,9.5 type: Transform - containers: ReagentDispenser-reagentContainerContainer: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 435 +- uid: 650 type: Table components: - - parent: 0 + - parent: 216 pos: 23.5,7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 436 + - flags: + - None + type: Destructible +- uid: 651 type: Catwalk components: - - parent: 0 + - parent: 216 pos: 0.5,10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 437 +- uid: 652 type: Table components: - - parent: 0 + - parent: 216 pos: 25.5,10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 438 + - flags: + - None + type: Destructible +- uid: 653 type: Table components: - - parent: 0 + - parent: 216 pos: 23.5,10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 439 + - flags: + - None + type: Destructible +- uid: 654 type: Table components: - - parent: 0 + - parent: 216 pos: 24.5,10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 440 + - flags: + - None + type: Destructible +- uid: 655 type: Table components: - - parent: 0 + - parent: 216 pos: 26.5,10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 441 + - flags: + - None + type: Destructible +- uid: 656 type: Table components: - - parent: 0 + - parent: 216 pos: 27.5,10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 442 + - flags: + - None + type: Destructible +- uid: 657 type: ComputerMedicalRecords components: - - parent: 0 + - parent: 216 pos: 21.5,5.5 rot: 3.141592653589793 rad type: Transform -- uid: 443 +- uid: 658 type: MedicalScanner components: - - parent: 0 + - parent: 216 pos: 18.5,-1.5 rot: 3.141592653589793 rad type: Transform + - flags: + - None + type: Destructible - containers: MedicalScanner-bodyContainer: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 444 +- uid: 659 type: MedicalScanner components: - - parent: 0 + - parent: 216 pos: 18.5,-5.5 rot: 3.141592653589793 rad type: Transform + - flags: + - None + type: Destructible - containers: MedicalScanner-bodyContainer: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 445 +- uid: 660 type: Table components: - - parent: 0 + - parent: 216 pos: 13.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 446 + - flags: + - None + type: Destructible +- uid: 661 type: Table components: - - parent: 0 + - parent: 216 pos: 13.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 447 + - flags: + - None + type: Destructible +- uid: 662 type: Table components: - - parent: 0 + - parent: 216 pos: 13.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 448 + - flags: + - None + type: Destructible +- uid: 663 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 22.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 449 + - flags: + - None + type: Destructible +- uid: 664 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 17.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 450 + - flags: + - None + type: Destructible +- uid: 665 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 18.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 451 + - flags: + - None + type: Destructible +- uid: 666 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 20.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 452 + - flags: + - None + type: Destructible +- uid: 667 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 21.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 453 + - flags: + - None + type: Destructible +- uid: 668 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 19.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 454 + - flags: + - None + type: Destructible +- uid: 669 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 14.5,3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 455 + - flags: + - None + type: Destructible +- uid: 670 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 13.5,3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 456 + - flags: + - None + type: Destructible +- uid: 671 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 12.5,3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 457 + - flags: + - None + type: Destructible +- uid: 672 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 12.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 458 + - flags: + - None + type: Destructible +- uid: 673 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 12.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 459 + - flags: + - None + type: Destructible +- uid: 674 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 12.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 460 + - flags: + - None + type: Destructible +- uid: 675 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 12.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 461 + - flags: + - None + type: Destructible +- uid: 676 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 13.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 462 + - flags: + - None + type: Destructible +- uid: 677 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 14.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 463 + - flags: + - None + type: Destructible +- uid: 678 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 13.5,-1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 464 + - flags: + - None + type: Destructible +- uid: 679 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 13.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 465 + - flags: + - None + type: Destructible +- uid: 680 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 13.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 466 + - flags: + - None + type: Destructible +- uid: 681 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 13.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 467 + - flags: + - None + type: Destructible +- uid: 682 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 13.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 468 + - flags: + - None + type: Destructible +- uid: 683 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 13.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 469 + - flags: + - None + type: Destructible +- uid: 684 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 14.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 470 + - flags: + - None + type: Destructible +- uid: 685 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 15.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 471 + - flags: + - None + type: Destructible +- uid: 686 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 16.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 472 + - flags: + - None + type: Destructible +- uid: 687 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 17.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 473 + - flags: + - None + type: Destructible +- uid: 688 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 18.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 474 + - flags: + - None + type: Destructible +- uid: 689 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 19.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 475 + - flags: + - None + type: Destructible +- uid: 690 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 20.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 476 + - flags: + - None + type: Destructible +- uid: 691 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 21.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 477 + - flags: + - None + type: Destructible +- uid: 692 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 22.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 478 + - flags: + - None + type: Destructible +- uid: 693 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 23.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 479 + - flags: + - None + type: Destructible +- uid: 694 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 24.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 480 + - flags: + - None + type: Destructible +- uid: 695 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 25.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 481 + - flags: + - None + type: Destructible +- uid: 696 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 26.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 482 + - flags: + - None + type: Destructible +- uid: 697 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 26.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 483 + - flags: + - None + type: Destructible +- uid: 698 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 26.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 484 + - flags: + - None + type: Destructible +- uid: 699 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 27.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 485 + - flags: + - None + type: Destructible +- uid: 700 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 28.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 486 + - flags: + - None + type: Destructible +- uid: 701 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 29.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 487 + - flags: + - None + type: Destructible +- uid: 702 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 30.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 488 + - flags: + - None + type: Destructible +- uid: 703 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 31.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 489 + - flags: + - None + type: Destructible +- uid: 704 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 32.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 490 + - flags: + - None + type: Destructible +- uid: 705 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 33.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 491 + - flags: + - None + type: Destructible +- uid: 706 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 34.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 492 + - flags: + - None + type: Destructible +- uid: 707 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 34.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 493 + - flags: + - None + type: Destructible +- uid: 708 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 34.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 494 + - flags: + - None + type: Destructible +- uid: 709 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 34.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 495 + - flags: + - None + type: Destructible +- uid: 710 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 34.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 496 + - flags: + - None + type: Destructible +- uid: 711 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 34.5,-1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 497 + - flags: + - None + type: Destructible +- uid: 712 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 34.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 498 + - flags: + - None + type: Destructible +- uid: 713 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 33.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 499 + - flags: + - None + type: Destructible +- uid: 714 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 32.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 500 + - flags: + - None + type: Destructible +- uid: 715 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 31.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 501 + - flags: + - None + type: Destructible +- uid: 716 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 30.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 502 + - flags: + - None + type: Destructible +- uid: 717 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 29.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 503 + - flags: + - None + type: Destructible +- uid: 718 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 30.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 504 + - flags: + - None + type: Destructible +- uid: 719 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 30.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 505 + - flags: + - None + type: Destructible +- uid: 720 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 30.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 506 + - flags: + - None + type: Destructible +- uid: 721 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 30.5,3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 507 + - flags: + - None + type: Destructible +- uid: 722 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 30.5,4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 508 + - flags: + - None + type: Destructible +- uid: 723 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 29.5,4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 509 + - flags: + - None + type: Destructible +- uid: 724 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 28.5,4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 510 + - flags: + - None + type: Destructible +- uid: 725 type: solid_wall components: - - parent: 0 + - parent: 216 pos: 27.5,4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 511 - type: solid_wall - components: - - parent: 0 - pos: 27.5,-0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 512 - type: solid_wall - components: - - parent: 0 - pos: 26.5,-0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 513 - type: solid_wall - components: - - parent: 0 - pos: 25.5,-0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 514 - type: solid_wall - components: - - parent: 0 - pos: 26.5,-1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 515 - type: solid_wall - components: - - parent: 0 - pos: 26.5,-2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 516 - type: solid_wall - components: - - parent: 0 - pos: 28.5,5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 517 - type: solid_wall - components: - - parent: 0 - pos: 28.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 518 - type: solid_wall - components: - - parent: 0 - pos: 28.5,7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 519 - type: solid_wall - components: - - parent: 0 - pos: 28.5,8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 520 - type: solid_wall - components: - - parent: 0 - pos: 28.5,9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 521 - type: solid_wall - components: - - parent: 0 - pos: 28.5,10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 522 - type: solid_wall - components: - - parent: 0 - pos: 28.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 523 - type: solid_wall - components: - - parent: 0 - pos: 27.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 524 - type: solid_wall - components: - - parent: 0 - pos: 26.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 525 - type: solid_wall - components: - - parent: 0 - pos: 25.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 526 - type: solid_wall - components: - - parent: 0 - pos: 24.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 527 - type: solid_wall - components: - - parent: 0 - pos: 23.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 528 - type: solid_wall - components: - - parent: 0 - pos: 22.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 529 - type: solid_wall - components: - - parent: 0 - pos: 21.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 530 - type: solid_wall - components: - - parent: 0 - pos: 22.5,10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 531 - type: solid_wall - components: - - parent: 0 - pos: 22.5,9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 532 - type: solid_wall - components: - - parent: 0 - pos: 22.5,7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 533 - type: solid_wall - components: - - parent: 0 - pos: 22.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 534 - type: solid_wall - components: - - parent: 0 - pos: 22.5,5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 535 - type: solid_wall - components: - - parent: 0 - pos: 22.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 536 - type: solid_wall - components: - - parent: 0 - pos: 22.5,3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 537 - type: solid_wall - components: - - parent: 0 - pos: 21.5,3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 538 - type: solid_wall - components: - - parent: 0 - pos: 19.5,3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 539 - type: solid_wall - components: - - parent: 0 - pos: 18.5,3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 540 - type: solid_wall - components: - - parent: 0 - pos: 17.5,3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 541 - type: solid_wall - components: - - parent: 0 - pos: 23.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 542 - type: solid_wall - components: - - parent: 0 - pos: 25.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 543 - type: solid_wall - components: - - parent: 0 - pos: 13.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 544 - type: solid_wall - components: - - parent: 0 - pos: 13.5,5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 545 - type: solid_wall - components: - - parent: 0 - pos: 13.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 546 - type: solid_wall - components: - - parent: 0 - pos: 13.5,7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 547 - type: solid_wall - components: - - parent: 0 - pos: 13.5,8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 548 - type: solid_wall - components: - - parent: 0 - pos: 13.5,9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 549 - type: solid_wall - components: - - parent: 0 - pos: 14.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 550 - type: solid_wall - components: - - parent: 0 - pos: 13.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 551 - type: solid_wall - components: - - parent: 0 - pos: 12.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 552 - type: solid_wall - components: - - parent: 0 - pos: 11.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 553 - type: solid_wall - components: - - parent: 0 - pos: 10.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 554 - type: solid_wall - components: - - parent: 0 - pos: 9.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 555 - type: solid_wall - components: - - parent: 0 - pos: 8.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 556 - type: solid_wall - components: - - parent: 0 - pos: 7.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 557 - type: solid_wall - components: - - parent: 0 - pos: 6.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 558 - type: solid_wall - components: - - parent: 0 - pos: 5.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 559 - type: solid_wall - components: - - parent: 0 - pos: 4.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 560 - type: solid_wall - components: - - parent: 0 - pos: 5.5,8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 561 - type: solid_wall - components: - - parent: 0 - pos: 6.5,8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 562 - type: solid_wall - components: - - parent: 0 - pos: 7.5,8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 563 - type: solid_wall - components: - - parent: 0 - pos: 8.5,8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 564 - type: solid_wall - components: - - parent: 0 - pos: 9.5,8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 565 - type: solid_wall - components: - - parent: 0 - pos: 10.5,8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 566 - type: solid_wall - components: - - parent: 0 - pos: 11.5,8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 567 - type: solid_wall - components: - - parent: 0 - pos: 12.5,8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 568 - type: solid_wall - components: - - parent: 0 - pos: 4.5,9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 569 - type: solid_wall - components: - - parent: 0 - pos: 1.5,9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 570 - type: solid_wall - components: - - parent: 0 - pos: 1.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 571 - type: solid_wall - components: - - parent: 0 - pos: 0.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 572 - type: solid_wall - components: - - parent: 0 - pos: -0.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 573 - type: solid_wall - components: - - parent: 0 - pos: -1.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 574 - type: solid_wall - components: - - parent: 0 - pos: -2.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 575 - type: solid_wall - components: - - parent: 0 - pos: -3.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 576 - type: solid_wall - components: - - parent: 0 - pos: -4.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 577 - type: solid_wall - components: - - parent: 0 - pos: -5.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 578 - type: solid_wall - components: - - parent: 0 - pos: -6.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 579 - type: solid_wall - components: - - parent: 0 - pos: -7.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 580 - type: solid_wall - components: - - parent: 0 - pos: 1.5,12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 581 - type: solid_wall - components: - - parent: 0 - pos: 1.5,13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 582 - type: solid_wall - components: - - parent: 0 - pos: 1.5,14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 583 - type: Catwalk - components: - - parent: 0 - pos: 5.5,10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 584 - type: Catwalk - components: - - parent: 0 - pos: 12.5,10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 585 - type: Table - components: - - parent: 0 - pos: 23.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 586 - type: Table - components: - - parent: 0 - pos: 23.5,5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 587 - type: AirlockMedicalGlass - components: - - parent: 0 - pos: 15.5,3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 588 - type: AirlockMedicalGlass - components: - - parent: 0 - pos: 16.5,3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 589 - type: AirlockMedicalGlass - components: - - parent: 0 - pos: 20.5,3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 590 - type: AirlockMedicalGlass - components: - - parent: 0 - pos: 26.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 591 - type: Beaker - components: - - parent: 0 - pos: 26.416822,10.651619 - rot: -1.5707963267948966 rad - type: Transform -- uid: 592 - type: Beaker - components: - - parent: 0 - pos: 24.541822,10.635994 - rot: -1.5707963267948966 rad - type: Transform -- uid: 593 - type: Beaker - components: - - parent: 0 - pos: 25.291822,10.667244 - rot: -1.5707963267948966 rad - type: Transform -- uid: 594 - type: Wire - components: - - parent: 0 - pos: 1.5,3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 595 - type: Wire - components: - - parent: 0 - pos: 2.5,3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 596 - type: Wire - components: - - parent: 0 - pos: 2.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 597 - type: Wire - components: - - parent: 0 - pos: 2.5,5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 598 - type: Wire - components: - - parent: 0 - pos: 2.5,10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 599 - type: Wire - components: - - parent: 0 - pos: 2.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 600 - type: Wire - components: - - parent: 0 - pos: 2.5,7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 601 - type: Wire - components: - - parent: 0 - pos: 2.5,8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 602 - type: Wire - components: - - parent: 0 - pos: 2.5,9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 603 - type: Wire - components: - - parent: 0 - pos: 3.5,10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 604 - type: Wire - components: - - parent: 0 - pos: 4.5,10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 605 - type: Wire - components: - - parent: 0 - pos: 5.5,10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 606 - type: Wire - components: - - parent: 0 - pos: 5.5,9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 607 - type: Wire - components: - - parent: 0 - pos: 6.5,9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 608 - type: Wire - components: - - parent: 0 - pos: 7.5,9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 609 - type: Wire - components: - - parent: 0 - pos: 8.5,9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 610 - type: Wire - components: - - parent: 0 - pos: 9.5,9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 611 - type: Wire - components: - - parent: 0 - pos: 10.5,9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 612 - type: Wire - components: - - parent: 0 - pos: 11.5,9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 613 - type: Wire - components: - - parent: 0 - pos: 12.5,9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 614 - type: Wire - components: - - parent: 0 - pos: 12.5,10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 615 - type: Wire - components: - - parent: 0 - pos: 13.5,10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 616 - type: Wire - components: - - parent: 0 - pos: 14.5,10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 617 - type: Wire - components: - - parent: 0 - pos: 15.5,10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 618 - type: Wire - components: - - parent: 0 - pos: 16.5,10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 619 - type: Wire - components: - - parent: 0 - pos: 16.5,9.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 620 - type: Wire - components: - - parent: 0 - pos: 16.5,8.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 621 - type: Wire - components: - - parent: 0 - pos: 16.5,7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 622 - type: Wire - components: - - parent: 0 - pos: 16.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 623 - type: Wire - components: - - parent: 0 - pos: 16.5,5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 624 - type: Wire - components: - - parent: 0 - pos: 16.5,4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 625 - type: Wire - components: - - parent: 0 - pos: 16.5,3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 626 - type: Wire - components: - - parent: 0 - pos: 16.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 627 - type: Wire - components: - - parent: 0 - pos: 17.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 628 - type: Wire - components: - - parent: 0 - pos: 18.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 629 - type: Wire - components: - - parent: 0 - pos: 18.5,3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 630 - type: APC - components: - - parent: 0 - pos: 18.5,3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 631 - type: Wire - components: - - parent: 0 - pos: 1.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 632 - type: Wire - components: - - parent: 0 - pos: 1.5,1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 633 - type: APC - components: - - parent: 0 - pos: 1.5,1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 634 - type: Airlock - components: - - parent: 0 - pos: 1.5,10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 635 - type: Airlock - components: - - parent: 0 - pos: 4.5,10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 636 - type: Airlock - components: - - parent: 0 - pos: 13.5,10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 637 - type: APC - components: - - parent: 0 - pos: 13.5,6.5 - type: Transform -- uid: 638 - type: Wire - components: - - parent: 0 - pos: 13.5,6.5 - type: Transform -- uid: 639 - type: APC - components: - - parent: 0 - pos: 28.5,8.5 - type: Transform -- uid: 640 - type: Wire - components: - - parent: 0 - pos: 25.5,4.5 - type: Transform -- uid: 641 - type: Poweredlight - components: - - parent: 0 - pos: 17.5,4 - rot: 1.5707963267948966 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - containers: - light_bulb: - entities: - - 642 - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 642 - type: LightTube - components: - - parent: 641 - type: Transform -- uid: 643 - type: Poweredlight - components: - - parent: 0 - pos: 22.5,3 - rot: -1.5707963267948966 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - containers: - light_bulb: - entities: - - 644 - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 644 - type: LightTube - components: - - parent: 643 - type: Transform -- uid: 645 - type: Poweredlight - components: - - parent: 0 - pos: 13.5,3 - rot: -1.5707963267948966 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - containers: - light_bulb: - entities: - - 646 - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 646 - type: LightTube - components: - - parent: 645 - type: Transform -- uid: 647 - type: Wire - components: - - parent: 0 - pos: 27.5,8.5 - rot: 3.141592653589793 rad - type: Transform -- uid: 648 - type: Wire - components: - - parent: 0 - pos: 26.5,8.5 - rot: 3.141592653589793 rad - type: Transform -- uid: 649 - type: Wire - components: - - parent: 0 - pos: 15.5,8.5 - type: Transform -- uid: 650 - type: Wire - components: - - parent: 0 - pos: 14.5,8.5 - type: Transform -- uid: 651 - type: Wire - components: - - parent: 0 - pos: 13.5,8.5 - type: Transform -- uid: 652 - type: Wire - components: - - parent: 0 - pos: 15.5,6.5 - type: Transform -- uid: 653 - type: Wire - components: - - parent: 0 - pos: 14.5,6.5 - type: Transform -- uid: 654 - type: APC - components: - - parent: 0 - pos: 30.5,2.5 - rot: 3.141592653589793 rad - type: Transform -- uid: 655 - type: Wire - components: - - parent: 0 - pos: 19.5,2.5 - type: Transform -- uid: 656 - type: Wire - components: - - parent: 0 - pos: 20.5,2.5 - type: Transform -- uid: 657 - type: Wire - components: - - parent: 0 - pos: 21.5,2.5 - type: Transform -- uid: 658 - type: Wire - components: - - parent: 0 - pos: 22.5,2.5 - type: Transform -- uid: 659 - type: Wire - components: - - parent: 0 - pos: 23.5,2.5 - type: Transform -- uid: 660 - type: Wire - components: - - parent: 0 - pos: 24.5,2.5 - type: Transform -- uid: 661 - type: Wire - components: - - parent: 0 - pos: 25.5,2.5 - type: Transform -- uid: 662 - type: Wire - components: - - parent: 0 - pos: 25.5,3.5 - type: Transform -- uid: 663 - type: Poweredlight - components: - - parent: 0 - pos: 14,9.5 - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - containers: - light_bulb: - entities: - - 664 - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 664 - type: LightTube - components: - - parent: 663 - type: Transform -- uid: 665 - type: Poweredlight - components: - - parent: 0 - pos: 22,9.5 - rot: 3.141592653589793 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - containers: - light_bulb: - entities: - - 666 - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 666 - type: LightTube - components: - - parent: 665 - type: Transform -- uid: 667 - type: Wire - components: - - parent: 0 - pos: 30.5,2.5 - rot: 3.141592653589793 rad - type: Transform -- uid: 668 - type: Wire - components: - - parent: 0 - pos: 29.5,2.5 - rot: 3.141592653589793 rad - type: Transform -- uid: 669 - type: Poweredlight - components: - - parent: 0 - pos: 16.5,-6 - rot: 1.5707963267948966 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - containers: - light_bulb: - entities: - - 670 - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 670 - type: LightTube - components: - - parent: 669 - type: Transform -- uid: 671 - type: Table - components: - - parent: 0 - pos: 23.5,-5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 672 - type: Table - components: - - parent: 0 - pos: 24.5,-5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 673 - type: APC - components: - - parent: 0 - pos: 20.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 674 - type: Wire - components: - - parent: 0 - pos: 16.5,1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 675 - type: Wire - components: - - parent: 0 - pos: 16.5,0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 676 - type: Wire - components: - - parent: 0 - pos: 16.5,-0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 677 - type: Wire - components: - - parent: 0 - pos: 16.5,-1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 678 - type: Wire - components: - - parent: 0 - pos: 16.5,-2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 679 - type: Wire - components: - - parent: 0 - pos: 16.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 680 - type: Wire - components: - - parent: 0 - pos: 17.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 681 - type: Wire - components: - - parent: 0 - pos: 18.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 682 - type: Wire - components: - - parent: 0 - pos: 19.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 683 - type: Wire - components: - - parent: 0 - pos: 20.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 684 - type: Wire - components: - - parent: 0 - pos: 20.5,-4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 685 - type: Wire - components: - - parent: 0 - pos: 20.5,-5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 686 - type: Wire - components: - - parent: 0 - pos: 20.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 687 - type: Wire - components: - - parent: 0 - pos: 21.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 688 - type: Wire - components: - - parent: 0 - pos: 22.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 689 - type: Wire - components: - - parent: 0 - pos: 23.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 690 - type: Wire - components: - - parent: 0 - pos: 24.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 691 - type: Wire - components: - - parent: 0 - pos: 25.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 692 - type: Wire - components: - - parent: 0 - pos: 26.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 693 - type: Wire - components: - - parent: 0 - pos: 27.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 694 - type: Wire - components: - - parent: 0 - pos: 28.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 695 - type: Wire - components: - - parent: 0 - pos: 29.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 696 - type: Wire - components: - - parent: 0 - pos: 30.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 697 - type: Wire - components: - - parent: 0 - pos: 30.5,-4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 698 - type: Wire - components: - - parent: 0 - pos: 30.5,-5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 699 - type: Wire - components: - - parent: 0 - pos: 30.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 700 - type: APC - components: - - parent: 0 - pos: 30.5,-6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 701 - type: Poweredlight - components: - - parent: 0 - pos: 31.5,-6 - rot: 1.5707963267948966 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - containers: - light_bulb: - entities: - - 702 - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 702 - type: LightTube - components: - - parent: 701 - type: Transform -- uid: 703 - type: Poweredlight - components: - - parent: 0 - pos: 30,1.5 - rot: 3.141592653589793 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - containers: - light_bulb: - entities: - - 704 - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 704 - type: LightTube - components: - - parent: 703 - type: Transform -- uid: 705 - type: Wire - components: - - parent: 0 - pos: 26.5,2.5 - rot: 3.141592653589793 rad - type: Transform -- uid: 706 - type: Wire - components: - - parent: 0 - pos: 27.5,2.5 - rot: 3.141592653589793 rad - type: Transform -- uid: 707 - type: Wire - components: - - parent: 0 - pos: 28.5,2.5 - rot: 3.141592653589793 rad - type: Transform -- uid: 708 - type: Wire - components: - - parent: 0 - pos: 28.5,8.5 - rot: 3.141592653589793 rad - type: Transform -- uid: 709 - type: Wire - components: - - parent: 0 - pos: 25.5,5.5 - rot: 3.141592653589793 rad - type: Transform -- uid: 710 - type: Wire - components: - - parent: 0 - pos: 25.5,6.5 - rot: 3.141592653589793 rad - type: Transform -- uid: 711 - type: Wire - components: - - parent: 0 - pos: 25.5,7.5 - rot: 3.141592653589793 rad - type: Transform -- uid: 712 - type: Wire - components: - - parent: 0 - pos: 25.5,8.5 - rot: 3.141592653589793 rad - type: Transform -- uid: 713 - type: Poweredlight - components: - - parent: 0 - pos: 28,7.5 - rot: 3.141592653589793 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - containers: - light_bulb: - entities: - - 714 - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 714 - type: LightTube - components: - - parent: 713 - type: Transform -- uid: 715 - type: VendingMachineMedical - components: - - parent: 0 - pos: 29.5,3.5 - rot: 3.141592653589793 rad - type: Transform -- uid: 716 - type: VendingMachineMedical - components: - - parent: 0 - pos: 27.5,-5.5 - rot: 3.141592653589793 rad - type: Transform -- uid: 717 - type: VendingMachineMedical - components: - - parent: 0 - pos: 25.5,-5.5 - rot: 3.141592653589793 rad - type: Transform -- uid: 718 - type: VendingMachineWallMedical - components: - - parent: 0 - pos: 1.5,-3.5 - rot: 3.141592653589793 rad - type: Transform -- uid: 719 - type: MedkitFilled - components: - - parent: 0 - pos: 13.460339,0.6141751 - rot: 3.141592653589793 rad - type: Transform - - containers: - storagebase: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 720 - type: MedkitFilled - components: - - parent: 0 - pos: 13.632214,1.5673001 - rot: 3.141592653589793 rad - type: Transform - - containers: - storagebase: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 721 - type: ComputerMedicalRecords - components: - - parent: 0 - pos: 22.5,-5.5 - rot: 1.5707963267948966 rad - type: Transform -- uid: 722 - type: Poweredlight - components: - - parent: 0 - pos: 23.5,-6 - rot: 1.5707963267948966 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - containers: - light_bulb: - entities: - - 723 - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 723 - type: LightTube - components: - - parent: 722 - type: Transform -- uid: 724 - type: Brutepack - components: - - parent: 0 - pos: 18.476385,4.841032 - rot: 1.5707963267948966 rad - type: Transform -- uid: 725 - type: Brutepack - components: - - parent: 0 - pos: 18.601385,5.512907 - rot: 1.5707963267948966 rad - type: Transform -- uid: 726 - type: Ointment - components: - - parent: 0 - pos: 18.49201,6.059782 - rot: 1.5707963267948966 rad - type: Transform -- uid: 727 - type: Ointment - components: - - parent: 0 - pos: 18.77326,6.653532 - rot: 1.5707963267948966 rad - type: Transform -- uid: 728 - type: SpawnPointLatejoin - components: - - parent: 0 - pos: 17.5,8.5 - rot: 1.5707963267948966 rad - type: Transform -- uid: 729 - type: SpawnPointLatejoin - components: - - parent: 0 - pos: 19.5,-3.5 - rot: 1.5707963267948966 rad - type: Transform -- uid: 730 - type: Table - components: - - parent: 0 - pos: 33.5,-1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 731 - type: Table - components: - - parent: 0 - pos: 33.5,-2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 732 - type: Table - components: - - parent: 0 - pos: 33.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 733 - type: Table - components: - - parent: 0 - pos: 33.5,-4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 734 - type: Table - components: - - parent: 0 - pos: 33.5,-5.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 735 - type: LargeBeaker - components: - - parent: 0 - pos: 33.18525,-5.681699 - rot: -1.5707963267948966 rad - type: Transform -- uid: 736 - type: LargeBeaker - components: - - parent: 0 - pos: 33.294624,-5.181699 - rot: -1.5707963267948966 rad - type: Transform -- uid: 737 - type: LargeBeaker - components: - - parent: 0 - pos: 33.544624,-5.572324 - rot: -1.5707963267948966 rad - type: Transform -- uid: 738 - type: Beaker - components: - - parent: 0 - pos: 33.357124,-4.837949 - rot: -1.5707963267948966 rad - type: Transform -- uid: 739 - type: Beaker - components: - - parent: 0 - pos: 33.357124,-4.166074 - rot: -1.5707963267948966 rad - type: Transform -- uid: 740 - type: Beaker - components: - - parent: 0 - pos: 33.388374,-4.431699 - rot: -1.5707963267948966 rad - type: Transform -- uid: 741 - type: Beaker - components: - - parent: 0 - pos: 33.62275,-4.228574 - rot: -1.5707963267948966 rad - type: Transform -- uid: 742 - type: Beaker - components: - - parent: 0 - pos: 33.62275,-4.634824 - rot: -1.5707963267948966 rad - type: Transform -- uid: 743 - type: CrateMedical - components: - - parent: 0 - pos: 32.5,-1.5 - rot: -1.5707963267948966 rad - type: Transform - - IsPlaceable: False - type: PlaceableSurface - - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 744 - type: CrateMedical - components: - - parent: 0 - pos: 31.5,-1.5 - rot: -1.5707963267948966 rad - type: Transform - - IsPlaceable: False - type: PlaceableSurface - - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 745 - type: LockerMedical - components: - - parent: 0 - pos: 30.5,-1.5 - rot: -1.5707963267948966 rad - type: Transform - - IsPlaceable: False - type: PlaceableSurface - - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 746 - type: LockerMedical - components: - - parent: 0 - pos: 29.5,-1.5 - rot: -1.5707963267948966 rad - type: Transform - - IsPlaceable: False - type: PlaceableSurface - - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 747 - type: LockerMedical - components: - - parent: 0 - pos: 27.5,5.5 - rot: -1.5707963267948966 rad - type: Transform - - IsPlaceable: False - type: PlaceableSurface - - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 748 - type: LockerChemistry - components: - - parent: 0 - pos: 27.5,6.5 - rot: -1.5707963267948966 rad - type: Transform - - IsPlaceable: False - type: PlaceableSurface - - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 749 - type: solid_wall - components: - - parent: 0 - pos: 4.5,24.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 750 - type: solid_wall - components: - - parent: 0 - pos: 4.5,23.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 751 - type: solid_wall - components: - - parent: 0 - pos: 4.5,22.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 752 - type: solid_wall - components: - - parent: 0 - pos: 4.5,21.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 753 - type: solid_wall - components: - - parent: 0 - pos: 4.5,20.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 754 - type: solid_wall - components: - - parent: 0 - pos: 4.5,19.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 755 - type: solid_wall - components: - - parent: 0 - pos: 4.5,18.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 756 - type: solid_wall - components: - - parent: 0 - pos: 4.5,17.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 757 - type: solid_wall - components: - - parent: 0 - pos: 4.5,16.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 758 - type: solid_wall - components: - - parent: 0 - pos: 4.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 759 - type: solid_wall - components: - - parent: 0 - pos: 7.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 760 - type: solid_wall - components: - - parent: 0 - pos: 7.5,16.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 761 - type: solid_wall - components: - - parent: 0 - pos: 7.5,17.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 762 - type: solid_wall - components: - - parent: 0 - pos: 7.5,18.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 763 - type: solid_wall - components: - - parent: 0 - pos: 7.5,19.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 764 - type: solid_wall - components: - - parent: 0 - pos: 8.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 765 - type: solid_wall - components: - - parent: 0 - pos: 10.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 766 - type: solid_wall - components: - - parent: 0 - pos: 11.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 767 - type: solid_wall - components: - - parent: 0 - pos: 12.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 768 - type: solid_wall - components: - - parent: 0 - pos: 13.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 769 - type: solid_wall - components: - - parent: 0 - pos: 14.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 770 - type: solid_wall - components: - - parent: 0 - pos: 15.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 771 - type: solid_wall - components: - - parent: 0 - pos: 14.5,16.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 772 - type: solid_wall - components: - - parent: 0 - pos: 14.5,17.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 773 - type: solid_wall - components: - - parent: 0 - pos: 14.5,18.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 774 - type: solid_wall - components: - - parent: 0 - pos: 14.5,19.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 775 - type: solid_wall - components: - - parent: 0 - pos: 15.5,18.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 776 - type: solid_wall - components: - - parent: 0 - pos: 17.5,18.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 777 - type: solid_wall - components: - - parent: 0 - pos: 17.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 778 - type: solid_wall - components: - - parent: 0 - pos: 18.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 779 - type: solid_wall - components: - - parent: 0 - pos: 18.5,16.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 780 - type: solid_wall - components: - - parent: 0 - pos: 18.5,17.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 781 - type: solid_wall - components: - - parent: 0 - pos: 18.5,18.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 782 - type: solid_wall - components: - - parent: 0 - pos: 18.5,19.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 783 - type: solid_wall - components: - - parent: 0 - pos: 18.5,20.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 784 - type: solid_wall - components: - - parent: 0 - pos: 18.5,21.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 785 - type: solid_wall - components: - - parent: 0 - pos: 18.5,22.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 786 - type: solid_wall - components: - - parent: 0 - pos: 19.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 787 - type: solid_wall - components: - - parent: 0 - pos: 20.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 788 - type: solid_wall - components: - - parent: 0 - pos: 21.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 789 - type: solid_wall - components: - - parent: 0 - pos: 22.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 790 - type: solid_wall - components: - - parent: 0 - pos: 23.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 791 - type: solid_wall - components: - - parent: 0 - pos: 24.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 792 - type: solid_wall - components: - - parent: 0 - pos: 25.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 793 - type: solid_wall - components: - - parent: 0 - pos: 26.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 794 - type: solid_wall - components: - - parent: 0 - pos: 27.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 795 - type: solid_wall - components: - - parent: 0 - pos: 28.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 796 - type: solid_wall - components: - - parent: 0 - pos: 6.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 797 - type: solid_wall - components: - - parent: 0 - pos: 7.5,22.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 798 - type: solid_wall - components: - - parent: 0 - pos: 14.5,21.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 799 - type: solid_wall - components: - - parent: 0 - pos: 14.5,22.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 800 - type: solid_wall - components: - - parent: 0 - pos: 8.5,22.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 801 - type: solid_wall - components: - - parent: 0 - pos: 9.5,22.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 802 - type: solid_wall - components: - - parent: 0 - pos: 10.5,22.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 803 - type: solid_wall - components: - - parent: 0 - pos: 11.5,22.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 804 - type: solid_wall - components: - - parent: 0 - pos: 12.5,22.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 805 - type: solid_wall - components: - - parent: 0 - pos: 13.5,22.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 806 - type: solid_wall - components: - - parent: 0 - pos: 14.5,23.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 807 - type: solid_wall - components: - - parent: 0 - pos: 14.5,25.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 808 - type: solid_wall - components: - - parent: 0 - pos: 14.5,26.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 809 - type: solid_wall - components: - - parent: 0 - pos: 14.5,27.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 810 - type: solid_wall - components: - - parent: 0 - pos: 14.5,28.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 811 - type: solid_wall - components: - - parent: 0 - pos: 18.5,23.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 812 - type: solid_wall - components: - - parent: 0 - pos: 18.5,24.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 813 - type: solid_wall - components: - - parent: 0 - pos: 18.5,25.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 814 - type: solid_wall - components: - - parent: 0 - pos: 18.5,26.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 815 - type: solid_wall - components: - - parent: 0 - pos: 18.5,27.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 816 - type: solid_wall - components: - - parent: 0 - pos: 18.5,28.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 817 - type: solid_wall - components: - - parent: 0 - pos: 13.5,26.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 818 - type: solid_wall - components: - - parent: 0 - pos: 12.5,26.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 819 - type: solid_wall - components: - - parent: 0 - pos: 11.5,26.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 820 - type: solid_wall - components: - - parent: 0 - pos: 10.5,26.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 821 - type: solid_wall - components: - - parent: 0 - pos: 9.5,26.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 822 - type: solid_wall - components: - - parent: 0 - pos: 8.5,26.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 823 - type: solid_wall - components: - - parent: 0 - pos: 4.5,28.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 824 - type: solid_wall - components: - - parent: 0 - pos: 10.5,25.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 825 - type: solid_wall - components: - - parent: 0 - pos: 10.5,23.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 826 - type: solid_wall - components: - - parent: 0 - pos: 10.5,24.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 827 - type: solid_wall - components: - - parent: 0 - pos: 4.5,25.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 828 - type: solid_wall - components: - - parent: 0 - pos: 4.5,26.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 829 - type: solid_wall - components: - - parent: 0 - pos: 4.5,27.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 830 - type: solid_wall - components: - - parent: 0 - pos: 7.5,26.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 831 - type: solid_wall - components: - - parent: 0 - pos: 7.5,21.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 832 - type: solid_wall - components: - - parent: 0 - pos: 7.5,27.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 833 - type: solid_wall - components: - - parent: 0 - pos: 7.5,28.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 834 - type: Catwalk - components: - - parent: 0 - pos: 5.5,16.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 835 - type: Catwalk - components: - - parent: 0 - pos: 6.5,24.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 836 - type: Catwalk - components: - - parent: 0 - pos: 6.5,20.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 837 - type: solid_wall - components: - - parent: 0 - pos: 1.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 838 - type: solid_wall - components: - - parent: 0 - pos: 1.5,16.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 839 - type: solid_wall - components: - - parent: 0 - pos: 1.5,17.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 840 - type: solid_wall - components: - - parent: 0 - pos: 1.5,18.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 841 - type: solid_wall - components: - - parent: 0 - pos: 1.5,19.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 842 - type: solid_wall - components: - - parent: 0 - pos: 1.5,20.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 843 - type: solid_wall - components: - - parent: 0 - pos: 1.5,21.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 844 - type: solid_wall - components: - - parent: 0 - pos: 1.5,22.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 845 - type: solid_wall - components: - - parent: 0 - pos: 1.5,23.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 846 - type: Wire - components: - - parent: 0 - pos: 2.5,11.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 847 - type: Wire - components: - - parent: 0 - pos: 2.5,12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 848 - type: Wire - components: - - parent: 0 - pos: 2.5,13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 849 - type: Wire - components: - - parent: 0 - pos: 3.5,13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 850 - type: Wire - components: - - parent: 0 - pos: 4.5,13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 851 - type: Wire - components: - - parent: 0 - pos: 6.5,27.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 852 - type: Wire - components: - - parent: 0 - pos: 6.5,28.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 853 - type: Wire - components: - - parent: 0 - pos: 5.5,14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 854 - type: Wire - components: - - parent: 0 - pos: 5.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 855 - type: Wire - components: - - parent: 0 - pos: 5.5,16.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 856 - type: Wire - components: - - parent: 0 - pos: 6.5,16.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 857 - type: Wire - components: - - parent: 0 - pos: 6.5,17.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 858 - type: Wire - components: - - parent: 0 - pos: 6.5,18.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 859 - type: Wire - components: - - parent: 0 - pos: 6.5,19.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 860 - type: Wire - components: - - parent: 0 - pos: 6.5,20.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 861 - type: Wire - components: - - parent: 0 - pos: 6.5,21.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 862 - type: Wire - components: - - parent: 0 - pos: 6.5,22.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 863 - type: Wire - components: - - parent: 0 - pos: 6.5,23.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 864 - type: Wire - components: - - parent: 0 - pos: 6.5,24.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 865 - type: Wire - components: - - parent: 0 - pos: 6.5,25.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 866 - type: Wire - components: - - parent: 0 - pos: 6.5,26.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 867 - type: Wire - components: - - parent: 0 - pos: 5.5,13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 868 - type: AirlockScienceGlass - components: - - parent: 0 - pos: 14.5,20.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 869 - type: AirlockScience - components: - - parent: 0 - pos: 14.5,24.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 870 - type: AirlockScience - components: - - parent: 0 - pos: 16.5,18.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 871 - type: AirlockScience - components: - - parent: 0 - pos: 16.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 872 - type: Airlock - components: - - parent: 0 - pos: 5.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 873 - type: Airlock - components: - - parent: 0 - pos: 7.5,20.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 874 - type: Table - components: - - parent: 0 - pos: 9.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 875 - type: Poweredlight - components: - - parent: 0 - pos: 6.5,12 - rot: 1.5707963267948966 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - containers: - light_bulb: - entities: - - 876 - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 876 - type: LightTube - components: - - parent: 875 - type: Transform -- uid: 877 - type: Poweredlight - components: - - parent: 0 - pos: 12.5,12 - rot: 1.5707963267948966 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - containers: - light_bulb: - entities: - - 878 - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 878 - type: LightTube - components: - - parent: 877 - type: Transform -- uid: 879 - type: LightTube - components: - - parent: 880 - type: Transform -- uid: 880 - type: Poweredlight - components: - - parent: 0 - pos: 14,18.5 - rot: 3.141592653589793 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - containers: - light_bulb: - entities: - - 879 - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 881 - type: Wire - components: - - parent: 0 - pos: 3.5,-12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 882 - type: Wire - components: - - parent: 0 - pos: 2.5,-12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 883 - type: Poweredlight - components: - - parent: 0 - pos: 18,22.5 - rot: 3.141592653589793 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - containers: - light_bulb: - entities: - - 884 - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 884 - type: LightTube - components: - - parent: 883 - type: Transform -- uid: 885 - type: Poweredlight - components: - - parent: 0 - pos: 18,27.5 - rot: 3.141592653589793 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - containers: - light_bulb: - entities: - - 886 - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 886 - type: LightTube - components: - - parent: 885 - type: Transform -- uid: 887 - type: PoweredSmallLight - components: - - parent: 0 - pos: 18,17.5 - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - containers: - light_bulb: - entities: - - 888 - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 888 - type: LightBulb - components: - - parent: 887 - type: Transform -- uid: 889 - type: Poweredlight - components: - - parent: 0 - pos: 2,17.5 - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - containers: - light_bulb: - entities: - - 890 - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 890 - type: LightTube - components: - - parent: 889 - type: Transform -- uid: 891 - type: LightTube - components: - - parent: 892 - type: Transform -- uid: 892 - type: Poweredlight - components: - - parent: 0 - pos: 2,23.5 - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - containers: - light_bulb: - entities: - - 891 - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 893 - type: PoweredSmallLight - components: - - parent: 0 - pos: 11,24.5 - rot: 3.141592653589793 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - containers: - light_bulb: - entities: - - 894 - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 894 - type: LightBulb - components: - - parent: 893 - type: Transform -- uid: 895 - type: Catwalk - components: - - parent: 0 - pos: 13.5,24.5 - rot: 3.141592653589793 rad - type: Transform -- uid: 896 - type: PoweredSmallLight - components: - - parent: 0 - pos: 7.5,26 - rot: 1.5707963267948966 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - containers: - light_bulb: - entities: - - 897 - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 897 - type: LightBulb - components: - - parent: 896 - type: Transform -- uid: 898 - type: ResearchAndDevelopmentServer - components: - - parent: 0 - pos: 11.5,24.5 - rot: 1.5707963267948966 rad - type: Transform - - points: 343000 - type: ResearchServer -- uid: 899 - type: ComputerResearchAndDevelopment - components: - - parent: 0 - pos: 8.5,18.5 - type: Transform -- uid: 900 - type: BaseResearchAndDevelopmentPointSource - components: - - parent: 0 - pos: 13.5,16.5 - type: Transform -- uid: 901 - type: Protolathe - components: - - parent: 0 - pos: 8.5,17.5 - type: Transform -- uid: 902 - type: Autolathe - components: - - parent: 0 - pos: 13.5,18.5 - type: Transform -- uid: 903 - type: Autolathe - components: - - parent: 0 - pos: -4.5,-5.5 - type: Transform -- uid: 904 - type: Table - components: - - parent: 0 - pos: 8.5,21.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 905 - type: Table - components: - - parent: 0 - pos: 9.5,21.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 906 - type: Table - components: - - parent: 0 - pos: 10.5,21.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 907 - type: Table - components: - - parent: 0 - pos: 11.5,21.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 908 - type: Table - components: - - parent: 0 - pos: 13.5,17.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 909 - type: Wire - components: - - parent: 0 - pos: 2.5,14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 910 - type: Wire - components: - - parent: 0 - pos: 1.5,14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 911 - type: APC - components: - - parent: 0 - pos: 1.5,14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 912 - type: APC - components: - - parent: 0 - pos: 14.5,19.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 913 - type: APC - components: - - parent: 0 - pos: 18.5,26.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 914 - type: Wire - components: - - parent: 0 - pos: 7.5,20.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 915 - type: Wire - components: - - parent: 0 - pos: 8.5,20.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 916 - type: Wire - components: - - parent: 0 - pos: 9.5,20.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 917 - type: Wire - components: - - parent: 0 - pos: 10.5,20.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 918 - type: Wire - components: - - parent: 0 - pos: 11.5,20.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 919 - type: Wire - components: - - parent: 0 - pos: 12.5,20.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 920 - type: Wire - components: - - parent: 0 - pos: 13.5,20.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 921 - type: Wire - components: - - parent: 0 - pos: 14.5,20.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 922 - type: Wire - components: - - parent: 0 - pos: 14.5,19.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 923 - type: Wire - components: - - parent: 0 - pos: 15.5,20.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 924 - type: Wire - components: - - parent: 0 - pos: 16.5,20.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 925 - type: Wire - components: - - parent: 0 - pos: 16.5,21.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 926 - type: Wire - components: - - parent: 0 - pos: 16.5,22.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 927 - type: Wire - components: - - parent: 0 - pos: 16.5,23.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 928 - type: Wire - components: - - parent: 0 - pos: 16.5,24.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 929 - type: Wire - components: - - parent: 0 - pos: 16.5,25.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 930 - type: Wire - components: - - parent: 0 - pos: 16.5,26.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 931 - type: Wire - components: - - parent: 0 - pos: 16.5,27.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 932 - type: Wire - components: - - parent: 0 - pos: 17.5,26.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 933 - type: Wire - components: - - parent: 0 - pos: 18.5,26.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 934 - type: Generator - components: - - parent: 0 - pos: 3.5,-12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 935 - type: Generator - components: - - parent: 0 - pos: 2.5,-12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 936 - type: Generator - components: - - parent: 0 - pos: 1.5,-12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 937 - type: Generator - components: - - parent: 0 - pos: 0.5,-12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 938 - type: Wire - components: - - parent: 0 - pos: 0.5,-12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 939 - type: Poweredlight - components: - - parent: 0 - pos: 8,16.5 - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - containers: - light_bulb: - entities: - - 940 - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 940 - type: LightTube - components: - - parent: 939 - type: Transform -- uid: 941 - type: APC - components: - - parent: 0 - pos: 7.5,18.5 - type: Transform -- uid: 942 - type: Wire - components: - - parent: 0 - pos: 7.5,18.5 - type: Transform -- uid: 943 - type: GlassStack - components: - - parent: 0 - pos: 8.560405,21.456738 - type: Transform -- uid: 944 - type: GlassStack - components: - - parent: 0 - pos: 8.57603,21.566113 - type: Transform -- uid: 945 - type: MetalStack - components: - - parent: 0 - pos: 9.435405,21.503613 - type: Transform -- uid: 946 - type: MetalStack - components: - - parent: 0 - pos: 9.654155,21.628613 - type: Transform -- uid: 947 - type: CableStack1 - components: - - parent: 0 - pos: 10.561831,21.767809 - type: Transform -- uid: 948 - type: CableStack1 - components: - - parent: 0 - pos: 10.577456,21.424059 - type: Transform -- uid: 949 - type: ChairOfficeLight - components: - - parent: 0 - pos: 9.5,18.5 - rot: 3.141592653589793 rad - type: Transform -- uid: 950 - type: ChairOfficeLight - components: - - parent: 0 - pos: 9.5,16.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 951 - type: Chair - components: - - parent: 0 - pos: 12.5,17.5 - type: Transform -- uid: 952 - type: WardrobeScience - components: - - parent: 0 - pos: 12.5,21.5 - rot: -1.5707963267948966 rad - type: Transform - - IsPlaceable: False - type: PlaceableSurface - - containers: - EntityStorageComponent: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 953 - type: solid_wall - components: - - parent: 0 - pos: 5.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 954 - type: solid_wall - components: - - parent: 0 - pos: 6.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 955 - type: solid_wall - components: - - parent: 0 - pos: 7.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 956 - type: solid_wall - components: - - parent: 0 - pos: 8.5,2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 957 - type: solid_wall - components: - - parent: 0 - pos: 8.5,1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 958 - type: solid_wall - components: - - parent: 0 - pos: 8.5,0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 959 - type: solid_wall - components: - - parent: 0 - pos: 8.5,-0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 960 - type: solid_wall - components: - - parent: 0 - pos: 8.5,-1.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 961 - type: solid_wall - components: - - parent: 0 - pos: 8.5,-2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 962 - type: solid_wall - components: - - parent: 0 - pos: 8.5,-3.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 963 - type: solid_wall - components: - - parent: 0 - pos: 8.5,-4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 964 - type: solid_wall - components: - - parent: 0 - pos: 7.5,-4.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 965 - type: GravityGenerator - components: - - parent: 0 - pos: 6.5,0.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 966 - type: Poweredlight - components: - - parent: 0 - pos: 8,-1.5 - rot: 3.141592653589793 rad - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - containers: - light_bulb: - entities: - - 967 - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 967 - type: LightTube - components: - - parent: 966 - type: Transform -- uid: 968 - type: AirlockEngineering - components: - - parent: 0 - pos: 4.5,-2.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 969 - type: PowerCellSmallStandard - components: - - parent: 1 - type: Transform - - startingCharge: 1000 - type: PowerCell -- uid: 970 - type: PowerCellSmallStandard - components: - - parent: 2 - type: Transform - - startingCharge: 1000 - type: PowerCell -- uid: 971 - type: MagazinePistolSmg - components: - - parent: 269 - type: Transform - - containers: - RangedMagazine-magazine: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer -- uid: 972 - type: MagazinePistolSmg - components: - - parent: 270 - type: Transform - - containers: - RangedMagazine-magazine: - type: Robust.Server.GameObjects.Components.Container.Container - type: ContainerContainer + - flags: + - None + type: Destructible ... diff --git a/Resources/Prototypes/Entities/Constructible/Ground/wires.yml b/Resources/Prototypes/Entities/Constructible/Ground/wires.yml index 269ff6074d..90b44d52ee 100644 --- a/Resources/Prototypes/Entities/Constructible/Ground/wires.yml +++ b/Resources/Prototypes/Entities/Constructible/Ground/wires.yml @@ -86,17 +86,3 @@ wireType: Apc - type: Destructible spawnondestroy: ApcExtensionCableStack1 - -#Depriciated, to be removed from maps - -- type: entity - id: Wire - name: Depriciated Wire - parent: ApcExtensionCable - components: - - type: NodeContainer - nodes: - - !type:AdjacentNode - nodeGroupID: HVPower - - !type:AdjacentNode - nodeGroupID: Apc diff --git a/Resources/Prototypes/Entities/Constructible/Power/debug_power.yml b/Resources/Prototypes/Entities/Constructible/Power/debug_power.yml new file mode 100644 index 0000000000..ca870a2241 --- /dev/null +++ b/Resources/Prototypes/Entities/Constructible/Power/debug_power.yml @@ -0,0 +1,126 @@ +- type: entity + id: DebugGenerator + parent: BaseGenerator + name: Debug Generator + +- type: entity + id: DebugConsumer + name: Debug Consumer + placement: + mode: SnapgridCenter + components: + - type: Clickable + - type: InteractionOutline + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.5, -0.5, 0.5, 0.5" + layer: [MobMask, Opaque] + - type: SnapGrid + offset: Center + - type: Sprite + texture: Constructible/Power/wiredmachine.png + - type: Icon + texture: Constructible/Power/wiredmachine.png + - type: NodeContainer + nodes: + - !type:AdjacentNode + nodeGroupID: HVPower + - type: PowerConsumer + drawRate: 50 + - type: Breakable + deadThreshold: 100 + - type: Anchorable + +- type: entity + id: DebugBatteryStorage + name: Debug Battery Storage + placement: + mode: SnapgridCenter + components: + - type: Clickable + - type: InteractionOutline + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.5, -0.5, 0.5, 0.5" + layer: [MobMask, Opaque] + - type: SnapGrid + offset: Center + - type: Sprite + texture: Constructible/Power/provider.png + - type: Icon + texture: Constructible/Power/provider.png + - type: Battery + - type: NodeContainer + nodes: + - !type:AdjacentNode + nodeGroupID: HVPower + - type: PowerConsumer + - type: BatteryStorage + - type: Anchorable + +- type: entity + id: DebugBatteryDischarger + name: Debug Battery Discharger + placement: + mode: SnapgridCenter + components: + - type: Clickable + - type: InteractionOutline + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.5, -0.5, 0.5, 0.5" + layer: [MobMask, Opaque] + - type: SnapGrid + offset: Center + - type: Sprite + texture: Constructible/Power/provider.png + - type: Icon + texture: Constructible/Power/provider.png + - type: Battery + - type: NodeContainer + nodes: + - !type:AdjacentNode + nodeGroupID: HVPower + - type: PowerSupplier + - type: BatteryDischarger + - type: Anchorable + +- type: entity + id: DebugSmes + parent: BaseSmes + name: Debug Smes + +- type: entity + id: DebugSubstation + parent: BaseSubstation + name: Debug Substation + +- type: entity + id: DebugApc + parent: BaseApc + name: Debug Apc + +- type: entity + id: DebugPowerReceiver + name: Debug Power Receiver + placement: + mode: SnapgridCenter + components: + - type: Clickable + - type: InteractionOutline + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.5, -0.5, 0.5, 0.5" + layer: [MobMask, Opaque] + - type: SnapGrid + offset: Center + - type: Sprite + texture: Constructible/Power/wirelessmachine.png + - type: Icon + texture: Constructible/Power/wirelessmachine.png + - type: PowerReceiver + - type: Anchorable diff --git a/Resources/Prototypes/Entities/Constructible/Power/power.yml b/Resources/Prototypes/Entities/Constructible/Power/power_base.yml similarity index 53% rename from Resources/Prototypes/Entities/Constructible/Power/power.yml rename to Resources/Prototypes/Entities/Constructible/Power/power_base.yml index 70c472224d..61118ad05e 100644 --- a/Resources/Prototypes/Entities/Constructible/Power/power.yml +++ b/Resources/Prototypes/Entities/Constructible/Power/power_base.yml @@ -1,6 +1,7 @@ - type: entity - id: DebugGenerator - name: Debug Generator + id: BaseGenerator + name: Base Generator + abstract: true placement: mode: SnapgridCenter components: @@ -26,93 +27,9 @@ - type: Anchorable - type: entity - id: DebugConsumer - name: Debug Consumer - placement: - mode: SnapgridCenter - components: - - type: Clickable - - type: InteractionOutline - - type: Collidable - shapes: - - !type:PhysShapeAabb - bounds: "-0.5, -0.5, 0.5, 0.5" - layer: [MobMask, Opaque] - - type: SnapGrid - offset: Center - - type: Sprite - texture: Constructible/Power/wiredmachine.png - - type: Icon - texture: Constructible/Power/wiredmachine.png - - type: NodeContainer - nodes: - - !type:AdjacentNode - nodeGroupID: HVPower - - type: PowerConsumer - drawRate: 50 - - type: Breakable - deadThreshold: 100 - - type: Anchorable - -- type: entity - id: DebugBatteryStorage - name: Debug Battery Storage - placement: - mode: SnapgridCenter - components: - - type: Clickable - - type: InteractionOutline - - type: Collidable - shapes: - - !type:PhysShapeAabb - bounds: "-0.5, -0.5, 0.5, 0.5" - layer: [MobMask, Opaque] - - type: SnapGrid - offset: Center - - type: Sprite - texture: Constructible/Power/provider.png - - type: Icon - texture: Constructible/Power/provider.png - - type: Battery - - type: NodeContainer - nodes: - - !type:AdjacentNode - nodeGroupID: HVPower - - type: PowerConsumer - - type: BatteryStorage - - type: Anchorable - -- type: entity - id: DebugBatteryDischarger - name: Debug Battery Discharger - placement: - mode: SnapgridCenter - components: - - type: Clickable - - type: InteractionOutline - - type: Collidable - shapes: - - !type:PhysShapeAabb - bounds: "-0.5, -0.5, 0.5, 0.5" - layer: [MobMask, Opaque] - - type: SnapGrid - offset: Center - - type: Sprite - texture: Constructible/Power/provider.png - - type: Icon - texture: Constructible/Power/provider.png - - type: Battery - - type: NodeContainer - nodes: - - !type:AdjacentNode - nodeGroupID: HVPower - - type: PowerSupplier - - type: BatteryDischarger - - type: Anchorable - -- type: entity - id: DebugSmes - name: Debug Smes + id: BaseSmes + name: Base Smes + abstract: true placement: mode: SnapgridCenter components: @@ -155,8 +72,9 @@ - type: Anchorable - type: entity - id: DebugSubstation - name: Debug Substation + id: BaseSubstation + name: Base Substation + abstract: true placement: mode: SnapgridCenter components: @@ -193,8 +111,9 @@ - type: Anchorable - type: entity - id: DebugApc - name: Debug Apc + id: BaseApc + name: Base Apc + abstract: true placement: mode: SnapgridCenter components: @@ -239,28 +158,6 @@ - key: enum.ApcUiKey.Key type: ApcBoundUserInterface -- type: entity - id: DebugPowerReceiver - name: Debug Power Receiver - placement: - mode: SnapgridCenter - components: - - type: Clickable - - type: InteractionOutline - - type: Collidable - shapes: - - !type:PhysShapeAabb - bounds: "-0.5, -0.5, 0.5, 0.5" - layer: [MobMask, Opaque] - - type: SnapGrid - offset: Center - - type: Sprite - texture: Constructible/Power/wirelessmachine.png - - type: Icon - texture: Constructible/Power/wirelessmachine.png - - type: PowerReceiver - - type: Anchorable - - type: entity id: SolarPanel name: solar panel @@ -291,50 +188,3 @@ offset: Center - type: Breakable deadThreshold: 100 - -#Depriciated, to be removed from maps - -- type: entity - id: Generator - name: Depriciated Generator - parent: DebugGenerator - components: - - type: PowerSupplier - voltage: High - supplyRate: 100000 - -- type: entity - id: APC - name: Depriciated Apc - parent: DebugApc - components: - - type: NodeContainer - nodes: - - !type:AdjacentNode - nodeGroupID: HVPower - - !type:AdjacentNode - nodeGroupID: Apc - - type: PowerConsumer - voltage: High - - type: BatteryStorage - activeDrawRate: 10000 - -- type: entity - id: SMES - name: Depriciated Smes - parent: DebugSmes - -- type: entity - id: SmesDry - name: Depriciated Smes - parent: DebugSmes - -- type: entity - id: WiredMachine - name: Depriciated WiredMachine - parent: DebugConsumer - -- type: entity - id: WirelessMachine - name: Depriciated WirelessMachine - parent: DebugPowerReceiver diff --git a/Resources/Prototypes/Entities/Constructible/Power/saltern_power.yml b/Resources/Prototypes/Entities/Constructible/Power/saltern_power.yml new file mode 100644 index 0000000000..6fcf924aed --- /dev/null +++ b/Resources/Prototypes/Entities/Constructible/Power/saltern_power.yml @@ -0,0 +1,44 @@ +- type: entity + id: SalternGenerator + parent: BaseGenerator + name: Generator + components: + - type: PowerSupplier + supplyRate: 30000 + +- type: entity + id: SalternSmes + parent: BaseSmes + name: Smes + components: + - type: Battery + maxCharge: 10000000 + startingCharge: 10000000 + - type: BatteryStorage + activeDrawRate: 0 + - type: BatteryDischarger + activeSupplyRate: 0 + +- type: entity + id: SalternSubstation + parent: BaseSubstation + name: Substation + components: + - type: Battery + maxCharge: 4000000 + startingCharge: 4000000 + - type: BatteryStorage + activeDrawRate: 8000 + - type: BatteryDischarger + activeSupplyRate: 6000 + +- type: entity + id: SalternApc + parent: BaseApc + name: Apc + components: + - type: Battery + maxCharge: 12000 + startingCharge: 2000 + - type: BatteryStorage + activeDrawRate: 2000 From 627e5414e2e27633aa998f1c23cbedb4df6940c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Aguilera=20Puerto?= Date: Tue, 1 Sep 2020 15:32:35 +0200 Subject: [PATCH 054/103] Update submodule. --- RobustToolbox | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RobustToolbox b/RobustToolbox index c5573c0d33..4777a0adbf 160000 --- a/RobustToolbox +++ b/RobustToolbox @@ -1 +1 @@ -Subproject commit c5573c0d333b1f50b740b48e135d202fe7158d42 +Subproject commit 4777a0adbf0b6f7a0e7c62e1c5e9b67ab7e907f4 From 2d9243283069ed1380c84e417b618848608fccea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Aguilera=20Puerto?= Date: Tue, 1 Sep 2020 16:16:29 +0200 Subject: [PATCH 055/103] Fix certain prototypes' clickable bounds --- .../Entities/Constructible/Walls/lighting.yml | 10 ---------- .../Entities/Constructible/Walls/linking.yml | 4 ---- Resources/Prototypes/Entities/Objects/materials.yml | 2 -- 3 files changed, 16 deletions(-) diff --git a/Resources/Prototypes/Entities/Constructible/Walls/lighting.yml b/Resources/Prototypes/Entities/Constructible/Walls/lighting.yml index 04c1f9ad2a..7e795b0391 100644 --- a/Resources/Prototypes/Entities/Constructible/Walls/lighting.yml +++ b/Resources/Prototypes/Entities/Constructible/Walls/lighting.yml @@ -3,11 +3,6 @@ name: "unpowered light" components: - type: Clickable - bounds: - south: 0.25,-0.5,0.75,0.5 - north: -0.25,-0.5,0.25,0.5 - east: -0.5,-0.5,0.5,0 - west: -0.5,0,0.5,0.5 - type: InteractionOutline - type: Collidable - type: LoopingSound @@ -32,9 +27,6 @@ id: Poweredlight parent: WallLight components: - - type: Clickable - - type: InteractionOutline - - type: Collidable - type: Sprite sprite: Constructible/Lighting/light_tube.rsi state: off @@ -54,8 +46,6 @@ id: PoweredSmallLight parent: WallLight components: - - type: Clickable - - type: InteractionOutline - type: Sprite sprite: Constructible/Lighting/light_small.rsi state: off diff --git a/Resources/Prototypes/Entities/Constructible/Walls/linking.yml b/Resources/Prototypes/Entities/Constructible/Walls/linking.yml index 066e6745b1..176945ebfa 100644 --- a/Resources/Prototypes/Entities/Constructible/Walls/linking.yml +++ b/Resources/Prototypes/Entities/Constructible/Walls/linking.yml @@ -3,8 +3,6 @@ name: "signal switch" components: - type: Clickable - bounds: - all: -0.25,-0.375,0.25,0.375 - type: InteractionOutline - type: Collidable - type: Sprite @@ -24,8 +22,6 @@ name: "signal button" components: - type: Clickable - bounds: - all: -0.25,-0.375,0.25,0.375 - type: InteractionOutline - type: Collidable - type: Sprite diff --git a/Resources/Prototypes/Entities/Objects/materials.yml b/Resources/Prototypes/Entities/Objects/materials.yml index 3ec6cfbf88..154f7da4ec 100644 --- a/Resources/Prototypes/Entities/Objects/materials.yml +++ b/Resources/Prototypes/Entities/Objects/materials.yml @@ -81,8 +81,6 @@ texture: Objects/Tools/cable_coil.png - type: WirePlacer - type: Clickable - bounds: - all: -0.15,-0.15,0.15,0.15 - type: entity parent: CableStack1 From 9398f90e7cf903043ef8fbe43b8b35daf9dea7fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Aguilera=20Puerto?= Date: Tue, 1 Sep 2020 16:18:46 +0200 Subject: [PATCH 056/103] Lights now use dependencies. --- .../PowerReceiverUsers/PoweredLightComponent.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverUsers/PoweredLightComponent.cs b/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverUsers/PoweredLightComponent.cs index 31cfdf5934..4ac42d949e 100644 --- a/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverUsers/PoweredLightComponent.cs +++ b/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverUsers/PoweredLightComponent.cs @@ -31,6 +31,8 @@ namespace Content.Server.GameObjects.Components.Power.ApcNetComponents.PowerRece [RegisterComponent] public class PoweredLightComponent : Component, IInteractHand, IInteractUsing, IMapInit, ISignalReceiver { + [Dependency] private IGameTiming _gameTiming = default!; + public override string Name => "PoweredLight"; private static readonly TimeSpan _thunkDelay = TimeSpan.FromSeconds(2); @@ -40,6 +42,7 @@ namespace Content.Server.GameObjects.Components.Power.ApcNetComponents.PowerRece private LightBulbType BulbType = LightBulbType.Tube; [ViewVariables] private ContainerSlot _lightBulbContainer; + [ViewVariables] private LightBulbComponent LightBulb { @@ -209,7 +212,7 @@ namespace Content.Server.GameObjects.Components.Power.ApcNetComponents.PowerRece sprite.LayerSetState(0, "on"); light.Enabled = true; light.Color = LightBulb.Color; - var time = IoCManager.Resolve().CurTime; + var time = _gameTiming.CurTime; if (time > _lastThunk + _thunkDelay) { _lastThunk = time; From e0928d78e02375c33b097831157dd17e799f6752 Mon Sep 17 00:00:00 2001 From: DrSmugleaf Date: Tue, 1 Sep 2020 21:11:17 +0200 Subject: [PATCH 057/103] Make verbs be created through IDynamicTypeFactory To allow for dependencies to be declared on them --- Content.Shared/GameObjects/Verbs/VerbUtility.cs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/Content.Shared/GameObjects/Verbs/VerbUtility.cs b/Content.Shared/GameObjects/Verbs/VerbUtility.cs index a876f7c11b..4a2bb756e0 100644 --- a/Content.Shared/GameObjects/Verbs/VerbUtility.cs +++ b/Content.Shared/GameObjects/Verbs/VerbUtility.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Reflection; using Robust.Shared.Containers; using Robust.Shared.Interfaces.GameObjects; +using Robust.Shared.IoC; using Robust.Shared.Utility; namespace Content.Shared.GameObjects.Verbs @@ -16,6 +17,8 @@ namespace Content.Shared.GameObjects.Verbs // This works for now though. public static IEnumerable<(IComponent, Verb)> GetVerbs(IEntity entity) { + var typeFactory = IoCManager.Resolve(); + foreach (var component in entity.GetAllComponents()) { var type = component.GetType(); @@ -26,7 +29,7 @@ namespace Content.Shared.GameObjects.Verbs continue; } - var verb = (Verb)Activator.CreateInstance(nestedType); + var verb = typeFactory.CreateInstance(nestedType); yield return (component, verb); } } @@ -38,6 +41,8 @@ namespace Content.Shared.GameObjects.Verbs /// The assembly to search for global verbs in. public static IEnumerable GetGlobalVerbs(Assembly assembly) { + var typeFactory = IoCManager.Resolve(); + foreach (Type type in assembly.GetTypes()) { if (Attribute.IsDefined(type, typeof(GlobalVerbAttribute))) @@ -46,7 +51,7 @@ namespace Content.Shared.GameObjects.Verbs { continue; } - yield return (GlobalVerb)Activator.CreateInstance(type); + yield return typeFactory.CreateInstance(type); } } } From 2e12d8b75840cfab33cf91879280dc9f0ef4b32b Mon Sep 17 00:00:00 2001 From: Swept Date: Tue, 1 Sep 2020 19:42:31 +0000 Subject: [PATCH 058/103] Adds the Mime (#1798) * Adds mime job * Adds mime spawn point * Moves the ID prototypes/textures to Objects/Misc * The things I do to avoid conflicts * identification_cards.yml's final resting place * Adds ID card and PDA * Center mime id * Puts pen and paper in the mimes pocket * Adds mime spawnpoint to Saltern * Revert "Adds mime spawnpoint to Saltern" This reverts commit 56c6cf729baae0958b8b41dd83f71355e4e5f9aa. * Add mime spawn point Co-authored-by: DrSmugleaf --- Resources/Maps/saltern.yml | 7 + .../Effects/Markers/spawn_points_jobs.yml | 27 +- .../Entities/Objects/Devices/pda.yml | 21 ++ .../Misc}/identification_cards.yml | 21 +- .../Prototypes/Roles/Jobs/Civilian/mime.yml | 25 ++ .../Clothing/Belt/id_cards.rsi/meta.json | 1 - .../Misc}/id_cards.rsi/assigned.png | Bin .../id_cards.rsi/default-inhand-left.png | Bin .../id_cards.rsi/default-inhand-right.png | Bin .../Misc}/id_cards.rsi/default.png | Bin .../Misc}/id_cards.rsi/gold-inhand-left.png | Bin .../Misc}/id_cards.rsi/gold-inhand-right.png | Bin .../Misc}/id_cards.rsi/gold.png | Bin .../Misc}/id_cards.rsi/idassistant.png | Bin .../Misc}/id_cards.rsi/idbartender.png | Bin .../Misc}/id_cards.rsi/idcaptain.png | Bin .../Misc}/id_cards.rsi/idcargotechnician.png | Bin .../Misc}/id_cards.rsi/idcentcom.png | Bin .../Misc}/id_cards.rsi/idchiefengineer.png | Bin .../id_cards.rsi/idchiefmedicalofficer.png | Bin .../Misc}/id_cards.rsi/idclown.png | Bin .../Misc}/id_cards.rsi/idcook.png | Bin .../Misc}/id_cards.rsi/idheadofpersonnel.png | Bin .../Misc}/id_cards.rsi/idheadofsecurity.png | Bin .../Misc}/id_cards.rsi/idjanitor.png | Bin .../Misc}/id_cards.rsi/idmedicaldoctor.png | Bin .../Objects/Misc/id_cards.rsi/idmime.png | Bin 0 -> 301 bytes .../Misc}/id_cards.rsi/idresearchdirector.png | Bin .../Misc}/id_cards.rsi/idscientist.png | Bin .../Misc}/id_cards.rsi/idsecurityofficer.png | Bin .../Misc}/id_cards.rsi/idstationengineer.png | Bin .../Objects/Misc/id_cards.rsi/meta.json | 324 ++++++++++++++++++ .../Misc}/id_cards.rsi/silver-inhand-left.png | Bin .../id_cards.rsi/silver-inhand-right.png | Bin .../Misc}/id_cards.rsi/silver.png | Bin 35 files changed, 408 insertions(+), 18 deletions(-) rename Resources/Prototypes/Entities/{Clothing/Belt => Objects/Misc}/identification_cards.yml (93%) create mode 100644 Resources/Prototypes/Roles/Jobs/Civilian/mime.yml delete mode 100644 Resources/Textures/Clothing/Belt/id_cards.rsi/meta.json rename Resources/Textures/{Clothing/Belt => Objects/Misc}/id_cards.rsi/assigned.png (100%) rename Resources/Textures/{Clothing/Belt => Objects/Misc}/id_cards.rsi/default-inhand-left.png (100%) rename Resources/Textures/{Clothing/Belt => Objects/Misc}/id_cards.rsi/default-inhand-right.png (100%) rename Resources/Textures/{Clothing/Belt => Objects/Misc}/id_cards.rsi/default.png (100%) rename Resources/Textures/{Clothing/Belt => Objects/Misc}/id_cards.rsi/gold-inhand-left.png (100%) rename Resources/Textures/{Clothing/Belt => Objects/Misc}/id_cards.rsi/gold-inhand-right.png (100%) rename Resources/Textures/{Clothing/Belt => Objects/Misc}/id_cards.rsi/gold.png (100%) rename Resources/Textures/{Clothing/Belt => Objects/Misc}/id_cards.rsi/idassistant.png (100%) rename Resources/Textures/{Clothing/Belt => Objects/Misc}/id_cards.rsi/idbartender.png (100%) rename Resources/Textures/{Clothing/Belt => Objects/Misc}/id_cards.rsi/idcaptain.png (100%) rename Resources/Textures/{Clothing/Belt => Objects/Misc}/id_cards.rsi/idcargotechnician.png (100%) rename Resources/Textures/{Clothing/Belt => Objects/Misc}/id_cards.rsi/idcentcom.png (100%) rename Resources/Textures/{Clothing/Belt => Objects/Misc}/id_cards.rsi/idchiefengineer.png (100%) rename Resources/Textures/{Clothing/Belt => Objects/Misc}/id_cards.rsi/idchiefmedicalofficer.png (100%) rename Resources/Textures/{Clothing/Belt => Objects/Misc}/id_cards.rsi/idclown.png (100%) rename Resources/Textures/{Clothing/Belt => Objects/Misc}/id_cards.rsi/idcook.png (100%) rename Resources/Textures/{Clothing/Belt => Objects/Misc}/id_cards.rsi/idheadofpersonnel.png (100%) rename Resources/Textures/{Clothing/Belt => Objects/Misc}/id_cards.rsi/idheadofsecurity.png (100%) rename Resources/Textures/{Clothing/Belt => Objects/Misc}/id_cards.rsi/idjanitor.png (100%) rename Resources/Textures/{Clothing/Belt => Objects/Misc}/id_cards.rsi/idmedicaldoctor.png (100%) create mode 100644 Resources/Textures/Objects/Misc/id_cards.rsi/idmime.png rename Resources/Textures/{Clothing/Belt => Objects/Misc}/id_cards.rsi/idresearchdirector.png (100%) rename Resources/Textures/{Clothing/Belt => Objects/Misc}/id_cards.rsi/idscientist.png (100%) rename Resources/Textures/{Clothing/Belt => Objects/Misc}/id_cards.rsi/idsecurityofficer.png (100%) rename Resources/Textures/{Clothing/Belt => Objects/Misc}/id_cards.rsi/idstationengineer.png (100%) create mode 100644 Resources/Textures/Objects/Misc/id_cards.rsi/meta.json rename Resources/Textures/{Clothing/Belt => Objects/Misc}/id_cards.rsi/silver-inhand-left.png (100%) rename Resources/Textures/{Clothing/Belt => Objects/Misc}/id_cards.rsi/silver-inhand-right.png (100%) rename Resources/Textures/{Clothing/Belt => Objects/Misc}/id_cards.rsi/silver.png (100%) diff --git a/Resources/Maps/saltern.yml b/Resources/Maps/saltern.yml index 5e2bba579f..071bf85549 100644 --- a/Resources/Maps/saltern.yml +++ b/Resources/Maps/saltern.yml @@ -45978,4 +45978,11 @@ entities: type: Transform - anchored: False type: Collidable +- uid: 3957 + type: SpawnPointMime + components: + - parent: 857 + pos: -19.5,-8.5 + rot: -1.5707963267948966 rad + type: Transform ... diff --git a/Resources/Prototypes/Entities/Effects/Markers/spawn_points_jobs.yml b/Resources/Prototypes/Entities/Effects/Markers/spawn_points_jobs.yml index 3512267b89..78e10568b3 100644 --- a/Resources/Prototypes/Entities/Effects/Markers/spawn_points_jobs.yml +++ b/Resources/Prototypes/Entities/Effects/Markers/spawn_points_jobs.yml @@ -38,7 +38,6 @@ id: SpawnPointBartender parent: SpawnPointJobBase name: spawn point (bartender) - components: - type: SpawnPoint job_id: Bartender @@ -52,7 +51,6 @@ id: SpawnPointChef parent: SpawnPointJobBase name: spawn point (chef) - components: - type: SpawnPoint job_id: Chef @@ -66,7 +64,6 @@ id: SpawnPointClown parent: SpawnPointJobBase name: spawn point (clown) - components: - type: SpawnPoint job_id: Clown @@ -75,12 +72,24 @@ - type: Icon state: Clown +# Mime +- type: entity + id: SpawnPointMime + parent: SpawnPointJobBase + name: spawn point (mime) + components: + - type: SpawnPoint + job_id: Mime + - type: Sprite + state: Mime + - type: Icon + state: Mime + # Janitor - type: entity id: SpawnPointJanitor parent: SpawnPointJobBase name: spawn point (janitor) - components: - type: SpawnPoint job_id: Janitor @@ -94,7 +103,6 @@ id: SpawnPointCaptain parent: SpawnPointJobBase name: spawn point (captain) - components: - type: SpawnPoint job_id: Captain @@ -108,7 +116,6 @@ id: SpawnPointHeadOfPersonnel parent: SpawnPointJobBase name: spawn point (headofpersonnel) - components: - type: SpawnPoint job_id: HeadOfPersonnel @@ -122,7 +129,6 @@ id: SpawnPointChiefEngineer parent: SpawnPointJobBase name: spawn point (chiefengineer) - components: - type: SpawnPoint job_id: ChiefEngineer @@ -136,7 +142,6 @@ id: SpawnPointStationEngineer parent: SpawnPointJobBase name: spawn point (stationengineer) - components: - type: SpawnPoint job_id: StationEngineer @@ -150,7 +155,6 @@ id: SpawnPointChiefMedicalOfficer parent: SpawnPointJobBase name: spawn point (chiefmedicalofficer) - components: - type: SpawnPoint job_id: ChiefMedicalOfficer @@ -164,7 +168,6 @@ id: SpawnPointMedicalDoctor parent: SpawnPointJobBase name: spawn point (medicaldoctor) - components: - type: SpawnPoint job_id: MedicalDoctor @@ -178,7 +181,6 @@ id: SpawnPointResearchDirector parent: SpawnPointJobBase name: spawn point (researchdirector) - components: - type: SpawnPoint job_id: ResearchDirector @@ -192,7 +194,6 @@ id: SpawnPointScientist parent: SpawnPointJobBase name: spawn point (scientist) - components: - type: SpawnPoint job_id: Scientist @@ -206,7 +207,6 @@ id: SpawnPointHeadOfSecurity parent: SpawnPointJobBase name: spawn point (headofsecurity) - components: - type: SpawnPoint job_id: HeadOfSecurity @@ -220,7 +220,6 @@ id: SpawnPointSecurityOfficer parent: SpawnPointJobBase name: spawn point (securityofficer) - components: - type: SpawnPoint job_id: SecurityOfficer diff --git a/Resources/Prototypes/Entities/Objects/Devices/pda.yml b/Resources/Prototypes/Entities/Objects/Devices/pda.yml index 0675fd443f..c6e848a267 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/pda.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/pda.yml @@ -92,6 +92,27 @@ layer: - MobImpassable +- type: entity + name: Mime PDA + parent: BasePDA + id: MimePDA + description: Suprisingly not on mute. + components: + - type: PDA + idCard: MimeIDCard + - type: Icon + sprite: Objects/Devices/pda.rsi + state: pda-mime + - type: Sprite + sprite: Objects/Devices/pda.rsi + netsync: false + layers: + - state: pda-mime + map: ["enum.PDAVisualLayers.Base"] + - state: light_overlay + shader: unshaded + map: ["enum.PDAVisualLayers.Flashlight"] + - type: entity name: Cargo PDA parent: BasePDA diff --git a/Resources/Prototypes/Entities/Clothing/Belt/identification_cards.yml b/Resources/Prototypes/Entities/Objects/Misc/identification_cards.yml similarity index 93% rename from Resources/Prototypes/Entities/Clothing/Belt/identification_cards.yml rename to Resources/Prototypes/Entities/Objects/Misc/identification_cards.yml index 0364c3a024..899cb9c7b8 100644 --- a/Resources/Prototypes/Entities/Clothing/Belt/identification_cards.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/identification_cards.yml @@ -6,13 +6,13 @@ abstract: true components: - type: Sprite - sprite: Clothing/Belt/id_cards.rsi + sprite: Objects/Misc/id_cards.rsi - type: Icon - sprite: Clothing/Belt/id_cards.rsi + sprite: Objects/Misc/id_cards.rsi - type: Clothing Slots: - idcard - sprite: Clothing/Belt/id_cards.rsi + sprite: Objects/Misc/id_cards.rsi HeldPrefix: default - type: Access - type: IdCard @@ -141,6 +141,21 @@ - type: PresetIdCard job: Clown +- type: entity + parent: IDCardStandard + id: MimeIDCard + name: mime ID card + components: + - type: Sprite + layers: + - state: default + - state: assigned + - state: idmime + - type: Icon + state: idmime + - type: PresetIdCard + job: Mime + - type: entity parent: IDCardStandard id: JanitorIDCard diff --git a/Resources/Prototypes/Roles/Jobs/Civilian/mime.yml b/Resources/Prototypes/Roles/Jobs/Civilian/mime.yml new file mode 100644 index 0000000000..ec6e82ead2 --- /dev/null +++ b/Resources/Prototypes/Roles/Jobs/Civilian/mime.yml @@ -0,0 +1,25 @@ +- type: job + id: Mime + name: "mime" + positions: 1 + startingGear: MimeGear + department: + - Civilian + icon: "Mime" + access: + - Theatre + - Maintenance + +- type: startingGear + id: MimeGear + equipment: + innerclothing: UniformMime + backpack: BackpackClothing + head: HatBeret + belt: SuspendersClothing + gloves: GlovesWhite + shoes: ShoesMime + pocket1: Pen + pocket2: Paper + mask: MaskMime + idcard: MimePDA diff --git a/Resources/Textures/Clothing/Belt/id_cards.rsi/meta.json b/Resources/Textures/Clothing/Belt/id_cards.rsi/meta.json deleted file mode 100644 index 7575d54e9b..0000000000 --- a/Resources/Textures/Clothing/Belt/id_cards.rsi/meta.json +++ /dev/null @@ -1 +0,0 @@ -{"version": 1, "size": {"x": 32, "y": 32}, "states": [{"name": "assigned", "directions": 1, "delays": [[1.0]]}, {"name": "gold", "directions": 1, "delays": [[1.0]]}, {"name": "default", "directions": 1, "delays": [[1.0]]}, {"name": "idassistant", "directions": 1, "delays": [[1.0]]}, {"name": "idcaptain", "directions": 1, "delays": [[1.0]]}, {"name": "idcargotechnician", "directions": 1, "delays": [[1.0]]}, {"name": "idcentcom", "directions": 1, "delays": [[1.0]]}, {"name": "idchiefengineer", "directions": 1, "delays": [[1.0]]}, {"name": "idchiefmedicalofficer", "directions": 1, "delays": [[1.0]]}, {"name": "idclown", "directions": 1, "delays": [[1.0]]}, {"name": "idheadofpersonnel", "directions": 1, "delays": [[1.0]]}, {"name": "idheadofsecurity", "directions": 1, "delays": [[1.0]]}, {"name": "idjanitor", "directions": 1, "delays": [[1.0]]}, {"name": "idmedicaldoctor", "directions": 1, "delays": [[1.0]]}, {"name": "idresearchdirector", "directions": 1, "delays": [[1.0]]}, {"name": "idscientist", "directions": 1, "delays": [[1.0]]}, {"name": "idsecurityofficer", "directions": 1, "delays": [[1.0]]}, {"name": "idcargotechnician", "directions": 1, "delays": [[1.0]]}, {"name": "idstationengineer", "directions": 1, "delays": [[1.0]]}, {"name": "silver", "directions": 1, "delays": [[1.0]]}, {"name": "default-inhand-left", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "gold-inhand-left", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "silver-inhand-left", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "default-inhand-right", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "gold-inhand-right", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "silver-inhand-right", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "idbartender", "directions": 1, "delays": [[1.0]]}, {"name": "idcook", "directions": 1, "delays": [[1.0]]}]} \ No newline at end of file diff --git a/Resources/Textures/Clothing/Belt/id_cards.rsi/assigned.png b/Resources/Textures/Objects/Misc/id_cards.rsi/assigned.png similarity index 100% rename from Resources/Textures/Clothing/Belt/id_cards.rsi/assigned.png rename to Resources/Textures/Objects/Misc/id_cards.rsi/assigned.png diff --git a/Resources/Textures/Clothing/Belt/id_cards.rsi/default-inhand-left.png b/Resources/Textures/Objects/Misc/id_cards.rsi/default-inhand-left.png similarity index 100% rename from Resources/Textures/Clothing/Belt/id_cards.rsi/default-inhand-left.png rename to Resources/Textures/Objects/Misc/id_cards.rsi/default-inhand-left.png diff --git a/Resources/Textures/Clothing/Belt/id_cards.rsi/default-inhand-right.png b/Resources/Textures/Objects/Misc/id_cards.rsi/default-inhand-right.png similarity index 100% rename from Resources/Textures/Clothing/Belt/id_cards.rsi/default-inhand-right.png rename to Resources/Textures/Objects/Misc/id_cards.rsi/default-inhand-right.png diff --git a/Resources/Textures/Clothing/Belt/id_cards.rsi/default.png b/Resources/Textures/Objects/Misc/id_cards.rsi/default.png similarity index 100% rename from Resources/Textures/Clothing/Belt/id_cards.rsi/default.png rename to Resources/Textures/Objects/Misc/id_cards.rsi/default.png diff --git a/Resources/Textures/Clothing/Belt/id_cards.rsi/gold-inhand-left.png b/Resources/Textures/Objects/Misc/id_cards.rsi/gold-inhand-left.png similarity index 100% rename from Resources/Textures/Clothing/Belt/id_cards.rsi/gold-inhand-left.png rename to Resources/Textures/Objects/Misc/id_cards.rsi/gold-inhand-left.png diff --git a/Resources/Textures/Clothing/Belt/id_cards.rsi/gold-inhand-right.png b/Resources/Textures/Objects/Misc/id_cards.rsi/gold-inhand-right.png similarity index 100% rename from Resources/Textures/Clothing/Belt/id_cards.rsi/gold-inhand-right.png rename to Resources/Textures/Objects/Misc/id_cards.rsi/gold-inhand-right.png diff --git a/Resources/Textures/Clothing/Belt/id_cards.rsi/gold.png b/Resources/Textures/Objects/Misc/id_cards.rsi/gold.png similarity index 100% rename from Resources/Textures/Clothing/Belt/id_cards.rsi/gold.png rename to Resources/Textures/Objects/Misc/id_cards.rsi/gold.png diff --git a/Resources/Textures/Clothing/Belt/id_cards.rsi/idassistant.png b/Resources/Textures/Objects/Misc/id_cards.rsi/idassistant.png similarity index 100% rename from Resources/Textures/Clothing/Belt/id_cards.rsi/idassistant.png rename to Resources/Textures/Objects/Misc/id_cards.rsi/idassistant.png diff --git a/Resources/Textures/Clothing/Belt/id_cards.rsi/idbartender.png b/Resources/Textures/Objects/Misc/id_cards.rsi/idbartender.png similarity index 100% rename from Resources/Textures/Clothing/Belt/id_cards.rsi/idbartender.png rename to Resources/Textures/Objects/Misc/id_cards.rsi/idbartender.png diff --git a/Resources/Textures/Clothing/Belt/id_cards.rsi/idcaptain.png b/Resources/Textures/Objects/Misc/id_cards.rsi/idcaptain.png similarity index 100% rename from Resources/Textures/Clothing/Belt/id_cards.rsi/idcaptain.png rename to Resources/Textures/Objects/Misc/id_cards.rsi/idcaptain.png diff --git a/Resources/Textures/Clothing/Belt/id_cards.rsi/idcargotechnician.png b/Resources/Textures/Objects/Misc/id_cards.rsi/idcargotechnician.png similarity index 100% rename from Resources/Textures/Clothing/Belt/id_cards.rsi/idcargotechnician.png rename to Resources/Textures/Objects/Misc/id_cards.rsi/idcargotechnician.png diff --git a/Resources/Textures/Clothing/Belt/id_cards.rsi/idcentcom.png b/Resources/Textures/Objects/Misc/id_cards.rsi/idcentcom.png similarity index 100% rename from Resources/Textures/Clothing/Belt/id_cards.rsi/idcentcom.png rename to Resources/Textures/Objects/Misc/id_cards.rsi/idcentcom.png diff --git a/Resources/Textures/Clothing/Belt/id_cards.rsi/idchiefengineer.png b/Resources/Textures/Objects/Misc/id_cards.rsi/idchiefengineer.png similarity index 100% rename from Resources/Textures/Clothing/Belt/id_cards.rsi/idchiefengineer.png rename to Resources/Textures/Objects/Misc/id_cards.rsi/idchiefengineer.png diff --git a/Resources/Textures/Clothing/Belt/id_cards.rsi/idchiefmedicalofficer.png b/Resources/Textures/Objects/Misc/id_cards.rsi/idchiefmedicalofficer.png similarity index 100% rename from Resources/Textures/Clothing/Belt/id_cards.rsi/idchiefmedicalofficer.png rename to Resources/Textures/Objects/Misc/id_cards.rsi/idchiefmedicalofficer.png diff --git a/Resources/Textures/Clothing/Belt/id_cards.rsi/idclown.png b/Resources/Textures/Objects/Misc/id_cards.rsi/idclown.png similarity index 100% rename from Resources/Textures/Clothing/Belt/id_cards.rsi/idclown.png rename to Resources/Textures/Objects/Misc/id_cards.rsi/idclown.png diff --git a/Resources/Textures/Clothing/Belt/id_cards.rsi/idcook.png b/Resources/Textures/Objects/Misc/id_cards.rsi/idcook.png similarity index 100% rename from Resources/Textures/Clothing/Belt/id_cards.rsi/idcook.png rename to Resources/Textures/Objects/Misc/id_cards.rsi/idcook.png diff --git a/Resources/Textures/Clothing/Belt/id_cards.rsi/idheadofpersonnel.png b/Resources/Textures/Objects/Misc/id_cards.rsi/idheadofpersonnel.png similarity index 100% rename from Resources/Textures/Clothing/Belt/id_cards.rsi/idheadofpersonnel.png rename to Resources/Textures/Objects/Misc/id_cards.rsi/idheadofpersonnel.png diff --git a/Resources/Textures/Clothing/Belt/id_cards.rsi/idheadofsecurity.png b/Resources/Textures/Objects/Misc/id_cards.rsi/idheadofsecurity.png similarity index 100% rename from Resources/Textures/Clothing/Belt/id_cards.rsi/idheadofsecurity.png rename to Resources/Textures/Objects/Misc/id_cards.rsi/idheadofsecurity.png diff --git a/Resources/Textures/Clothing/Belt/id_cards.rsi/idjanitor.png b/Resources/Textures/Objects/Misc/id_cards.rsi/idjanitor.png similarity index 100% rename from Resources/Textures/Clothing/Belt/id_cards.rsi/idjanitor.png rename to Resources/Textures/Objects/Misc/id_cards.rsi/idjanitor.png diff --git a/Resources/Textures/Clothing/Belt/id_cards.rsi/idmedicaldoctor.png b/Resources/Textures/Objects/Misc/id_cards.rsi/idmedicaldoctor.png similarity index 100% rename from Resources/Textures/Clothing/Belt/id_cards.rsi/idmedicaldoctor.png rename to Resources/Textures/Objects/Misc/id_cards.rsi/idmedicaldoctor.png diff --git a/Resources/Textures/Objects/Misc/id_cards.rsi/idmime.png b/Resources/Textures/Objects/Misc/id_cards.rsi/idmime.png new file mode 100644 index 0000000000000000000000000000000000000000..5f2c9cec76e76680ff5e609a9d3759a6a90af247 GIT binary patch literal 301 zcmV+|0n+}7P)*21qG^b1v8OLI_=7mgUDf-}iUdHZcM!JV_F8U3Zylnr4YfosqLecwZxrdlA&G8l&8UV&+vAc`VjjOn`?Ujb?lC~Vt?IF6UG zlDJi%ZCeO}0LF0y%d(*By88swaoakEob&GsJVW088FTpABd9=a!Y~XEJ@Y(IUzd^R zxjc%h!Q`VpfoYmXQ52{JUu&*w0YMPN&jJ7sAGeCI#q;&{00000NkvXXu0mjf^^ARH literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Belt/id_cards.rsi/idresearchdirector.png b/Resources/Textures/Objects/Misc/id_cards.rsi/idresearchdirector.png similarity index 100% rename from Resources/Textures/Clothing/Belt/id_cards.rsi/idresearchdirector.png rename to Resources/Textures/Objects/Misc/id_cards.rsi/idresearchdirector.png diff --git a/Resources/Textures/Clothing/Belt/id_cards.rsi/idscientist.png b/Resources/Textures/Objects/Misc/id_cards.rsi/idscientist.png similarity index 100% rename from Resources/Textures/Clothing/Belt/id_cards.rsi/idscientist.png rename to Resources/Textures/Objects/Misc/id_cards.rsi/idscientist.png diff --git a/Resources/Textures/Clothing/Belt/id_cards.rsi/idsecurityofficer.png b/Resources/Textures/Objects/Misc/id_cards.rsi/idsecurityofficer.png similarity index 100% rename from Resources/Textures/Clothing/Belt/id_cards.rsi/idsecurityofficer.png rename to Resources/Textures/Objects/Misc/id_cards.rsi/idsecurityofficer.png diff --git a/Resources/Textures/Clothing/Belt/id_cards.rsi/idstationengineer.png b/Resources/Textures/Objects/Misc/id_cards.rsi/idstationengineer.png similarity index 100% rename from Resources/Textures/Clothing/Belt/id_cards.rsi/idstationengineer.png rename to Resources/Textures/Objects/Misc/id_cards.rsi/idstationengineer.png diff --git a/Resources/Textures/Objects/Misc/id_cards.rsi/meta.json b/Resources/Textures/Objects/Misc/id_cards.rsi/meta.json new file mode 100644 index 0000000000..5f22cd0c9d --- /dev/null +++ b/Resources/Textures/Objects/Misc/id_cards.rsi/meta.json @@ -0,0 +1,324 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "assigned", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "gold", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "default", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "idassistant", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "idcaptain", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "idcargotechnician", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "idcentcom", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "idchiefengineer", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "idchiefmedicalofficer", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "idclown", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "idheadofpersonnel", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "idheadofsecurity", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "idjanitor", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "idmedicaldoctor", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "idresearchdirector", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "idscientist", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "idsecurityofficer", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "idcargotechnician", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "idstationengineer", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "idmime", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "silver", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "default-inhand-left", + "directions": 4, + "delays": [ + [ + 1 + ], + [ + 1 + ], + [ + 1 + ], + [ + 1 + ] + ] + }, + { + "name": "gold-inhand-left", + "directions": 4, + "delays": [ + [ + 1 + ], + [ + 1 + ], + [ + 1 + ], + [ + 1 + ] + ] + }, + { + "name": "silver-inhand-left", + "directions": 4, + "delays": [ + [ + 1 + ], + [ + 1 + ], + [ + 1 + ], + [ + 1 + ] + ] + }, + { + "name": "default-inhand-right", + "directions": 4, + "delays": [ + [ + 1 + ], + [ + 1 + ], + [ + 1 + ], + [ + 1 + ] + ] + }, + { + "name": "gold-inhand-right", + "directions": 4, + "delays": [ + [ + 1 + ], + [ + 1 + ], + [ + 1 + ], + [ + 1 + ] + ] + }, + { + "name": "silver-inhand-right", + "directions": 4, + "delays": [ + [ + 1 + ], + [ + 1 + ], + [ + 1 + ], + [ + 1 + ] + ] + }, + { + "name": "idbartender", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "idcook", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + } + ] +} diff --git a/Resources/Textures/Clothing/Belt/id_cards.rsi/silver-inhand-left.png b/Resources/Textures/Objects/Misc/id_cards.rsi/silver-inhand-left.png similarity index 100% rename from Resources/Textures/Clothing/Belt/id_cards.rsi/silver-inhand-left.png rename to Resources/Textures/Objects/Misc/id_cards.rsi/silver-inhand-left.png diff --git a/Resources/Textures/Clothing/Belt/id_cards.rsi/silver-inhand-right.png b/Resources/Textures/Objects/Misc/id_cards.rsi/silver-inhand-right.png similarity index 100% rename from Resources/Textures/Clothing/Belt/id_cards.rsi/silver-inhand-right.png rename to Resources/Textures/Objects/Misc/id_cards.rsi/silver-inhand-right.png diff --git a/Resources/Textures/Clothing/Belt/id_cards.rsi/silver.png b/Resources/Textures/Objects/Misc/id_cards.rsi/silver.png similarity index 100% rename from Resources/Textures/Clothing/Belt/id_cards.rsi/silver.png rename to Resources/Textures/Objects/Misc/id_cards.rsi/silver.png From 1186552629ac4234354dbabc370233fc8b3d309e Mon Sep 17 00:00:00 2001 From: DrSmugleaf Date: Tue, 1 Sep 2020 21:49:32 +0200 Subject: [PATCH 059/103] Add an entire nullable to buckle --- Content.Server/GameObjects/Components/Buckle/BuckleComponent.cs | 2 +- Content.Server/GameObjects/Components/Strap/StrapComponent.cs | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/Content.Server/GameObjects/Components/Buckle/BuckleComponent.cs b/Content.Server/GameObjects/Components/Buckle/BuckleComponent.cs index 275cf751bd..8e42c59e96 100644 --- a/Content.Server/GameObjects/Components/Buckle/BuckleComponent.cs +++ b/Content.Server/GameObjects/Components/Buckle/BuckleComponent.cs @@ -162,7 +162,7 @@ namespace Content.Server.GameObjects.Components.Buckle } } - private bool CanBuckle(IEntity user, IEntity to, [MaybeNullWhen(false)] out StrapComponent strap) + private bool CanBuckle(IEntity? user, IEntity to, [MaybeNullWhen(false)] out StrapComponent strap) { strap = null; diff --git a/Content.Server/GameObjects/Components/Strap/StrapComponent.cs b/Content.Server/GameObjects/Components/Strap/StrapComponent.cs index 45a6346ada..aea6e759e2 100644 --- a/Content.Server/GameObjects/Components/Strap/StrapComponent.cs +++ b/Content.Server/GameObjects/Components/Strap/StrapComponent.cs @@ -7,7 +7,6 @@ using Content.Shared.Interfaces.GameObjects.Components; using Content.Shared.Utility; using Robust.Server.GameObjects; using Robust.Shared.GameObjects; -using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Localization; using Robust.Shared.Serialization; From 549c8c595e7b542f3b9f03c95ddbce7bb0e9afa2 Mon Sep 17 00:00:00 2001 From: DrSmugleaf Date: Tue, 1 Sep 2020 22:04:55 +0200 Subject: [PATCH 060/103] Add extension method to shuffle an entity by a random value --- .../Chemistry/ChemMasterComponent.cs | 6 +-- .../Components/Conveyor/ConveyorComponent.cs | 3 +- .../Utility/SharedEntityExtensions.cs | 41 +++++++++++++++++++ 3 files changed, 45 insertions(+), 5 deletions(-) create mode 100644 Content.Shared/Utility/SharedEntityExtensions.cs diff --git a/Content.Server/GameObjects/Components/Chemistry/ChemMasterComponent.cs b/Content.Server/GameObjects/Components/Chemistry/ChemMasterComponent.cs index 208392e4c6..52285bf67d 100644 --- a/Content.Server/GameObjects/Components/Chemistry/ChemMasterComponent.cs +++ b/Content.Server/GameObjects/Components/Chemistry/ChemMasterComponent.cs @@ -14,6 +14,7 @@ using Content.Shared.GameObjects.Components.Chemistry.ChemMaster; using Content.Shared.GameObjects.EntitySystems; using Content.Shared.Interfaces; using Content.Shared.Interfaces.GameObjects.Components; +using Content.Shared.Utility; using Robust.Server.GameObjects.Components.Container; using Robust.Server.GameObjects.Components.UserInterface; using Robust.Server.GameObjects.EntitySystems; @@ -300,15 +301,12 @@ namespace Content.Server.GameObjects.Components.Chemistry hands.PutInHand(item); continue; } - } //Put it on the floor bottle.Transform.GridPosition = user.Transform.GridPosition; //Give it an offset - var x_negative = random.Prob(0.5f) ? -1 : 1; - var y_negative = random.Prob(0.5f) ? -1 : 1; - bottle.Transform.LocalPosition += new Vector2(random.NextFloat() * 0.2f * x_negative, random.NextFloat() * 0.2f * y_negative); + bottle.RandomOffset(0.2f); } } diff --git a/Content.Server/GameObjects/Components/Conveyor/ConveyorComponent.cs b/Content.Server/GameObjects/Components/Conveyor/ConveyorComponent.cs index 01a29b4a05..bfab8543f6 100644 --- a/Content.Server/GameObjects/Components/Conveyor/ConveyorComponent.cs +++ b/Content.Server/GameObjects/Components/Conveyor/ConveyorComponent.cs @@ -10,6 +10,7 @@ using Content.Shared.GameObjects.Components.Conveyor; using Content.Shared.GameObjects.Components.Interactable; using Content.Shared.Interfaces.GameObjects.Components; using Content.Shared.Physics; +using Content.Shared.Utility; using Robust.Server.GameObjects; using Robust.Shared.Containers; using Robust.Shared.GameObjects; @@ -170,7 +171,7 @@ namespace Content.Server.GameObjects.Components.Conveyor Owner.AddComponent(); _group?.RemoveConveyor(this); - Owner.Transform.WorldPosition += (_random.NextFloat() * 0.4f - 0.2f, _random.NextFloat() * 0.4f - 0.2f); + Owner.RandomOffset(0.2f); return true; } diff --git a/Content.Shared/Utility/SharedEntityExtensions.cs b/Content.Shared/Utility/SharedEntityExtensions.cs new file mode 100644 index 0000000000..8ad47700e2 --- /dev/null +++ b/Content.Shared/Utility/SharedEntityExtensions.cs @@ -0,0 +1,41 @@ +using System; +using Robust.Shared.Interfaces.GameObjects; +using Robust.Shared.Interfaces.Random; +using Robust.Shared.IoC; +using Robust.Shared.Maths; +using Robust.Shared.Random; +using Robust.Shared.Utility; + +namespace Content.Shared.Utility +{ + public static class SharedEntityExtensions + { + public static void RandomOffset(this IEntity entity, float minX, float maxX, float minY, float maxY) + { + DebugTools.AssertNotNull(entity); + DebugTools.Assert(minX <= maxX, $"Minimum X value ({minX}) must be smaller than or equal to the maximum X value ({maxX})"); + DebugTools.Assert(minY <= maxY, $"Minimum Y value ({minY}) must be smaller than or equal to the maximum Y value ({maxY})"); + + var random = IoCManager.Resolve(); + var randomX = random.NextFloat() * (maxX - minX) + minX; + var randomY = random.NextFloat() * (maxY - minY) + minY; + var offset = new Vector2(randomX, randomY); + + entity.Transform.LocalPosition += offset; + } + + public static void RandomOffset(this IEntity entity, float min, float max) + { + DebugTools.AssertNotNull(entity); + DebugTools.Assert(min <= max, $"Minimum value ({min}) must be smaller than or equal to the maximum value ({max})"); + + entity.RandomOffset(min, max, min, max); + } + + public static void RandomOffset(this IEntity entity, float value) + { + value = Math.Abs(value); + entity.RandomOffset(-value, value); + } + } +} From 8a14725539a4d5c94a2bf98958a63bd3797f358a Mon Sep 17 00:00:00 2001 From: DrSmugleaf Date: Tue, 1 Sep 2020 23:28:59 +0200 Subject: [PATCH 061/103] Add extension methods for getting adjacent tiles randomly and to offset coordinates in a direction --- .../Components/Fluids/PuddleComponent.cs | 49 ++-------- Content.Shared/Maps/TurfHelpers.cs | 11 +++ .../Utility/SharedDirectionExtensions.cs | 89 +++++++++++++++++++ 3 files changed, 109 insertions(+), 40 deletions(-) create mode 100644 Content.Shared/Utility/SharedDirectionExtensions.cs diff --git a/Content.Server/GameObjects/Components/Fluids/PuddleComponent.cs b/Content.Server/GameObjects/Components/Fluids/PuddleComponent.cs index 769d14fd16..e2015f739c 100644 --- a/Content.Server/GameObjects/Components/Fluids/PuddleComponent.cs +++ b/Content.Server/GameObjects/Components/Fluids/PuddleComponent.cs @@ -6,7 +6,9 @@ using Content.Server.GameObjects.Components.Chemistry; using Content.Server.GameObjects.Components.Movement; using Content.Shared.Chemistry; using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.Maps; using Content.Shared.Physics; +using Content.Shared.Utility; using Robust.Server.GameObjects; using Robust.Server.GameObjects.EntitySystems; using Robust.Server.Interfaces.GameObjects; @@ -338,43 +340,6 @@ namespace Content.Server.GameObjects.Components.Fluids } } - // TODO: Move the below to SnapGrid? - /// - /// Will yield a random direction until none are left - /// - /// - private static IEnumerable RandomDirections() - { - var directions = new[] - { - Direction.East, - Direction.SouthEast, - Direction.South, - Direction.SouthWest, - Direction.West, - Direction.NorthWest, - Direction.North, - Direction.NorthEast, - }; - - var robustRandom = IoCManager.Resolve(); - var n = directions.Length; - - while (n > 1) - { - n--; - var k = robustRandom.Next(n + 1); - var value = directions[k]; - directions[k] = directions[n]; - directions[n] = value; - } - - foreach (var direction in directions) - { - yield return direction; - } - } - /// /// Tries to get an adjacent coordinate to overflow to, unless it is blocked by a wall on the /// same tile or the tile is empty @@ -389,9 +354,13 @@ namespace Content.Server.GameObjects.Components.Fluids var mapGrid = _mapManager.GetGrid(Owner.Transform.GridID); + if (!Owner.Transform.GridPosition.Offset(direction).TryGetTileRef(out var tile)) + { + return false; + } + // If space return early, let that spill go out into the void - var tileRef = mapGrid.GetTileRef(Owner.Transform.GridPosition.Offset(direction.ToVec())); - if (tileRef.Tile.IsEmpty) + if (tile.Value.Tile.IsEmpty) { return false; } @@ -432,7 +401,7 @@ namespace Content.Server.GameObjects.Components.Fluids /// Enumerable of the puddles found or to be created private IEnumerable> GetAllAdjacentOverflow() { - foreach (var direction in RandomDirections()) + foreach (var direction in SharedDirectionExtensions.RandomDirections()) { if (TryGetAdjacentOverflow(direction, out var puddle)) { diff --git a/Content.Shared/Maps/TurfHelpers.cs b/Content.Shared/Maps/TurfHelpers.cs index b02472cfa5..8926c51743 100644 --- a/Content.Shared/Maps/TurfHelpers.cs +++ b/Content.Shared/Maps/TurfHelpers.cs @@ -1,5 +1,6 @@ #nullable enable using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using Content.Shared.Physics; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Map; @@ -59,6 +60,11 @@ namespace Content.Shared.Maps return tile; } + public static bool TryGetTileRef(this GridCoordinates coordinates, [NotNullWhen(true)] out TileRef? turf) + { + return (turf = coordinates.GetTileRef()) != null; + } + /// /// Helper that returns all entities in a turf. /// @@ -92,6 +98,11 @@ namespace Content.Shared.Maps return false; } + public static GridCoordinates GridPosition(this TileRef turf) + { + return new GridCoordinates(turf.X, turf.Y, turf.GridIndex); + } + /// /// Creates a box the size of a tile, at the same position in the world as the tile. /// diff --git a/Content.Shared/Utility/SharedDirectionExtensions.cs b/Content.Shared/Utility/SharedDirectionExtensions.cs new file mode 100644 index 0000000000..c33a482b86 --- /dev/null +++ b/Content.Shared/Utility/SharedDirectionExtensions.cs @@ -0,0 +1,89 @@ +using System.Collections.Generic; +using Content.Shared.Maps; +using Robust.Shared.Interfaces.Map; +using Robust.Shared.Interfaces.Random; +using Robust.Shared.IoC; +using Robust.Shared.Map; +using Robust.Shared.Maths; + +namespace Content.Shared.Utility +{ + public static class SharedDirectionExtensions + { + /// + /// Gets random directions until none are left + /// + /// An enumerable of the directions. + public static IEnumerable RandomDirections() + { + var directions = new[] + { + Direction.East, + Direction.SouthEast, + Direction.South, + Direction.SouthWest, + Direction.West, + Direction.NorthWest, + Direction.North, + Direction.NorthEast, + }; + + var robustRandom = IoCManager.Resolve(); + var n = directions.Length; + + while (n > 1) + { + n--; + var k = robustRandom.Next(n + 1); + var value = directions[k]; + directions[k] = directions[n]; + directions[n] = value; + } + + foreach (var direction in directions) + { + yield return direction; + } + } + + /// + /// Gets tiles in random directions from the given one. + /// + /// An enumerable of the adjacent tiles. + public static IEnumerable AdjacentTilesRandom(this TileRef tile, bool ignoreSpace = false) + { + return tile.GridPosition().AdjacentTilesRandom(ignoreSpace); + } + + /// + /// Gets tiles in random directions from the given one. + /// + /// An enumerable of the adjacent tiles. + public static IEnumerable AdjacentTilesRandom(this GridCoordinates coordinates, bool ignoreSpace = false) + { + var mapManager = IoCManager.Resolve(); + + foreach (var direction in RandomDirections()) + { + var adjacent = coordinates.Offset(direction).GetTileRef(); + + if (adjacent == null) + { + continue; + } + + if (ignoreSpace && adjacent.Value.Tile.IsEmpty) + { + continue; + } + + yield return adjacent.Value; + } + } + + public static GridCoordinates Offset(this GridCoordinates coordinates, Direction direction) + { + return coordinates.Offset(direction.ToVec()); + } + } +} From 8afeb4d0943688ac267679c10e6c744e167275b2 Mon Sep 17 00:00:00 2001 From: DrSmugleaf Date: Tue, 1 Sep 2020 23:33:42 +0200 Subject: [PATCH 062/103] Add helpers for converting to and from Fahrenheit --- Content.Shared/Utility/TemperatureHelpers.cs | 22 ++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/Content.Shared/Utility/TemperatureHelpers.cs b/Content.Shared/Utility/TemperatureHelpers.cs index 1d4e61ca48..660af760fd 100644 --- a/Content.Shared/Utility/TemperatureHelpers.cs +++ b/Content.Shared/Utility/TemperatureHelpers.cs @@ -9,9 +9,31 @@ namespace Content.Shared.Utility return celsius + PhysicalConstants.ZERO_CELCIUS; } + public static float CelsiusToFahrenheit(float celsius) + { + return celsius * 9 / 5 + 32; + } + public static float KelvinToCelsius(float kelvin) { return kelvin - PhysicalConstants.ZERO_CELCIUS; } + + public static float KelvinToFahrenheit(float kelvin) + { + var celsius = KelvinToCelsius(kelvin); + return CelsiusToFahrenheit(celsius); + } + + public static float FahrenheitToCelsius(float fahrenheit) + { + return (fahrenheit - 32) * 5 / 9; + } + + public static float FahrenheitToKelvin(float fahrenheit) + { + var celsius = FahrenheitToCelsius(fahrenheit); + return CelsiusToKelvin(celsius); + } } } From 2aed70befeb3caf56f0f94afd90d345886d45610 Mon Sep 17 00:00:00 2001 From: Pieter-Jan Briers Date: Tue, 1 Sep 2020 23:53:26 +0200 Subject: [PATCH 063/103] Update submodule --- RobustToolbox | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RobustToolbox b/RobustToolbox index 4777a0adbf..4f5d2664b8 160000 --- a/RobustToolbox +++ b/RobustToolbox @@ -1 +1 @@ -Subproject commit 4777a0adbf0b6f7a0e7c62e1c5e9b67ab7e907f4 +Subproject commit 4f5d2664b8e3bb7c775c138add41234b15a62164 From f5cba6ae891b8f9ddf96976d889bd9d1d2c2e7ad Mon Sep 17 00:00:00 2001 From: Pieter-Jan Briers Date: Tue, 1 Sep 2020 23:53:49 +0200 Subject: [PATCH 064/103] Fix screenshots crashing due to bad FileAccess --- Content.Client/ScreenshotHook.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Content.Client/ScreenshotHook.cs b/Content.Client/ScreenshotHook.cs index d1cf81bd96..fb24833722 100644 --- a/Content.Client/ScreenshotHook.cs +++ b/Content.Client/ScreenshotHook.cs @@ -57,7 +57,7 @@ namespace Content.Client } await using var file = - _resourceManager.UserData.Open(BaseScreenshotPath / $"{filename}.png", FileMode.CreateNew, FileAccess.Read, FileShare.None); + _resourceManager.UserData.Open(BaseScreenshotPath / $"{filename}.png", FileMode.CreateNew, FileAccess.Write, FileShare.None); await Task.Run(() => { From 072f374bcce4498a7f639cc3e56ede7e2c941db5 Mon Sep 17 00:00:00 2001 From: Swept Date: Tue, 1 Sep 2020 22:38:35 +0000 Subject: [PATCH 065/103] Removes the Straylight SMG (#1881) * goodbye * Removes Straylight from spawners --- .../Markers/gamemode_conditional_spawners.yml | 1 - .../Objects/Weapons/Guns/SMGs/smgs.yml | 38 ---------------- .../Weapons/Guns/SMGs/straylight.rsi/base.png | Bin 2409 -> 0 bytes .../Guns/SMGs/straylight.rsi/bolt-closed.png | Bin 2484 -> 0 bytes .../Guns/SMGs/straylight.rsi/bolt-open.png | Bin 2481 -> 0 bytes .../Weapons/Guns/SMGs/straylight.rsi/icon.png | Bin 510 -> 0 bytes .../Guns/SMGs/straylight.rsi/inhand-left.png | Bin 734 -> 0 bytes .../Guns/SMGs/straylight.rsi/inhand-right.png | Bin 710 -> 0 bytes .../Guns/SMGs/straylight.rsi/mag-0.png | Bin 2487 -> 0 bytes .../Guns/SMGs/straylight.rsi/meta.json | 43 ------------------ .../Guns/SMGs/straylight.rsi/suppressor.png | Bin 2448 -> 0 bytes 11 files changed, 82 deletions(-) delete mode 100644 Resources/Textures/Objects/Weapons/Guns/SMGs/straylight.rsi/base.png delete mode 100644 Resources/Textures/Objects/Weapons/Guns/SMGs/straylight.rsi/bolt-closed.png delete mode 100644 Resources/Textures/Objects/Weapons/Guns/SMGs/straylight.rsi/bolt-open.png delete mode 100644 Resources/Textures/Objects/Weapons/Guns/SMGs/straylight.rsi/icon.png delete mode 100644 Resources/Textures/Objects/Weapons/Guns/SMGs/straylight.rsi/inhand-left.png delete mode 100644 Resources/Textures/Objects/Weapons/Guns/SMGs/straylight.rsi/inhand-right.png delete mode 100644 Resources/Textures/Objects/Weapons/Guns/SMGs/straylight.rsi/mag-0.png delete mode 100644 Resources/Textures/Objects/Weapons/Guns/SMGs/straylight.rsi/meta.json delete mode 100644 Resources/Textures/Objects/Weapons/Guns/SMGs/straylight.rsi/suppressor.png diff --git a/Resources/Prototypes/Entities/Effects/Markers/gamemode_conditional_spawners.yml b/Resources/Prototypes/Entities/Effects/Markers/gamemode_conditional_spawners.yml index f026ba3d01..e6586b1a44 100644 --- a/Resources/Prototypes/Entities/Effects/Markers/gamemode_conditional_spawners.yml +++ b/Resources/Prototypes/Entities/Effects/Markers/gamemode_conditional_spawners.yml @@ -167,7 +167,6 @@ - SmgAtreides - SmgC20r - SmgDrozd - - SmgStraylight - SmgWt550 - SmgZoric chance: 0.95 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/SMGs/smgs.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/SMGs/smgs.yml index 481454a863..5880fd2600 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/SMGs/smgs.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/SMGs/smgs.yml @@ -160,44 +160,6 @@ steps: 1 zeroVisible: true -- type: entity - name: Straylight - parent: SmgBase - id: SmgStraylight - description: Pla-ket-ket-ket-ket - components: - - type: Sprite - sprite: Objects/Weapons/Guns/SMGs/straylight.rsi - layers: - - state: base - map: ["enum.RangedBarrelVisualLayers.Base"] - - state: bolt-closed - map: ["enum.RangedBarrelVisualLayers.Bolt"] - - state: mag-0 - map: ["enum.RangedBarrelVisualLayers.Mag"] - - type: Icon - sprite: Objects/Weapons/Guns/SMGs/straylight.rsi - - type: Item - size: 24 - sprite: Objects/Weapons/Guns/SMGs/straylight.rsi - - type: RangedWeapon - - type: MagazineBarrel - currentSelector: Automatic - allSelectors: - - Single - - Automatic - fireRate: 10 - caliber: Pistol - magazineTypes: - - Smg - - type: Appearance - visuals: - - type: BarrelBoltVisualizer - - type: MagVisualizer - magState: mag - steps: 1 - zeroVisible: true - - type: entity name: WT550 parent: SmgBase diff --git a/Resources/Textures/Objects/Weapons/Guns/SMGs/straylight.rsi/base.png b/Resources/Textures/Objects/Weapons/Guns/SMGs/straylight.rsi/base.png deleted file mode 100644 index 794d4e022bd54aecc02faf23aac8228b64738a04..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2409 zcmV-v36}PWP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+U-|acH}k;{O2ih1QH|&@HpW1UT%=%r$EVVcYBhI z$N3z|ElMy20##V3u>SgUhd*!-iH5?WwbdGNlvWxUZZuxUHKth3^&E8n3(rsT@c0Ko zlriS(v95c*LC)_lNV(Ww-X7*DMSWleyU61U zW;kd3?eyQl3-eW5to^#}YsU=?dl4RZr01?(^ z7?Uy>h&5$SHAO+eNC`M9_%T>cxljiKi38Jwl~gh^K}gBh#ygVETw=P!C@&y_bIk&3 zS~ieX3YUs}Q-qKO&Rm$evaoVvtGSlSwN|NKr%bXGVW}db(!?}tQP!%Ws!gp?%P3ksMj1TnkfEaun>6!82?(=JnL69Fl@>y2 zmBp(rS-RS?jab`xm(9Cw*}B`d2WvO0&#b*N_wTHwn>9K_`8;`N4Pucu70Js9J7-{w zN&@5J3?QJ%Ig6S~A!p7xi;Z%~nF&_1lQWYu1_sMY#5+B>duQ$+c?&@ItGv;VmOL^{nYSOXHtm$#dK#mBnJTPGy)bBusJ764i(+xX3x6R zc#PbA3cK+Ffpnf_40NlrK&>2)MZORG`p7#Qt|mQ`w4mDvtL`>oU!F}R`=r%{Cp^GY zTPkCr_{mJYFs+)>&h33thNOoXH%gPO>1~#^@$@>0a+GJaK3c_uWM<53F?T7Ij62rC zKet?Ot1S)GVbiK8ea+lmnW*xGM?_`oOS_@U!X7ka7&miv5%t03*eQ(3D2E7$pf-m6 zSI}gSm<5JVAgN=YHZ~u94gYV8$yN}L9n^I|C=tDd_J34U*=r0=RfaK)ZcNP4{f5&r8vdcIS-^T|*bZ+wKRTMn|yWkx-Sz=1iebO*NW_ zjhlPIhvG4P4eJZolGQYh5mNDhp|wFtyO`eSIp>k zd#HJ+2ZZu%A=gFaG9?{Y$F_`(@mK?1QIDW`TH^{Rz&lzen%1msil=KpvqtADy<(%l zigyqc;MhjRCbxTzd&p|nH1!Qbe{*3oKeJpZ603%vO;;JCxwCMO>uBDV{lP_0ook4m zfSxzxC~kN=1`;S;Ic%QNLmXpYpCj_UVv1+f3D@1g=0YP6zP(UA!2_HNKC8OUjvTma z0lpU4=31qf3vYH8;agJ&;&L1BiajZkNBE&pEZtAh? zc@RJS^VQ`ZOQ#~?J`su=SW`D9sNHIjHdsOLVulE?EfEzEi+e0o?1+GsoPfl}2ir30 zS9M~1a9a3o4|zj77&Q~$*$YZSu^CU)_H&QzBC+*!QGDVq_h*c+z{6fDn8kQUJU#|s z^kT&MwIV(Yf4VD#U+zD@6@6QgVDsC;-)ntBbV)5ya{vGVglR)VP)S2WAaHVTW@&6? z004NLeUUv#!$2IxUsFp(DhhTGamY}eEck^uN)?M>p|llRbuhW~3z{?}DK3tJYr(;f z#j1mgv#t)Vf*|+-;^gS0=prTlFDbN$@!+^0@9sVB-T^|R!c?Z7c=l2U-$6w^)AY@ywCkPdX>D%0G~)a$8^IY-XNaYv~yF z6ykH@F@r8h{K$3L|nWrS;tqs!_g>by?xO#aXS? zSnHnrg`vE*lIA+iVZ^b71d zga5(rZq35fq?;6q0f86W{ulv*yFjyU+uz5w-8=#O&%l+|_E#Ig>?i5$WEE0hc?#;FB&Hk|X(P3WWmjen#Jv0|st^o;A0();>-jfDCoDd;=UD0;5IBUiWx+ zcV}<^o@w>>15dSbnNt*P)&Kwi24YJ`L;(K){{a7>y{D4^000SaNLh0L04^f{04^f| zc%?sf00007bV*G`2jm410{|(R3=Qr800F&8L_t(o!|j&8Pr^VH$G>NAZ~__XM!Gtf zcBl>v_zyTS5<{Apu&~_1!s6D2r7?!E_+o}paGJ?(aputX-4n}z&pC*f}(s-h9U$$bM%f{a=uERo^ZUC&z({E!3y b{}$jI!k)=eTQZ_p00000NkvXXu0mjf*PwZ0 diff --git a/Resources/Textures/Objects/Weapons/Guns/SMGs/straylight.rsi/bolt-closed.png b/Resources/Textures/Objects/Weapons/Guns/SMGs/straylight.rsi/bolt-closed.png deleted file mode 100644 index ce4dd70da430327c69a7ab7e22cb87edb917dc2f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2484 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 diff --git a/Resources/Textures/Objects/Weapons/Guns/SMGs/straylight.rsi/icon.png b/Resources/Textures/Objects/Weapons/Guns/SMGs/straylight.rsi/icon.png deleted file mode 100644 index 06979e4257070b30e9921cf900f1222df0e97aa6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 510 zcmVR6-%ge+Zd$>QRc#U%)(QV@!WqkluK(4ls) zIJh2hv30Or6zOmd;bM|DXHu0?$v5RLckli3z2jY^R;z_YYGt9>6MzID0Z0Ir8h{uk zBZkR-3a~owMn%b@SWqzw!a6yU{uIEfU9w_9^?`7;JH1%3q^P%{$nLfE9RR@O{ch%a zkt3lF1QS-uC2a5J-0?%V?~ZR?GXQ|SjeXRtbJvk}r-v#z1R=*vQL;|l>VXeNSOTxT z?M^S$-rM0803ahjf>PU^r_{znw+{d)7E}j#^5NSn1fbM*16Il<7sOlhp!hnTl*35Gd3NRWELFv~s51{FUaaTs;p>NO2 z^K_hiPMum83E(^Npy`zCJLSYMnWAJtsVz**CG3PeKt88J(+Sgb!qO?(EkmI?S*dxIo z+4@;Nse`?=VCjxlwMjL{y-(OipL=n++W%bp!{1zsFLJD(Y5s;GXA46agIN@VHG{Nn zgKR^u*a5x+Zrlm%35!`bFmJfXbc6ARhxh~bzbE*AP3+pWDVvFl<;FD5+eS-S%3}0a zUM!LFQt=Qsn0JODhiUin@QdHnHa*x87orn7X}|d8ohBP^dx#6PdC!@9|Katc%%`qO zbuH!kP1am&M?s4$14vKKN%udSB86CeL5{4n>|d-R~Do)<3>!F%!eRQ+gKj&Hx=PB)IM~vwHot z+|xCmB5xZB{)oLXt@B<&N8f+p?w2x+_gNWauy@L&*9H~zQd|51`ka3FSXlO zccK5$bB2^EGwo9>dqlqYClU(73`UHgKHDw6A$xm-XMRB0+2!}P-t{`&{N>t=+?fUb z>y<*!`aCEsJCL0}YsKy@XO_%wINbdAkX|w4dBOaBF>4oo{i`H-qQm}ll>bTDg8JH- z*?J1RP7)t(l`=T&jB=LH`}p$5>-6Ja7umd@d`r4#_N+qf-+zzubNpGi<=M0So0$uL z%Q(Dy$hlJez_v3n#f+Ih?!R%koT>8uZ1WaxgL^6Sb~c#Um|IWyKE*S?|Gkm;gl+rI k++?(sM@bo#UzzHd9c@*POL6PY2BupEPgg&ebxsLQ0Kh*^b^rhX diff --git a/Resources/Textures/Objects/Weapons/Guns/SMGs/straylight.rsi/inhand-right.png b/Resources/Textures/Objects/Weapons/Guns/SMGs/straylight.rsi/inhand-right.png deleted file mode 100644 index b410d99e349a3a7af9510fa12e993a6fddcc715f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 710 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7T#lEVCwaBaSW-L^LCbE|E&axz%|D0kiZ447)FjP7P|*TI%#Aq}u7S@5M{Ayl*=uU*oz^ z68vJlT?M;LpPG@;v9@KiokEREs%sy=^;YR_6bb{$t4wnBn!5VSuK$zo#nw!f3Afvp zs?ld0y(?g4(Nv+6kB${;v#!W$J5$#C>ZRu0*w{-+c526Gp7fOwzQ51@Tix}`!A7^Y z_MUIu&vIk#x{OTUd`;bF$(wYYH|jcfDsS+~IUOMO*--HB&j0!A^H(f2z3vqu^uX`l z(>HtE`4b=2-Pr@QE&aJ|{(mdZuK$~VEI%KAq`+jM*UAqH>ifBT&5xc=KmO#L_WaX& zXJ4M!Kku&9Ta%XHT4a{#ENv zY^;~PS>P1W54%rPT&(_mZyV3k5mJ~ zZv?Mz+VZL(K-Ny@_p8twFLev%`gTe~DWM4fMZ!NT diff --git a/Resources/Textures/Objects/Weapons/Guns/SMGs/straylight.rsi/mag-0.png b/Resources/Textures/Objects/Weapons/Guns/SMGs/straylight.rsi/mag-0.png deleted file mode 100644 index d3cbb7bdd587d2cd9321d24be50f3a9f4515b73e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2487 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 BoI3yj diff --git a/Resources/Textures/Objects/Weapons/Guns/SMGs/straylight.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/SMGs/straylight.rsi/meta.json deleted file mode 100644 index a7200507ee..0000000000 --- a/Resources/Textures/Objects/Weapons/Guns/SMGs/straylight.rsi/meta.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "version": 1, - "size": { - "x": 32, - "y": 32 - }, - "license": "CC-BY-SA-3.0", - "copyright": "https://github.com/discordia-space/CEV-Eris/raw/56cbafd6ad8c013ccd5472d6c4a0db790f7f872a/icons/obj/guns/projectile/straylight.dmi", - "states": [ - { - "name": "icon", - "directions": 1 - }, - { - "name": "base", - "directions": 1 - }, - { - "name": "bolt-closed", - "directions": 1 - }, - { - "name": "bolt-open", - "directions": 1 - }, - { - "name": "mag-0", - "directions": 1 - }, - { - "name": "suppressor", - "directions": 1 - }, - { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", - "directions": 1 - } - ] -} \ No newline at end of file diff --git a/Resources/Textures/Objects/Weapons/Guns/SMGs/straylight.rsi/suppressor.png b/Resources/Textures/Objects/Weapons/Guns/SMGs/straylight.rsi/suppressor.png deleted file mode 100644 index 079d5a45d91fad337dd7480f4c0ace76b4d4d402..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2448 zcmV;B32*j^P) zaB^>EX>4U6ba`-PAZ2)IW&i+q+U-|avg9ZX{O1&N1cVTR*&ld?@ zjFzv*vhMMQe)*W7`R?zp{Xxeqr{01nzNlu`?Dz9F@)pGD>ZkiTw0nY;Pww3RG;XmE zx89z!0*on;$0?-6#PM9yrHQY<;V-xn7YxK(+zVG+ne$it!V|i00QkIn!!JH8;}1A4 zK@Yde8%}pW$y+}^)ub1TC_Oc&&lc?+HGV!m;kWm!d#}qo%OwD=ay#{Kg)Skp15Q5E z3QomeaIfcVIBT>xz}keXJ;aWOMhS>-$~4Jn(>m>-0TXjtNztY>5}&@xnpzs{6l6bX zCk@Dl|{R$V3q4EWVuKz2j%k7eRY_m=neN#0qvLk1v?v z%=s0gKnU#{Q#trjxSIHWII#={<-lCwpv8WP=t3W{#fN8(5->E!YrT-pTL2(}Zhc6#5r{^KoTTPSeY_oC1|S2bz_dw8Ji?s-AFGWLb$Mkn#KmQ za+X}M-YP=Kg0N%}DWX!Pi4`unNGU~&=P6UxtfEC#t2VXDHCL&nYOS?ZYpF5Pn1oiE zw%S@VgHp=|S%&e3j-ERA+@+VUz4q2^Abdt1GRn|VM;kWN-=@8}P^n*2Yt3E`KrxS6`z*x!z z#?=`>KzpVKUzBrl=A5(G5(j2Uuu`0yNzND;%!`t2dUE%{+<)>GfbNg-mcGSYaO!>s zbHSZnQF1zbF#doD-=g<+_ubJj&4#OK=Y;IDEkWrHZNfgDtt$JV)m0`u zz*AdQ$3oK6Nj*zig=lm87{uu5Gj3!gTVeY4Dz(Y<{D?HfvsfRkU<8?&$XX&@b4ey0 zy6|%AHND!puv(>rvFayadd-GPsZ`{(zG^q**fB)no-5|D&9U3?qFXd>5icD#7#R}K zrcvq9;{X8tjM_?>)>ODQ)`fQ-#)S-<%?T z(ps=2EhXA-Da3PUB=hN& z%`P2r}2a}L^4jo8@1so(GExuGCe;qK%x@{Pe2>XY>%HkJBAX)>IJG7gJR+iaAKTDb6o3HW9ipOF3t zLwwalM!zrOKE%fa#8)m0HQKnWxuv3Xb_H}rH$JNn*H~RA24w&A*YqD^_ip@z`gj5w>F9#zhL^Upe@zfS?v<_+E zX>4Tx0C=2zkv&MmKpe$iQ%glE3U&~2$WWau_=Px16^me@v=v%)FuC*#nlvOSE{=k0 z!NHHks)LKOt`4q(Aou~|}?mh0_0Yam~RI_UwP&La)#baVN zw<-o-5kNl#Odu#RQ%|H9Gw>W=_we!cF3PjK&;2=imAuISpGZ8%bi*RvAfDN@bk6(4 zVOEk9;&b9LgDyz?$aUG}H_ki6e@tQNECMS>e3J zS*_Gq>z@3Dp}e+|<~q$`#Ib|~k`N)IhB7L!5T#Wk#YBqsV;=q?$DbsZOs+B*ITlcb z3d!+<|H1EW&BD~An-q!xffw8U7y*L2K(lV!-^aGyJOTXAz?IhaR~x|WC+YRJ7C8d? zwt3=9ghi*@Pvn5K>}j~j?(LmJ0KmulLpbmXj%1bzRx4#39OZdF?72L@ zd(8p>j(1Pca4xwcoo*i&}Kcpm_e zRUbjACx{GtZs<}05b{s}NVFG?If6k7P4zReoxt%-59C;f(edl|l z_1%V(=@^vGez%$q0KhN_r=Cp5!km}q`ND;~&c_a1alAi|-3OSsBCEnKCzj1Ommjdz zbfnmwkQFH8br>drVG<~^%9o+lbOaG%*?bSMF$1@sYzaimXI4gyW8!RIQ0npje%y!* zlW@Dku1=BFIq|sdSX$+~APR&vm89Y;0|Y_*!Jv|e#|B7WNK$}*3GfA87sp`ux<=;! O0000 Date: Wed, 2 Sep 2020 01:16:13 +0200 Subject: [PATCH 066/103] Add IMechanism interface to body system (#1997) --- Content.Server/Body/BodyPart.cs | 22 ++-- Content.Server/Body/IBodyPart.cs | 14 +-- Content.Server/Body/Mechanisms/IMechanism.cs | 103 ++++++++++++++++++ Content.Server/Body/Mechanisms/Mechanism.cs | 100 +++++------------ .../Body/Surgery/BiologicalSurgeryData.cs | 10 +- Content.Server/Body/Surgery/ISurgeon.cs | 4 +- Content.Server/Body/Surgery/SurgeryData.cs | 4 +- .../Body/DroppedMechanismComponent.cs | 4 +- .../Components/Body/SurgeryToolComponent.cs | 18 +-- 9 files changed, 162 insertions(+), 117 deletions(-) create mode 100644 Content.Server/Body/Mechanisms/IMechanism.cs diff --git a/Content.Server/Body/BodyPart.cs b/Content.Server/Body/BodyPart.cs index acd984af53..b176118af4 100644 --- a/Content.Server/Body/BodyPart.cs +++ b/Content.Server/Body/BodyPart.cs @@ -36,7 +36,7 @@ namespace Content.Server.Body { private IBodyManagerComponent? _body; - private readonly HashSet _mechanisms = new HashSet(); + private readonly HashSet _mechanisms = new HashSet(); public BodyPart(BodyPartPrototype data) { @@ -146,11 +146,11 @@ namespace Content.Server.Body public BodyPartCompatibility Compatibility { get; private set; } /// - /// Set of all currently inside this + /// Set of all currently inside this /// . /// [ViewVariables] - public IReadOnlyCollection Mechanisms => _mechanisms; + public IReadOnlyCollection Mechanisms => _mechanisms; /// /// This method is called by @@ -258,7 +258,7 @@ namespace Content.Server.Body return SurgeryData.CanAttachBodyPart(part); } - public bool CanInstallMechanism(Mechanism mechanism) + public bool CanInstallMechanism(IMechanism mechanism) { return SizeUsed + mechanism.Size <= Size && SurgeryData.CanInstallMechanism(mechanism); @@ -275,7 +275,7 @@ namespace Content.Server.Body /// True if successful, false if there was an error /// (e.g. not enough room in ). /// - private bool TryInstallMechanism(Mechanism mechanism) + private bool TryInstallMechanism(IMechanism mechanism) { if (!CanInstallMechanism(mechanism)) { @@ -308,7 +308,7 @@ namespace Content.Server.Body return true; } - public bool TryDropMechanism(IEntity dropLocation, Mechanism mechanismTarget, + public bool TryDropMechanism(IEntity dropLocation, IMechanism mechanismTarget, [NotNullWhen(true)] out DroppedMechanismComponent dropped) { dropped = null!; @@ -331,16 +331,16 @@ namespace Content.Server.Body } /// - /// Tries to destroy the given in this + /// Tries to destroy the given in this /// . Does NOT spawn a dropped entity. /// /// - /// Tries to destroy the given in this + /// Tries to destroy the given in this /// . /// /// The mechanism to destroy. /// True if successful, false otherwise. - public bool DestroyMechanism(Mechanism mechanismTarget) + public bool DestroyMechanism(IMechanism mechanismTarget) { if (!RemoveMechanism(mechanismTarget)) { @@ -365,7 +365,7 @@ namespace Content.Server.Body return SurgeryData.PerformSurgery(toolType, target, surgeon, performer); } - private void AddMechanism(Mechanism mechanism) + private void AddMechanism(IMechanism mechanism) { DebugTools.AssertNotNull(mechanism); @@ -402,7 +402,7 @@ namespace Content.Server.Body /// /// The mechanism to remove. /// True if it was removed, false otherwise. - private bool RemoveMechanism(Mechanism mechanism) + private bool RemoveMechanism(IMechanism mechanism) { DebugTools.AssertNotNull(mechanism); diff --git a/Content.Server/Body/IBodyPart.cs b/Content.Server/Body/IBodyPart.cs index 12859fcdf7..19d1ae9123 100644 --- a/Content.Server/Body/IBodyPart.cs +++ b/Content.Server/Body/IBodyPart.cs @@ -54,12 +54,12 @@ namespace Content.Server.Body int CurrentDurability { get; } /// - /// Collection of all s currently inside this + /// Collection of all s currently inside this /// . /// To add and remove from this list see and /// /// - IReadOnlyCollection Mechanisms { get; } + IReadOnlyCollection Mechanisms { get; } /// /// Path to the RSI that represents this . @@ -109,23 +109,23 @@ namespace Content.Server.Body bool CanAttachPart(IBodyPart part); /// - /// Checks if a can be installed on this + /// Checks if a can be installed on this /// . /// /// True if it can be installed, false otherwise. - bool CanInstallMechanism(Mechanism mechanism); + bool CanInstallMechanism(IMechanism mechanism); /// - /// Tries to remove the given reference from + /// Tries to remove the given reference from /// this . /// /// /// The newly spawned , or null /// if there was an error in spawning the entity or removing the mechanism. /// - bool TryDropMechanism(IEntity dropLocation, Mechanism mechanismTarget, + bool TryDropMechanism(IEntity dropLocation, IMechanism mechanismTarget, [NotNullWhen(true)] out DroppedMechanismComponent dropped); - bool DestroyMechanism(Mechanism mechanism); + bool DestroyMechanism(IMechanism mechanism); } } diff --git a/Content.Server/Body/Mechanisms/IMechanism.cs b/Content.Server/Body/Mechanisms/IMechanism.cs new file mode 100644 index 0000000000..9037c0f4e9 --- /dev/null +++ b/Content.Server/Body/Mechanisms/IMechanism.cs @@ -0,0 +1,103 @@ +#nullable enable +using System.Collections.Generic; +using Content.Server.Body.Mechanisms.Behaviors; +using Content.Server.GameObjects.Components.Body; +using Content.Shared.GameObjects.Components.Body; + +namespace Content.Server.Body.Mechanisms +{ + public interface IMechanism + { + string Id { get; } + + string Name { get; set; } + + /// + /// Professional description of the . + /// + string Description { get; set; } + + /// + /// The message to display upon examining a mob with this Mechanism installed. + /// If the string is empty (""), no message will be displayed. + /// + string ExamineMessage { get; set; } + + // TODO: Make RSI properties sane + /// + /// Path to the RSI that represents this . + /// + string RSIPath { get; set; } + + /// + /// RSI state that represents this . + /// + string RSIState { get; set; } + + /// + /// Max HP of this . + /// + int MaxDurability { get; set; } + + /// + /// Current HP of this . + /// + int CurrentDurability { get; set; } + + /// + /// At what HP this is completely destroyed. + /// + int DestroyThreshold { get; set; } + + /// + /// Armor of this against attacks. + /// + int Resistance { get; set; } + + /// + /// Determines a handful of things - mostly whether this + /// can fit into a . + /// + // TODO: OnSizeChanged + int Size { get; set; } + + /// + /// What kind of this can be + /// easily installed into. + /// + BodyPartCompatibility Compatibility { get; set; } + + IReadOnlyList Behaviors { get; } + + IBodyManagerComponent? Body { get; } + + IBodyPart? Part { get; set; } + + void EnsureInitialize(); + + void InstalledIntoBody(); + + void RemovedFromBody(IBodyManagerComponent old); + + /// + /// This method is called by before + /// is called. + /// + void PreMetabolism(float frameTime); + + /// + /// This method is called by after + /// is called. + /// + void PostMetabolism(float frameTime); + + void AddBehavior(MechanismBehavior behavior); + + /// + /// Removes a behavior from this mechanism. + /// + /// The behavior to remove. + /// True if it was removed, false otherwise. + bool RemoveBehavior(MechanismBehavior behavior); + } +} diff --git a/Content.Server/Body/Mechanisms/Mechanism.cs b/Content.Server/Body/Mechanisms/Mechanism.cs index 1dfaf0ee67..9b7a254155 100644 --- a/Content.Server/Body/Mechanisms/Mechanism.cs +++ b/Content.Server/Body/Mechanisms/Mechanism.cs @@ -16,7 +16,7 @@ namespace Content.Server.Body.Mechanisms /// This includes livers, eyes, cameras, brains, explosive implants, /// binary communicators, and other things. /// - public class Mechanism + public class Mechanism : IMechanism { private IBodyPart? _part; @@ -29,7 +29,7 @@ namespace Content.Server.Body.Mechanisms ExamineMessage = null!; RSIPath = null!; RSIState = null!; - Behaviors = new List(); + _behaviors = new List(); } [ViewVariables] private bool Initialized { get; set; } @@ -40,74 +40,29 @@ namespace Content.Server.Body.Mechanisms [ViewVariables] public string Name { get; set; } - /// - /// Professional description of the . - /// - [ViewVariables] - public string Description { get; set; } + [ViewVariables] public string Description { get; set; } - /// - /// The message to display upon examining a mob with this Mechanism installed. - /// If the string is empty (""), no message will be displayed. - /// - [ViewVariables] - public string ExamineMessage { get; set; } + [ViewVariables] public string ExamineMessage { get; set; } - /// - /// Path to the RSI that represents this . - /// - [ViewVariables] - public string RSIPath { get; set; } + [ViewVariables] public string RSIPath { get; set; } - /// - /// RSI state that represents this . - /// - [ViewVariables] - public string RSIState { get; set; } + [ViewVariables] public string RSIState { get; set; } - /// - /// Max HP of this . - /// - [ViewVariables] - public int MaxDurability { get; set; } + [ViewVariables] public int MaxDurability { get; set; } - /// - /// Current HP of this . - /// - [ViewVariables] - public int CurrentDurability { get; set; } + [ViewVariables] public int CurrentDurability { get; set; } - /// - /// At what HP this is completely destroyed. - /// - [ViewVariables] - public int DestroyThreshold { get; set; } + [ViewVariables] public int DestroyThreshold { get; set; } - /// - /// Armor of this against attacks. - /// - [ViewVariables] - public int Resistance { get; set; } + [ViewVariables] public int Resistance { get; set; } - /// - /// Determines a handful of things - mostly whether this - /// can fit into a . - /// - [ViewVariables] - public int Size { get; set; } + [ViewVariables] public int Size { get; set; } - /// - /// What kind of this can be - /// easily installed into. - /// - [ViewVariables] - public BodyPartCompatibility Compatibility { get; set; } + [ViewVariables] public BodyPartCompatibility Compatibility { get; set; } - /// - /// The behaviors that this performs. - /// - [ViewVariables] - private List Behaviors { get; } + private readonly List _behaviors; + + [ViewVariables] public IReadOnlyList Behaviors => _behaviors; public IBodyManagerComponent? Body => Part?.Body; @@ -167,7 +122,7 @@ namespace Content.Server.Body.Mechanisms Size = data.Size; Compatibility = data.Compatibility; - foreach (var behavior in Behaviors.ToArray()) + foreach (var behavior in _behaviors.ToArray()) { RemoveBehavior(behavior); } @@ -210,10 +165,6 @@ namespace Content.Server.Body.Mechanisms } } - /// - /// This method is called by before - /// is called. - /// public void PreMetabolism(float frameTime) { foreach (var behavior in Behaviors) @@ -222,10 +173,6 @@ namespace Content.Server.Body.Mechanisms } } - /// - /// This method is called by after - /// is called. - /// public void PostMetabolism(float frameTime) { foreach (var behavior in Behaviors) @@ -234,16 +181,21 @@ namespace Content.Server.Body.Mechanisms } } - private void AddBehavior(MechanismBehavior behavior) + public void AddBehavior(MechanismBehavior behavior) { - Behaviors.Add(behavior); + _behaviors.Add(behavior); behavior.Initialize(this); } - private bool RemoveBehavior(MechanismBehavior behavior) + public bool RemoveBehavior(MechanismBehavior behavior) { - behavior.Remove(); - return Behaviors.Remove(behavior); + if (_behaviors.Remove(behavior)) + { + behavior.Remove(); + return true; + } + + return false; } } } diff --git a/Content.Server/Body/Surgery/BiologicalSurgeryData.cs b/Content.Server/Body/Surgery/BiologicalSurgeryData.cs index fb8769f116..30cbd2a56b 100644 --- a/Content.Server/Body/Surgery/BiologicalSurgeryData.cs +++ b/Content.Server/Body/Surgery/BiologicalSurgeryData.cs @@ -17,7 +17,7 @@ namespace Content.Server.Body.Surgery [UsedImplicitly] public class BiologicalSurgeryData : SurgeryData { - private readonly List _disconnectedOrgans = new List(); + private readonly List _disconnectedOrgans = new List(); private bool _skinOpened; private bool _skinRetracted; @@ -118,7 +118,7 @@ namespace Content.Server.Body.Surgery return toReturn; } - public override bool CanInstallMechanism(Mechanism mechanism) + public override bool CanInstallMechanism(IMechanism mechanism) { return _skinOpened && _vesselsClamped && _skinRetracted; } @@ -170,7 +170,7 @@ namespace Content.Server.Body.Surgery return; } - var toSend = new List(); + var toSend = new List(); foreach (var mechanism in Parent.Mechanisms) { if (!_disconnectedOrgans.Contains(mechanism)) @@ -185,7 +185,7 @@ namespace Content.Server.Body.Surgery } } - private void LoosenOrganSurgeryCallback(Mechanism target, IBodyPartContainer container, ISurgeon surgeon, + private void LoosenOrganSurgeryCallback(IMechanism target, IBodyPartContainer container, ISurgeon surgeon, IEntity performer) { if (target == null || !Parent.Mechanisms.Contains(target)) @@ -216,7 +216,7 @@ namespace Content.Server.Body.Surgery } } - private void RemoveOrganSurgeryCallback(Mechanism target, IBodyPartContainer container, ISurgeon surgeon, + private void RemoveOrganSurgeryCallback(IMechanism target, IBodyPartContainer container, ISurgeon surgeon, IEntity performer) { if (target == null || !Parent.Mechanisms.Contains(target)) diff --git a/Content.Server/Body/Surgery/ISurgeon.cs b/Content.Server/Body/Surgery/ISurgeon.cs index be2ed1135c..b15a2ae112 100644 --- a/Content.Server/Body/Surgery/ISurgeon.cs +++ b/Content.Server/Body/Surgery/ISurgeon.cs @@ -13,7 +13,7 @@ namespace Content.Server.Body.Surgery public interface ISurgeon { public delegate void MechanismRequestCallback( - Mechanism target, + IMechanism target, IBodyPartContainer container, ISurgeon surgeon, IEntity performer); @@ -29,6 +29,6 @@ namespace Content.Server.Body.Surgery /// This function is called in that scenario, and it is expected that you call the callback with one mechanism from the /// provided list. /// - public void RequestMechanism(IEnumerable options, MechanismRequestCallback callback); + public void RequestMechanism(IEnumerable options, MechanismRequestCallback callback); } } diff --git a/Content.Server/Body/Surgery/SurgeryData.cs b/Content.Server/Body/Surgery/SurgeryData.cs index 48b7d265da..1a0eec454f 100644 --- a/Content.Server/Body/Surgery/SurgeryData.cs +++ b/Content.Server/Body/Surgery/SurgeryData.cs @@ -38,10 +38,10 @@ namespace Content.Server.Body.Surgery public abstract string GetDescription(IEntity target); /// - /// Returns whether a can be installed into the + /// Returns whether a can be installed into the /// this represents. /// - public abstract bool CanInstallMechanism(Mechanism mechanism); + public abstract bool CanInstallMechanism(IMechanism mechanism); /// /// Returns whether the given can be connected to the diff --git a/Content.Server/GameObjects/Components/Body/DroppedMechanismComponent.cs b/Content.Server/GameObjects/Components/Body/DroppedMechanismComponent.cs index bc79929d38..4c16cc9b7d 100644 --- a/Content.Server/GameObjects/Components/Body/DroppedMechanismComponent.cs +++ b/Content.Server/GameObjects/Components/Body/DroppedMechanismComponent.cs @@ -40,7 +40,7 @@ namespace Content.Server.GameObjects.Components.Body private IEntity? _performerCache; - [ViewVariables] public Mechanism ContainedMechanism { get; private set; } = default!; + [ViewVariables] public IMechanism ContainedMechanism { get; private set; } = default!; [ViewVariables] private BoundUserInterface? UserInterface => Owner.GetUIOrNull(GenericSurgeryUiKey.Key); @@ -81,7 +81,7 @@ namespace Content.Server.GameObjects.Components.Body } } - public void InitializeDroppedMechanism(Mechanism data) + public void InitializeDroppedMechanism(IMechanism data) { ContainedMechanism = data; Owner.Name = Loc.GetString(ContainedMechanism.Name); diff --git a/Content.Server/GameObjects/Components/Body/SurgeryToolComponent.cs b/Content.Server/GameObjects/Components/Body/SurgeryToolComponent.cs index 35057f7381..0a5d5136f7 100644 --- a/Content.Server/GameObjects/Components/Body/SurgeryToolComponent.cs +++ b/Content.Server/GameObjects/Components/Body/SurgeryToolComponent.cs @@ -128,7 +128,7 @@ namespace Content.Server.GameObjects.Components.Body public float BaseOperationTime { get => _baseOperateTime; set => _baseOperateTime = value; } - public void RequestMechanism(IEnumerable options, ISurgeon.MechanismRequestCallback callback) + public void RequestMechanism(IEnumerable options, ISurgeon.MechanismRequestCallback callback) { var toSend = new Dictionary(); foreach (var mechanism in options) @@ -230,7 +230,7 @@ namespace Content.Server.GameObjects.Components.Body /// /// Called after the client chooses from a list of possible - /// to choose from. + /// to choose from. /// private void HandleReceiveMechanism(int key) { @@ -251,23 +251,13 @@ namespace Content.Server.GameObjects.Components.Body private void SendNoUsefulWayToUsePopup() { - if (_bodyManagerComponentCache == null) - { - return; - } - - _bodyManagerComponentCache.Owner.PopupMessage(_performerCache, + _bodyManagerComponentCache?.Owner.PopupMessage(_performerCache, Loc.GetString("You see no useful way to use {0:theName}.", Owner)); } private void SendNoUsefulWayToUseAnymorePopup() { - if (_bodyManagerComponentCache == null) - { - return; - } - - _bodyManagerComponentCache.Owner.PopupMessage(_performerCache, + _bodyManagerComponentCache?.Owner.PopupMessage(_performerCache, Loc.GetString("You see no useful way to use {0:theName} anymore.", Owner)); } From 61f64e15f20016ddafc9967db993cbd0fea52cb5 Mon Sep 17 00:00:00 2001 From: DrSmugleaf Date: Wed, 2 Sep 2020 01:16:25 +0200 Subject: [PATCH 067/103] Add extensions for spilling solutions into puddles (#1991) --- .../Components/Chemistry/VaporComponent.cs | 2 +- .../Components/Fluids/CanSpillComponent.cs | 2 +- .../Components/Fluids/MopComponent.cs | 4 +- .../Components/Fluids/SpillExtensions.cs | 128 ++++++++++++++++++ .../Components/Fluids/SpillHelper.cs | 94 ------------- .../Components/Nutrition/DrinkComponent.cs | 2 +- 6 files changed, 133 insertions(+), 99 deletions(-) create mode 100644 Content.Server/GameObjects/Components/Fluids/SpillExtensions.cs delete mode 100644 Content.Server/GameObjects/Components/Fluids/SpillHelper.cs diff --git a/Content.Server/GameObjects/Components/Chemistry/VaporComponent.cs b/Content.Server/GameObjects/Components/Chemistry/VaporComponent.cs index ace097cce5..31734a5924 100644 --- a/Content.Server/GameObjects/Components/Chemistry/VaporComponent.cs +++ b/Content.Server/GameObjects/Components/Chemistry/VaporComponent.cs @@ -76,7 +76,7 @@ namespace Content.Server.GameObjects.Components.Chemistry foreach (var tile in tiles) { var pos = tile.GridIndices.ToGridCoordinates(_mapManager, tile.GridIndex); - SpillHelper.SpillAt(pos, contents.SplitSolution(amount), "PuddleSmear", false); //make non PuddleSmear? + contents.SplitSolution(amount).SpillAt(pos, "PuddleSmear", false); // TODO: Make non PuddleSmear? } } diff --git a/Content.Server/GameObjects/Components/Fluids/CanSpillComponent.cs b/Content.Server/GameObjects/Components/Fluids/CanSpillComponent.cs index 1eb779557b..b14063b7a4 100644 --- a/Content.Server/GameObjects/Components/Fluids/CanSpillComponent.cs +++ b/Content.Server/GameObjects/Components/Fluids/CanSpillComponent.cs @@ -41,7 +41,7 @@ namespace Content.Server.GameObjects.Components.Fluids // Need this as when we split the component's owner may be deleted var entityLocation = component.Owner.Transform.GridPosition; var solution = solutionComponent.SplitSolution(solutionComponent.CurrentVolume); - SpillHelper.SpillAt(entityLocation, solution, "PuddleSmear"); + solution.SpillAt(entityLocation, "PuddleSmear"); } } } diff --git a/Content.Server/GameObjects/Components/Fluids/MopComponent.cs b/Content.Server/GameObjects/Components/Fluids/MopComponent.cs index 907c1d3a48..857b53399d 100644 --- a/Content.Server/GameObjects/Components/Fluids/MopComponent.cs +++ b/Content.Server/GameObjects/Components/Fluids/MopComponent.cs @@ -80,7 +80,7 @@ namespace Content.Server.GameObjects.Components.Fluids if (eventArgs.Target == null) { // Drop the liquid on the mop on to the ground - SpillHelper.SpillAt(eventArgs.ClickLocation, contents.SplitSolution(CurrentVolume), "PuddleSmear"); + contents.SplitSolution(CurrentVolume).SpillAt(eventArgs.ClickLocation, "PuddleSmear"); return; } @@ -116,7 +116,7 @@ namespace Content.Server.GameObjects.Components.Fluids if (puddleCleaned) //After cleaning the puddle, make a new puddle with solution from the mop as a "wet floor". Then evaporate it slowly. { - SpillHelper.SpillAt(eventArgs.ClickLocation, contents.SplitSolution(transferAmount), "PuddleSmear"); + contents.SplitSolution(transferAmount).SpillAt(eventArgs.ClickLocation, "PuddleSmear"); } else { diff --git a/Content.Server/GameObjects/Components/Fluids/SpillExtensions.cs b/Content.Server/GameObjects/Components/Fluids/SpillExtensions.cs new file mode 100644 index 0000000000..5f9c45580f --- /dev/null +++ b/Content.Server/GameObjects/Components/Fluids/SpillExtensions.cs @@ -0,0 +1,128 @@ +#nullable enable +using System.Diagnostics.CodeAnalysis; +using Content.Shared.Chemistry; +using Robust.Server.Interfaces.GameObjects; +using Robust.Shared.Interfaces.GameObjects; +using Robust.Shared.Interfaces.Map; +using Robust.Shared.IoC; +using Robust.Shared.Map; + +namespace Content.Server.GameObjects.Components.Fluids +{ + public static class SpillExtensions + { + /// + /// Spills the specified solution at the entity's location if possible. + /// + /// + /// The entity to use as a location to spill the solution at. + /// + /// Initial solution for the prototype. + /// The prototype to use. + /// Play the spill sound. + /// The puddle if one was created, null otherwise. + public static PuddleComponent? SpillAt(this Solution solution, IEntity entity, string prototype, bool sound = true) + { + var coordinates = entity.Transform.GridPosition; + return solution.SpillAt(coordinates, prototype, sound); + } + + /// + /// Spills the specified solution at the entity's location if possible. + /// + /// + /// The entity to use as a location to spill the solution at. + /// + /// Initial solution for the prototype. + /// The prototype to use. + /// The puddle if one was created, null otherwise. + /// Play the spill sound. + /// True if a puddle was created, false otherwise. + public static bool TrySpillAt(this Solution solution, IEntity entity, string prototype, [NotNullWhen(true)] out PuddleComponent? puddle, bool sound = true) + { + puddle = solution.SpillAt(entity, prototype, sound); + return puddle != null; + } + + /// + /// Spills solution at the specified grid coordinates. + /// + /// Initial solution for the prototype. + /// The coordinates to spill the solution at. + /// The prototype to use. + /// Whether or not to play the spill sound. + /// The puddle if one was created, null otherwise. + public static PuddleComponent? SpillAt(this Solution solution, GridCoordinates coordinates, string prototype, bool sound = true) + { + if (solution.TotalVolume == 0) + { + return null; + } + + var mapManager = IoCManager.Resolve(); + var entityManager = IoCManager.Resolve(); + var serverEntityManager = IoCManager.Resolve(); + + var mapGrid = mapManager.GetGrid(coordinates.GridID); + + // If space return early, let that spill go out into the void + var tileRef = mapGrid.GetTileRef(coordinates); + if (tileRef.Tile.IsEmpty) + { + return null; + } + + // Get normalized co-ordinate for spill location and spill it in the centre + // TODO: Does SnapGrid or something else already do this? + var spillTileMapGrid = mapManager.GetGrid(coordinates.GridID); + var spillTileRef = spillTileMapGrid.GetTileRef(coordinates).GridIndices; + var spillGridCoords = spillTileMapGrid.GridTileToLocal(spillTileRef); + + var spilt = false; + + foreach (var spillEntity in entityManager.GetEntitiesAt(spillTileMapGrid.ParentMapId, spillGridCoords.Position)) + { + if (!spillEntity.TryGetComponent(out PuddleComponent? puddleComponent)) + { + continue; + } + + if (!puddleComponent.TryAddSolution(solution, sound)) + { + continue; + } + + spilt = true; + break; + } + + // Did we add to an existing puddle + if (spilt) + { + return null; + } + + var puddle = serverEntityManager.SpawnEntity(prototype, spillGridCoords); + var newPuddleComponent = puddle.GetComponent(); + + newPuddleComponent.TryAddSolution(solution, sound); + + return newPuddleComponent; + } + + /// + /// Spills the specified solution at the entity's location if possible. + /// + /// The coordinates to spill the solution at. + /// Initial solution for the prototype. + /// The prototype to use. + /// The puddle if one was created, null otherwise. + /// Play the spill sound. + /// True if a puddle was created, false otherwise. + public static bool TrySpillAt(this Solution solution, GridCoordinates coordinates, string prototype, [NotNullWhen(true)] out PuddleComponent? puddle, bool sound = true) + { + puddle = solution.SpillAt(coordinates, prototype, sound); + return puddle != null; + } + } +} diff --git a/Content.Server/GameObjects/Components/Fluids/SpillHelper.cs b/Content.Server/GameObjects/Components/Fluids/SpillHelper.cs deleted file mode 100644 index e616a7f5f0..0000000000 --- a/Content.Server/GameObjects/Components/Fluids/SpillHelper.cs +++ /dev/null @@ -1,94 +0,0 @@ -#nullable enable -using Content.Shared.Chemistry; -using Robust.Server.Interfaces.GameObjects; -using Robust.Shared.Interfaces.GameObjects; -using Robust.Shared.Interfaces.Map; -using Robust.Shared.IoC; -using Robust.Shared.Map; - -namespace Content.Server.GameObjects.Components.Fluids -{ - public static class SpillHelper - { - - /// - /// Spills the specified solution at the entity's location if possible. - /// - /// Entity location to spill at - /// Initial solution for the prototype - /// Prototype to use - /// Play the spill sound - internal static void SpillAt(IEntity entity, Solution solution, string prototype, bool sound = true) - { - var entityLocation = entity.Transform.GridPosition; - SpillAt(entityLocation, solution, prototype, sound); - } - - // Other functions will be calling this one - - /// - /// Spills solution at the specified grid co-ordinates - /// - /// - /// Initial solution for the prototype - /// Prototype to use - /// Play the spill sound - internal static PuddleComponent? SpillAt(GridCoordinates gridCoordinates, Solution solution, string prototype, bool sound = true) - { - if (solution.TotalVolume == 0) - { - return null; - } - - var mapManager = IoCManager.Resolve(); - var entityManager = IoCManager.Resolve(); - var serverEntityManager = IoCManager.Resolve(); - - var mapGrid = mapManager.GetGrid(gridCoordinates.GridID); - - // If space return early, let that spill go out into the void - var tileRef = mapGrid.GetTileRef(gridCoordinates); - if (tileRef.Tile.IsEmpty) - { - return null; - } - - // Get normalized co-ordinate for spill location and spill it in the centre - // TODO: Does SnapGrid or something else already do this? - var spillTileMapGrid = mapManager.GetGrid(gridCoordinates.GridID); - var spillTileRef = spillTileMapGrid.GetTileRef(gridCoordinates).GridIndices; - var spillGridCoords = spillTileMapGrid.GridTileToLocal(spillTileRef); - - var spilt = false; - - foreach (var spillEntity in entityManager.GetEntitiesAt(spillTileMapGrid.ParentMapId, spillGridCoords.Position)) - { - if (!spillEntity.TryGetComponent(out PuddleComponent? puddleComponent)) - { - continue; - } - - if (!puddleComponent.TryAddSolution(solution, sound)) - { - continue; - } - - spilt = true; - break; - } - - // Did we add to an existing puddle - if (spilt) - { - return null; - } - - var puddle = serverEntityManager.SpawnEntity(prototype, spillGridCoords); - var newPuddleComponent = puddle.GetComponent(); - newPuddleComponent.TryAddSolution(solution, sound); - return newPuddleComponent; - } - - } - -} diff --git a/Content.Server/GameObjects/Components/Nutrition/DrinkComponent.cs b/Content.Server/GameObjects/Components/Nutrition/DrinkComponent.cs index 194f671221..3a317ec1d4 100644 --- a/Content.Server/GameObjects/Components/Nutrition/DrinkComponent.cs +++ b/Content.Server/GameObjects/Components/Nutrition/DrinkComponent.cs @@ -172,7 +172,7 @@ namespace Content.Server.GameObjects.Components.Nutrition Opened = true; var solution = component.SplitSolution(component.CurrentVolume); - SpillHelper.SpillAt(Owner, solution, "PuddleSmear"); + solution.SpillAt(Owner, "PuddleSmear"); EntitySystem.Get().PlayFromEntity(_burstSound, Owner, AudioParams.Default.WithVolume(-4)); From b132a4c2d9b7344f494d90e0f84ba1d2c54ac45a Mon Sep 17 00:00:00 2001 From: DrSmugleaf Date: Wed, 2 Sep 2020 01:16:42 +0200 Subject: [PATCH 068/103] Add a test to check that maps are not saved postmapinit (#1987) --- Content.IntegrationTests/Tests/EntityTest.cs | 1 - .../Tests/PostMapInitTest.cs | 60 +++++++++++++++++++ 2 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 Content.IntegrationTests/Tests/PostMapInitTest.cs diff --git a/Content.IntegrationTests/Tests/EntityTest.cs b/Content.IntegrationTests/Tests/EntityTest.cs index 958621c562..1409b8029f 100644 --- a/Content.IntegrationTests/Tests/EntityTest.cs +++ b/Content.IntegrationTests/Tests/EntityTest.cs @@ -3,7 +3,6 @@ using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using NUnit.Framework; -using Robust.Server.Interfaces.Maps; using Robust.Server.Interfaces.Timing; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; diff --git a/Content.IntegrationTests/Tests/PostMapInitTest.cs b/Content.IntegrationTests/Tests/PostMapInitTest.cs new file mode 100644 index 0000000000..e29926951e --- /dev/null +++ b/Content.IntegrationTests/Tests/PostMapInitTest.cs @@ -0,0 +1,60 @@ +using System.IO; +using System.Linq; +using System.Threading.Tasks; +using NUnit.Framework; +using Robust.Shared.Interfaces.Resources; +using Robust.Shared.Utility; +using YamlDotNet.RepresentationModel; + +namespace Content.IntegrationTests.Tests +{ + [TestFixture] + public class PostMapInitTest : ContentIntegrationTest + { + public readonly string[] SkippedMaps = + { + "/Maps/Pathfinding/simple.yml" + }; + + [Test] + public async Task NoSavedPostMapInitTest() + { + var server = StartServerDummyTicker(); + + await server.WaitIdleAsync(); + + var resourceManager = server.ResolveDependency(); + var mapFolder = new ResourcePath("/Maps"); + var maps = resourceManager + .ContentFindFiles(mapFolder) + .Where(filePath => filePath.Extension == "yml" && !filePath.Filename.StartsWith(".")) + .ToArray(); + + foreach (var map in maps) + { + var rootedPath = map.ToRootedPath(); + + if (SkippedMaps.Contains(rootedPath.ToString())) + { + continue; + } + + if (!resourceManager.TryContentFileRead(rootedPath, out var fileStream)) + { + Assert.Fail($"Map not found: {rootedPath}"); + } + + using var reader = new StreamReader(fileStream); + var yamlStream = new YamlStream(); + + yamlStream.Load(reader); + + var root = yamlStream.Documents[0].RootNode; + var meta = root["meta"]; + var postMapInit = meta["postmapinit"].AsBool(); + + Assert.False(postMapInit); + } + } + } +} From 538eac8a155cce91b16d646fb400509101865f0b Mon Sep 17 00:00:00 2001 From: Swept Date: Tue, 1 Sep 2020 23:18:18 +0000 Subject: [PATCH 069/103] Adds random spawners for toys (#1979) --- .../Entities/Effects/Markers/toy_spawner.yml | 80 ++++++++++++++++++ .../Interface/Misc/markers.rsi/meta.json | 20 ++++- .../Misc/markers.rsi/spawner_figure.png | Bin 0 -> 672 bytes .../Misc/markers.rsi/spawner_toy.png | Bin 0 -> 840 bytes 4 files changed, 99 insertions(+), 1 deletion(-) create mode 100644 Resources/Prototypes/Entities/Effects/Markers/toy_spawner.yml create mode 100644 Resources/Textures/Interface/Misc/markers.rsi/spawner_figure.png create mode 100644 Resources/Textures/Interface/Misc/markers.rsi/spawner_toy.png diff --git a/Resources/Prototypes/Entities/Effects/Markers/toy_spawner.yml b/Resources/Prototypes/Entities/Effects/Markers/toy_spawner.yml new file mode 100644 index 0000000000..3fb752e38c --- /dev/null +++ b/Resources/Prototypes/Entities/Effects/Markers/toy_spawner.yml @@ -0,0 +1,80 @@ +- type: entity + name: Toy Spawner + id: ToySpawner + components: + - type: Sprite + netsync: false + visible: false + sprite: Interface/Misc/markers.rsi + state: spawner_toy + - type: Icon + sprite: Interface/Misc/markers.rsi + state: spawner_toy + - type: Marker + - type: Clickable + - type: InteractionOutline + - type: Collidable + - type: TrashSpawner + rarePrototypes: + - CarvingHelpMe + - CarvingHello + - CarvingThankYou + - CarvingVeryGood + - CarvingImSorry + - FoamBlade + rareChance: 0.03 + prototypes: + - PlushieBee + - PlushieNuke + - PlushieLizard + - PlushieNar + - PlushieCarp + - PlushieSlime + - PlushieSnake + - ToyMouse + chance: 0.5 + offset: 0.2 + placement: + mode: AlignTileAny + +- type: entity + name: Figure Spawner + id: FigureSpawner + components: + - type: Sprite + netsync: false + visible: false + sprite: Interface/Misc/markers.rsi + state: spawner_figure + - type: Icon + sprite: Interface/Misc/markers.rsi + state: spawner_figure + - type: Marker + - type: Clickable + - type: InteractionOutline + - type: Collidable + - type: TrashSpawner + prototypes: + - ToyAi + - ToyNuke + - ToyAssistant + - ToyGriffin + - ToyHonk + - ToyIan + - ToyMarauder + - ToyMauler + - ToyGygax + - ToyOdysseus + - ToyOwlman + - ToyDeathRipley + - ToyPhazon + - ToyFireRipley + - ToyReticence + - ToyRipley + - ToySeraph + - ToyDurand + - ToySkeleton + chance: 0.5 + offset: 0.2 + placement: + mode: AlignTileAny diff --git a/Resources/Textures/Interface/Misc/markers.rsi/meta.json b/Resources/Textures/Interface/Misc/markers.rsi/meta.json index 3c58904297..0d8134ac63 100644 --- a/Resources/Textures/Interface/Misc/markers.rsi/meta.json +++ b/Resources/Textures/Interface/Misc/markers.rsi/meta.json @@ -528,6 +528,24 @@ 1.0 ] ] + }, + { + "name": "spawner_toy", + "directions": 1, + "delays": [ + [ + 1.0 + ] + ] + }, + { + "name": "spawner_figure", + "directions": 1, + "delays": [ + [ + 1.0 + ] + ] } ] -} \ No newline at end of file +} diff --git a/Resources/Textures/Interface/Misc/markers.rsi/spawner_figure.png b/Resources/Textures/Interface/Misc/markers.rsi/spawner_figure.png new file mode 100644 index 0000000000000000000000000000000000000000..ac87bd0a27d45f82772022dc59adbb8b0bd02715 GIT binary patch literal 672 zcmV;R0$=@!P)^DL!EOvjL6V{j zy&ZAz_=f;kJoEhriGhk@a8y)?GOROx4Jkn(QTHELn!u4zP%Q^x{#E=Ks$eM{Tb}wVG%!80K z5HY+6f^<5K(a}*`MD~%-xJrO4Lf3T~a^gJ$>#Ia1lS!dZqTxm&oAudK32;SZ#$w16 z#2?0AS7{wY1fLGmG=m9ve!kn%qpebMCWeSmMT2-dKR+*sP(`6dW~8M>9hjayc71y& zj9e~92!*x4aR1f-x>okm5^L|nrx{ZkF{yxBO|tidB6e{^oS9D1_TvjN-&9p&RcWa4ZwkU((+P$=Ibt~5Z@t8${ z<(rR;cbvSE-oE7z86aCkbSeJ#}NO=!%&%HgDj7bC-m&pYX8xm=NM zLP`M)Kgv)V5mKYT!?_)pcrbvuH)Z7<U}&Q_sa$P;)L83(}i$pbH6qnV2=+`XrCP(>RX}xEzc=ZYeJ$UeDJr zkVeCoQ)~S)!?+NXYs Date: Wed, 2 Sep 2020 01:23:43 +0200 Subject: [PATCH 070/103] Fix old use of item shuffling (#2001) --- .../GameObjects/Components/Chemistry/ChemMasterComponent.cs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Content.Server/GameObjects/Components/Chemistry/ChemMasterComponent.cs b/Content.Server/GameObjects/Components/Chemistry/ChemMasterComponent.cs index 52285bf67d..dc6bb8ae68 100644 --- a/Content.Server/GameObjects/Components/Chemistry/ChemMasterComponent.cs +++ b/Content.Server/GameObjects/Components/Chemistry/ChemMasterComponent.cs @@ -341,9 +341,7 @@ namespace Content.Server.GameObjects.Components.Chemistry //Put it on the floor pill.Transform.GridPosition = user.Transform.GridPosition; //Give it an offset - var x_negative = random.Prob(0.5f) ? -1 : 1; - var y_negative = random.Prob(0.5f) ? -1 : 1; - pill.Transform.LocalPosition += new Vector2(random.NextFloat() * 0.2f * x_negative, random.NextFloat() * 0.2f * y_negative); + pill.RandomOffset(0.2f); } } From 404460218708dabf5b7b7afd07bf2f0288371d6f Mon Sep 17 00:00:00 2001 From: ALMv1 <70581577+ALMv1@users.noreply.github.com> Date: Wed, 2 Sep 2020 01:29:47 +0200 Subject: [PATCH 071/103] Object Description Update For Prototypes (#1986) * Food Description Update * dice.yml Description Update * Minor drink_cans.yml Update * backpacks.yml Description Update --- Resources/Prototypes/Entities/Clothing/Back/backpacks.yml | 6 +++--- .../Prototypes/Entities/Objects/Consumable/drinks_cans.yml | 2 +- Resources/Prototypes/Entities/Objects/Consumable/food.yml | 6 +++--- Resources/Prototypes/Entities/Objects/Fun/dice.yml | 7 +++++++ 4 files changed, 14 insertions(+), 7 deletions(-) diff --git a/Resources/Prototypes/Entities/Clothing/Back/backpacks.yml b/Resources/Prototypes/Entities/Clothing/Back/backpacks.yml index 2b37556c7c..75ee53e73c 100644 --- a/Resources/Prototypes/Entities/Clothing/Back/backpacks.yml +++ b/Resources/Prototypes/Entities/Clothing/Back/backpacks.yml @@ -106,7 +106,7 @@ parent: BackpackClothing id: BackpackMime name: mime backpack - description: + description: A silent backpack made for those silent workers. Silence Co. components: - type: Sprite sprite: Clothing/Back/Backpacks/mime.rsi @@ -121,7 +121,7 @@ parent: BackpackClothing id: BackpackChemistry name: chemistry backpack - description: + description: A backpack specially designed to repel stains and hazardous liquids. components: - type: Sprite sprite: Clothing/Back/Backpacks/chemistry.rsi @@ -136,7 +136,7 @@ parent: BackpackClothing id: BackpackBotany name: botany backpack - description: + description: It's a backpack made of all-natural fibers. components: - type: Sprite sprite: Clothing/Back/Backpacks/botany.rsi diff --git a/Resources/Prototypes/Entities/Objects/Consumable/drinks_cans.yml b/Resources/Prototypes/Entities/Objects/Consumable/drinks_cans.yml index 98efe1543c..0723ed75d4 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/drinks_cans.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/drinks_cans.yml @@ -38,7 +38,7 @@ parent: DrinkCanBaseFull id: DrinkIceTeaCan name: ice tea can - description: '' + description: A can of refreshing ice tea. components: - type: Sprite sprite: Objects/Consumable/Drinks/ice_tea_can.rsi diff --git a/Resources/Prototypes/Entities/Objects/Consumable/food.yml b/Resources/Prototypes/Entities/Objects/Consumable/food.yml index 5a1c3e677e..77c33ed7b0 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/food.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/food.yml @@ -189,7 +189,7 @@ name: bread (slice) parent: FoodBase id: FoodBreadSlice - description: + description: A slice of bread. components: - type: Food trash: TrashPlate @@ -207,7 +207,7 @@ name: banana bread (slice) parent: FoodBase id: FoodBananaBreadSlice - description: + description: A slice of delicious banana bread. components: - type: Food trash: TrashPlate @@ -329,7 +329,7 @@ name: brain cake (slice) parent: FoodBase id: FoodBrainCakeSlice - description: '' + description: Braaains. components: - type: Food trash: TrashPlate diff --git a/Resources/Prototypes/Entities/Objects/Fun/dice.yml b/Resources/Prototypes/Entities/Objects/Fun/dice.yml index 75c6145c96..041f65a0c8 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/dice.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/dice.yml @@ -11,6 +11,7 @@ name: "d100" parent: BaseDice id: d100 + description: A die with one hundred sides! Probably not fairly weighted... components: - type: Dice sides: 100 @@ -26,6 +27,7 @@ name: "d20" parent: BaseDice id: d20 + description: A die with twenty sides. The preferred die to throw at the GM. components: - type: Dice sides: 20 @@ -40,6 +42,7 @@ name: "d12" parent: BaseDice id: d12 + description: A die with twelve sides. There's an air of neglect about it. components: - type: Dice sides: 12 @@ -54,6 +57,7 @@ name: "d10" parent: BaseDice id: d10 + description: A die with ten sides. Useful for percentages. components: - type: Dice sides: 10 @@ -68,6 +72,7 @@ name: "d8" parent: BaseDice id: d8 + description: A die with eight sides. It feels... lucky. components: - type: Dice sides: 8 @@ -82,6 +87,7 @@ name: "d6" parent: BaseDice id: d6 + description: A die with six sides. Basic and serviceable. components: - type: Dice sides: 6 @@ -96,6 +102,7 @@ name: "d4" parent: BaseDice id: d4 + description: A die with four sides. The nerd's caltrop. components: - type: Dice sides: 4 From de9dfefd6126b394618976d22734619775ad8012 Mon Sep 17 00:00:00 2001 From: DrSmugleaf Date: Wed, 2 Sep 2020 01:30:03 +0200 Subject: [PATCH 072/103] Replace resolve dependency with attribute in components (#1995) * Replace resolve dependency with attribute in components * Add changes that went missing in translation --- .../Components/Atmos/GridAtmosphereComponent.cs | 9 +++++---- .../Components/Chemistry/ChemMasterComponent.cs | 6 ------ .../Chemistry/ReagentDispenserComponent.cs | 5 +++-- .../Components/Fluids/PuddleComponent.cs | 8 ++++---- .../Items/Storage/EntityStorageComponent.cs | 10 ++++------ .../Items/Storage/Fill/CustodialClosetFill.cs | 1 - .../Components/Mobs/Speech/OwOAccentComponent.cs | 6 ++++-- .../Components/Movement/AiControllerComponent.cs | 15 +++++++++------ .../Components/Nutrition/HungerComponent.cs | 5 +++-- .../Components/Nutrition/ThirstComponent.cs | 5 +++-- .../ApcNetComponents/PowerProviderComponent.cs | 8 +++++--- .../ApcNetComponents/PowerReceiverComponent.cs | 9 ++++++--- .../Components/Projectiles/HitscanComponent.cs | 4 +++- .../GameObjects/Components/RadioComponent.cs | 4 ++-- .../Research/ProtolatheDatabaseComponent.cs | 6 +++--- .../Research/ResearchConsoleComponent.cs | 3 +-- .../StationEvents/RadiationPulseComponent.cs | 15 +++++++++------ .../VendingMachines/VendingMachineComponent.cs | 4 ++-- .../Components/Weapon/FlashableComponent.cs | 5 +++-- .../Weapon/Melee/MeleeWeaponComponent.cs | 5 +++-- .../Weapon/Ranged/Ammunition/AmmoComponent.cs | 4 +++- .../Ranged/Barrels/RevolverBarrelComponent.cs | 4 +++- .../Weapon/Ranged/ServerRangedWeaponComponent.cs | 10 +++++++--- 23 files changed, 85 insertions(+), 66 deletions(-) diff --git a/Content.Server/GameObjects/Components/Atmos/GridAtmosphereComponent.cs b/Content.Server/GameObjects/Components/Atmos/GridAtmosphereComponent.cs index 215243a877..4bca5b202e 100644 --- a/Content.Server/GameObjects/Components/Atmos/GridAtmosphereComponent.cs +++ b/Content.Server/GameObjects/Components/Atmos/GridAtmosphereComponent.cs @@ -32,6 +32,8 @@ namespace Content.Server.GameObjects.Components.Atmos public class GridAtmosphereComponent : Component, IGridAtmosphereComponent { [Robust.Shared.IoC.Dependency] private IMapManager _mapManager = default!; + [Robust.Shared.IoC.Dependency] private ITileDefinitionManager _tileDefinitionManager = default!; + [Robust.Shared.IoC.Dependency] private IServerEntityManager _serverEntityManager = default!; /// /// Check current execution time every n instances processed. @@ -162,14 +164,13 @@ namespace Content.Server.GameObjects.Components.Atmos var mapGrid = mapGridComponent.Grid; var tile = mapGrid.GetTileRef(indices).Tile; - var tileDefinitionManager = IoCManager.Resolve(); - var tileDef = (ContentTileDefinition)tileDefinitionManager[tile.TypeId]; + var tileDef = (ContentTileDefinition) _tileDefinitionManager[tile.TypeId]; - var underplating = tileDefinitionManager["underplating"]; + var underplating = _tileDefinitionManager["underplating"]; mapGrid.SetTile(indices, new Tile(underplating.TileId)); //Actually spawn the relevant tile item at the right position and give it some offset to the corner. - var tileItem = IoCManager.Resolve().SpawnEntity(tileDef.ItemDropPrototypeName, new GridCoordinates(indices.X, indices.Y, mapGrid)); + var tileItem = _serverEntityManager.SpawnEntity(tileDef.ItemDropPrototypeName, new GridCoordinates(indices.X, indices.Y, mapGrid)); tileItem.Transform.WorldPosition += (0.2f, 0.2f); } diff --git a/Content.Server/GameObjects/Components/Chemistry/ChemMasterComponent.cs b/Content.Server/GameObjects/Components/Chemistry/ChemMasterComponent.cs index dc6bb8ae68..e862d74b58 100644 --- a/Content.Server/GameObjects/Components/Chemistry/ChemMasterComponent.cs +++ b/Content.Server/GameObjects/Components/Chemistry/ChemMasterComponent.cs @@ -23,11 +23,7 @@ using Robust.Shared.Audio; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; -using Robust.Shared.Interfaces.Random; -using Robust.Shared.IoC; using Robust.Shared.Localization; -using Robust.Shared.Maths; -using Robust.Shared.Random; using Robust.Shared.Serialization; using Robust.Shared.ViewVariables; @@ -271,8 +267,6 @@ namespace Content.Server.GameObjects.Components.Chemistry private void TryCreatePackage(IEntity user, UiAction action, int pillAmount, int bottleAmount) { - var random = IoCManager.Resolve(); - if (BufferSolution.CurrentVolume == 0) return; diff --git a/Content.Server/GameObjects/Components/Chemistry/ReagentDispenserComponent.cs b/Content.Server/GameObjects/Components/Chemistry/ReagentDispenserComponent.cs index 24c29dfac2..86580bb399 100644 --- a/Content.Server/GameObjects/Components/Chemistry/ReagentDispenserComponent.cs +++ b/Content.Server/GameObjects/Components/Chemistry/ReagentDispenserComponent.cs @@ -40,6 +40,8 @@ namespace Content.Server.GameObjects.Components.Chemistry [ComponentReference(typeof(IInteractUsing))] public class ReagentDispenserComponent : SharedReagentDispenserComponent, IActivate, IInteractUsing, ISolutionChange { + [Dependency] private readonly IPrototypeManager _prototypeManager = default!; + [ViewVariables] private ContainerSlot _beakerContainer = default!; [ViewVariables] private string _packPrototypeId = ""; @@ -97,8 +99,7 @@ namespace Content.Server.GameObjects.Components.Chemistry { if (string.IsNullOrEmpty(_packPrototypeId)) return; - var prototypeManager = IoCManager.Resolve(); - if (!prototypeManager.TryIndex(_packPrototypeId, out ReagentDispenserInventoryPrototype packPrototype)) + if (!_prototypeManager.TryIndex(_packPrototypeId, out ReagentDispenserInventoryPrototype packPrototype)) { return; } diff --git a/Content.Server/GameObjects/Components/Fluids/PuddleComponent.cs b/Content.Server/GameObjects/Components/Fluids/PuddleComponent.cs index e2015f739c..7cc38996ec 100644 --- a/Content.Server/GameObjects/Components/Fluids/PuddleComponent.cs +++ b/Content.Server/GameObjects/Components/Fluids/PuddleComponent.cs @@ -49,6 +49,8 @@ namespace Content.Server.GameObjects.Components.Fluids // to check for low volumes for evaporation or whatever [Dependency] private readonly IMapManager _mapManager = default!; + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly IEntityManager _entityManager = default!; public override string Name => "Puddle"; @@ -134,8 +136,7 @@ namespace Content.Server.GameObjects.Components.Fluids // Random sprite state set server-side so it's consistent across all clients _spriteComponent = Owner.EnsureComponent(); - var robustRandom = IoCManager.Resolve(); - var randomVariant = robustRandom.Next(0, _spriteVariants - 1); + var randomVariant = _random.Next(0, _spriteVariants - 1); if (_spriteComponent.BaseRSIPath != null) { @@ -388,8 +389,7 @@ namespace Content.Server.GameObjects.Components.Fluids if (puddle == default) { var grid = _snapGrid.DirectionToGrid(direction); - var entityManager = IoCManager.Resolve(); - puddle = () => entityManager.SpawnEntity(Owner.Prototype.ID, grid).GetComponent(); + puddle = () => _entityManager.SpawnEntity(Owner.Prototype.ID, grid).GetComponent(); } return true; diff --git a/Content.Server/GameObjects/Components/Items/Storage/EntityStorageComponent.cs b/Content.Server/GameObjects/Components/Items/Storage/EntityStorageComponent.cs index 6bbdacca5e..2e319fa31b 100644 --- a/Content.Server/GameObjects/Components/Items/Storage/EntityStorageComponent.cs +++ b/Content.Server/GameObjects/Components/Items/Storage/EntityStorageComponent.cs @@ -4,10 +4,7 @@ using System.Threading.Tasks; using Content.Server.GameObjects.Components.Body; using Content.Server.GameObjects.Components.GUI; using Content.Server.GameObjects.Components.Interactable; -using Content.Server.GameObjects.Components.Mobs; -using Content.Server.GameObjects.EntitySystems; using Content.Shared.GameObjects.Components.Interactable; -using Content.Shared.GameObjects.Components.Mobs; using Content.Shared.GameObjects.Components.Storage; using Content.Shared.GameObjects.EntitySystems; using Content.Shared.GameObjects.Verbs; @@ -35,6 +32,8 @@ namespace Content.Server.GameObjects.Components.Items.Storage [ComponentReference(typeof(IStorageComponent))] public class EntityStorageComponent : Component, IActivate, IStorageComponent, IInteractUsing, IDestroyAct, IActionBlocker, IExAct { + [Dependency] private readonly IGameTiming _gameTiming = default!; + public override string Name => "EntityStorage"; private const float MaxSize = 1.0f; // maximum width or height of an entity allowed inside the storage. @@ -301,14 +300,13 @@ namespace Content.Server.GameObjects.Components.Items.Storage case RelayMovementEntityMessage msg: if (msg.Entity.HasComponent()) { - var timing = IoCManager.Resolve(); - if (timing.CurTime < + if (_gameTiming.CurTime < _lastInternalOpenAttempt + InternalOpenAttemptDelay) { break; } - _lastInternalOpenAttempt = timing.CurTime; + _lastInternalOpenAttempt = _gameTiming.CurTime; TryOpenStorage(msg.Entity); } break; diff --git a/Content.Server/GameObjects/Components/Items/Storage/Fill/CustodialClosetFill.cs b/Content.Server/GameObjects/Components/Items/Storage/Fill/CustodialClosetFill.cs index db89fb1798..2138b1a780 100644 --- a/Content.Server/GameObjects/Components/Items/Storage/Fill/CustodialClosetFill.cs +++ b/Content.Server/GameObjects/Components/Items/Storage/Fill/CustodialClosetFill.cs @@ -13,7 +13,6 @@ namespace Content.Server.GameObjects.Components.Items.Storage.Fill void IMapInit.MapInit() { var storage = Owner.GetComponent(); - var random = IoCManager.Resolve(); void Spawn(string prototype) { diff --git a/Content.Server/GameObjects/Components/Mobs/Speech/OwOAccentComponent.cs b/Content.Server/GameObjects/Components/Mobs/Speech/OwOAccentComponent.cs index 819e7c81cd..5b0aa232f0 100644 --- a/Content.Server/GameObjects/Components/Mobs/Speech/OwOAccentComponent.cs +++ b/Content.Server/GameObjects/Components/Mobs/Speech/OwOAccentComponent.cs @@ -9,12 +9,14 @@ namespace Content.Server.GameObjects.Components.Mobs.Speech [RegisterComponent] public class OwOAccentComponent : Component, IAccentComponent { + [Dependency] private readonly IRobustRandom _random; + public override string Name => "OwOAccent"; private static readonly IReadOnlyList Faces = new List{ " (・`ω´・)", " ;;w;;", " owo", " UwU", " >w<", " ^w^" }.AsReadOnly(); - private string RandomFace => IoCManager.Resolve().Pick(Faces); + private string RandomFace => _random.Pick(Faces); private static readonly Dictionary SpecialWords = new Dictionary { @@ -23,7 +25,7 @@ namespace Content.Server.GameObjects.Components.Mobs.Speech public string Accentuate(string message) { - foreach ((var word,var repl) in SpecialWords) + foreach (var (word, repl) in SpecialWords) { message = message.Replace(word, repl); } diff --git a/Content.Server/GameObjects/Components/Movement/AiControllerComponent.cs b/Content.Server/GameObjects/Components/Movement/AiControllerComponent.cs index a1d595062d..dc651ef36c 100644 --- a/Content.Server/GameObjects/Components/Movement/AiControllerComponent.cs +++ b/Content.Server/GameObjects/Components/Movement/AiControllerComponent.cs @@ -19,6 +19,9 @@ namespace Content.Server.GameObjects.Components.Movement [RegisterComponent, ComponentReference(typeof(IMoverComponent))] public class AiControllerComponent : Component, IMoverComponent { + [Dependency] private readonly IPrototypeManager _prototypeManager = default!; + [Dependency] private readonly IGameTicker _gameTicker = default!; + private string? _logicName; private float _visionRadius; @@ -36,7 +39,7 @@ namespace Content.Server.GameObjects.Components.Movement } public AiLogicProcessor? Processor { get; set; } - + [ViewVariables(VVAccess.ReadWrite)] public string? StartingGearPrototype { get; set; } @@ -61,13 +64,13 @@ namespace Content.Server.GameObjects.Components.Movement protected override void Startup() { base.Startup(); - + if (StartingGearPrototype != null) { - var startingGear = IoCManager.Resolve().Index(StartingGearPrototype); - IoCManager.Resolve().EquipStartingGear(Owner, startingGear); + var startingGear = _prototypeManager.Index(StartingGearPrototype); + _gameTicker.EquipStartingGear(Owner, startingGear); } - + } /// @@ -77,7 +80,7 @@ namespace Content.Server.GameObjects.Components.Movement serializer.DataField(ref _logicName, "logic", null); serializer.DataReadWriteFunction( - "startingGear", + "startingGear", null, startingGear => StartingGearPrototype = startingGear, () => StartingGearPrototype); diff --git a/Content.Server/GameObjects/Components/Nutrition/HungerComponent.cs b/Content.Server/GameObjects/Components/Nutrition/HungerComponent.cs index 00d1a8c27b..5e35835cc4 100644 --- a/Content.Server/GameObjects/Components/Nutrition/HungerComponent.cs +++ b/Content.Server/GameObjects/Components/Nutrition/HungerComponent.cs @@ -6,7 +6,6 @@ using Content.Shared.GameObjects.Components.Damage; using Content.Shared.GameObjects.Components.Mobs; using Content.Shared.GameObjects.Components.Movement; using Content.Shared.GameObjects.Components.Nutrition; -using JetBrains.Annotations; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.Random; using Robust.Shared.IoC; @@ -19,6 +18,8 @@ namespace Content.Server.GameObjects.Components.Nutrition [RegisterComponent] public sealed class HungerComponent : SharedHungerComponent { + [Dependency] private readonly IRobustRandom _random = default!; + // Base stuff [ViewVariables(VVAccess.ReadWrite)] public float BaseDecayRate @@ -141,7 +142,7 @@ namespace Content.Server.GameObjects.Components.Nutrition { base.Startup(); // Similar functionality to SS13. Should also stagger people going to the chef. - _currentHunger = IoCManager.Resolve().Next( + _currentHunger = _random.Next( (int)_hungerThresholds[HungerThreshold.Peckish] + 10, (int)_hungerThresholds[HungerThreshold.Okay] - 1); _currentHungerThreshold = GetHungerThreshold(_currentHunger); diff --git a/Content.Server/GameObjects/Components/Nutrition/ThirstComponent.cs b/Content.Server/GameObjects/Components/Nutrition/ThirstComponent.cs index e8cee505fc..6dec3efe75 100644 --- a/Content.Server/GameObjects/Components/Nutrition/ThirstComponent.cs +++ b/Content.Server/GameObjects/Components/Nutrition/ThirstComponent.cs @@ -6,7 +6,6 @@ using Content.Shared.GameObjects.Components.Damage; using Content.Shared.GameObjects.Components.Mobs; using Content.Shared.GameObjects.Components.Movement; using Content.Shared.GameObjects.Components.Nutrition; -using JetBrains.Annotations; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.Random; using Robust.Shared.IoC; @@ -19,6 +18,8 @@ namespace Content.Server.GameObjects.Components.Nutrition [RegisterComponent] public sealed class ThirstComponent : SharedThirstComponent { + [Dependency] private readonly IRobustRandom _random = default!; + // Base stuff [ViewVariables(VVAccess.ReadWrite)] public float BaseDecayRate @@ -136,7 +137,7 @@ namespace Content.Server.GameObjects.Components.Nutrition protected override void Startup() { base.Startup(); - _currentThirst = IoCManager.Resolve().Next( + _currentThirst = _random.Next( (int)ThirstThresholds[ThirstThreshold.Thirsty] + 10, (int)ThirstThresholds[ThirstThreshold.Okay] - 1); _currentThirstThreshold = GetThirstThreshold(_currentThirst); diff --git a/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerProviderComponent.cs b/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerProviderComponent.cs index 5541a2a875..b0fcd57588 100644 --- a/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerProviderComponent.cs +++ b/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerProviderComponent.cs @@ -24,6 +24,9 @@ namespace Content.Server.GameObjects.Components.Power.ApcNetComponents [RegisterComponent] public class PowerProviderComponent : BaseApcNetComponent, IPowerProvider { + [Dependency] private readonly IMapManager _mapManager = default!; + [Dependency] private readonly IServerEntityManager _serverEntityManager; + public override string Name => "PowerProvider"; /// @@ -91,14 +94,13 @@ namespace Content.Server.GameObjects.Components.Power.ApcNetComponents private List FindAvailableReceivers() { - var mapManager = IoCManager.Resolve(); - var nearbyEntities = IoCManager.Resolve() + var nearbyEntities = _serverEntityManager .GetEntitiesInRange(Owner, PowerTransferRange); return nearbyEntities.Select(entity => entity.TryGetComponent(out var receiver) ? receiver : null) .Where(receiver => receiver != null) .Where(receiver => receiver.Connectable) .Where(receiver => receiver.NeedsProvider) - .Where(receiver => receiver.Owner.Transform.GridPosition.Distance(mapManager, Owner.Transform.GridPosition) < Math.Min(PowerTransferRange, receiver.PowerReceptionRange)) + .Where(receiver => receiver.Owner.Transform.GridPosition.Distance(_mapManager, Owner.Transform.GridPosition) < Math.Min(PowerTransferRange, receiver.PowerReceptionRange)) .ToList(); } diff --git a/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverComponent.cs b/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverComponent.cs index 01f6dbd787..2402c6ea51 100644 --- a/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverComponent.cs +++ b/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverComponent.cs @@ -21,6 +21,9 @@ namespace Content.Server.GameObjects.Components.Power.ApcNetComponents [RegisterComponent] public class PowerReceiverComponent : Component, IExamine { + [Dependency] private readonly IServerEntityManager _serverEntityManager = default!; + [Dependency] private readonly IMapManager _mapManager = default!; + public override string Name => "PowerReceiver"; public event EventHandler OnPowerStateChanged; @@ -116,16 +119,16 @@ namespace Content.Server.GameObjects.Components.Power.ApcNetComponents private bool TryFindAvailableProvider(out IPowerProvider foundProvider) { - var nearbyEntities = IoCManager.Resolve() + var nearbyEntities = _serverEntityManager .GetEntitiesInRange(Owner, PowerReceptionRange); - var mapManager = IoCManager.Resolve(); + foreach (var entity in nearbyEntities) { if (entity.TryGetComponent(out var provider)) { if (provider.Connectable) { - var distanceToProvider = provider.Owner.Transform.GridPosition.Distance(mapManager, Owner.Transform.GridPosition); + var distanceToProvider = provider.Owner.Transform.GridPosition.Distance(_mapManager, Owner.Transform.GridPosition); if (distanceToProvider < Math.Min(PowerReceptionRange, provider.PowerTransferRange)) { foundProvider = provider; diff --git a/Content.Server/GameObjects/Components/Projectiles/HitscanComponent.cs b/Content.Server/GameObjects/Components/Projectiles/HitscanComponent.cs index 509de63d73..d3b56dde1b 100644 --- a/Content.Server/GameObjects/Components/Projectiles/HitscanComponent.cs +++ b/Content.Server/GameObjects/Components/Projectiles/HitscanComponent.cs @@ -22,6 +22,8 @@ namespace Content.Server.GameObjects.Components.Projectiles [RegisterComponent] public class HitscanComponent : Component { + [Dependency] private readonly IGameTiming _gameTiming = default!; + public override string Name => "Hitscan"; public CollisionGroup CollisionMask => (CollisionGroup) _collisionMask; private int _collisionMask; @@ -60,7 +62,7 @@ namespace Content.Server.GameObjects.Components.Projectiles public void FireEffects(IEntity user, float distance, Angle angle, IEntity hitEntity = null) { var effectSystem = EntitySystem.Get(); - _startTime = IoCManager.Resolve().CurTime; + _startTime = _gameTiming.CurTime; _deathTime = _startTime + TimeSpan.FromSeconds(1); var afterEffect = AfterEffects(user.Transform.GridPosition, angle, distance, 1.0f); diff --git a/Content.Server/GameObjects/Components/RadioComponent.cs b/Content.Server/GameObjects/Components/RadioComponent.cs index df927c9c28..2163ed3012 100644 --- a/Content.Server/GameObjects/Components/RadioComponent.cs +++ b/Content.Server/GameObjects/Components/RadioComponent.cs @@ -14,6 +14,7 @@ namespace Content.Server.GameObjects.Components class RadioComponent : Component, IUse, IListen { [Dependency] private readonly IEntitySystemManager _entitySystemManager = default!; + [Dependency] private readonly IChatManager _chatManager = default!; public override string Name => "Radio"; @@ -51,8 +52,7 @@ namespace Content.Server.GameObjects.Components public void Speaker(string message) { - var chat = IoCManager.Resolve(); - chat.EntitySay(Owner, message); + _chatManager.EntitySay(Owner, message); } public bool UseEntity(UseEntityEventArgs eventArgs) diff --git a/Content.Server/GameObjects/Components/Research/ProtolatheDatabaseComponent.cs b/Content.Server/GameObjects/Components/Research/ProtolatheDatabaseComponent.cs index 3067f03d5f..2179def87c 100644 --- a/Content.Server/GameObjects/Components/Research/ProtolatheDatabaseComponent.cs +++ b/Content.Server/GameObjects/Components/Research/ProtolatheDatabaseComponent.cs @@ -10,6 +10,8 @@ namespace Content.Server.GameObjects.Components.Research [ComponentReference(typeof(SharedLatheDatabaseComponent))] public class ProtolatheDatabaseComponent : SharedProtolatheDatabaseComponent { + [Dependency] private readonly IPrototypeManager _prototypeManager = default!; + public override string Name => "ProtolatheDatabase"; public override ComponentState GetComponentState() @@ -24,13 +26,11 @@ namespace Content.Server.GameObjects.Components.Research { if (!Owner.TryGetComponent(out TechnologyDatabaseComponent database)) return; - var prototypeManager = IoCManager.Resolve(); - foreach (var technology in database.Technologies) { foreach (var id in technology.UnlockedRecipes) { - var recipe = (LatheRecipePrototype)prototypeManager.Index(typeof(LatheRecipePrototype), id); + var recipe = (LatheRecipePrototype) _prototypeManager.Index(typeof(LatheRecipePrototype), id); UnlockRecipe(recipe); } } diff --git a/Content.Server/GameObjects/Components/Research/ResearchConsoleComponent.cs b/Content.Server/GameObjects/Components/Research/ResearchConsoleComponent.cs index 4a1adc57c1..e2136c29eb 100644 --- a/Content.Server/GameObjects/Components/Research/ResearchConsoleComponent.cs +++ b/Content.Server/GameObjects/Components/Research/ResearchConsoleComponent.cs @@ -57,8 +57,7 @@ namespace Content.Server.GameObjects.Components.Research switch (message.Message) { case ConsoleUnlockTechnologyMessage msg: - var protoMan = IoCManager.Resolve(); - if (!protoMan.TryIndex(msg.Id, out TechnologyPrototype tech)) break; + if (!_prototypeManager.TryIndex(msg.Id, out TechnologyPrototype tech)) break; if (client.Server == null) break; if (!client.Server.CanUnlockTechnology(tech)) break; if (client.Server.UnlockTechnology(tech)) diff --git a/Content.Server/GameObjects/Components/StationEvents/RadiationPulseComponent.cs b/Content.Server/GameObjects/Components/StationEvents/RadiationPulseComponent.cs index c0fd604f92..da755bf91d 100644 --- a/Content.Server/GameObjects/Components/StationEvents/RadiationPulseComponent.cs +++ b/Content.Server/GameObjects/Components/StationEvents/RadiationPulseComponent.cs @@ -15,12 +15,15 @@ namespace Content.Server.GameObjects.Components.StationEvents [RegisterComponent] public sealed class RadiationPulseComponent : SharedRadiationPulseComponent { + [Dependency] private readonly IGameTiming _gameTiming = default!; + [Dependency] private readonly IRobustRandom _random = default!; + private const float MinPulseLifespan = 0.8f; private const float MaxPulseLifespan = 2.5f; public float DPS => _dps; private float _dps; - + private TimeSpan _endTime; public override void ExposeData(ObjectSerializer serializer) @@ -33,15 +36,15 @@ namespace Content.Server.GameObjects.Components.StationEvents { base.Initialize(); - var currentTime = IoCManager.Resolve().CurTime; + var currentTime = _gameTiming.CurTime; var duration = TimeSpan.FromSeconds( - IoCManager.Resolve().NextFloat() * (MaxPulseLifespan - MinPulseLifespan) + + _random.NextFloat() * (MaxPulseLifespan - MinPulseLifespan) + MinPulseLifespan); _endTime = currentTime + duration; - - Timer.Spawn(duration, + + Timer.Spawn(duration, () => { if (!Owner.Deleted) @@ -59,4 +62,4 @@ namespace Content.Server.GameObjects.Components.StationEvents return new RadiationPulseMessage(_endTime); } } -} \ No newline at end of file +} diff --git a/Content.Server/GameObjects/Components/VendingMachines/VendingMachineComponent.cs b/Content.Server/GameObjects/Components/VendingMachines/VendingMachineComponent.cs index 3fd2c7177a..363dbf98ac 100644 --- a/Content.Server/GameObjects/Components/VendingMachines/VendingMachineComponent.cs +++ b/Content.Server/GameObjects/Components/VendingMachines/VendingMachineComponent.cs @@ -32,6 +32,7 @@ namespace Content.Server.GameObjects.Components.VendingMachines public class VendingMachineComponent : SharedVendingMachineComponent, IActivate, IExamine, IBreakAct, IWires { [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly IPrototypeManager _prototypeManager = default!; private bool _ejecting; private TimeSpan _animationDuration = TimeSpan.Zero; @@ -77,8 +78,7 @@ namespace Content.Server.GameObjects.Components.VendingMachines private void InitializeFromPrototype() { if (string.IsNullOrEmpty(_packPrototypeId)) { return; } - var prototypeManger = IoCManager.Resolve(); - if (!prototypeManger.TryIndex(_packPrototypeId, out VendingMachineInventoryPrototype packPrototype)) + if (!_prototypeManager.TryIndex(_packPrototypeId, out VendingMachineInventoryPrototype packPrototype)) { return; } diff --git a/Content.Server/GameObjects/Components/Weapon/FlashableComponent.cs b/Content.Server/GameObjects/Components/Weapon/FlashableComponent.cs index b09d95aa19..4646c136c1 100644 --- a/Content.Server/GameObjects/Components/Weapon/FlashableComponent.cs +++ b/Content.Server/GameObjects/Components/Weapon/FlashableComponent.cs @@ -12,13 +12,14 @@ namespace Content.Server.GameObjects.Components.Weapon [RegisterComponent] public sealed class FlashableComponent : SharedFlashableComponent { + [Dependency] private readonly IGameTiming _gameTiming = default!; + private double _duration; private TimeSpan _lastFlash; public void Flash(double duration) { - var timing = IoCManager.Resolve(); - _lastFlash = timing.CurTime; + _lastFlash = _gameTiming.CurTime; _duration = duration; Dirty(); } diff --git a/Content.Server/GameObjects/Components/Weapon/Melee/MeleeWeaponComponent.cs b/Content.Server/GameObjects/Components/Weapon/Melee/MeleeWeaponComponent.cs index ce4a5bf376..b4f89bca67 100644 --- a/Content.Server/GameObjects/Components/Weapon/Melee/MeleeWeaponComponent.cs +++ b/Content.Server/GameObjects/Components/Weapon/Melee/MeleeWeaponComponent.cs @@ -26,6 +26,7 @@ namespace Content.Server.GameObjects.Components.Weapon.Melee [Dependency] private readonly IMapManager _mapManager = default!; [Dependency] private readonly IEntitySystemManager _entitySystemManager = default!; [Dependency] private readonly IPhysicsManager _physicsManager = default!; + [Dependency] private readonly IGameTiming _gameTiming = default!; public override string Name => "MeleeWeapon"; private TimeSpan _lastAttackTime; @@ -85,7 +86,7 @@ namespace Content.Server.GameObjects.Components.Weapon.Melee void IAttack.Attack(AttackEventArgs eventArgs) { - var curTime = IoCManager.Resolve().CurTime; + var curTime = _gameTiming.CurTime; var span = curTime - _lastAttackTime; if(span.TotalSeconds < _cooldownTime) { return; @@ -127,7 +128,7 @@ namespace Content.Server.GameObjects.Components.Weapon.Melee sys.SendAnimation(Arc, angle, eventArgs.User, hitEntities); } - _lastAttackTime = IoCManager.Resolve().CurTime; + _lastAttackTime = _gameTiming.CurTime; if (Owner.TryGetComponent(out ItemCooldownComponent cooldown)) { diff --git a/Content.Server/GameObjects/Components/Weapon/Ranged/Ammunition/AmmoComponent.cs b/Content.Server/GameObjects/Components/Weapon/Ranged/Ammunition/AmmoComponent.cs index 8e3df42259..1cb559aeaa 100644 --- a/Content.Server/GameObjects/Components/Weapon/Ranged/Ammunition/AmmoComponent.cs +++ b/Content.Server/GameObjects/Components/Weapon/Ranged/Ammunition/AmmoComponent.cs @@ -25,6 +25,8 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Ammunition [RegisterComponent] public class AmmoComponent : Component, IExamine { + [Dependency] private readonly IGameTiming _gameTiming = default!; + public override string Name => "Ammo"; public BallisticCaliber Caliber => _caliber; private BallisticCaliber _caliber; @@ -135,7 +137,7 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Ammunition return; } - var time = IoCManager.Resolve().CurTime; + var time = _gameTiming.CurTime; var deathTime = time + TimeSpan.FromMilliseconds(200); // Offset the sprite so it actually looks like it's coming from the gun var offset = angle.ToVec().Normalized / 2; diff --git a/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/RevolverBarrelComponent.cs b/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/RevolverBarrelComponent.cs index 4f16ffc90a..0430263cd0 100644 --- a/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/RevolverBarrelComponent.cs +++ b/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/RevolverBarrelComponent.cs @@ -25,6 +25,8 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Barrels [RegisterComponent] public sealed class RevolverBarrelComponent : ServerRangedBarrelComponent { + [Dependency] private readonly IRobustRandom _random = default!; + public override string Name => "RevolverBarrel"; public override uint? NetID => ContentNetIDs.REVOLVER_BARREL; @@ -176,7 +178,7 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Barrels /// public void Spin() { - var random = IoCManager.Resolve().Next(_ammoSlots.Length - 1); + var random = _random.Next(_ammoSlots.Length - 1); _currentSlot = random; if (_soundSpin != null) { diff --git a/Content.Server/GameObjects/Components/Weapon/Ranged/ServerRangedWeaponComponent.cs b/Content.Server/GameObjects/Components/Weapon/Ranged/ServerRangedWeaponComponent.cs index d852fe0b7b..f490be0c1a 100644 --- a/Content.Server/GameObjects/Components/Weapon/Ranged/ServerRangedWeaponComponent.cs +++ b/Content.Server/GameObjects/Components/Weapon/Ranged/ServerRangedWeaponComponent.cs @@ -32,6 +32,10 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged [RegisterComponent] public sealed class ServerRangedWeaponComponent : SharedRangedWeaponComponent, IHandSelected { + [Dependency] private readonly IMapManager _mapManager = default!; + [Dependency] private readonly IGameTiming _gameTiming = default!; + [Dependency] private readonly IRobustRandom _random = default!; + private TimeSpan _lastFireTime; [ViewVariables(VVAccess.ReadWrite)] @@ -102,7 +106,7 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged if (msg.TargetGrid != GridId.Invalid) { // grid pos - if (!IoCManager.Resolve().TryGetGrid(msg.TargetGrid, out var grid)) + if (!_mapManager.TryGetGrid(msg.TargetGrid, out var grid)) { // Client sent us a message with an invalid grid. break; @@ -147,7 +151,7 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged return; } - var curTime = IoCManager.Resolve().CurTime; + var curTime = _gameTiming.CurTime; var span = curTime - _lastFireTime; if (span.TotalSeconds < 1 / _barrel.FireRate) { @@ -158,7 +162,7 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged if (ClumsyCheck && user.HasComponent() && - IoCManager.Resolve().Prob(ClumsyExplodeChance)) + _random.Prob(ClumsyExplodeChance)) { var soundSystem = EntitySystem.Get(); soundSystem.PlayAtCoords("/Audio/Items/bikehorn.ogg", From dbbe3088f8e28c6bebe5c9856f58082141ce511c Mon Sep 17 00:00:00 2001 From: DrSmugleaf Date: Wed, 2 Sep 2020 01:31:47 +0200 Subject: [PATCH 073/103] Add puddle spill tests (#1990) * Add puddle spill tests * Merge fixes --- .../Tests/Fluids/PuddleTest.cs | 102 ++++++++++++++++++ .../Components/Fluids/PuddleComponent.cs | 1 - 2 files changed, 102 insertions(+), 1 deletion(-) create mode 100644 Content.IntegrationTests/Tests/Fluids/PuddleTest.cs diff --git a/Content.IntegrationTests/Tests/Fluids/PuddleTest.cs b/Content.IntegrationTests/Tests/Fluids/PuddleTest.cs new file mode 100644 index 0000000000..4333444c65 --- /dev/null +++ b/Content.IntegrationTests/Tests/Fluids/PuddleTest.cs @@ -0,0 +1,102 @@ +using System.Threading.Tasks; +using Content.Server.GameObjects.Components.Fluids; +using Content.Shared.Chemistry; +using NUnit.Framework; +using Robust.Server.Interfaces.Timing; +using Robust.Shared.Interfaces.Map; +using Robust.Shared.Map; + +namespace Content.IntegrationTests.Tests.Fluids +{ + [TestFixture] + [TestOf(typeof(PuddleComponent))] + public class PuddleTest : ContentIntegrationTest + { + [Test] + public async Task TilePuddleTest() + { + var server = StartServerDummyTicker(); + + await server.WaitIdleAsync(); + + var mapManager = server.ResolveDependency(); + var pauseManager = server.ResolveDependency(); + var tileDefinitionManager = server.ResolveDependency(); + + GridCoordinates coordinates = default; + + // Build up test environment + server.Post(() => + { + // Create a one tile grid to spill onto + var mapId = mapManager.CreateMap(); + + pauseManager.AddUninitializedMap(mapId); + + var gridId = new GridId(1); + + if (!mapManager.TryGetGrid(gridId, out var grid)) + { + grid = mapManager.CreateGrid(mapId, gridId); + } + + var tileDefinition = tileDefinitionManager["underplating"]; + var tile = new Tile(tileDefinition.TileId); + coordinates = new GridCoordinates(0, 0, gridId); + + grid.SetTile(coordinates, tile); + + pauseManager.DoMapInitialize(mapId); + }); + + await server.WaitIdleAsync(); + + server.Assert(() => + { + var solution = new Solution("water", ReagentUnit.New(20)); + var puddle = solution.SpillAt(coordinates, "PuddleSmear"); + Assert.NotNull(puddle); + }); + + await server.WaitIdleAsync(); + } + + [Test] + public async Task SpaceNoPuddleTest() + { + var server = StartServerDummyTicker(); + + await server.WaitIdleAsync(); + var mapManager = server.ResolveDependency(); + var pauseManager = server.ResolveDependency(); + + // Build up test environment + server.Post(() => + { + var mapId = mapManager.CreateMap(); + + pauseManager.AddUninitializedMap(mapId); + + var gridId = new GridId(1); + + if (!mapManager.GridExists(gridId)) + { + mapManager.CreateGrid(mapId, gridId); + } + }); + + await server.WaitIdleAsync(); + + server.Assert(() => + { + var gridId = new GridId(1); + var coordinates = new GridCoordinates(0, 0, gridId); + var solution = new Solution("water", ReagentUnit.New(20)); + var puddle = solution.SpillAt(coordinates, "PuddleSmear"); + Assert.Null(puddle); + }); + + await server.WaitIdleAsync(); + } + } +} diff --git a/Content.Server/GameObjects/Components/Fluids/PuddleComponent.cs b/Content.Server/GameObjects/Components/Fluids/PuddleComponent.cs index 7cc38996ec..2ba084cef7 100644 --- a/Content.Server/GameObjects/Components/Fluids/PuddleComponent.cs +++ b/Content.Server/GameObjects/Components/Fluids/PuddleComponent.cs @@ -43,7 +43,6 @@ namespace Content.Server.GameObjects.Components.Fluids // Small puddles will evaporate after a set delay // TODO: 'leaves fluidtracks', probably in a separate component for stuff like gibb chunks?; - // TODO: Add stuff like slipping -> probably in a separate component (for stuff like bananas) // based on behaviour (e.g. someone being punched vs slashed with a sword would have different blood sprite) // to check for low volumes for evaporation or whatever From 6a4b8569617d229383063f0f66975bef8c01ca74 Mon Sep 17 00:00:00 2001 From: Moses Date: Tue, 1 Sep 2020 18:41:35 -0500 Subject: [PATCH 074/103] Extinguisher cabinet (#1976) * 1779 Add extinguisher cabinet base item, rsi, and class based on potted plant * Pretty much the rest of the owl * Allow construction * no more deconstruction * pr fixes --- .../ExtinguisherCabinetVisualizer.cs | 41 ++++++ .../ExtinguisherCabinetComponent.cs | 128 ++++++++++++++++++ .../ExtinguisherCabinetFilledComponent.cs | 19 +++ .../Items/FireExtinguisherComponent.cs | 14 ++ .../Components/ExtinguisherCabinet.cs | 12 ++ .../Walls/extinguisher_cabinet.yml | 26 ++++ .../Objects/Misc/fire_extinguisher.yml | 1 + .../Prototypes/Recipes/Construction/misc.yml | 17 +++ .../extinguisher_closed.png | Bin 0 -> 432 bytes .../extinguisher_empty.png | Bin 0 -> 405 bytes .../extinguisher_full.png | Bin 0 -> 498 bytes .../extinguisher_mini.png | Bin 0 -> 468 bytes .../Misc/extinguisher_cabinet.rsi/meta.json | 47 +++++++ 13 files changed, 305 insertions(+) create mode 100644 Content.Client/GameObjects/Components/ExtinguisherCabinetVisualizer.cs create mode 100644 Content.Server/GameObjects/Components/ExtinguisherCabinetComponent.cs create mode 100644 Content.Server/GameObjects/Components/ExtinguisherCabinetFilledComponent.cs create mode 100644 Content.Server/GameObjects/Components/Items/FireExtinguisherComponent.cs create mode 100644 Content.Shared/GameObjects/Components/ExtinguisherCabinet.cs create mode 100644 Resources/Prototypes/Entities/Constructible/Walls/extinguisher_cabinet.yml create mode 100644 Resources/Textures/Constructible/Misc/extinguisher_cabinet.rsi/extinguisher_closed.png create mode 100644 Resources/Textures/Constructible/Misc/extinguisher_cabinet.rsi/extinguisher_empty.png create mode 100644 Resources/Textures/Constructible/Misc/extinguisher_cabinet.rsi/extinguisher_full.png create mode 100644 Resources/Textures/Constructible/Misc/extinguisher_cabinet.rsi/extinguisher_mini.png create mode 100644 Resources/Textures/Constructible/Misc/extinguisher_cabinet.rsi/meta.json diff --git a/Content.Client/GameObjects/Components/ExtinguisherCabinetVisualizer.cs b/Content.Client/GameObjects/Components/ExtinguisherCabinetVisualizer.cs new file mode 100644 index 0000000000..931a26229e --- /dev/null +++ b/Content.Client/GameObjects/Components/ExtinguisherCabinetVisualizer.cs @@ -0,0 +1,41 @@ +using Content.Shared.GameObjects.Components; +using Robust.Client.GameObjects; +using Robust.Client.Interfaces.GameObjects.Components; + +namespace Content.Client.GameObjects.Components +{ + public class ExtinguisherCabinetVisualizer : AppearanceVisualizer + { + private string _prefix; + + public override void OnChangeData(AppearanceComponent component) + { + base.OnChangeData(component); + + var sprite = component.Owner.GetComponent(); + + if (component.TryGetData(ExtinguisherCabinetVisuals.IsOpen, out bool isOpen)) + { + if (isOpen) + { + if (component.TryGetData(ExtinguisherCabinetVisuals.ContainsExtinguisher, out bool contains)) + { + if (contains) + { + sprite.LayerSetState(0, "extinguisher_full"); + } + else + { + sprite.LayerSetState(0, "extinguisher_empty"); + } + + } + } + else + { + sprite.LayerSetState(0, "extinguisher_closed"); + } + } + } + } +} diff --git a/Content.Server/GameObjects/Components/ExtinguisherCabinetComponent.cs b/Content.Server/GameObjects/Components/ExtinguisherCabinetComponent.cs new file mode 100644 index 0000000000..38640b766c --- /dev/null +++ b/Content.Server/GameObjects/Components/ExtinguisherCabinetComponent.cs @@ -0,0 +1,128 @@ +using System.Threading.Tasks; +using Content.Server.GameObjects.Components.GUI; +using Content.Server.GameObjects.Components.Items; +using Content.Server.GameObjects.Components.Items.Storage; +using Content.Server.Interfaces.GameObjects.Components.Items; +using Content.Shared.Audio; +using Content.Shared.GameObjects.Components; +using Content.Shared.Interfaces; +using Content.Shared.Interfaces.GameObjects.Components; +using Robust.Server.GameObjects; +using Robust.Server.GameObjects.Components.Container; +using Robust.Server.GameObjects.EntitySystems; +using Robust.Shared.GameObjects; +using Robust.Shared.GameObjects.Systems; +using Robust.Shared.Localization; +using Robust.Shared.Serialization; +using Robust.Shared.ViewVariables; + +namespace Content.Server.GameObjects.Components +{ + + [RegisterComponent] + [ComponentReference(typeof(IActivate))] + public class ExtinguisherCabinetComponent : Component, IInteractUsing, IInteractHand, IActivate + { + public override string Name => "ExtinguisherCabinet"; + + private bool _opened = false; + private string _doorSound; + + [ViewVariables] protected ContainerSlot ItemContainer; + [ViewVariables] public string DoorSound => _doorSound; + + public override void Initialize() + { + base.Initialize(); + + ItemContainer = + ContainerManagerComponent.Ensure("extinguisher_cabinet", Owner, out _); + } + + public override void ExposeData(ObjectSerializer serializer) + { + base.ExposeData(serializer); + + serializer.DataField(ref _doorSound, "doorSound", "/Audio/Machines/machine_switch.ogg"); + } + + async Task IInteractUsing.InteractUsing(InteractUsingEventArgs eventArgs) + { + if (!_opened) + { + _opened = true; + ClickLatchSound(); + } + else + { + if (ItemContainer.ContainedEntity != null || !eventArgs.Using.HasComponent()) + { + return false; + } + var handsComponent = eventArgs.User.GetComponent(); + + if (!handsComponent.Drop(eventArgs.Using, ItemContainer)) + { + return false; + } + } + + UpdateVisuals(); + + return true; + } + + bool IInteractHand.InteractHand(InteractHandEventArgs eventArgs) + { + if (_opened) + { + if (ItemContainer.ContainedEntity == null) + { + _opened = false; + ClickLatchSound(); + } + else if (eventArgs.User.TryGetComponent(out HandsComponent hands)) + { + Owner.PopupMessage(eventArgs.User, + Loc.GetString("You take {0:extinguisherName} from the {1:cabinetName}", ItemContainer.ContainedEntity.Name, Owner.Name)); + hands.PutInHandOrDrop(ItemContainer.ContainedEntity.GetComponent()); + } + else if (ItemContainer.Remove(ItemContainer.ContainedEntity)) + { + ItemContainer.ContainedEntity.Transform.GridPosition = Owner.Transform.GridPosition; + } + } + else + { + _opened = true; + ClickLatchSound(); + } + + UpdateVisuals(); + + return true; + } + + void IActivate.Activate(ActivateEventArgs eventArgs) + { + _opened = !_opened; + ClickLatchSound(); + UpdateVisuals(); + } + + private void UpdateVisuals() + { + if (Owner.TryGetComponent(out AppearanceComponent appearance)) + { + appearance.SetData(ExtinguisherCabinetVisuals.IsOpen, _opened); + appearance.SetData(ExtinguisherCabinetVisuals.ContainsExtinguisher, ItemContainer.ContainedEntity != null); + } + } + + private void ClickLatchSound() + { + EntitySystem.Get() // Don't have original click, this sounds close + .PlayFromEntity(DoorSound, Owner, AudioHelpers.WithVariation(0.15f)); + } + } +} diff --git a/Content.Server/GameObjects/Components/ExtinguisherCabinetFilledComponent.cs b/Content.Server/GameObjects/Components/ExtinguisherCabinetFilledComponent.cs new file mode 100644 index 0000000000..f9a861e238 --- /dev/null +++ b/Content.Server/GameObjects/Components/ExtinguisherCabinetFilledComponent.cs @@ -0,0 +1,19 @@ +using Content.Shared.Interfaces.GameObjects.Components; +using Robust.Shared.GameObjects; +using Robust.Shared.ViewVariables; + +namespace Content.Server.GameObjects.Components +{ + [RegisterComponent] + public class ExtinguisherCabinetFilledComponent : ExtinguisherCabinetComponent + { + public override string Name => "ExtinguisherCabinetFilled"; + + public override void Initialize() + { + base.Initialize(); + + ItemContainer.Insert(Owner.EntityManager.SpawnEntity("FireExtinguisher", Owner.Transform.GridPosition)); + } + } +} diff --git a/Content.Server/GameObjects/Components/Items/FireExtinguisherComponent.cs b/Content.Server/GameObjects/Components/Items/FireExtinguisherComponent.cs new file mode 100644 index 0000000000..540a922a26 --- /dev/null +++ b/Content.Server/GameObjects/Components/Items/FireExtinguisherComponent.cs @@ -0,0 +1,14 @@ +using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.Interfaces.GameObjects.Components; +using Robust.Shared.GameObjects; +using Robust.Shared.Interfaces.Random; +using Robust.Shared.Prototypes; + +namespace Content.Server.GameObjects.Components.Items +{ + [RegisterComponent] + public class FireExtinguisherComponent : Component + { + public override string Name => "FireExtinguisher"; + } +} diff --git a/Content.Shared/GameObjects/Components/ExtinguisherCabinet.cs b/Content.Shared/GameObjects/Components/ExtinguisherCabinet.cs new file mode 100644 index 0000000000..c42e355f1e --- /dev/null +++ b/Content.Shared/GameObjects/Components/ExtinguisherCabinet.cs @@ -0,0 +1,12 @@ +using System; +using Robust.Shared.Serialization; + +namespace Content.Shared.GameObjects.Components +{ + [Serializable, NetSerializable] + public enum ExtinguisherCabinetVisuals + { + IsOpen, + ContainsExtinguisher + } +} diff --git a/Resources/Prototypes/Entities/Constructible/Walls/extinguisher_cabinet.yml b/Resources/Prototypes/Entities/Constructible/Walls/extinguisher_cabinet.yml new file mode 100644 index 0000000000..243d5eb565 --- /dev/null +++ b/Resources/Prototypes/Entities/Constructible/Walls/extinguisher_cabinet.yml @@ -0,0 +1,26 @@ +- type: entity + id: ExtinguisherCabinet + name: extinguisher cabinet + abstract: true + description: A small wall mounted cabinet designed to hold a fire extinguisher. + components: + - type: Clickable + - type: InteractionOutline + - type: Sprite + sprite: Constructible/Misc/extinguisher_cabinet.rsi + state: extinguisher_closed + - type: Icon + sprite: Constructible/Misc/extinguisher_cabinet.rsi + state: extinguisher_closed + - type: ExtinguisherCabinet + - type: Appearance + visuals: + - type: ExtinguisherCabinetVisualizer + placement: + mode: SnapgridCenter + +- type: entity + id: ExtinguisherCabinetFilled + parent: ExtinguisherCabinet + components: + - type: ExtinguisherCabinetFilled diff --git a/Resources/Prototypes/Entities/Objects/Misc/fire_extinguisher.yml b/Resources/Prototypes/Entities/Objects/Misc/fire_extinguisher.yml index c341ef56d0..f1c5501fe1 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/fire_extinguisher.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/fire_extinguisher.yml @@ -27,3 +27,4 @@ fuelType: chem.H2O fuelName: water fuelCost: 50 + - type: FireExtinguisher diff --git a/Resources/Prototypes/Recipes/Construction/misc.yml b/Resources/Prototypes/Recipes/Construction/misc.yml index d8e96ea00a..96fe94099f 100644 --- a/Resources/Prototypes/Recipes/Construction/misc.yml +++ b/Resources/Prototypes/Recipes/Construction/misc.yml @@ -10,3 +10,20 @@ steps: - material: Metal amount: 1 + +- type: construction + id: ExtinguisherCabinet + name: extinguisher cabinet + category: Items/Misc + keywords: [misc] + placementMode: SnapgridCenter + canBuildInImpassable: true + description: A small wall mounted cabinet designed to hold a fire extinguisher. + icon: Constructible/Misc/extinguisher_cabinet.rsi/extinguisher_closed.png + result: ExtinguisherCabinet + steps: + - material: Metal + amount: 2 + icon: + sprite: Constructible/Misc/extinguisher_cabinet.rsi + state: extinguisher_closed diff --git a/Resources/Textures/Constructible/Misc/extinguisher_cabinet.rsi/extinguisher_closed.png b/Resources/Textures/Constructible/Misc/extinguisher_cabinet.rsi/extinguisher_closed.png new file mode 100644 index 0000000000000000000000000000000000000000..f0a2177fec103c7b2e5b441858cbed91669e8159 GIT binary patch literal 432 zcmV;h0Z;ykP);NV}aCT&_# zC?(B}bttx$q>vj(y5xflIrnh*?#WGZASPzUC=$7YX$zXBxni|i%~$QDga8Ap2|(A> z$z%(3P2DqZ@9@}n%{dtXfOe}vDv_lBX_87LM^~rS*nq<()xCRdgcknX@javnuda2&_Awp=L6mXjCo!l}QFZwCGF1TxtIX|;$D0)#b+ zcQ&`jNlH3Aff2&OwuLKf=Ze_~^7w}@@41_JPvA#O7 zdx*FLi={1BEYc2mv1B{}pc_VX0z!;m!@<{g&@#aUgb*nIKE*SC1i4;2S^>r5M-&vP z-!Z^trOMgSE&wl&cUaxwkP_qoN(*#No&B9P&owodALg`Pr38G>gqo&Joe910I}^sl a#QXw(rFLmJH3M@10000&% literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Misc/extinguisher_cabinet.rsi/extinguisher_empty.png b/Resources/Textures/Constructible/Misc/extinguisher_cabinet.rsi/extinguisher_empty.png new file mode 100644 index 0000000000000000000000000000000000000000..5653c6026ab2b55874da9555801bfa8be8d2a9ae GIT binary patch literal 405 zcmV;G0c!q$^g+X zc5o0f4`epWbg64!TP58x?SRy?AT~`RxnLlIlsg zm4isrG&D_%uRYIOE6-XLFpPSl(3HpP3+X+eTmi$VQ>&dOuC?x-X_H)L5BrfEubMA8C6h=o0260$vEMn=XzW!GX%00_T(00000NkvXXu0mjfPQ9}? literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Misc/extinguisher_cabinet.rsi/extinguisher_full.png b/Resources/Textures/Constructible/Misc/extinguisher_cabinet.rsi/extinguisher_full.png new file mode 100644 index 0000000000000000000000000000000000000000..740b7d3729da69def8a051fee81d181f06c3d278 GIT binary patch literal 498 zcmVrm6Bt+%0(3F(Ax_9DOEY`8UUqJu>zTQy)B9REC(v!mv4-Zf(J#oCh1wgJE zKnP)Xa-vIR^Hv=LWV3ewq)vC4n_pmVenGmXvIDI)*7a!s#zNx&tRI}S9G2@%$$@%k zn#R#~xIxHIpyWW`NXUu%(`nAqU)|TkvMiuis^*UzSoHbOZJSlUpT)ZFi-kO9ISCH=f>4*Z#b>g6R-O(Pf# zI^5yLlJqyAd>iWeG?}SMb}lX)E)$Ickk~sRvG&1D$nCE-5k2Q_zfJg@hLXu7@pxQn oB9ay$glK>Mwt(zR=)r@BcjjY<+Law4MF0Q*07*qoM6N<$g1pS*z3f9^fCbGh&IyWj8ke)qZe-u?IimMjffHjdnSrvM?O#h1_LnQC(Z z)N3yQfNDvG!|O-2B)24GAD*cli9`(Rk8%J20Bqw^002=Gp(qvV_jsI8lnRn(M*sjx zwSy2+H`)mJ z&RmoG5_VHjF2Dx>`WGbC&9r9VM=&-K;L0C3fc92^rfKE?tZu9!mA*zSwnu%Y?LaiT zjl1+MKHeM6Xek_~vF}>d{NL~~mjlo^0v`1RkW5}ca69R(U*?|%O0000< KMNUMnLSTY)Y0h2% literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Misc/extinguisher_cabinet.rsi/meta.json b/Resources/Textures/Constructible/Misc/extinguisher_cabinet.rsi/meta.json new file mode 100644 index 0000000000..f27ae0220e --- /dev/null +++ b/Resources/Textures/Constructible/Misc/extinguisher_cabinet.rsi/meta.json @@ -0,0 +1,47 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/tgstation/tgstation at commit d0d81185f09ca30d3b0856d476544240dba0de53", + "states": [ + { + "name": "extinguisher_closed", + "directions": 1, + "delays": [ + [ + 1.0 + ] + ] + }, + { + "name": "extinguisher_empty", + "directions": 1, + "delays": [ + [ + 1.0 + ] + ] + }, + { + "name": "extinguisher_full", + "directions": 1, + "delays": [ + [ + 1.0 + ] + ] + }, + { + "name": "extinguisher_mini", + "directions": 1, + "delays": [ + [ + 1.0 + ] + ] + } + ] +} From 77057ac499cc7bc0e8e318224a74146d02cd325e Mon Sep 17 00:00:00 2001 From: Swept Date: Wed, 2 Sep 2020 09:53:28 +0000 Subject: [PATCH 075/103] Cleans up backpack prototypes/rsis (#2002) * Backpack rsis up to snuff * Readds holding meta.json * Updated bag of holdings license * Backpacks prototype now clean --- .../Entities/Clothing/Back/backpacks.yml | 30 +++++++----------- ...ped-BACKPACK.png => equipped-BACKPACK.png} | Bin .../backpack.rsi/{backpack.png => icon.png} | Bin ...ckpack-inhand-left.png => inhand-left.png} | Bin ...pack-inhand-right.png => inhand-right.png} | Bin .../Back/Backpacks/backpack.rsi/meta.json | 10 +++--- ...ped-BACKPACK.png => equipped-BACKPACK.png} | Bin .../captain.rsi/{captain.png => icon.png} | Bin ...aptain-inhand-left.png => inhand-left.png} | Bin ...tain-inhand-right.png => inhand-right.png} | Bin .../Back/Backpacks/captain.rsi/meta.json | 16 ++++++---- ...ped-BACKPACK.png => equipped-BACKPACK.png} | Bin .../clown.rsi/{clown.png => icon.png} | Bin ...{clown-inhand-left.png => inhand-left.png} | Bin ...lown-inhand-right.png => inhand-right.png} | Bin .../Back/Backpacks/clown.rsi/meta.json | 16 ++++++---- ...ped-BACKPACK.png => equipped-BACKPACK.png} | Bin .../{engineering.png => icon.png} | Bin ...eering-inhand-left.png => inhand-left.png} | Bin ...ring-inhand-right.png => inhand-right.png} | Bin .../Back/Backpacks/engineering.rsi/meta.json | 10 +++--- .../Back/Backpacks/holding.rsi/meta.json | 2 ++ ...ped-BACKPACK.png => equipped-BACKPACK.png} | Bin .../medical.rsi/{medical.png => icon.png} | Bin ...edical-inhand-left.png => inhand-left.png} | Bin ...ical-inhand-right.png => inhand-right.png} | Bin .../Back/Backpacks/medical.rsi/meta.json | 16 ++++++---- ...ped-BACKPACK.png => equipped-BACKPACK.png} | Bin .../security.rsi/{security.png => icon.png} | Bin ...curity-inhand-left.png => inhand-left.png} | Bin ...rity-inhand-right.png => inhand-right.png} | Bin .../Back/Backpacks/security.rsi/meta.json | 22 +++++++------ 32 files changed, 65 insertions(+), 57 deletions(-) rename Resources/Textures/Clothing/Back/Backpacks/backpack.rsi/{backpack-equipped-BACKPACK.png => equipped-BACKPACK.png} (100%) rename Resources/Textures/Clothing/Back/Backpacks/backpack.rsi/{backpack.png => icon.png} (100%) rename Resources/Textures/Clothing/Back/Backpacks/backpack.rsi/{backpack-inhand-left.png => inhand-left.png} (100%) rename Resources/Textures/Clothing/Back/Backpacks/backpack.rsi/{backpack-inhand-right.png => inhand-right.png} (100%) rename Resources/Textures/Clothing/Back/Backpacks/captain.rsi/{captain-equipped-BACKPACK.png => equipped-BACKPACK.png} (100%) rename Resources/Textures/Clothing/Back/Backpacks/captain.rsi/{captain.png => icon.png} (100%) rename Resources/Textures/Clothing/Back/Backpacks/captain.rsi/{captain-inhand-left.png => inhand-left.png} (100%) rename Resources/Textures/Clothing/Back/Backpacks/captain.rsi/{captain-inhand-right.png => inhand-right.png} (100%) rename Resources/Textures/Clothing/Back/Backpacks/clown.rsi/{clown-equipped-BACKPACK.png => equipped-BACKPACK.png} (100%) rename Resources/Textures/Clothing/Back/Backpacks/clown.rsi/{clown.png => icon.png} (100%) rename Resources/Textures/Clothing/Back/Backpacks/clown.rsi/{clown-inhand-left.png => inhand-left.png} (100%) rename Resources/Textures/Clothing/Back/Backpacks/clown.rsi/{clown-inhand-right.png => inhand-right.png} (100%) rename Resources/Textures/Clothing/Back/Backpacks/engineering.rsi/{engineering-equipped-BACKPACK.png => equipped-BACKPACK.png} (100%) rename Resources/Textures/Clothing/Back/Backpacks/engineering.rsi/{engineering.png => icon.png} (100%) rename Resources/Textures/Clothing/Back/Backpacks/engineering.rsi/{engineering-inhand-left.png => inhand-left.png} (100%) rename Resources/Textures/Clothing/Back/Backpacks/engineering.rsi/{engineering-inhand-right.png => inhand-right.png} (100%) rename Resources/Textures/Clothing/Back/Backpacks/medical.rsi/{medical-equipped-BACKPACK.png => equipped-BACKPACK.png} (100%) rename Resources/Textures/Clothing/Back/Backpacks/medical.rsi/{medical.png => icon.png} (100%) rename Resources/Textures/Clothing/Back/Backpacks/medical.rsi/{medical-inhand-left.png => inhand-left.png} (100%) rename Resources/Textures/Clothing/Back/Backpacks/medical.rsi/{medical-inhand-right.png => inhand-right.png} (100%) rename Resources/Textures/Clothing/Back/Backpacks/security.rsi/{security-equipped-BACKPACK.png => equipped-BACKPACK.png} (100%) rename Resources/Textures/Clothing/Back/Backpacks/security.rsi/{security.png => icon.png} (100%) rename Resources/Textures/Clothing/Back/Backpacks/security.rsi/{security-inhand-left.png => inhand-left.png} (100%) rename Resources/Textures/Clothing/Back/Backpacks/security.rsi/{security-inhand-right.png => inhand-right.png} (100%) diff --git a/Resources/Prototypes/Entities/Clothing/Back/backpacks.yml b/Resources/Prototypes/Entities/Clothing/Back/backpacks.yml index 75ee53e73c..fad96b4a63 100644 --- a/Resources/Prototypes/Entities/Clothing/Back/backpacks.yml +++ b/Resources/Prototypes/Entities/Clothing/Back/backpacks.yml @@ -6,17 +6,16 @@ components: - type: Sprite sprite: Clothing/Back/Backpacks/backpack.rsi - state: backpack + state: icon - type: Icon sprite: Clothing/Back/Backpacks/backpack.rsi - state: backpack + state: icon - type: Clothing size: 9999 QuickEquip: false Slots: - back sprite: Clothing/Back/Backpacks/backpack.rsi - HeldPrefix: backpack - type: Storage capacity: 100 @@ -28,13 +27,12 @@ components: - type: Sprite sprite: Clothing/Back/Backpacks/clown.rsi - state: clown + state: icon - type: Icon sprite: Clothing/Back/Backpacks/clown.rsi - state: clown + state: icon - type: Clothing sprite: Clothing/Back/Backpacks/clown.rsi - HeldPrefix: clown - type: entity parent: BackpackClothing @@ -44,13 +42,12 @@ components: - type: Sprite sprite: Clothing/Back/Backpacks/security.rsi - state: security + state: icon - type: Icon sprite: Clothing/Back/Backpacks/security.rsi - state: security + state: icon - type: Clothing sprite: Clothing/Back/Backpacks/security.rsi - HeldPrefix: security - type: entity parent: BackpackClothing @@ -60,13 +57,12 @@ components: - type: Sprite sprite: Clothing/Back/Backpacks/engineering.rsi - state: engineering + state: icon - type: Icon sprite: Clothing/Back/Backpacks/engineering.rsi - state: engineering + state: icon - type: Clothing sprite: Clothing/Back/Backpacks/engineering.rsi - HeldPrefix: engineering - type: entity parent: BackpackClothing @@ -76,13 +72,12 @@ components: - type: Sprite sprite: Clothing/Back/Backpacks/medical.rsi - state: medical + state: icon - type: Icon sprite: Clothing/Back/Backpacks/medical.rsi - state: medical + state: icon - type: Clothing sprite: Clothing/Back/Backpacks/medical.rsi - HeldPrefix: medical - type: entity parent: BackpackClothing @@ -92,13 +87,12 @@ components: - type: Sprite sprite: Clothing/Back/Backpacks/captain.rsi - state: captain + state: icon - type: Icon sprite: Clothing/Back/Backpacks/captain.rsi - state: captain + state: icon - type: Clothing sprite: Clothing/Back/Backpacks/captain.rsi - HeldPrefix: captain # Inhands/On mob aren't working until I refactor this file -Swept diff --git a/Resources/Textures/Clothing/Back/Backpacks/backpack.rsi/backpack-equipped-BACKPACK.png b/Resources/Textures/Clothing/Back/Backpacks/backpack.rsi/equipped-BACKPACK.png similarity index 100% rename from Resources/Textures/Clothing/Back/Backpacks/backpack.rsi/backpack-equipped-BACKPACK.png rename to Resources/Textures/Clothing/Back/Backpacks/backpack.rsi/equipped-BACKPACK.png diff --git a/Resources/Textures/Clothing/Back/Backpacks/backpack.rsi/backpack.png b/Resources/Textures/Clothing/Back/Backpacks/backpack.rsi/icon.png similarity index 100% rename from Resources/Textures/Clothing/Back/Backpacks/backpack.rsi/backpack.png rename to Resources/Textures/Clothing/Back/Backpacks/backpack.rsi/icon.png diff --git a/Resources/Textures/Clothing/Back/Backpacks/backpack.rsi/backpack-inhand-left.png b/Resources/Textures/Clothing/Back/Backpacks/backpack.rsi/inhand-left.png similarity index 100% rename from Resources/Textures/Clothing/Back/Backpacks/backpack.rsi/backpack-inhand-left.png rename to Resources/Textures/Clothing/Back/Backpacks/backpack.rsi/inhand-left.png diff --git a/Resources/Textures/Clothing/Back/Backpacks/backpack.rsi/backpack-inhand-right.png b/Resources/Textures/Clothing/Back/Backpacks/backpack.rsi/inhand-right.png similarity index 100% rename from Resources/Textures/Clothing/Back/Backpacks/backpack.rsi/backpack-inhand-right.png rename to Resources/Textures/Clothing/Back/Backpacks/backpack.rsi/inhand-right.png diff --git a/Resources/Textures/Clothing/Back/Backpacks/backpack.rsi/meta.json b/Resources/Textures/Clothing/Back/Backpacks/backpack.rsi/meta.json index 28c9ebe555..e84a910cb3 100644 --- a/Resources/Textures/Clothing/Back/Backpacks/backpack.rsi/meta.json +++ b/Resources/Textures/Clothing/Back/Backpacks/backpack.rsi/meta.json @@ -1,24 +1,26 @@ { "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/547852588166c8e091b441e4e67169e156bb09c1", "size": { "x": 32, "y": 32 }, "states": [ { - "name": "backpack", + "name": "icon", "directions": 1 }, { - "name": "backpack-equipped-BACKPACK", + "name": "equipped-BACKPACK", "directions": 4 }, { - "name": "backpack-inhand-left", + "name": "inhand-left", "directions": 4 }, { - "name": "backpack-inhand-right", + "name": "inhand-right", "directions": 4 } ] diff --git a/Resources/Textures/Clothing/Back/Backpacks/captain.rsi/captain-equipped-BACKPACK.png b/Resources/Textures/Clothing/Back/Backpacks/captain.rsi/equipped-BACKPACK.png similarity index 100% rename from Resources/Textures/Clothing/Back/Backpacks/captain.rsi/captain-equipped-BACKPACK.png rename to Resources/Textures/Clothing/Back/Backpacks/captain.rsi/equipped-BACKPACK.png diff --git a/Resources/Textures/Clothing/Back/Backpacks/captain.rsi/captain.png b/Resources/Textures/Clothing/Back/Backpacks/captain.rsi/icon.png similarity index 100% rename from Resources/Textures/Clothing/Back/Backpacks/captain.rsi/captain.png rename to Resources/Textures/Clothing/Back/Backpacks/captain.rsi/icon.png diff --git a/Resources/Textures/Clothing/Back/Backpacks/captain.rsi/captain-inhand-left.png b/Resources/Textures/Clothing/Back/Backpacks/captain.rsi/inhand-left.png similarity index 100% rename from Resources/Textures/Clothing/Back/Backpacks/captain.rsi/captain-inhand-left.png rename to Resources/Textures/Clothing/Back/Backpacks/captain.rsi/inhand-left.png diff --git a/Resources/Textures/Clothing/Back/Backpacks/captain.rsi/captain-inhand-right.png b/Resources/Textures/Clothing/Back/Backpacks/captain.rsi/inhand-right.png similarity index 100% rename from Resources/Textures/Clothing/Back/Backpacks/captain.rsi/captain-inhand-right.png rename to Resources/Textures/Clothing/Back/Backpacks/captain.rsi/inhand-right.png diff --git a/Resources/Textures/Clothing/Back/Backpacks/captain.rsi/meta.json b/Resources/Textures/Clothing/Back/Backpacks/captain.rsi/meta.json index 2e63d7d679..e84a910cb3 100644 --- a/Resources/Textures/Clothing/Back/Backpacks/captain.rsi/meta.json +++ b/Resources/Textures/Clothing/Back/Backpacks/captain.rsi/meta.json @@ -1,24 +1,26 @@ { "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/547852588166c8e091b441e4e67169e156bb09c1", "size": { "x": 32, "y": 32 }, "states": [ { - "name": "captain-inhand-right", - "directions": 4 - }, - { - "name": "captain", + "name": "icon", "directions": 1 }, { - "name": "captain-equipped-BACKPACK", + "name": "equipped-BACKPACK", "directions": 4 }, { - "name": "captain-inhand-left", + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", "directions": 4 } ] diff --git a/Resources/Textures/Clothing/Back/Backpacks/clown.rsi/clown-equipped-BACKPACK.png b/Resources/Textures/Clothing/Back/Backpacks/clown.rsi/equipped-BACKPACK.png similarity index 100% rename from Resources/Textures/Clothing/Back/Backpacks/clown.rsi/clown-equipped-BACKPACK.png rename to Resources/Textures/Clothing/Back/Backpacks/clown.rsi/equipped-BACKPACK.png diff --git a/Resources/Textures/Clothing/Back/Backpacks/clown.rsi/clown.png b/Resources/Textures/Clothing/Back/Backpacks/clown.rsi/icon.png similarity index 100% rename from Resources/Textures/Clothing/Back/Backpacks/clown.rsi/clown.png rename to Resources/Textures/Clothing/Back/Backpacks/clown.rsi/icon.png diff --git a/Resources/Textures/Clothing/Back/Backpacks/clown.rsi/clown-inhand-left.png b/Resources/Textures/Clothing/Back/Backpacks/clown.rsi/inhand-left.png similarity index 100% rename from Resources/Textures/Clothing/Back/Backpacks/clown.rsi/clown-inhand-left.png rename to Resources/Textures/Clothing/Back/Backpacks/clown.rsi/inhand-left.png diff --git a/Resources/Textures/Clothing/Back/Backpacks/clown.rsi/clown-inhand-right.png b/Resources/Textures/Clothing/Back/Backpacks/clown.rsi/inhand-right.png similarity index 100% rename from Resources/Textures/Clothing/Back/Backpacks/clown.rsi/clown-inhand-right.png rename to Resources/Textures/Clothing/Back/Backpacks/clown.rsi/inhand-right.png diff --git a/Resources/Textures/Clothing/Back/Backpacks/clown.rsi/meta.json b/Resources/Textures/Clothing/Back/Backpacks/clown.rsi/meta.json index 58102b39ac..e84a910cb3 100644 --- a/Resources/Textures/Clothing/Back/Backpacks/clown.rsi/meta.json +++ b/Resources/Textures/Clothing/Back/Backpacks/clown.rsi/meta.json @@ -1,24 +1,26 @@ { "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/547852588166c8e091b441e4e67169e156bb09c1", "size": { "x": 32, "y": 32 }, "states": [ { - "name": "clown-inhand-right", - "directions": 4 - }, - { - "name": "clown", + "name": "icon", "directions": 1 }, { - "name": "clown-inhand-left", + "name": "equipped-BACKPACK", "directions": 4 }, { - "name": "clown-equipped-BACKPACK", + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", "directions": 4 } ] diff --git a/Resources/Textures/Clothing/Back/Backpacks/engineering.rsi/engineering-equipped-BACKPACK.png b/Resources/Textures/Clothing/Back/Backpacks/engineering.rsi/equipped-BACKPACK.png similarity index 100% rename from Resources/Textures/Clothing/Back/Backpacks/engineering.rsi/engineering-equipped-BACKPACK.png rename to Resources/Textures/Clothing/Back/Backpacks/engineering.rsi/equipped-BACKPACK.png diff --git a/Resources/Textures/Clothing/Back/Backpacks/engineering.rsi/engineering.png b/Resources/Textures/Clothing/Back/Backpacks/engineering.rsi/icon.png similarity index 100% rename from Resources/Textures/Clothing/Back/Backpacks/engineering.rsi/engineering.png rename to Resources/Textures/Clothing/Back/Backpacks/engineering.rsi/icon.png diff --git a/Resources/Textures/Clothing/Back/Backpacks/engineering.rsi/engineering-inhand-left.png b/Resources/Textures/Clothing/Back/Backpacks/engineering.rsi/inhand-left.png similarity index 100% rename from Resources/Textures/Clothing/Back/Backpacks/engineering.rsi/engineering-inhand-left.png rename to Resources/Textures/Clothing/Back/Backpacks/engineering.rsi/inhand-left.png diff --git a/Resources/Textures/Clothing/Back/Backpacks/engineering.rsi/engineering-inhand-right.png b/Resources/Textures/Clothing/Back/Backpacks/engineering.rsi/inhand-right.png similarity index 100% rename from Resources/Textures/Clothing/Back/Backpacks/engineering.rsi/engineering-inhand-right.png rename to Resources/Textures/Clothing/Back/Backpacks/engineering.rsi/inhand-right.png diff --git a/Resources/Textures/Clothing/Back/Backpacks/engineering.rsi/meta.json b/Resources/Textures/Clothing/Back/Backpacks/engineering.rsi/meta.json index 09fa110b6e..e84a910cb3 100644 --- a/Resources/Textures/Clothing/Back/Backpacks/engineering.rsi/meta.json +++ b/Resources/Textures/Clothing/Back/Backpacks/engineering.rsi/meta.json @@ -1,24 +1,26 @@ { "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/547852588166c8e091b441e4e67169e156bb09c1", "size": { "x": 32, "y": 32 }, "states": [ { - "name": "engineering", + "name": "icon", "directions": 1 }, { - "name": "engineering-inhand-left", + "name": "equipped-BACKPACK", "directions": 4 }, { - "name": "engineering-equipped-BACKPACK", + "name": "inhand-left", "directions": 4 }, { - "name": "engineering-inhand-right", + "name": "inhand-right", "directions": 4 } ] diff --git a/Resources/Textures/Clothing/Back/Backpacks/holding.rsi/meta.json b/Resources/Textures/Clothing/Back/Backpacks/holding.rsi/meta.json index f4de573b6a..3fde6c9744 100644 --- a/Resources/Textures/Clothing/Back/Backpacks/holding.rsi/meta.json +++ b/Resources/Textures/Clothing/Back/Backpacks/holding.rsi/meta.json @@ -1,5 +1,7 @@ { "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/547852588166c8e091b441e4e67169e156bb09c1", "size": { "x": 32, "y": 32 diff --git a/Resources/Textures/Clothing/Back/Backpacks/medical.rsi/medical-equipped-BACKPACK.png b/Resources/Textures/Clothing/Back/Backpacks/medical.rsi/equipped-BACKPACK.png similarity index 100% rename from Resources/Textures/Clothing/Back/Backpacks/medical.rsi/medical-equipped-BACKPACK.png rename to Resources/Textures/Clothing/Back/Backpacks/medical.rsi/equipped-BACKPACK.png diff --git a/Resources/Textures/Clothing/Back/Backpacks/medical.rsi/medical.png b/Resources/Textures/Clothing/Back/Backpacks/medical.rsi/icon.png similarity index 100% rename from Resources/Textures/Clothing/Back/Backpacks/medical.rsi/medical.png rename to Resources/Textures/Clothing/Back/Backpacks/medical.rsi/icon.png diff --git a/Resources/Textures/Clothing/Back/Backpacks/medical.rsi/medical-inhand-left.png b/Resources/Textures/Clothing/Back/Backpacks/medical.rsi/inhand-left.png similarity index 100% rename from Resources/Textures/Clothing/Back/Backpacks/medical.rsi/medical-inhand-left.png rename to Resources/Textures/Clothing/Back/Backpacks/medical.rsi/inhand-left.png diff --git a/Resources/Textures/Clothing/Back/Backpacks/medical.rsi/medical-inhand-right.png b/Resources/Textures/Clothing/Back/Backpacks/medical.rsi/inhand-right.png similarity index 100% rename from Resources/Textures/Clothing/Back/Backpacks/medical.rsi/medical-inhand-right.png rename to Resources/Textures/Clothing/Back/Backpacks/medical.rsi/inhand-right.png diff --git a/Resources/Textures/Clothing/Back/Backpacks/medical.rsi/meta.json b/Resources/Textures/Clothing/Back/Backpacks/medical.rsi/meta.json index d62196bd26..e84a910cb3 100644 --- a/Resources/Textures/Clothing/Back/Backpacks/medical.rsi/meta.json +++ b/Resources/Textures/Clothing/Back/Backpacks/medical.rsi/meta.json @@ -1,24 +1,26 @@ { "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/547852588166c8e091b441e4e67169e156bb09c1", "size": { "x": 32, "y": 32 }, "states": [ { - "name": "medical-equipped-BACKPACK", - "directions": 4 - }, - { - "name": "medical", + "name": "icon", "directions": 1 }, { - "name": "medical-inhand-left", + "name": "equipped-BACKPACK", "directions": 4 }, { - "name": "medical-inhand-right", + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", "directions": 4 } ] diff --git a/Resources/Textures/Clothing/Back/Backpacks/security.rsi/security-equipped-BACKPACK.png b/Resources/Textures/Clothing/Back/Backpacks/security.rsi/equipped-BACKPACK.png similarity index 100% rename from Resources/Textures/Clothing/Back/Backpacks/security.rsi/security-equipped-BACKPACK.png rename to Resources/Textures/Clothing/Back/Backpacks/security.rsi/equipped-BACKPACK.png diff --git a/Resources/Textures/Clothing/Back/Backpacks/security.rsi/security.png b/Resources/Textures/Clothing/Back/Backpacks/security.rsi/icon.png similarity index 100% rename from Resources/Textures/Clothing/Back/Backpacks/security.rsi/security.png rename to Resources/Textures/Clothing/Back/Backpacks/security.rsi/icon.png diff --git a/Resources/Textures/Clothing/Back/Backpacks/security.rsi/security-inhand-left.png b/Resources/Textures/Clothing/Back/Backpacks/security.rsi/inhand-left.png similarity index 100% rename from Resources/Textures/Clothing/Back/Backpacks/security.rsi/security-inhand-left.png rename to Resources/Textures/Clothing/Back/Backpacks/security.rsi/inhand-left.png diff --git a/Resources/Textures/Clothing/Back/Backpacks/security.rsi/security-inhand-right.png b/Resources/Textures/Clothing/Back/Backpacks/security.rsi/inhand-right.png similarity index 100% rename from Resources/Textures/Clothing/Back/Backpacks/security.rsi/security-inhand-right.png rename to Resources/Textures/Clothing/Back/Backpacks/security.rsi/inhand-right.png diff --git a/Resources/Textures/Clothing/Back/Backpacks/security.rsi/meta.json b/Resources/Textures/Clothing/Back/Backpacks/security.rsi/meta.json index 73c20c8317..e84a910cb3 100644 --- a/Resources/Textures/Clothing/Back/Backpacks/security.rsi/meta.json +++ b/Resources/Textures/Clothing/Back/Backpacks/security.rsi/meta.json @@ -1,24 +1,26 @@ { "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/547852588166c8e091b441e4e67169e156bb09c1", "size": { "x": 32, "y": 32 }, "states": [ { - "name": "security-inhand-left", - "directions": 4 - }, - { - "name": "security-equipped-BACKPACK", - "directions": 4 - }, - { - "name": "security", + "name": "icon", "directions": 1 }, { - "name": "security-inhand-right", + "name": "equipped-BACKPACK", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", "directions": 4 } ] From 9fdcb2b08484855be62b5b63a227f525658dd248 Mon Sep 17 00:00:00 2001 From: Swept Date: Wed, 2 Sep 2020 09:53:55 +0000 Subject: [PATCH 076/103] Adds Fireextinguisher stuff to IgnoredComponents.cs (#2005) --- Content.Client/IgnoredComponents.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Content.Client/IgnoredComponents.cs b/Content.Client/IgnoredComponents.cs index 41b437d227..43269da4ad 100644 --- a/Content.Client/IgnoredComponents.cs +++ b/Content.Client/IgnoredComponents.cs @@ -172,6 +172,9 @@ "SignalTransmitter", "SignalButton", "SignalLinker", + "ExtinguisherCabinet", + "ExtinguisherCabinetFilled", + "FireExtinguisher", }; } } From 95665d184fce0467b73e9ed1c9590c9616f733c8 Mon Sep 17 00:00:00 2001 From: Swept Date: Wed, 2 Sep 2020 09:57:21 +0000 Subject: [PATCH 077/103] Updates surgery IDs to standard (#2004) * Updates IDs and map file * Update the surgery duffel --- Resources/Maps/saltern.yml | 10 +++++----- .../Prototypes/Entities/Clothing/Back/duffel.yml | 12 ++++++------ .../Tools/{surgery_tools.yml => surgery.yml} | 14 +++++++------- 3 files changed, 18 insertions(+), 18 deletions(-) rename Resources/Prototypes/Entities/Objects/Tools/{surgery_tools.yml => surgery.yml} (96%) diff --git a/Resources/Maps/saltern.yml b/Resources/Maps/saltern.yml index 071bf85549..2b0fa6bbe4 100644 --- a/Resources/Maps/saltern.yml +++ b/Resources/Maps/saltern.yml @@ -500,7 +500,7 @@ entities: rot: -1.5707963267948966 rad type: Transform - uid: 51 - type: bone_saw + type: BoneSaw components: - parent: 857 pos: 19.49593,-21.552101 @@ -565,7 +565,7 @@ entities: - anchored: False type: Collidable - uid: 58 - type: scalpel + type: Scalpel components: - parent: 857 pos: 19.190952,-21.29313 @@ -594,7 +594,7 @@ entities: - anchored: False type: Collidable - uid: 61 - type: retractor + type: Retractor components: - parent: 857 pos: 19.482815,-21.853302 @@ -621,7 +621,7 @@ entities: - deadThreshold: 100 type: Destructible - uid: 64 - type: drill + type: Drill components: - parent: 857 pos: 19.515043,-22.566078 @@ -646,7 +646,7 @@ entities: rot: -1.5707963267948966 rad type: Transform - uid: 67 - type: hemostat + type: Hemostat components: - parent: 857 pos: 19.655668,-21.300453 diff --git a/Resources/Prototypes/Entities/Clothing/Back/duffel.yml b/Resources/Prototypes/Entities/Clothing/Back/duffel.yml index 40e8edb4fc..8dc7431db2 100644 --- a/Resources/Prototypes/Entities/Clothing/Back/duffel.yml +++ b/Resources/Prototypes/Entities/Clothing/Back/duffel.yml @@ -127,11 +127,11 @@ sprite: Clothing/Back/Duffels/duffel_med.rsi - type: StorageFill contents: - - hemostat - - bone_saw - - drill - - cautery - - retractor - - scalpel + - Hemostat + - BoneSaw + - Drill + - Cautery + - Retractor + - Scalpel - type: Storage capacity: 30 diff --git a/Resources/Prototypes/Entities/Objects/Tools/surgery_tools.yml b/Resources/Prototypes/Entities/Objects/Tools/surgery.yml similarity index 96% rename from Resources/Prototypes/Entities/Objects/Tools/surgery_tools.yml rename to Resources/Prototypes/Entities/Objects/Tools/surgery.yml index 5e1ecf0b39..ecb3d12221 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/surgery_tools.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/surgery.yml @@ -14,7 +14,7 @@ - type: entity name: scalpel parent: BaseSurgeryTool - id: scalpel + id: Scalpel desc: A surgical tool used to make incisions into flesh. components: - type: SurgeryTool @@ -32,7 +32,7 @@ - type: entity name: retractor parent: BaseSurgeryTool - id: retractor + id: Retractor desc: A surgical tool used to hold open incisions. components: - type: SurgeryTool @@ -50,7 +50,7 @@ - type: entity name: cautery parent: BaseSurgeryTool - id: cautery + id: Cautery desc: A surgical tool used to cauterize open wounds. components: - type: SurgeryTool @@ -68,7 +68,7 @@ - type: entity name: drill parent: BaseSurgeryTool - id: drill + id: Drill desc: A surgical drill for making holes into hard material. components: - type: SurgeryTool @@ -86,7 +86,7 @@ - type: entity name: bone saw parent: BaseSurgeryTool - id: bone_saw + id: BoneSaw desc: A surgical tool used to cauterize open wounds. components: - type: SurgeryTool @@ -104,7 +104,7 @@ - type: entity name: hemostat parent: BaseSurgeryTool - id: hemostat + id: Hemostat desc: A surgical tool used to compress blood vessels to prevent bleeding. components: - type: SurgeryTool @@ -117,4 +117,4 @@ sprite: Objects/Specific/Medical/surgery_tools.rsi state: hemostat - type: ItemCooldown - - type: MeleeWeapon \ No newline at end of file + - type: MeleeWeapon From e40e3fa267d64a34ee6cca9a7cd0069e393014ea Mon Sep 17 00:00:00 2001 From: SoulSloth <67545203+SoulSloth@users.noreply.github.com> Date: Wed, 2 Sep 2020 06:07:54 -0400 Subject: [PATCH 078/103] Cloning (#1932) * Add art assets for cloning * Added a 'Scan DNA' button to the medical scanner * Made the UI update unconditional for the medical scanner until checks for power changes are in place * Update Medical scanner to reflect powered status and fix #1774 * added a 'scan dna' button the the medical scanner that will add the contained bodies Uid to a list in CloningSystem, fixed an issue with the menu not populating if the scanner starts in an unpowered state * Add disabling logic to 'Scan DNA' button on medical scanner * Removed un-used libraries * changed scan dna button to Scan and Save DNA * Added cloning machine code infrastructure copied from Medical Scanner * Added a list to cloning menu containing some numbers * Cloning Machine UI sends a message to the cloning component with the entityUID * New scans now show up in cloning pod menu * fixed cloning machine collision shape * cloning machine can now spawn the right player profile assuming the attatched entity is still correct. * refactored cloning system to use a map of integer ids to player Minds * Added a return to body cloning loop for the ghost * Fixed warning for _playerManager being possibly null, added TODO note for ghost return to body button acting as a toggle * removed #nullable from cloningMachineWindow" * Trying to get rid of nullable error * fix CloningMachine to not initilize with it's owner components * updated CloningMachine server component to play nice with the new nullable rules * replace flag with eventBus message for sending a ghosts mind to a clone body * Refactor cloning so that a popup option is used to get user consent for cloning * Refactoring * Reverting unused changes for cloning component * Added proper cloning pod sprites and a visualizer so 'idle' and 'cloning' states are properly reflected * added missing robust toolbox contents * Added cloning NoMind State and made cloning take time * Added cloning progress bar and mind status indicator to cloning pod * Added missing localization calls, removeed 'returned to cloned body' from ghostUI * Added unsubscribe for cloningStartedMessage in Mindcomponent.cs OnRemove * Added eject button to cloningMachine and clamped the cloning progress bar to 100% * Added condition to eject body on cloningmachine so bodies can't be ejected until cloning is done * Add click-dragOn functionality to the medical scanner for things with a bodyManager * Messed with scan query so it doesn't fail on dead bodies as long as Mind still owns the mob * refactored clonning scan check on medical scanner so it doesn't do a linq query * merge with rogue toolbox * Change the name of Cloning Machine to the less generic Cloning Pod * Changed Cloning Pod so it pauses cloning while the power is out * Removed the evil LocalizationManager from the cloning menus and used the static Loc instead * removed localization dependency from bound accpetCloning user interface * Removed Ilocalization dependency I accidentally added to ghost ui * Update Content.Client/GameObjects/Components/MedicalScanner/MedicalScannerComponent.cs Co-authored-by: Exp * Changed null check to tryget in case for cloning UiButton.Clone * Parameterized Cloning time on serverside component * tried to reset Robust toolbox module to current master * Added null check to ghost client component message handling, unsubscribe to the mind component listening to the cloning question ui, fixed _clonningProgress typo, moved CloningPod component dependencies to actually be dependencies, removed un-needed disposals of cloning windows, added disposals missing in boundUserInterfaces. * Reset submodule * corrected exception for cloning pod visualizer to refer to cloning pod state and not medical scanner state * Fix typo * Unsubscribe from onUiReceiveMessage in mindcomponent in the onRemove function, not the acceptcloningui function * unsubscribe from OnUiReceiveMessage in CloningPodComponent * unssubscribe from ghostreturn message in cloningpodComponent onRemove Co-authored-by: Exp Co-authored-by: DrSmugleaf --- .../AcceptCloningBoundUserInterface.cs | 45 ++ .../Components/AcceptCloningWindow.cs | 50 ++ .../Components/Actor/CharacterInterface.cs | 1 + .../Components/Body/BodyManagerComponent.cs | 10 +- .../CloningPodBoundUserInterface.cs | 60 +++ .../CloningPod/CloningPodVisualizer.cs | 41 ++ .../Components/CloningPod/CloningPodWindow.cs | 442 ++++++++++++++++++ .../MedicalScanner/MedicalScannerComponent.cs | 13 + .../MedicalScanner/MedicalScannerWindow.cs | 2 +- .../Components/Observer/GhostComponent.cs | 7 +- Content.Client/IgnoredComponents.cs | 2 +- Content.Client/UserInterface/GhostGui.cs | 4 +- .../Components/Medical/CloningPodComponent.cs | 235 ++++++++++ .../Medical/MedicalScannerComponent.cs | 57 ++- .../Components/Mobs/MindComponent.cs | 59 ++- .../Components/Observer/GhostComponent.cs | 32 +- .../EntitySystems/CloningSystem.cs | 32 +- .../Medical/SharedCloningPodComponent.cs | 72 +++ .../Observer/SharedGhostComponent.cs | 7 + .../SharedAcceptCloningComponent.cs | 36 ++ .../Constructible/Power/cloning_machine.yml | 44 ++ .../Entities/Mobs/Species/human.yml | 6 +- .../meta.json | 0 .../pod_0.png | Bin .../scanner.png | Bin .../scanner_maintenance.png | Bin .../scanner_occupied.png | Bin .../scanner_open.png | Bin .../scanner_open_maintenance.png | Bin .../scanner_open_unpowered.png | Bin .../scanner_unpowered.png | Bin .../Specific/Medical/cloning.rsi/meta.json | 56 +++ .../Specific/Medical/cloning.rsi/pod_0.png | Bin 0 -> 1319 bytes .../Specific/Medical/cloning.rsi/pod_1.png | Bin 0 -> 2967 bytes .../Specific/Medical/cloning.rsi/pod_e.png | Bin 0 -> 2937 bytes .../Specific/Medical/cloning.rsi/pod_g.png | Bin 0 -> 3907 bytes 36 files changed, 1276 insertions(+), 37 deletions(-) create mode 100644 Content.Client/GameObjects/Components/AcceptCloningBoundUserInterface.cs create mode 100644 Content.Client/GameObjects/Components/AcceptCloningWindow.cs create mode 100644 Content.Client/GameObjects/Components/CloningPod/CloningPodBoundUserInterface.cs create mode 100644 Content.Client/GameObjects/Components/CloningPod/CloningPodVisualizer.cs create mode 100644 Content.Client/GameObjects/Components/CloningPod/CloningPodWindow.cs create mode 100644 Content.Client/GameObjects/Components/MedicalScanner/MedicalScannerComponent.cs create mode 100644 Content.Server/GameObjects/Components/Medical/CloningPodComponent.cs create mode 100644 Content.Shared/GameObjects/Components/Medical/SharedCloningPodComponent.cs create mode 100644 Content.Shared/GameObjects/Components/SharedAcceptCloningComponent.cs create mode 100644 Resources/Prototypes/Entities/Constructible/Power/cloning_machine.yml rename Resources/Textures/Objects/Specific/Medical/{Cloning.rsi => BodyScanner.rsi}/meta.json (100%) rename Resources/Textures/Objects/Specific/Medical/{Cloning.rsi => BodyScanner.rsi}/pod_0.png (100%) rename Resources/Textures/Objects/Specific/Medical/{Cloning.rsi => BodyScanner.rsi}/scanner.png (100%) rename Resources/Textures/Objects/Specific/Medical/{Cloning.rsi => BodyScanner.rsi}/scanner_maintenance.png (100%) rename Resources/Textures/Objects/Specific/Medical/{Cloning.rsi => BodyScanner.rsi}/scanner_occupied.png (100%) rename Resources/Textures/Objects/Specific/Medical/{Cloning.rsi => BodyScanner.rsi}/scanner_open.png (100%) rename Resources/Textures/Objects/Specific/Medical/{Cloning.rsi => BodyScanner.rsi}/scanner_open_maintenance.png (100%) rename Resources/Textures/Objects/Specific/Medical/{Cloning.rsi => BodyScanner.rsi}/scanner_open_unpowered.png (100%) rename Resources/Textures/Objects/Specific/Medical/{Cloning.rsi => BodyScanner.rsi}/scanner_unpowered.png (100%) create mode 100644 Resources/Textures/Objects/Specific/Medical/cloning.rsi/meta.json create mode 100644 Resources/Textures/Objects/Specific/Medical/cloning.rsi/pod_0.png create mode 100644 Resources/Textures/Objects/Specific/Medical/cloning.rsi/pod_1.png create mode 100644 Resources/Textures/Objects/Specific/Medical/cloning.rsi/pod_e.png create mode 100644 Resources/Textures/Objects/Specific/Medical/cloning.rsi/pod_g.png diff --git a/Content.Client/GameObjects/Components/AcceptCloningBoundUserInterface.cs b/Content.Client/GameObjects/Components/AcceptCloningBoundUserInterface.cs new file mode 100644 index 0000000000..9b38059110 --- /dev/null +++ b/Content.Client/GameObjects/Components/AcceptCloningBoundUserInterface.cs @@ -0,0 +1,45 @@ +using Content.Shared.GameObjects.Components; +using JetBrains.Annotations; +using Robust.Client.GameObjects.Components.UserInterface; + +namespace Content.Client.GameObjects.Components +{ + [UsedImplicitly] + public class AcceptCloningBoundUserInterface : BoundUserInterface + { + + public AcceptCloningBoundUserInterface(ClientUserInterfaceComponent owner, object uiKey) : base(owner, uiKey) + { + } + + private AcceptCloningWindow _window; + + protected override void Open() + { + base.Open(); + + _window = new AcceptCloningWindow(); + _window.OnClose += Close; + _window.DenyButton.OnPressed += _ => _window.Close(); + _window.ConfirmButton.OnPressed += _ => + { + SendMessage( + new SharedAcceptCloningComponent.UiButtonPressedMessage( + SharedAcceptCloningComponent.UiButton.Accept)); + _window.Close(); + }; + _window.OpenCentered(); + } + + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + + if (disposing) + { + _window?.Dispose(); + } + } + + } +} diff --git a/Content.Client/GameObjects/Components/AcceptCloningWindow.cs b/Content.Client/GameObjects/Components/AcceptCloningWindow.cs new file mode 100644 index 0000000000..1731cc9676 --- /dev/null +++ b/Content.Client/GameObjects/Components/AcceptCloningWindow.cs @@ -0,0 +1,50 @@ +#nullable enable +using Robust.Client.UserInterface.Controls; +using Robust.Client.UserInterface.CustomControls; +using Robust.Shared.Localization; + +namespace Content.Client.GameObjects.Components +{ + public sealed class AcceptCloningWindow : SS14Window + { + public readonly Button DenyButton; + public readonly Button ConfirmButton; + + public AcceptCloningWindow() + { + + Title = Loc.GetString("Cloning Machine"); + + Contents.AddChild(new VBoxContainer + { + Children = + { + new VBoxContainer + { + Children = + { + (new Label + { + Text = Loc.GetString("You are being cloned! Transfer your soul to the clone body?") + }), + new HBoxContainer + { + Children = + { + (ConfirmButton = new Button + { + Text = Loc.GetString("Yes"), + }), + (DenyButton = new Button + { + Text = Loc.GetString("No"), + }) + } + }, + } + }, + } + }); + } + } +} diff --git a/Content.Client/GameObjects/Components/Actor/CharacterInterface.cs b/Content.Client/GameObjects/Components/Actor/CharacterInterface.cs index f776411554..0e6e534971 100644 --- a/Content.Client/GameObjects/Components/Actor/CharacterInterface.cs +++ b/Content.Client/GameObjects/Components/Actor/CharacterInterface.cs @@ -2,6 +2,7 @@ using System.Linq; using Content.Client.GameObjects.Components.Mobs; using Content.Client.UserInterface; +using Content.Shared.GameObjects.Components.Mobs; using Content.Shared.Input; using Robust.Client.GameObjects; using Robust.Client.Interfaces.Input; diff --git a/Content.Client/GameObjects/Components/Body/BodyManagerComponent.cs b/Content.Client/GameObjects/Components/Body/BodyManagerComponent.cs index fc54c88a78..83df6704b7 100644 --- a/Content.Client/GameObjects/Components/Body/BodyManagerComponent.cs +++ b/Content.Client/GameObjects/Components/Body/BodyManagerComponent.cs @@ -1,8 +1,10 @@ #nullable enable using Content.Client.GameObjects.Components.Disposal; +using Content.Client.GameObjects.Components.MedicalScanner; using Content.Client.Interfaces.GameObjects.Components.Interaction; using Content.Shared.GameObjects.Components.Body; using Content.Shared.GameObjects.Components.Damage; +using Content.Shared.GameObjects.Components.Medical; using Robust.Client.Interfaces.GameObjects.Components; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; @@ -21,7 +23,13 @@ namespace Content.Client.GameObjects.Components.Body public bool ClientCanDropOn(CanDropEventArgs eventArgs) { - return eventArgs.Target.HasComponent(); + if ( + eventArgs.Target.HasComponent()|| + eventArgs.Target.HasComponent()) + { + return true; + } + return false; } public bool ClientCanDrag(CanDragEventArgs eventArgs) diff --git a/Content.Client/GameObjects/Components/CloningPod/CloningPodBoundUserInterface.cs b/Content.Client/GameObjects/Components/CloningPod/CloningPodBoundUserInterface.cs new file mode 100644 index 0000000000..63760a880e --- /dev/null +++ b/Content.Client/GameObjects/Components/CloningPod/CloningPodBoundUserInterface.cs @@ -0,0 +1,60 @@ +using System; +using System.Collections.Generic; +using Content.Shared.GameObjects.Components.Medical; +using JetBrains.Annotations; +using Robust.Client.GameObjects.Components.UserInterface; +using Robust.Shared.GameObjects; +using Robust.Shared.GameObjects.Components.UserInterface; +using Robust.Shared.IoC; +using Robust.Shared.Localization; +using static Content.Shared.GameObjects.Components.Medical.SharedCloningPodComponent; + +namespace Content.Client.GameObjects.Components.CloningPod +{ + [UsedImplicitly] + public class CloningPodBoundUserInterface : BoundUserInterface + { + public CloningPodBoundUserInterface(ClientUserInterfaceComponent owner, object uiKey) : base(owner, uiKey) + { + } + + private CloningPodWindow _window; + + protected override void Open() + { + base.Open(); + + + _window = new CloningPodWindow(new Dictionary()); + _window.OnClose += Close; + _window.CloneButton.OnPressed += _ => + { + if (_window.SelectedScan != null) + { + SendMessage(new CloningPodUiButtonPressedMessage(UiButton.Clone, (int) _window.SelectedScan)); + } + }; + _window.EjectButton.OnPressed += _ => + { + SendMessage(new CloningPodUiButtonPressedMessage(UiButton.Eject, null)); + }; + _window.OpenCentered(); + } + + protected override void UpdateState(BoundUserInterfaceState state) + { + base.UpdateState(state); + _window.Populate((CloningPodBoundUserInterfaceState) state); + } + + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + + if (disposing) + { + _window?.Dispose(); + } + } + } +} diff --git a/Content.Client/GameObjects/Components/CloningPod/CloningPodVisualizer.cs b/Content.Client/GameObjects/Components/CloningPod/CloningPodVisualizer.cs new file mode 100644 index 0000000000..6838794e8c --- /dev/null +++ b/Content.Client/GameObjects/Components/CloningPod/CloningPodVisualizer.cs @@ -0,0 +1,41 @@ +using System; +using Content.Shared.GameObjects.Components.Medical; +using Robust.Client.GameObjects; +using Robust.Client.Interfaces.GameObjects.Components; +using static Content.Shared.GameObjects.Components.Medical.SharedCloningPodComponent; +using static Content.Shared.GameObjects.Components.Medical.SharedCloningPodComponent.CloningPodStatus; + +namespace Content.Client.GameObjects.Components.CloningPod +{ + public class CloningPodVisualizer : AppearanceVisualizer + { + public override void OnChangeData(AppearanceComponent component) + { + base.OnChangeData(component); + + var sprite = component.Owner.GetComponent(); + if (!component.TryGetData(CloningPodVisuals.Status, out CloningPodStatus status)) return; + sprite.LayerSetState(CloningPodVisualLayers.Machine, StatusToMachineStateId(status)); + } + + private string StatusToMachineStateId(CloningPodStatus status) + { + //TODO: implement NoMind for if the mind is not yet in the body + //TODO: Find a use for GORE POD + switch (status) + { + case Cloning: return "pod_1"; + case NoMind: return "pod_e"; + case Gore: return "pod_g"; + case Idle: return "pod_0"; + default: + throw new ArgumentOutOfRangeException(nameof(status), status, "unknown CloningPodStatus"); + } + } + + public enum CloningPodVisualLayers + { + Machine, + } + } +} diff --git a/Content.Client/GameObjects/Components/CloningPod/CloningPodWindow.cs b/Content.Client/GameObjects/Components/CloningPod/CloningPodWindow.cs new file mode 100644 index 0000000000..8cc1c3b909 --- /dev/null +++ b/Content.Client/GameObjects/Components/CloningPod/CloningPodWindow.cs @@ -0,0 +1,442 @@ +#nullable enable +using System; +using System.Collections.Generic; +using System.Diagnostics; +using Robust.Client.UserInterface; +using Robust.Client.UserInterface.Controls; +using Robust.Client.UserInterface.CustomControls; +using Robust.Shared.Localization; +using Robust.Shared.Maths; +using Robust.Shared.Timing; +using Robust.Shared.Utility; +using Robust.Shared.Localization; +using static Content.Shared.GameObjects.Components.Medical.SharedCloningPodComponent; + +namespace Content.Client.GameObjects.Components.CloningPod +{ + public sealed class CloningPodWindow : SS14Window + { + private Dictionary _scanManager; + + private readonly VBoxContainer _mainVBox; + private readonly ScanListContainer _scanList; + private readonly LineEdit _searchBar; + private readonly Button _clearButton; + public readonly Button CloneButton; + public readonly Button EjectButton; + private readonly CloningScanButton _measureButton; + private CloningScanButton? _selectedButton; + private Label _progressLabel; + private readonly ProgressBar _cloningProgressBar; + private Label _mindState; + + protected override Vector2 ContentsMinimumSize => _mainVBox?.CombinedMinimumSize ?? Vector2.Zero; + private CloningPodBoundUserInterfaceState _lastUpdate = null!; + + // List of scans that are visible based on current filter criteria. + private readonly Dictionary _filteredScans = new Dictionary(); + + // The indices of the visible scans last time UpdateVisibleScans was ran. + // This is inclusive, so end is the index of the last scan, not right after it. + private (int start, int end) _lastScanIndices; + + public int? SelectedScan; + + protected override Vector2? CustomSize => (250, 300); + + public CloningPodWindow( + Dictionary scanManager) + { + _scanManager = scanManager; + + + Title = Loc.GetString("Cloning Machine"); + + Contents.AddChild(_mainVBox = new VBoxContainer + { + Children = + { + new HBoxContainer + { + Children = + { + (_searchBar = new LineEdit + { + SizeFlagsHorizontal = SizeFlags.FillExpand, + PlaceHolder = Loc.GetString("Search") + }), + + (_clearButton = new Button + { + Disabled = true, + Text = Loc.GetString("Clear"), + }) + } + }, + new ScrollContainer + { + CustomMinimumSize = new Vector2(200.0f, 0.0f), + SizeFlagsVertical = SizeFlags.FillExpand, + Children = + { + (_scanList = new ScanListContainer()) + } + }, + new VBoxContainer + { + Children = + { + (CloneButton = new Button + { + Text = Loc.GetString("Clone") + }) + } + }, + (_measureButton = new CloningScanButton {Visible = false}), + (_cloningProgressBar = new ProgressBar + { + CustomMinimumSize = (200, 20), + SizeFlagsHorizontal = SizeFlags.Fill, + MinValue = 0, + MaxValue = 10, + Page = 0, + Value = 0.5f, + Children = + { + (_progressLabel = new Label()) + } + }), + (EjectButton = new Button + { + Text = Loc.GetString("Eject Body") + }), + new HBoxContainer + { + Children = + { + new Label() + { + Text = Loc.GetString("Neural Interface: ") + }, + (_mindState = new Label() + { + Text = Loc.GetString("No Activity"), + FontColorOverride = Color.Red + }), + } + } + } + }); + + + _searchBar.OnTextChanged += OnSearchBarTextChanged; + _clearButton.OnPressed += OnClearButtonPressed; + + BuildEntityList(); + + _searchBar.GrabKeyboardFocus(); + } + + public void Populate(CloningPodBoundUserInterfaceState state) + { + //Ignore useless updates or we can't interact with the UI + //TODO: come up with a better comparision, probably write a comparator because '.Equals' doesn't work + if (_lastUpdate == null || _lastUpdate.MindIdName.Count != state.MindIdName.Count) + { + _scanManager = state.MindIdName; + BuildEntityList(); + _lastUpdate = state; + } + + var percentage = state.Progress / _cloningProgressBar.MaxValue * 100; + _progressLabel.Text = $"{percentage:0}%"; + + _cloningProgressBar.Value = state.Progress; + _mindState.Text = Loc.GetString(state.MindPresent ? "Consciousness Detected" : "No Activity"); + _mindState.FontColorOverride = state.MindPresent ? Color.Green : Color.Red; + } + + private void OnSearchBarTextChanged(LineEdit.LineEditEventArgs args) + { + BuildEntityList(args.Text); + _clearButton.Disabled = string.IsNullOrEmpty(args.Text); + } + + private void OnClearButtonPressed(BaseButton.ButtonEventArgs args) + { + _searchBar.Clear(); + BuildEntityList(""); + } + + + private void BuildEntityList(string? searchStr = null) + { + _filteredScans.Clear(); + _scanList.RemoveAllChildren(); + // Reset last scan indices so it automatically updates the entire list. + _lastScanIndices = (0, -1); + _scanList.RemoveAllChildren(); + _selectedButton = null; + searchStr = searchStr?.ToLowerInvariant(); + + foreach (var scan in _scanManager) + { + if (searchStr != null && !_doesScanMatchSearch(scan.Value, searchStr)) + { + continue; + } + + _filteredScans.Add(scan.Key, scan.Value); + } + + //TODO: set up sort + //_filteredScans.Sort((a, b) => string.Compare(a.ToString(), b.ToString(), StringComparison.Ordinal)); + + _scanList.TotalItemCount = _filteredScans.Count; + } + + private void UpdateVisibleScans() + { + // Update visible buttons in the scan list. + + // Calculate index of first scan to render based on current scroll. + var height = _measureButton.CombinedMinimumSize.Y + ScanListContainer.Separation; + var offset = -_scanList.Position.Y; + var startIndex = (int) Math.Floor(offset / height); + _scanList.ItemOffset = startIndex; + + var (prevStart, prevEnd) = _lastScanIndices; + + // Calculate index of final one. + var endIndex = startIndex - 1; + var spaceUsed = -height; // -height instead of 0 because else it cuts off the last button. + + while (spaceUsed < _scanList.Parent!.Height) + { + spaceUsed += height; + endIndex += 1; + } + + endIndex = Math.Min(endIndex, _filteredScans.Count - 1); + + if (endIndex == prevEnd && startIndex == prevStart) + { + // Nothing changed so bye. + return; + } + + _lastScanIndices = (startIndex, endIndex); + + // Delete buttons at the start of the list that are no longer visible (scrolling down). + for (var i = prevStart; i < startIndex && i <= prevEnd; i++) + { + var control = (CloningScanButton) _scanList.GetChild(0); + DebugTools.Assert(control.Index == i); + _scanList.RemoveChild(control); + } + + // Delete buttons at the end of the list that are no longer visible (scrolling up). + for (var i = prevEnd; i > endIndex && i >= prevStart; i--) + { + var control = (CloningScanButton) _scanList.GetChild(_scanList.ChildCount - 1); + DebugTools.Assert(control.Index == i); + _scanList.RemoveChild(control); + } + + var array = _filteredScans.ToArray(); + + // Create buttons at the start of the list that are now visible (scrolling up). + for (var i = Math.Min(prevStart - 1, endIndex); i >= startIndex; i--) + { + InsertEntityButton(array[i], true, i); + } + + // Create buttons at the end of the list that are now visible (scrolling down). + for (var i = Math.Max(prevEnd + 1, startIndex); i <= endIndex; i++) + { + InsertEntityButton(array[i], false, i); + } + } + + // Create a spawn button and insert it into the start or end of the list. + private void InsertEntityButton(KeyValuePair scan, bool insertFirst, int index) + { + var button = new CloningScanButton + { + Scan = scan.Value, + Id = scan.Key, + Index = index // We track this index purely for debugging. + }; + button.ActualButton.OnToggled += OnItemButtonToggled; + var entityLabelText = scan.Value; + + button.EntityLabel.Text = entityLabelText; + + if (scan.Key == SelectedScan) + { + _selectedButton = button; + _selectedButton.ActualButton.Pressed = true; + } + + //TODO: replace with body's face + /*var tex = IconComponent.GetScanIcon(scan, resourceCache); + var rect = button.EntityTextureRect; + if (tex != null) + { + rect.Texture = tex.Default; + } + else + { + rect.Dispose(); + } + + rect.Dispose(); + */ + + _scanList.AddChild(button); + if (insertFirst) + { + button.SetPositionInParent(0); + } + } + + private static bool _doesScanMatchSearch(string scan, string searchStr) + { + return scan.ToLowerInvariant().Contains(searchStr); + } + + private void OnItemButtonToggled(BaseButton.ButtonToggledEventArgs args) + { + var item = (CloningScanButton) args.Button.Parent!; + if (_selectedButton == item) + { + _selectedButton = null; + SelectedScan = null; + return; + } + else if (_selectedButton != null) + { + _selectedButton.ActualButton.Pressed = false; + } + + _selectedButton = null; + SelectedScan = null; + + _selectedButton = item; + SelectedScan = item.Id; + } + + protected override void FrameUpdate(FrameEventArgs args) + { + base.FrameUpdate(args); + UpdateVisibleScans(); + } + + private class ScanListContainer : Container + { + // Quick and dirty container to do virtualization of the list. + // Basically, get total item count and offset to put the current buttons at. + // Get a constant minimum height and move the buttons in the list up to match the scrollbar. + private int _totalItemCount; + private int _itemOffset; + + public int TotalItemCount + { + get => _totalItemCount; + set + { + _totalItemCount = value; + MinimumSizeChanged(); + } + } + + public int ItemOffset + { + get => _itemOffset; + set + { + _itemOffset = value; + UpdateLayout(); + } + } + + public const float Separation = 2; + + protected override Vector2 CalculateMinimumSize() + { + if (ChildCount == 0) + { + return Vector2.Zero; + } + + var first = GetChild(0); + + var (minX, minY) = first.CombinedMinimumSize; + + return (minX, minY * TotalItemCount + (TotalItemCount - 1) * Separation); + } + + protected override void LayoutUpdateOverride() + { + if (ChildCount == 0) + { + return; + } + + var first = GetChild(0); + + var height = first.CombinedMinimumSize.Y; + var offset = ItemOffset * height + (ItemOffset - 1) * Separation; + + foreach (var child in Children) + { + FitChildInBox(child, UIBox2.FromDimensions(0, offset, Width, height)); + offset += Separation + height; + } + } + } + + [DebuggerDisplay("cloningbutton {" + nameof(Index) + "}")] + private class CloningScanButton : Control + { + public string Scan { get; set; } = default!; + public int Id { get; set; } + public Button ActualButton { get; private set; } + public Label EntityLabel { get; private set; } + public TextureRect EntityTextureRect { get; private set; } + public int Index { get; set; } + + public CloningScanButton() + { + AddChild(ActualButton = new Button + { + SizeFlagsHorizontal = SizeFlags.FillExpand, + SizeFlagsVertical = SizeFlags.FillExpand, + ToggleMode = true, + }); + + AddChild(new HBoxContainer + { + Children = + { + (EntityTextureRect = new TextureRect + { + CustomMinimumSize = (32, 32), + SizeFlagsHorizontal = SizeFlags.ShrinkCenter, + SizeFlagsVertical = SizeFlags.ShrinkCenter, + Stretch = TextureRect.StretchMode.KeepAspectCentered, + CanShrink = true + }), + (EntityLabel = new Label + { + SizeFlagsVertical = SizeFlags.ShrinkCenter, + SizeFlagsHorizontal = SizeFlags.FillExpand, + Text = "", + ClipText = true + }) + } + }); + } + } + } +} diff --git a/Content.Client/GameObjects/Components/MedicalScanner/MedicalScannerComponent.cs b/Content.Client/GameObjects/Components/MedicalScanner/MedicalScannerComponent.cs new file mode 100644 index 0000000000..62bae7d387 --- /dev/null +++ b/Content.Client/GameObjects/Components/MedicalScanner/MedicalScannerComponent.cs @@ -0,0 +1,13 @@ +using Content.Shared.GameObjects.Components.Medical; +using Robust.Shared.GameObjects; + +namespace Content.Client.GameObjects.Components.MedicalScanner +{ + + [RegisterComponent] + [ComponentReference(typeof(SharedMedicalScannerComponent))] + public class MedicalScannerComponent : SharedMedicalScannerComponent + { + + } +} diff --git a/Content.Client/GameObjects/Components/MedicalScanner/MedicalScannerWindow.cs b/Content.Client/GameObjects/Components/MedicalScanner/MedicalScannerWindow.cs index 4668854fbf..59edf052f3 100644 --- a/Content.Client/GameObjects/Components/MedicalScanner/MedicalScannerWindow.cs +++ b/Content.Client/GameObjects/Components/MedicalScanner/MedicalScannerWindow.cs @@ -24,7 +24,7 @@ namespace Content.Client.GameObjects.Components.MedicalScanner { (ScanButton = new Button { - Text = "Scan and Save DNA" + Text = Loc.GetString("Scan and Save DNA") }), (_diagnostics = new Label { diff --git a/Content.Client/GameObjects/Components/Observer/GhostComponent.cs b/Content.Client/GameObjects/Components/Observer/GhostComponent.cs index 077eae387c..f25c709136 100644 --- a/Content.Client/GameObjects/Components/Observer/GhostComponent.cs +++ b/Content.Client/GameObjects/Components/Observer/GhostComponent.cs @@ -18,8 +18,7 @@ namespace Content.Client.GameObjects.Components.Observer private GhostGui _gui; - [ViewVariables(VVAccess.ReadOnly)] - public bool CanReturnToBody { get; private set; } = true; + [ViewVariables(VVAccess.ReadOnly)] public bool CanReturnToBody { get; private set; } = true; private bool _isAttached; @@ -51,7 +50,8 @@ namespace Content.Client.GameObjects.Components.Observer base.Initialize(); if (Owner.TryGetComponent(out SpriteComponent component)) - component.Visible = _playerManager.LocalPlayer.ControlledEntity?.HasComponent() ?? false; + component.Visible = + _playerManager.LocalPlayer.ControlledEntity?.HasComponent() ?? false; } public override void HandleMessage(ComponentMessage message, IComponent component) @@ -98,7 +98,6 @@ namespace Content.Client.GameObjects.Components.Observer { _gui?.Update(); } - } } } diff --git a/Content.Client/IgnoredComponents.cs b/Content.Client/IgnoredComponents.cs index 43269da4ad..af320568fa 100644 --- a/Content.Client/IgnoredComponents.cs +++ b/Content.Client/IgnoredComponents.cs @@ -9,6 +9,7 @@ "Breakable", "Pickaxe", "Interactable", + "CloningPod", "Destructible", "Temperature", "Explosive", @@ -58,7 +59,6 @@ "AccessReader", "IdCardConsole", "Airlock", - "MedicalScanner", "WirePlacer", "Drink", "Food", diff --git a/Content.Client/UserInterface/GhostGui.cs b/Content.Client/UserInterface/GhostGui.cs index 5ac6e1a7cc..b998597790 100644 --- a/Content.Client/UserInterface/GhostGui.cs +++ b/Content.Client/UserInterface/GhostGui.cs @@ -2,12 +2,14 @@ using Content.Client.GameObjects.Components.Observer; using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controls; using Robust.Shared.IoC; +using Robust.Shared.Localization; namespace Content.Client.UserInterface { public class GhostGui : Control { - public Button ReturnToBody = new Button(){Text = "Return to body"}; + + public readonly Button ReturnToBody = new Button() {Text = Loc.GetString("Return to body")}; private GhostComponent _owner; public GhostGui(GhostComponent owner) diff --git a/Content.Server/GameObjects/Components/Medical/CloningPodComponent.cs b/Content.Server/GameObjects/Components/Medical/CloningPodComponent.cs new file mode 100644 index 0000000000..4eefd651e3 --- /dev/null +++ b/Content.Server/GameObjects/Components/Medical/CloningPodComponent.cs @@ -0,0 +1,235 @@ +#nullable enable +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Content.Server.GameObjects.Components.Mobs; +using Content.Server.GameObjects.Components.Observer; +using Content.Server.GameObjects.Components.Power.ApcNetComponents; +using Content.Server.GameObjects.EntitySystems; +using Content.Server.Interfaces; +using Content.Server.Mobs; +using Content.Server.Utility; +using Content.Shared.GameObjects.Components.Damage; +using Content.Shared.GameObjects.Components.Medical; +using Content.Shared.Interfaces.GameObjects.Components; +using Content.Shared.Preferences; +using Robust.Server.GameObjects; +using Robust.Server.GameObjects.Components.Container; +using Robust.Server.GameObjects.Components.UserInterface; +using Robust.Server.Interfaces.GameObjects; +using Robust.Server.Interfaces.Player; +using Robust.Shared.GameObjects; +using Robust.Shared.Interfaces.GameObjects; +using Robust.Shared.IoC; +using Robust.Shared.Maths; +using Robust.Shared.Network; +using Robust.Shared.Serialization; +using Robust.Shared.ViewVariables; + +namespace Content.Server.GameObjects.Components.Medical +{ + [RegisterComponent] + [ComponentReference(typeof(IActivate))] + public class CloningPodComponent : SharedCloningPodComponent, IActivate + { + [Dependency] private readonly IServerPreferencesManager _prefsManager = null!; + [Dependency] private readonly IEntityManager _entityManager = null!; + [Dependency] private readonly IPlayerManager _playerManager = null!; + + [ViewVariables] + private bool Powered => !Owner.TryGetComponent(out PowerReceiverComponent? receiver) || receiver.Powered; + + [ViewVariables] + private BoundUserInterface? UserInterface => + Owner.GetUIOrNull(CloningPodUIKey.Key); + + private ContainerSlot _bodyContainer = default!; + private Mind? _capturedMind; + private CloningPodStatus _status; + private float _cloningProgress = 0; + private float _cloningTime; + + + public override void ExposeData(ObjectSerializer serializer) + { + base.ExposeData(serializer); + serializer.DataField(ref _cloningTime, "cloningTime", 10f); + } + + public override void Initialize() + { + base.Initialize(); + if (UserInterface != null) + { + UserInterface.OnReceiveMessage += OnUiReceiveMessage; + } + + _bodyContainer = ContainerManagerComponent.Ensure($"{Name}-bodyContainer", Owner); + + //TODO: write this so that it checks for a change in power events for GORE POD cases + var newState = GetUserInterfaceState(); + UserInterface?.SetState(newState); + + UpdateUserInterface(); + + Owner.EntityManager.EventBus.SubscribeEvent(EventSource.Local, this, + HandleGhostReturn); + } + + public void Update(float frametime) + { + if (_bodyContainer.ContainedEntity != null && + Powered) + { + _cloningProgress += frametime; + _cloningProgress = MathHelper.Clamp(_cloningProgress, 0f, _cloningTime); + } + + if (_cloningProgress >= _cloningTime && + _bodyContainer.ContainedEntity != null && + _capturedMind?.Session.AttachedEntity == _bodyContainer.ContainedEntity && + Powered) + { + _bodyContainer.Remove(_bodyContainer.ContainedEntity); + _capturedMind = null; + _cloningProgress = 0f; + + _status = CloningPodStatus.Idle; + UpdateAppearance(); + } + + UpdateUserInterface(); + } + + public override void OnRemove() + { + if (UserInterface != null) + { + UserInterface.OnReceiveMessage -= OnUiReceiveMessage; + } + + Owner.EntityManager.EventBus.UnsubscribeEvent(EventSource.Local, this); + + base.OnRemove(); + } + + private void UpdateUserInterface() + { + if (!Powered) return; + + UserInterface?.SetState(GetUserInterfaceState()); + } + + private CloningPodBoundUserInterfaceState GetUserInterfaceState() + { + return new CloningPodBoundUserInterfaceState(CloningSystem.getIdToUser(), _cloningProgress, + (_status == CloningPodStatus.Cloning)); + } + + private void UpdateAppearance() + { + if (Owner.TryGetComponent(out AppearanceComponent? appearance)) + { + appearance.SetData(CloningPodVisuals.Status, _status); + } + } + + public void Activate(ActivateEventArgs eventArgs) + { + if (!Powered || + !eventArgs.User.TryGetComponent(out IActorComponent? actor)) + { + return; + } + + UserInterface?.Open(actor.playerSession); + } + + private async void OnUiReceiveMessage(ServerBoundUserInterfaceMessage obj) + { + if (!(obj.Message is CloningPodUiButtonPressedMessage message)) return; + + switch (message.Button) + { + case UiButton.Clone: + + if (message.ScanId == null) return; + + if (_bodyContainer.ContainedEntity != null || + !CloningSystem.Minds.TryGetValue(message.ScanId.Value, out var mind)) + { + return; + } + + var dead = + mind.OwnedEntity.TryGetComponent(out var damageable) && + damageable.CurrentDamageState == DamageState.Dead; + if (!dead) return; + + + var mob = _entityManager.SpawnEntity("HumanMob_Content", Owner.Transform.MapPosition); + var client = _playerManager + .GetPlayersBy(x => x.SessionId == mind.SessionId).First(); + mob.GetComponent() + .UpdateFromProfile(GetPlayerProfileAsync(client.Name).Result); + mob.Name = GetPlayerProfileAsync(client.Name).Result.Name; + + _bodyContainer.Insert(mob); + _capturedMind = mind; + + Owner.EntityManager.EventBus.RaiseEvent(EventSource.Local, + new CloningStartedMessage(_capturedMind)); + _status = CloningPodStatus.NoMind; + UpdateAppearance(); + + break; + + case UiButton.Eject: + if (_bodyContainer.ContainedEntity == null || _cloningProgress < _cloningTime) break; + + _bodyContainer.Remove(_bodyContainer.ContainedEntity!); + _capturedMind = null; + _cloningProgress = 0f; + _status = CloningPodStatus.Idle; + UpdateAppearance(); + break; + + default: + throw new ArgumentOutOfRangeException(); + } + } + + public class CloningStartedMessage : EntitySystemMessage + { + public CloningStartedMessage(Mind capturedMind) + { + CapturedMind = capturedMind; + } + + public Mind CapturedMind { get; } + } + + + private async Task GetPlayerProfileAsync(string username) + { + return (HumanoidCharacterProfile) (await _prefsManager.GetPreferencesAsync(username)) + .SelectedCharacter; + } + + private void HandleGhostReturn(GhostComponent.GhostReturnMessage message) + { + if (message.Sender == _capturedMind) + { + //If the captured mind is in a ghost, we want to get rid of it. + _capturedMind.VisitingEntity?.Delete(); + + //Transfer the mind to the new mob + _capturedMind.TransferTo(_bodyContainer.ContainedEntity); + + _status = CloningPodStatus.Cloning; + UpdateAppearance(); + } + } + } +} diff --git a/Content.Server/GameObjects/Components/Medical/MedicalScannerComponent.cs b/Content.Server/GameObjects/Components/Medical/MedicalScannerComponent.cs index cb2a11fb40..5a297b71c2 100644 --- a/Content.Server/GameObjects/Components/Medical/MedicalScannerComponent.cs +++ b/Content.Server/GameObjects/Components/Medical/MedicalScannerComponent.cs @@ -1,9 +1,14 @@ #nullable enable using System; using System.Collections.Generic; +using System.Linq; +using Content.Server.GameObjects.Components.Body; +using Content.Server.GameObjects.Components.Mobs; using Content.Server.GameObjects.Components.Power.ApcNetComponents; using Content.Server.GameObjects.EntitySystems; +using Content.Server.Players; using Content.Server.Utility; +using Content.Shared.Damage; using Content.Shared.GameObjects.Components.Damage; using Content.Shared.GameObjects.Components.Medical; using Content.Shared.GameObjects.EntitySystems; @@ -13,21 +18,24 @@ using Robust.Server.GameObjects; using Robust.Server.GameObjects.Components.Container; using Robust.Server.GameObjects.Components.UserInterface; using Robust.Server.Interfaces.GameObjects; +using Robust.Server.Interfaces.Player; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; -using Robust.Shared.Maths; -using Content.Shared.Damage; +using Robust.Shared.IoC; using Robust.Shared.Localization; +using Robust.Shared.Maths; using Robust.Shared.ViewVariables; namespace Content.Server.GameObjects.Components.Medical { [RegisterComponent] [ComponentReference(typeof(IActivate))] - public class MedicalScannerComponent : SharedMedicalScannerComponent, IActivate + public class MedicalScannerComponent : SharedMedicalScannerComponent, IActivate, IDragDropOn { private ContainerSlot _bodyContainer = default!; private readonly Vector2 _ejectOffset = new Vector2(-0.5f, 0f); + + [Dependency] private readonly IPlayerManager _playerManager = null!; public bool IsOccupied => _bodyContainer.ContainedEntity != null; [ViewVariables] @@ -68,13 +76,12 @@ namespace Content.Server.GameObjects.Components.Medical if (Owner.TryGetComponent(out AppearanceComponent? appearance)) { appearance?.SetData(MedicalScannerVisuals.Status, MedicalScannerStatus.Open); - }; + } return EmptyUIState; } - if (!body.TryGetComponent(out IDamageableComponent? damageable) || - damageable.CurrentDamageState == DamageState.Dead) + if (!body.TryGetComponent(out IDamageableComponent? damageable)) { return EmptyUIState; } @@ -82,7 +89,14 @@ namespace Content.Server.GameObjects.Components.Medical var classes = new Dictionary(damageable.DamageClasses); var types = new Dictionary(damageable.DamageTypes); - return new MedicalScannerBoundUserInterfaceState(body.Uid, classes, types, CloningSystem.HasUid(body.Uid)); + if (_bodyContainer.ContainedEntity?.Uid == null) + { + return new MedicalScannerBoundUserInterfaceState(body.Uid, classes, types, true); + } + + + return new MedicalScannerBoundUserInterfaceState(body.Uid, classes, types, + CloningSystem.HasDnaScan(_bodyContainer.ContainedEntity.GetComponent().Mind)); } private void UpdateUserInterface() @@ -207,22 +221,41 @@ namespace Content.Server.GameObjects.Components.Medical private void OnUiReceiveMessage(ServerBoundUserInterfaceMessage obj) { - if (!(obj.Message is UiButtonPressedMessage message)) - { - return; - } + if (!(obj.Message is UiButtonPressedMessage message)) return; switch (message.Button) { case UiButton.ScanDNA: if (_bodyContainer.ContainedEntity != null) { - CloningSystem.AddToScannedUids(_bodyContainer.ContainedEntity.Uid); + //TODO: Show a 'ERROR: Body is completely devoid of soul' if no Mind owns the entity. + CloningSystem.AddToDnaScans(_playerManager + .GetPlayersBy(playerSession => + { + var mindOwnedMob = playerSession.ContentData()?.Mind?.OwnedEntity; + + return mindOwnedMob != null && mindOwnedMob == + _bodyContainer.ContainedEntity; + }).Single() + .ContentData() + ?.Mind); } + break; default: throw new ArgumentOutOfRangeException(); } } + + public bool CanDragDropOn(DragDropEventArgs eventArgs) + { + return eventArgs.Dropped.HasComponent(); + } + + public bool DragDropOn(DragDropEventArgs eventArgs) + { + _bodyContainer.Insert(eventArgs.Dropped); + return true; + } } } diff --git a/Content.Server/GameObjects/Components/Mobs/MindComponent.cs b/Content.Server/GameObjects/Components/Mobs/MindComponent.cs index b5f9eba7e1..9c199a2cd9 100644 --- a/Content.Server/GameObjects/Components/Mobs/MindComponent.cs +++ b/Content.Server/GameObjects/Components/Mobs/MindComponent.cs @@ -1,9 +1,16 @@ #nullable enable +using System; +using Content.Server.GameObjects.Components.Body; +using Content.Server.GameObjects.Components.Medical; using Content.Server.GameObjects.Components.Observer; using Content.Server.Interfaces.GameTicking; using Content.Server.Mobs; +using Content.Server.Utility; +using Content.Shared.GameObjects.Components; using Content.Shared.GameObjects.Components.Damage; +using Content.Shared.GameObjects.Components.Mobs; using Content.Shared.GameObjects.EntitySystems; +using Robust.Server.GameObjects.Components.UserInterface; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Map; @@ -14,6 +21,7 @@ using Robust.Shared.Serialization; using Robust.Shared.Timers; using Robust.Shared.Utility; using Robust.Shared.ViewVariables; +using Serilog.Debugging; namespace Content.Server.GameObjects.Components.Mobs { @@ -50,6 +58,45 @@ namespace Content.Server.GameObjects.Components.Mobs set => _showExamineInfo = value; } + [ViewVariables] + private BoundUserInterface? UserInterface => + Owner.GetUIOrNull(SharedAcceptCloningComponent.AcceptCloningUiKey.Key); + + + public override void Initialize() + { + base.Initialize(); + Owner.EntityManager.EventBus.SubscribeEvent( + EventSource.Local, this, + HandleCloningStartedMessage); + + if (UserInterface != null) + { + UserInterface.OnReceiveMessage += OnUiAcceptCloningMessage; + } + } + + private void HandleCloningStartedMessage(CloningPodComponent.CloningStartedMessage ev) + { + if (ev.CapturedMind == Mind) + { + UserInterface?.Open(Mind.Session); + } + } + + private void OnUiAcceptCloningMessage(ServerBoundUserInterfaceMessage obj) + { + if (!(obj.Message is SharedAcceptCloningComponent.UiButtonPressedMessage message)) return; + Owner.EntityManager.EventBus.RaiseEvent(EventSource.Local, new GhostComponent.GhostReturnMessage(Mind)); + } + + public override void OnRemove() + { + base.OnRemove(); + Owner.EntityManager.EventBus.UnsubscribeEvent(EventSource.Local, this); + if (UserInterface != null) UserInterface.OnReceiveMessage -= OnUiAcceptCloningMessage; + } + /// /// Don't call this unless you know what the hell you're doing. /// Use instead. @@ -133,13 +180,19 @@ namespace Content.Server.GameObjects.Components.Mobs if (!HasMind) { message.AddMarkup(!dead - ? $"[color=red]" + Loc.GetString("{0:They} {0:are} totally catatonic. The stresses of life in deep-space must have been too much for {0:them}. Any recovery is unlikely.", Owner) + "[/color]" + ? $"[color=red]" + + Loc.GetString( + "{0:They} {0:are} totally catatonic. The stresses of life in deep-space must have been too much for {0:them}. Any recovery is unlikely.", + Owner) + "[/color]" : $"[color=purple]" + Loc.GetString("{0:Their} soul has departed.", Owner) + "[/color]"); } else if (Mind?.Session == null) { - if(!dead) - message.AddMarkup("[color=yellow]" + Loc.GetString("{0:They} {0:have} a blank, absent-minded stare and appears completely unresponsive to anything. {0:They} may snap out of it soon.", Owner) + "[/color]"); + if (!dead) + message.AddMarkup("[color=yellow]" + + Loc.GetString( + "{0:They} {0:have} a blank, absent-minded stare and appears completely unresponsive to anything. {0:They} may snap out of it soon.", + Owner) + "[/color]"); } } } diff --git a/Content.Server/GameObjects/Components/Observer/GhostComponent.cs b/Content.Server/GameObjects/Components/Observer/GhostComponent.cs index cb0c938419..10f3e8a6c6 100644 --- a/Content.Server/GameObjects/Components/Observer/GhostComponent.cs +++ b/Content.Server/GameObjects/Components/Observer/GhostComponent.cs @@ -1,4 +1,6 @@ -using Content.Server.Players; +using Content.Server.GameObjects.Components.Mobs; +using Content.Server.Mobs; +using Content.Server.Players; using Content.Shared.GameObjects.Components.Observer; using Robust.Server.GameObjects; using Robust.Server.GameObjects.Components; @@ -31,7 +33,7 @@ namespace Content.Server.GameObjects.Components.Observer { base.Initialize(); - Owner.EnsureComponent().Layer = (int)VisibilityFlags.Ghost; + Owner.EnsureComponent().Layer = (int) VisibilityFlags.Ghost; } public override ComponentState GetComponentState() => new GhostComponentState(CanReturnToBody); @@ -43,18 +45,19 @@ namespace Content.Server.GameObjects.Components.Observer switch (message) { case PlayerAttachedMsg msg: - msg.NewPlayer.VisibilityMask |= (int)VisibilityFlags.Ghost; + msg.NewPlayer.VisibilityMask |= (int) VisibilityFlags.Ghost; Dirty(); break; case PlayerDetachedMsg msg: - msg.OldPlayer.VisibilityMask &= ~(int)VisibilityFlags.Ghost; + msg.OldPlayer.VisibilityMask &= ~(int) VisibilityFlags.Ghost; break; default: break; } } - public override void HandleNetworkMessage(ComponentMessage message, INetChannel netChannel, ICommonSession session = null) + public override void HandleNetworkMessage(ComponentMessage message, INetChannel netChannel, + ICommonSession session = null) { base.HandleNetworkMessage(message, netChannel, session); @@ -67,10 +70,29 @@ namespace Content.Server.GameObjects.Components.Observer actor.playerSession.ContentData().Mind.UnVisit(); Owner.Delete(); } + + break; + case ReturnToCloneComponentMessage reenter: + + if (Owner.TryGetComponent(out VisitingMindComponent mind)) + { + Owner.EntityManager.EventBus.RaiseEvent(EventSource.Local, new GhostReturnMessage(mind.Mind)); + } + break; default: break; } } + + public class GhostReturnMessage : EntitySystemMessage + { + public GhostReturnMessage(Mind sender) + { + Sender = sender; + } + + public Mind Sender { get; } + } } } diff --git a/Content.Server/GameObjects/EntitySystems/CloningSystem.cs b/Content.Server/GameObjects/EntitySystems/CloningSystem.cs index 469c0f6157..e9bb60a850 100644 --- a/Content.Server/GameObjects/EntitySystems/CloningSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/CloningSystem.cs @@ -1,24 +1,42 @@ using System.Collections.Generic; +using System.Linq; +using Content.Server.GameObjects.Components.Medical; +using Content.Server.Mobs; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; +using Content.Shared.GameObjects.Components.Medical; +using Microsoft.AspNetCore.Server.Kestrel.Core; namespace Content.Server.GameObjects.EntitySystems { internal sealed class CloningSystem : EntitySystem { - public static List scannedUids = new List(); - - public static void AddToScannedUids(EntityUid uid) + public override void Update(float frameTime) { - if (!scannedUids.Contains(uid)) + foreach (var comp in ComponentManager.EntityQuery()) { - scannedUids.Add(uid); + comp.Update(frameTime); } } - public static bool HasUid(EntityUid uid) + public static Dictionary Minds = new Dictionary(); + + public static void AddToDnaScans(Mind mind) { - return scannedUids.Contains(uid); + if (!Minds.ContainsValue(mind)) + { + Minds.Add(Minds.Count(), mind); + } + } + + public static bool HasDnaScan(Mind mind) + { + return Minds.ContainsValue(mind); + } + + public static Dictionary getIdToUser() + { + return Minds.ToDictionary(m => m.Key, m => m.Value.CharacterName); } } } diff --git a/Content.Shared/GameObjects/Components/Medical/SharedCloningPodComponent.cs b/Content.Shared/GameObjects/Components/Medical/SharedCloningPodComponent.cs new file mode 100644 index 0000000000..6c0ed3f87e --- /dev/null +++ b/Content.Shared/GameObjects/Components/Medical/SharedCloningPodComponent.cs @@ -0,0 +1,72 @@ +using System; +using System.Collections.Generic; +using Robust.Shared.GameObjects; +using Robust.Shared.GameObjects.Components.UserInterface; +using Robust.Shared.Serialization; + +namespace Content.Shared.GameObjects.Components.Medical +{ + + public class SharedCloningPodComponent : Component + { + public override string Name => "CloningPod"; + + [Serializable, NetSerializable] + public class CloningPodBoundUserInterfaceState : BoundUserInterfaceState + { + public readonly Dictionary MindIdName; + public readonly float Progress; + public readonly bool MindPresent; + + public CloningPodBoundUserInterfaceState(Dictionary mindIdName, float progress, bool mindPresent) + { + MindIdName = mindIdName; + Progress = progress; + MindPresent = mindPresent; + } + } + + + [Serializable, NetSerializable] + public enum CloningPodUIKey + { + Key + } + + [Serializable, NetSerializable] + public enum CloningPodVisuals + { + Status + } + + [Serializable, NetSerializable] + public enum CloningPodStatus + { + Idle, + Cloning, + Gore, + NoMind + } + + [Serializable, NetSerializable] + public enum UiButton + { + Clone, + Eject + } + + [Serializable, NetSerializable] + public class CloningPodUiButtonPressedMessage : BoundUserInterfaceMessage + { + public readonly UiButton Button; + public readonly int? ScanId; + + public CloningPodUiButtonPressedMessage(UiButton button, int? scanId) + { + Button = button; + ScanId = scanId; + } + } + + } +} diff --git a/Content.Shared/GameObjects/Components/Observer/SharedGhostComponent.cs b/Content.Shared/GameObjects/Components/Observer/SharedGhostComponent.cs index 771c0b0b6f..e9a029271c 100644 --- a/Content.Shared/GameObjects/Components/Observer/SharedGhostComponent.cs +++ b/Content.Shared/GameObjects/Components/Observer/SharedGhostComponent.cs @@ -35,4 +35,11 @@ namespace Content.Shared.GameObjects.Components.Observer { public ReturnToBodyComponentMessage() => Directed = true; } + + + [Serializable, NetSerializable] + public class ReturnToCloneComponentMessage : ComponentMessage + { + public ReturnToCloneComponentMessage() => Directed = true; + } } diff --git a/Content.Shared/GameObjects/Components/SharedAcceptCloningComponent.cs b/Content.Shared/GameObjects/Components/SharedAcceptCloningComponent.cs new file mode 100644 index 0000000000..94383004c5 --- /dev/null +++ b/Content.Shared/GameObjects/Components/SharedAcceptCloningComponent.cs @@ -0,0 +1,36 @@ +using System; +using Robust.Shared.GameObjects; +using Robust.Shared.GameObjects.Components.UserInterface; +using Robust.Shared.Serialization; + +namespace Content.Shared.GameObjects.Components +{ + public class SharedAcceptCloningComponent : Component + { + public override string Name => "AcceptCloning"; + + [Serializable, NetSerializable] + public enum AcceptCloningUiKey + { + Key + } + + [Serializable, NetSerializable] + public enum UiButton + { + Accept + } + + [Serializable, NetSerializable] + public class UiButtonPressedMessage : BoundUserInterfaceMessage + { + public readonly UiButton Button; + + public UiButtonPressedMessage(UiButton button) + { + Button = button; + } + } + + } +} diff --git a/Resources/Prototypes/Entities/Constructible/Power/cloning_machine.yml b/Resources/Prototypes/Entities/Constructible/Power/cloning_machine.yml new file mode 100644 index 0000000000..11125bcc92 --- /dev/null +++ b/Resources/Prototypes/Entities/Constructible/Power/cloning_machine.yml @@ -0,0 +1,44 @@ +- type: entity + id: CloningPod + name: Cloning Pod + description: A Cloning Pod. 50% reliable. + components: + - type: Sprite + netsync: false + sprite: Objects/Specific/Medical/cloning.rsi + layers: + - state: pod_0 + map: ["enum.CloningPodVisualLayers.Machine"] + - type: PowerReceiver + - type: Icon + sprite: Objects/Specific/Medical/cloning.rsi + state: pod_0 + - type: Anchorable + - type: Clickable + - type: InteractionOutline + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.5,-0.25,0.5,0.25" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + IsScrapingFloor: true + - type: Physics + mass: 25 + anchored: true + - type: SnapGrid + offset: Center + - type: CloningPod + cloningTime: 10.0 + - type: Destructible + deadThreshold: 100 + - type: Appearance + visuals: + - type: CloningPodVisualizer + - type: UserInterface + interfaces: + - key: enum.CloningPodUIKey.Key + type: CloningPodBoundUserInterface diff --git a/Resources/Prototypes/Entities/Mobs/Species/human.yml b/Resources/Prototypes/Entities/Mobs/Species/human.yml index 43a4507138..f309bea3d5 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/human.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/human.yml @@ -92,7 +92,7 @@ state: r_foot - map: ["enum.HumanoidVisualLayers.Handcuffs"] color: "#ffffff" - sprite: Objects/Misc/handcuffs.rsi + sprite: Objects/Misc/handcuffs.rsi state: body-overlay-2 visible: false - map: ["enum.Slots.IDCARD"] @@ -169,6 +169,8 @@ interfaces: - key: enum.StrippingUiKey.Key type: StrippableBoundUserInterface + - key: enum.AcceptCloningUiKey.Key + type: AcceptCloningBoundUserInterface - type: entity @@ -230,7 +232,7 @@ state: r_hand - map: ["enum.HumanoidVisualLayers.Handcuffs"] color: "#ffffff" - sprite: Objects/Misc/handcuffs.rsi + sprite: Objects/Misc/handcuffs.rsi state: body-overlay-2 visible: false - map: ["enum.Slots.IDCARD"] diff --git a/Resources/Textures/Objects/Specific/Medical/Cloning.rsi/meta.json b/Resources/Textures/Objects/Specific/Medical/BodyScanner.rsi/meta.json similarity index 100% rename from Resources/Textures/Objects/Specific/Medical/Cloning.rsi/meta.json rename to Resources/Textures/Objects/Specific/Medical/BodyScanner.rsi/meta.json diff --git a/Resources/Textures/Objects/Specific/Medical/Cloning.rsi/pod_0.png b/Resources/Textures/Objects/Specific/Medical/BodyScanner.rsi/pod_0.png similarity index 100% rename from Resources/Textures/Objects/Specific/Medical/Cloning.rsi/pod_0.png rename to Resources/Textures/Objects/Specific/Medical/BodyScanner.rsi/pod_0.png diff --git a/Resources/Textures/Objects/Specific/Medical/Cloning.rsi/scanner.png b/Resources/Textures/Objects/Specific/Medical/BodyScanner.rsi/scanner.png similarity index 100% rename from Resources/Textures/Objects/Specific/Medical/Cloning.rsi/scanner.png rename to Resources/Textures/Objects/Specific/Medical/BodyScanner.rsi/scanner.png diff --git a/Resources/Textures/Objects/Specific/Medical/Cloning.rsi/scanner_maintenance.png b/Resources/Textures/Objects/Specific/Medical/BodyScanner.rsi/scanner_maintenance.png similarity index 100% rename from Resources/Textures/Objects/Specific/Medical/Cloning.rsi/scanner_maintenance.png rename to Resources/Textures/Objects/Specific/Medical/BodyScanner.rsi/scanner_maintenance.png diff --git a/Resources/Textures/Objects/Specific/Medical/Cloning.rsi/scanner_occupied.png b/Resources/Textures/Objects/Specific/Medical/BodyScanner.rsi/scanner_occupied.png similarity index 100% rename from Resources/Textures/Objects/Specific/Medical/Cloning.rsi/scanner_occupied.png rename to Resources/Textures/Objects/Specific/Medical/BodyScanner.rsi/scanner_occupied.png diff --git a/Resources/Textures/Objects/Specific/Medical/Cloning.rsi/scanner_open.png b/Resources/Textures/Objects/Specific/Medical/BodyScanner.rsi/scanner_open.png similarity index 100% rename from Resources/Textures/Objects/Specific/Medical/Cloning.rsi/scanner_open.png rename to Resources/Textures/Objects/Specific/Medical/BodyScanner.rsi/scanner_open.png diff --git a/Resources/Textures/Objects/Specific/Medical/Cloning.rsi/scanner_open_maintenance.png b/Resources/Textures/Objects/Specific/Medical/BodyScanner.rsi/scanner_open_maintenance.png similarity index 100% rename from Resources/Textures/Objects/Specific/Medical/Cloning.rsi/scanner_open_maintenance.png rename to Resources/Textures/Objects/Specific/Medical/BodyScanner.rsi/scanner_open_maintenance.png diff --git a/Resources/Textures/Objects/Specific/Medical/Cloning.rsi/scanner_open_unpowered.png b/Resources/Textures/Objects/Specific/Medical/BodyScanner.rsi/scanner_open_unpowered.png similarity index 100% rename from Resources/Textures/Objects/Specific/Medical/Cloning.rsi/scanner_open_unpowered.png rename to Resources/Textures/Objects/Specific/Medical/BodyScanner.rsi/scanner_open_unpowered.png diff --git a/Resources/Textures/Objects/Specific/Medical/Cloning.rsi/scanner_unpowered.png b/Resources/Textures/Objects/Specific/Medical/BodyScanner.rsi/scanner_unpowered.png similarity index 100% rename from Resources/Textures/Objects/Specific/Medical/Cloning.rsi/scanner_unpowered.png rename to Resources/Textures/Objects/Specific/Medical/BodyScanner.rsi/scanner_unpowered.png diff --git a/Resources/Textures/Objects/Specific/Medical/cloning.rsi/meta.json b/Resources/Textures/Objects/Specific/Medical/cloning.rsi/meta.json new file mode 100644 index 0000000000..ac8957b3fe --- /dev/null +++ b/Resources/Textures/Objects/Specific/Medical/cloning.rsi/meta.json @@ -0,0 +1,56 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC BY-SA 3.0", + "copyright": "Taken from https://github.com/tgstation/tgstation at commit 9bebd81ae0b0a7f952b59886a765c681205de31f", + "states": [ + { + "name": "pod_0", + "directions": 1, + "delays": [ + [ + 1.0 + ] + ] + }, + { + "name": "pod_1", + "directions": 1, + "delays": [ + [ + 0.2, + 0.2, + 0.2, + 0.2 + ] + ] + }, + { + "name": "pod_e", + "directions": 1, + "delays": [ + [ + 0.2, + 0.2, + 0.2, + 0.2 + ] + ] + }, + { + "name": "pod_g", + "directions": 1, + "delays": [ + [ + 0.2, + 0.2, + 0.2, + 0.2 + ] + ] + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Objects/Specific/Medical/cloning.rsi/pod_0.png b/Resources/Textures/Objects/Specific/Medical/cloning.rsi/pod_0.png new file mode 100644 index 0000000000000000000000000000000000000000..13d289fd6cc923117d0ff7e9e6e78dc6fa29f990 GIT binary patch literal 1319 zcmV+?1=#wDP)kdTld!5zkG*y4t*8g!ux zT_8I#0gVD7DMZ>LrBCqz0)37%(|O#PxsUIDF79+{Tj*SpCVGk6Wg2o13a!jt69B7h7E z5eQ)K{=@R8b6+re?-4sY+W>G}!L`02as`u6C`7y=%9fV(#Ofj(J#r*4L`{G>@mphm zup!Z05qEj6B|&Rq4Oe?75T3{Qw95E&isv`C(iCstVYwm@Kp+Q-Wt+)ln(G6jtZj_*=feqpywO)_I29KgMfIIF%_8ZXi4fij z0+cKOhR1&6L4Aw|6O-igd88)+fsh`WZXl(^c5HG56IZOL17-52iGd(rFiFkka2!N!Ln_N<2ZPpBosF06Qpmq^dwSBJkO(S+kpTAmB14&CEN8EXeyor+j1)6AW;yGi>4V> z7lKA02a1-BW7~+z86aG@Dh}Xzz5|M)peP!`leliMDF_5mFiTjjTRDV$F;!J7-3OZP zm&0#LpQ=zS1_B6F0@wBJ)-?@04>8yMYK31>7UjE?=Ss8^0CvSrR|s6s!?qoN3IIjb z0MHEGcLfFM3CiWt$^nFQ6&m7fNHn7BI+kr$#6U_9JrqJy^-2RuK*21pumjOZn1I{|7rn>!=^$YX5l=o4!!0$Jp#urgy+wSTq^Tt~T*tC8vr+N zjj5rYW%m!%vah_hk1dI32pI;c%q-J?r|G?MV_whD+0?d`STu$ntw&1G41>bdy_$PJ z7GUF!SEXh7Z?j}FMKYP9dCwknO=EmINj6tlvc|DW5RKt^0_jN}j12(ulN1hz_^bcQ zl5#8nm`i@|=t)M$Mwp(S;^6)_u^pGwpPZ@YHLYvKFbpD*NW}qz#&xYc{B>x4uexUe z$e8!p*t!`ZG_1=0|L%(gM2T&?<*5@Na{KlzCMPE;ni&8rtH6PSN3pCj;c$e{&z}Y0 zH7PM%n-t|~hIa0~$3vM80ZD0-OY#OJyST+d9tmav^MK}~DpU)8rhp{b-4IBMGFn50+#Eq?5VEYpR9v5>^AH37erAyz@ z)%7|TFJ7R%y_3<=VcOd}863JpJRWDDzlYB4I~X49Cs&z-T4Naa^JTF+Pm1Q|Mv}>N dP2vAd`~xa+a~}W~hi(7>002ovPDHLkV1hLkWOV=l literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Medical/cloning.rsi/pod_1.png b/Resources/Textures/Objects/Specific/Medical/cloning.rsi/pod_1.png new file mode 100644 index 0000000000000000000000000000000000000000..eef65e1aeffe29f30f8a2aa5e757bbc161e19be4 GIT binary patch literal 2967 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 N002ovPDHLkV1g*G)WHA% literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Medical/cloning.rsi/pod_e.png b/Resources/Textures/Objects/Specific/Medical/cloning.rsi/pod_e.png new file mode 100644 index 0000000000000000000000000000000000000000..acd9b6c194df553e686defd80188363dad3f3c4e GIT binary patch literal 2937 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Medical/cloning.rsi/pod_g.png b/Resources/Textures/Objects/Specific/Medical/cloning.rsi/pod_g.png new file mode 100644 index 0000000000000000000000000000000000000000..ea3e002156e3fd72d7c0b86c54f6d3ba22e86259 GIT binary patch literal 3907 zcmV-J54`Y+P)zeLG#BG*ZoOmLh~1l8pPrN7-z2|vF62Lc=t0tQ7Jx`B z$yhXA`QB%D0+7mQ0j3u^37-_dA){+_>%(1JPc9ZE^7cWNv@T<}cco!|!$V-HC5z}^N?B6@D5@H2I(eFn zDyJzr1g>{j5zLmkMLGxmQn5r))hMcY%4QqLDT=a;yb3UjVt$giOU9DntB z%z_>NiZuY_5^++!on!{OFqexJJ9Am1kWSNcq?gu>pPNURXGhnwKf&9y1pf*s6-$&0 zSyH{76e42?mNF9)DJG&x3UZcozD#2*il=#{A>W1)pr(^3N*=bqg1@N=fK118#NIoI zRS+nuDvFXNuVknVH)3{F>Glf*Majd^aa1LH8h?7v9snjMV>nzc{DKuhK7q}*0lULk z=Qd;&862i$vr|a!2W1MYt3>`-l%lGVNTf+6lK^O{hR-h(@CD`(=D8u36w2x}Q=JFN zjtyWDvkbq{$;jvgvZ4>k)!}+#lMz++z*tgk;ktv_Sl24OT3doTN$q)LGrxHl3 z8W034KEEH2ORU&uqZ1U8u{nl$Zp6nTl&8i4n25^swRZvFT^T~tOo%oURzbk-@*oIS z(6USo4jb}qC;=|F135ZDZfX*xWT9tpl6}Vp85$XBI0Av#hTuvJ`wN*F-8{SMA$!{YdxtTO&3Egrr(yDsosRR?_QA55B4FN5u z5O9f%$7C#O4giPMO}<|zvHE;8U)72vx#6l-T%k#_snmR8JvXu$Y?_A0B~s1_q*RT` z$rv7&NNukEF%hLq6IUa%Nr{E-+S;iYz`-0 zyP?pGB_RI607ZWg+2R1eVzuJ6YuH^L6eY{VSb}F>+(&98!F}Jl8lMfO;_3OsdRBD4 zbr>O3g;f-omJ`TIwle0I*7``rcx@RAdS{ zI>z3ow&V19P%}xSRrORasb_g}kmlwPuEqe9?+tS3e~#kw`>A&udjdvKO6bFB=g;=x z^m%ZYr>R>OpzIXMCFATl;ZPA$=J z(GoJ9aioC6ikmKBx}ee1Gfv%_S_TKB>^nTSCovl=l9#4+t*lwMl58qNDwV<_i45%Q zCEQR)^~NQPMdBRp9>v?Xn8AS)hWQOmg8^Zh`qeGu1C1zIjT=obLI)6@G3e1R|A-G) zs2b53A#B&?5$f5oys-*zFhI#BQqE_&TH6X^z!d<)Fm^=e7k&6^Jd6UaoUtA->sGOD z^`^=R%%dxo1FmcT({#CF+dA?GJvap+*Jua?3Rp0YJh+D_T4=6pZfqfv33B~&KPveT)(bg zZh0YA3El|*d56HELkGBjaSLB~qk~P?wy?ds10Mg7!LFHWJR5la(?=ya{3$6H}W3#fI*e}0-zO(h@!y5-f?`AAAr8@J`zcd9V|2A{=E1}C`B>YMA_-1lo%zI%<~Tk zC&f|;08tcp(9%OyO)W)LWpXk`JgKnF0RLGN&~)i0OD?Z7`kEF{C@t>A}lg8iv*0(u!>qwN!)Cg!x5z4jg^@QJkS>{43T_ z*3=4rthW~}mnEIfQc%YL@c1RLAIXA@={%-y;_F;zVjx zBByGYMusVfOD(1WCh25AaQ^z@9Anb|#F+SY_6)Ph|# zrcW@GfU=qchljDfyKzc>ydfv317X6 zKuZmA$&D#Jjb^sbKjJe`>l08DGw1v+iA-;nU~Q1v%jy~GJwaK^5o`?;XsKZtAO?ns zM;EX%)YQ5X(^3ywPN9_5Gb>46PP}oLfaIobV>5x48nh{e&G-C5|B<|K`hfb&S5e*K z=2&Mh@o1c}(J4lIdU*et*J%n%TzTj9dh+`x*?iA0$mKPX5o5(!LkXDZ>!+@<2D_TW zAJp|fUBgi#34LE)v$2`K_~WM-J}|%!@6}ImWW|_3!3esx?|~{01v!i8@_=AR@JYlI zGGim-gf9wn+wVR~_uk{&{rl^2*ljpHUPHbOSBC)_Z&*b+pCysfd%^PNAa<9B?pF@* zclY0fzoiCgc?|>G4kBk3E&=kyIBKrIb>G}Xs3FMm#Wkp@1mg*n@r25Om*3}me{(Z6 z%W7D$ehJZcj!+#~zywr_CPrS`tN+06#3>3at@UAd>nf0aFC666zuijo=m^K#yE)oD zN->?7&E=e+6=Zfj@-phoR97gQh{y#3ZX4B-m+1cEbUd+x;&_st1H(iMW&&1YwMjz> zu+B^|!>=F18*Q%AN~CBCOEfgpFtW3c-fbOBCDM!xjLb9Kv%?~J>ECt) zceRPcWRzOBh}$J#BabMU5o|U(fAu~+FSQdC%Z!XH;5$G`BuFLG3=Zk5t)eWGkrftQ z+eRd+A4Rv_ayhAFlB80`BMOz8{z4#?%p(b9q!}q*wP->Rtkhqlt5SS^iK;7CaU!Ci zX(r+c8D;duY%VJ>lz_uW`iVxOl>N0Fez%{IzHY)-uR!p+02mpaK+#kLn~kQhMB7D; z^NI7EC?(P)R5RB4CX&aeNTpJ^H|jgTP`Dl`AYroVN92na2PtTVjtzi0EQQNXCpEP} zu-N!g;GK#lfSYEn126J|w33FamQ(6V;BD}Lv9*XHgqy>NUN2_5Q`ZNalmRXS=mJI8 z2e{U^plyvpE&~RHYKHXzTNbH=)?C8I_>;5N=XX}!fO2?}KN>ux5n3pHfUP#n#`u%7 z>J$Fk_eDNI43o2{N%!uK0tE z9D1Rh>Y5-wT_AnH17e(}b*+@_ZYD;f3>`hfzq?va&%CP{9nkNi{w(C6Wk`hfVv7;dMD$@c~ch3oZF^#bVw9``QgF~LGCui?)} zNtI6hKhQ~jfT8gm%JxpGYHGPxX;?UY0Kn#x^?4fjjw=i4)9dq@g35EtudCcIq&^^( z&$4;TmXlUI(q@67)A?O4C*P$(zfmse0}S(D& Date: Wed, 2 Sep 2020 12:29:40 +0200 Subject: [PATCH 079/103] Fix crash when deleting a medical scanner with someone inside (#2007) --- .../Components/MedicalScanner/MedicalScannerVisualizer.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Content.Client/GameObjects/Components/MedicalScanner/MedicalScannerVisualizer.cs b/Content.Client/GameObjects/Components/MedicalScanner/MedicalScannerVisualizer.cs index e795f3f395..a7fe2abced 100644 --- a/Content.Client/GameObjects/Components/MedicalScanner/MedicalScannerVisualizer.cs +++ b/Content.Client/GameObjects/Components/MedicalScanner/MedicalScannerVisualizer.cs @@ -12,6 +12,11 @@ namespace Content.Client.GameObjects.Components.MedicalScanner { base.OnChangeData(component); + if (component.Owner.Deleted) + { + return; + } + var sprite = component.Owner.GetComponent(); if (!component.TryGetData(MedicalScannerVisuals.Status, out MedicalScannerStatus status)) return; sprite.LayerSetState(MedicalScannerVisualLayers.Machine, StatusToMachineStateId(status)); From 3922759a819fc6ec7f3021130429c82438149984 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Aguilera=20Puerto?= Date: Wed, 2 Sep 2020 15:22:26 +0200 Subject: [PATCH 080/103] address reviews --- .../Components/Weapon/Melee/MeleeWeaponComponent.cs | 6 +++--- .../GameObjects/Components/Interaction/IAttack.cs | 6 +++++- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/Content.Server/GameObjects/Components/Weapon/Melee/MeleeWeaponComponent.cs b/Content.Server/GameObjects/Components/Weapon/Melee/MeleeWeaponComponent.cs index ce36d4814a..ef2cf24729 100644 --- a/Content.Server/GameObjects/Components/Weapon/Melee/MeleeWeaponComponent.cs +++ b/Content.Server/GameObjects/Components/Weapon/Melee/MeleeWeaponComponent.cs @@ -119,7 +119,7 @@ namespace Content.Server.GameObjects.Components.Weapon.Melee } } - if(!OnHitEntities(hitEntities, eventArgs)) return true; + if(!OnHitEntities(hitEntities, eventArgs)) return false; if (Arc != null) { @@ -161,7 +161,7 @@ namespace Content.Server.GameObjects.Components.Weapon.Melee else { audioSystem.PlayFromEntity(_missSound, eventArgs.User); - return true; + return false; } if (target.TryGetComponent(out IDamageableComponent damageComponent)) @@ -172,7 +172,7 @@ namespace Content.Server.GameObjects.Components.Weapon.Melee var targets = new[] {target}; if (!OnHitEntities(targets, eventArgs)) - return true; + return false; if (ClickArc != null) { diff --git a/Content.Shared/Interfaces/GameObjects/Components/Interaction/IAttack.cs b/Content.Shared/Interfaces/GameObjects/Components/Interaction/IAttack.cs index 48bf6a3e5a..0a1a310405 100644 --- a/Content.Shared/Interfaces/GameObjects/Components/Interaction/IAttack.cs +++ b/Content.Shared/Interfaces/GameObjects/Components/Interaction/IAttack.cs @@ -26,12 +26,16 @@ namespace Content.Shared.Interfaces.GameObjects.Components ClickLocation = clickLocation; WideAttack = wideAttack; Target = target; + + IEntity? targetEntity = null; + IoCManager.Resolve()?.TryGetEntity(Target, out targetEntity); + TargetEntity = targetEntity; } public IEntity User { get; } public GridCoordinates ClickLocation { get; } public bool WideAttack { get; } public EntityUid Target { get; } - public IEntity? TargetEntity => Target.IsValid() ? IoCManager.Resolve()?.GetEntity(Target) ?? null : null; + public IEntity? TargetEntity { get; } } } From 9944dc70d0a4f0c8c602b1912b830bc892ec898a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Aguilera=20Puerto?= Date: Wed, 2 Sep 2020 18:34:40 +0200 Subject: [PATCH 081/103] Fix random events not playing --- .../EntitySystems/StationEvents/StationEventSystem.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Content.Server/GameObjects/EntitySystems/StationEvents/StationEventSystem.cs b/Content.Server/GameObjects/EntitySystems/StationEvents/StationEventSystem.cs index dd02a67a76..6ff103b01b 100644 --- a/Content.Server/GameObjects/EntitySystems/StationEvents/StationEventSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/StationEvents/StationEventSystem.cs @@ -237,6 +237,7 @@ namespace Content.Server.GameObjects.EntitySystems.StationEvents else { CurrentEvent = stationEvent; + CurrentEvent.Startup(); } } From fd21ceb0cf9dd293ff14feec3f3326f2ba730487 Mon Sep 17 00:00:00 2001 From: Exp Date: Wed, 2 Sep 2020 18:47:13 +0200 Subject: [PATCH 082/103] Improves the Admin PlayerList (#1989) * -Makes PlayerList scrollable -Player names clip when they are too long -Shows Player count * Add padding to make columns more noticeable * -Added Separators between the columns -Pushed List a bit down * Add alternating row colors --- .../AdminMenu/AdminMenuWindow.cs | 129 ++++++++++++++++-- 1 file changed, 114 insertions(+), 15 deletions(-) diff --git a/Content.Client/UserInterface/AdminMenu/AdminMenuWindow.cs b/Content.Client/UserInterface/AdminMenu/AdminMenuWindow.cs index 3708adfb82..dde3fddac4 100644 --- a/Content.Client/UserInterface/AdminMenu/AdminMenuWindow.cs +++ b/Content.Client/UserInterface/AdminMenu/AdminMenuWindow.cs @@ -1,11 +1,9 @@ #nullable enable -using System; -using System.Collections.Generic; -using System.Linq; using Content.Client.GameObjects.EntitySystems; using Content.Client.StationEvents; using Content.Shared.Atmos; using Robust.Client.Console; +using Robust.Client.Graphics.Drawing; using Robust.Client.Interfaces.Placement; using Robust.Client.Interfaces.ResourceManagement; using Robust.Client.Player; @@ -17,8 +15,12 @@ using Robust.Shared.Interfaces.Map; using Robust.Shared.IoC; using Robust.Shared.Localization; using Robust.Shared.Map; +using Robust.Shared.Maths; using Robust.Shared.Prototypes; using Robust.Shared.Utility; +using System; +using System.Collections.Generic; +using System.Linq; using static Robust.Client.UserInterface.Controls.BaseButton; namespace Content.Client.UserInterface.AdminMenu @@ -27,6 +29,9 @@ namespace Content.Client.UserInterface.AdminMenu { public TabContainer MasterTabContainer; public VBoxContainer PlayerList; + public Label PlayerCount; + + protected override Vector2? CustomSize => (500, 250); private List _adminButtons = new List { @@ -57,51 +62,107 @@ namespace Content.Client.UserInterface.AdminMenu new DirectCommandButton("Shutdown", "shutdown"), }; + private static readonly Color SeparatorColor = Color.FromHex("#3D4059"); + private class HSeperator : Control + { + public HSeperator() + { + AddChild(new PanelContainer { + PanelOverride = new StyleBoxFlat + { + BackgroundColor = SeparatorColor, + ContentMarginBottomOverride = 2, ContentMarginLeftOverride = 2 + } + }); + } + } + + private class VSeperator : PanelContainer + { + public VSeperator() + { + CustomMinimumSize = (2, 5); + AddChild(new PanelContainer { + PanelOverride = new StyleBoxFlat { + BackgroundColor = SeparatorColor + } + }); + } + } + private void RefreshPlayerList(ButtonEventArgs args) { PlayerList.RemoveAllChildren(); - var sessions = IoCManager.Resolve().Sessions; + var playerManager = IoCManager.Resolve(); + var sessions = playerManager.Sessions; + PlayerCount.Text = $"Players: {playerManager.PlayerCount}"; + + Color altColor = Color.FromHex("#292B38"); + Color defaultColor = Color.FromHex("#2F2F3B"); + var header = new HBoxContainer { SizeFlagsHorizontal = SizeFlags.FillExpand, + SeparationOverride = 4, Children = { new Label { Text = "Name", SizeFlagsStretchRatio = 2f, SizeFlagsHorizontal = SizeFlags.FillExpand }, + new VSeperator(), new Label { Text = "Player", SizeFlagsStretchRatio = 2f, SizeFlagsHorizontal = SizeFlags.FillExpand }, + new VSeperator(), new Label { Text = "Status", SizeFlagsStretchRatio = 1f, SizeFlagsHorizontal = SizeFlags.FillExpand }, + new VSeperator(), new Label { Text = "Ping", SizeFlagsStretchRatio = 1f, SizeFlagsHorizontal = SizeFlags.FillExpand, Align = Label.AlignMode.Right }, } }; - PlayerList.AddChild(header); - PlayerList.AddChild(new Controls.HighDivider()); + PlayerList.AddChild(new PanelContainer + { + PanelOverride = new StyleBoxFlat + { + BackgroundColor = altColor, + }, + Children = + { + header + } + }); + PlayerList.AddChild(new HSeperator()); + + var useAltColor = false; foreach (var player in sessions) { var hbox = new HBoxContainer { SizeFlagsHorizontal = SizeFlags.FillExpand, + SeparationOverride = 4, Children = { new Label { Text = player.Name, SizeFlagsStretchRatio = 2f, - SizeFlagsHorizontal = SizeFlags.FillExpand }, + SizeFlagsHorizontal = SizeFlags.FillExpand, + ClipText = true }, + new VSeperator(), new Label { Text = player.AttachedEntity?.Name, SizeFlagsStretchRatio = 2f, - SizeFlagsHorizontal = SizeFlags.FillExpand }, + SizeFlagsHorizontal = SizeFlags.FillExpand, + ClipText = true }, + new VSeperator(), new Label { Text = player.Status.ToString(), SizeFlagsStretchRatio = 1f, SizeFlagsHorizontal = SizeFlags.FillExpand }, + new VSeperator(), new Label { Text = player.Ping.ToString(), SizeFlagsStretchRatio = 1f, @@ -109,7 +170,18 @@ namespace Content.Client.UserInterface.AdminMenu Align = Label.AlignMode.Right }, } }; - PlayerList.AddChild(hbox); + PlayerList.AddChild(new PanelContainer + { + PanelOverride = new StyleBoxFlat + { + BackgroundColor = useAltColor ? altColor : defaultColor, + }, + Children = + { + hbox + } + }); + useAltColor ^= true; } } @@ -133,7 +205,6 @@ namespace Content.Client.UserInterface.AdminMenu public AdminMenuWindow() //TODO: search for buttons? { - CustomMinimumSize = (415,0); Title = Loc.GetString("Admin Menu"); #region PlayerList @@ -146,22 +217,50 @@ namespace Content.Client.UserInterface.AdminMenu MarginBottomOverride = 4, CustomMinimumSize = (50, 50), }; - PlayerList = new VBoxContainer(); + + PlayerCount = new Label + { + SizeFlagsHorizontal = SizeFlags.FillExpand, + SizeFlagsStretchRatio = 0.7f, + }; var refreshButton = new Button { - Text = "Refresh" + SizeFlagsHorizontal = SizeFlags.FillExpand, + SizeFlagsStretchRatio = 0.3f, + Text = "Refresh", }; refreshButton.OnPressed += RefreshPlayerList; - RefreshPlayerList(null!); + + PlayerList = new VBoxContainer(); + var playerVBox = new VBoxContainer { + SizeFlagsVertical = SizeFlags.FillExpand, Children = { - refreshButton, - PlayerList + new HBoxContainer + { + SizeFlagsHorizontal = SizeFlags.FillExpand, + Children = + { + PlayerCount, + refreshButton, + } + }, + new Control { CustomMinimumSize = (0, 5) }, + new ScrollContainer + { + SizeFlagsHorizontal = SizeFlags.FillExpand, + SizeFlagsVertical = SizeFlags.FillExpand, + Children = + { + PlayerList + }, + }, } }; playerTabContainer.AddChild(playerVBox); + RefreshPlayerList(null!); #endregion PlayerList #region Admin Tab From d1f7f0b80b4971f01b6c503e551861c2eef32dec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Aguilera=20Puerto?= Date: Wed, 2 Sep 2020 18:55:51 +0200 Subject: [PATCH 083/103] Tile Prying helpers --- .../Atmos/GridAtmosphereComponent.cs | 11 +---- .../Interactable/TilePryingComponent.cs | 7 +-- Content.Shared/Maps/TurfHelpers.cs | 47 +++++++++++++++++++ 3 files changed, 49 insertions(+), 16 deletions(-) diff --git a/Content.Server/GameObjects/Components/Atmos/GridAtmosphereComponent.cs b/Content.Server/GameObjects/Components/Atmos/GridAtmosphereComponent.cs index 4bca5b202e..1e24393305 100644 --- a/Content.Server/GameObjects/Components/Atmos/GridAtmosphereComponent.cs +++ b/Content.Server/GameObjects/Components/Atmos/GridAtmosphereComponent.cs @@ -162,16 +162,7 @@ namespace Content.Server.GameObjects.Components.Atmos if (IsSpace(indices) || IsAirBlocked(indices)) return; var mapGrid = mapGridComponent.Grid; - var tile = mapGrid.GetTileRef(indices).Tile; - - var tileDef = (ContentTileDefinition) _tileDefinitionManager[tile.TypeId]; - - var underplating = _tileDefinitionManager["underplating"]; - mapGrid.SetTile(indices, new Tile(underplating.TileId)); - - //Actually spawn the relevant tile item at the right position and give it some offset to the corner. - var tileItem = _serverEntityManager.SpawnEntity(tileDef.ItemDropPrototypeName, new GridCoordinates(indices.X, indices.Y, mapGrid)); - tileItem.Transform.WorldPosition += (0.2f, 0.2f); + indices.PryTile(mapGrid.Index, _mapManager, _tileDefinitionManager, _serverEntityManager); } public override void Initialize() diff --git a/Content.Server/GameObjects/Components/Interactable/TilePryingComponent.cs b/Content.Server/GameObjects/Components/Interactable/TilePryingComponent.cs index d8e69e964d..d474db9f37 100644 --- a/Content.Server/GameObjects/Components/Interactable/TilePryingComponent.cs +++ b/Content.Server/GameObjects/Components/Interactable/TilePryingComponent.cs @@ -53,12 +53,7 @@ namespace Content.Server.GameObjects.Components.Interactable if (_toolComponentNeeded && !await tool!.UseTool(user, null, 0f, ToolQuality.Prying)) return; - var underplating = _tileDefinitionManager["underplating"]; - mapGrid.SetTile(clickLocation, new Tile(underplating.TileId)); - - //Actually spawn the relevant tile item at the right position and give it some offset to the corner. - var tileItem = Owner.EntityManager.SpawnEntity(tileDef.ItemDropPrototypeName, coordinates); - tileItem.Transform.WorldPosition += (0.2f, 0.2f); + coordinates.PryTile(_mapManager, _tileDefinitionManager, Owner.EntityManager); } } } diff --git a/Content.Shared/Maps/TurfHelpers.cs b/Content.Shared/Maps/TurfHelpers.cs index 8926c51743..f89dad1453 100644 --- a/Content.Shared/Maps/TurfHelpers.cs +++ b/Content.Shared/Maps/TurfHelpers.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using Content.Shared.Physics; +using Content.Shared.Utility; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Map; using Robust.Shared.Interfaces.Physics; @@ -65,6 +66,52 @@ namespace Content.Shared.Maps return (turf = coordinates.GetTileRef()) != null; } + public static bool PryTile(this GridCoordinates coordinates, + IMapManager? mapManager = null, ITileDefinitionManager? tileDefinitionManager = null, IEntityManager? entityManager = null) + { + mapManager ??= IoCManager.Resolve(); + + return coordinates.ToMapIndices(mapManager).PryTile(coordinates.GridID); + } + + public static bool PryTile(this MapIndices indices, GridId gridId, + IMapManager? mapManager = null, ITileDefinitionManager? tileDefinitionManager = null, IEntityManager? entityManager = null) + { + mapManager ??= IoCManager.Resolve(); + var grid = mapManager.GetGrid(gridId); + var tileRef = grid.GetTileRef(indices); + return tileRef.PryTile(mapManager, tileDefinitionManager, entityManager); + } + + public static bool PryTile(this TileRef tileRef, + IMapManager? mapManager = null, ITileDefinitionManager? tileDefinitionManager = null, IEntityManager? entityManager = null) + { + var tile = tileRef.Tile; + var indices = tileRef.GridIndices; + + // If the arguments are null, resolve the needed dependencies. + mapManager ??= IoCManager.Resolve(); + tileDefinitionManager ??= IoCManager.Resolve(); + entityManager ??= IoCManager.Resolve(); + + if (tile.IsEmpty) return false; + + var tileDef = (ContentTileDefinition) tileDefinitionManager[tile.TypeId]; + + if (!tileDef.CanCrowbar) return false; + + var mapGrid = mapManager.GetGrid(tileRef.GridIndex); + + var plating = tileDefinitionManager[tileDef.BaseTurfs[^1]]; + + mapGrid.SetTile(tileRef.GridIndices, new Tile(plating.TileId)); + + //Actually spawn the relevant tile item at the right position and give it some random offset. + var tileItem = entityManager.SpawnEntity(tileDef.ItemDropPrototypeName, new GridCoordinates(indices.X, indices.Y, mapGrid)); + tileItem.RandomOffset(0.5f); + return true; + } + /// /// Helper that returns all entities in a turf. /// From 12f4d288650f291708db97149129c84aefe38063 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Aguilera=20Puerto?= Date: Wed, 2 Sep 2020 20:47:19 +0200 Subject: [PATCH 084/103] Reduce random offset for tiles --- Content.Shared/Maps/TurfHelpers.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Content.Shared/Maps/TurfHelpers.cs b/Content.Shared/Maps/TurfHelpers.cs index f89dad1453..41ae6fb666 100644 --- a/Content.Shared/Maps/TurfHelpers.cs +++ b/Content.Shared/Maps/TurfHelpers.cs @@ -106,9 +106,11 @@ namespace Content.Shared.Maps mapGrid.SetTile(tileRef.GridIndices, new Tile(plating.TileId)); + var half = mapGrid.TileSize / 2f; + //Actually spawn the relevant tile item at the right position and give it some random offset. - var tileItem = entityManager.SpawnEntity(tileDef.ItemDropPrototypeName, new GridCoordinates(indices.X, indices.Y, mapGrid)); - tileItem.RandomOffset(0.5f); + var tileItem = entityManager.SpawnEntity(tileDef.ItemDropPrototypeName, indices.ToGridCoordinates(mapManager, tileRef.GridIndex).Offset(new Vector2(half, half))); + tileItem.RandomOffset(0.25f); return true; } From 3230f219337a03a80b7f05d532e40ad14b190d33 Mon Sep 17 00:00:00 2001 From: Pieter-Jan Briers Date: Wed, 2 Sep 2020 22:11:41 +0200 Subject: [PATCH 085/103] These are words --- SpaceStation14.sln.DotSettings | 3 +++ 1 file changed, 3 insertions(+) diff --git a/SpaceStation14.sln.DotSettings b/SpaceStation14.sln.DotSettings index 5bf9f9cdd9..3a7c65e9f5 100644 --- a/SpaceStation14.sln.DotSettings +++ b/SpaceStation14.sln.DotSettings @@ -66,6 +66,8 @@ <data><IncludeFilters /><ExcludeFilters><Filter ModuleMask="Lidgren.Network" ModuleVersionMask="*" ClassMask="*" FunctionMask="*" IsEnabled="True" /></ExcludeFilters></data> True True + True + True True True True @@ -75,6 +77,7 @@ True True True + True True True True From 40f967a03af27eec7fbfb7470db0019f3a864074 Mon Sep 17 00:00:00 2001 From: Exp Date: Wed, 2 Sep 2020 23:00:06 +0200 Subject: [PATCH 086/103] Hurt Command (#1967) * Hurt Command * Fixed not sending help * Removed unused import * Use IDamageableComponent * Optional entityuid arg * Reviews * Allow DamageTypes too * who wrote this * reviews Co-authored-by: DrSmugleaf --- Content.Server/Body/BodyCommands.cs | 92 ++++++++++++++++++++++++++++- Resources/Groups/groups.yml | 2 + 2 files changed, 93 insertions(+), 1 deletion(-) diff --git a/Content.Server/Body/BodyCommands.cs b/Content.Server/Body/BodyCommands.cs index 899a793f6d..47da73fb64 100644 --- a/Content.Server/Body/BodyCommands.cs +++ b/Content.Server/Body/BodyCommands.cs @@ -1,14 +1,19 @@ #nullable enable -using System.Linq; using Content.Server.GameObjects.Components.Body; using Content.Shared.Body.Part; +using Content.Shared.Damage; using Content.Shared.GameObjects.Components.Body; +using Content.Shared.GameObjects.Components.Damage; using Robust.Server.Interfaces.Console; using Robust.Server.Interfaces.Player; +using Robust.Shared.GameObjects; +using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Random; using Robust.Shared.IoC; using Robust.Shared.Prototypes; using Robust.Shared.Random; +using System; +using System.Linq; namespace Content.Server.Body { @@ -144,4 +149,89 @@ namespace Content.Server.Body shell.SendText(player, $"No mechanism was found with name {mechanismName}."); } } + + class HurtCommand : IClientCommand + { + public string Command => "hurt"; + public string Description => "Ouch"; + public string Help => $"Usage: {Command} () ()"; + + private void SendDamageTypes(IConsoleShell shell, IPlayerSession? player) + { + var msg = ""; + foreach (var dClass in Enum.GetNames(typeof(DamageClass))) + { + msg += $"\n{dClass}"; + var types = Enum.Parse(dClass).ToTypes(); + foreach (var dType in types) + { + msg += $"\n - {dType}"; + } + } + shell.SendText(player, $"Damage Types:{msg}"); + } + + public void Execute(IConsoleShell shell, IPlayerSession? player, string[] args) + { + // Check if we have enough for the dmg types to show + if (args.Length > 0 && args[0] == "?") + { + SendDamageTypes(shell, player); + return; + } + + // Not enough args + if (args.Length < 2) + { + shell.SendText(player, Help); + return; + } + + var ignoreResistance = false; + var entityUid = player != null && player.AttachedEntityUid.HasValue ? player.AttachedEntityUid.Value : EntityUid.Invalid; + if (!int.TryParse(args[1], out var amount) || + args.Length >= 3 && args[2] != "_" && !EntityUid.TryParse(args[2], out entityUid) || + args.Length >= 4 && !bool.TryParse(args[3], out ignoreResistance)) + { + shell.SendText(player, Help); + return; + } + + if (entityUid == EntityUid.Invalid) + { + shell.SendText(player, "Not a valid entity."); + return; + } + + if (!IoCManager.Resolve().TryGetEntity(entityUid, out var ent)) + { + shell.SendText(player, "Entity couldn't be found."); + return; + } + + if (!ent.TryGetComponent(out IDamageableComponent? damageable)) + { + shell.SendText(player, "Entity can't be damaged."); + return; + } + + if (Enum.TryParse(args[0], true, out var dmgClass)) + { + if (!damageable.ChangeDamage(dmgClass, amount, ignoreResistance)) + shell.SendText(player, "Something went wrong!"); + return; + } + // Fall back to DamageType + else if (Enum.TryParse(args[0], true, out var dmgType)) + { + if (!damageable.ChangeDamage(dmgType, amount, ignoreResistance)) + shell.SendText(player, "Something went wrong!"); + return; + } + else + { + SendDamageTypes(shell, player); + } + } + } } diff --git a/Resources/Groups/groups.yml b/Resources/Groups/groups.yml index f166b7f1c9..8762c7c671 100644 --- a/Resources/Groups/groups.yml +++ b/Resources/Groups/groups.yml @@ -106,6 +106,7 @@ - removedamageflag - godmode - deleteewi + - hurt CanViewVar: true CanAdminPlace: true CanAdminMenu: true @@ -205,6 +206,7 @@ - removedamageflag - godmode - deleteewi + - hurt CanViewVar: true CanAdminPlace: true CanScript: true From 363bfb595f5f143fd38bdd909e3f4926e2e15440 Mon Sep 17 00:00:00 2001 From: Metal Gear Sloth Date: Thu, 3 Sep 2020 19:35:09 +1000 Subject: [PATCH 087/103] Reduce power allocations It was the 2nd and 3rd highest traffic for memory allocs. --- .../NodeContainer/NodeGroups/ApcNetNodeGroup.cs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/Content.Server/GameObjects/Components/NodeContainer/NodeGroups/ApcNetNodeGroup.cs b/Content.Server/GameObjects/Components/NodeContainer/NodeGroups/ApcNetNodeGroup.cs index 8e1d103c15..4b6a11a870 100644 --- a/Content.Server/GameObjects/Components/NodeContainer/NodeGroups/ApcNetNodeGroup.cs +++ b/Content.Server/GameObjects/Components/NodeContainer/NodeGroups/ApcNetNodeGroup.cs @@ -35,8 +35,6 @@ namespace Content.Server.GameObjects.Components.NodeContainer.NodeGroups [ViewVariables] private int TotalReceivers => _providerReceivers.SelectMany(kvp => kvp.Value).Count(); - private IEnumerable AvailableBatteries => _apcBatteries.Where(kvp => kvp.Key.MainBreakerEnabled).Select(kvp => kvp.Value); - public static readonly IApcNet NullNet = new NullApcNet(); #region IApcNet Methods @@ -88,8 +86,11 @@ namespace Content.Server.GameObjects.Components.NodeContainer.NodeGroups { var totalCharge = 0.0; var totalMaxCharge = 0; - foreach (var battery in AvailableBatteries) + foreach (var (apc, battery) in _apcBatteries) { + if (!apc.MainBreakerEnabled) + continue; + totalCharge += battery.CurrentCharge; totalMaxCharge += battery.MaxCharge; } @@ -102,8 +103,11 @@ namespace Content.Server.GameObjects.Components.NodeContainer.NodeGroups private bool TryUsePower(float neededCharge) { - foreach (var battery in AvailableBatteries) + foreach (var (apc, battery) in _apcBatteries) { + if (!apc.MainBreakerEnabled) + continue; + if (battery.TryUseCharge(neededCharge)) //simplification - all power needed must come from one battery { return true; From 17ea79076ae8f5015433b8d4f0eeb3b28fc513a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Aguilera=20Puerto?= Date: Thu, 3 Sep 2020 15:31:42 +0200 Subject: [PATCH 088/103] AddActiveTile doesn't check if the tile's gasmixture is null anymore. Fixes race condition where an airtight tile without a gas mixture wouldn't become active after the vacuum is fixed. --- .../GameObjects/Components/Atmos/GridAtmosphereComponent.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Content.Server/GameObjects/Components/Atmos/GridAtmosphereComponent.cs b/Content.Server/GameObjects/Components/Atmos/GridAtmosphereComponent.cs index 1e24393305..d89fdd973f 100644 --- a/Content.Server/GameObjects/Components/Atmos/GridAtmosphereComponent.cs +++ b/Content.Server/GameObjects/Components/Atmos/GridAtmosphereComponent.cs @@ -281,7 +281,7 @@ namespace Content.Server.GameObjects.Components.Atmos public void AddActiveTile(TileAtmosphere? tile) { if (!Owner.TryGetComponent(out IMapGridComponent? mapGrid)) return; - if (tile?.GridIndex != mapGrid.Grid.Index || tile?.Air == null) return; + if (tile?.GridIndex != mapGrid.Grid.Index) return; tile.Excited = true; _activeTiles.Add(tile); } From 3d9fe8ecfaa79e0c7b384bf511ec887e2ea023a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Aguilera=20Puerto?= Date: Thu, 3 Sep 2020 15:40:13 +0200 Subject: [PATCH 089/103] Fix lv426 barsign case sensitivity --- .../Misc/barsign.rsi/{LV426.png => lv426.png} | Bin 1 file changed, 0 insertions(+), 0 deletions(-) rename Resources/Textures/Constructible/Misc/barsign.rsi/{LV426.png => lv426.png} (100%) diff --git a/Resources/Textures/Constructible/Misc/barsign.rsi/LV426.png b/Resources/Textures/Constructible/Misc/barsign.rsi/lv426.png similarity index 100% rename from Resources/Textures/Constructible/Misc/barsign.rsi/LV426.png rename to Resources/Textures/Constructible/Misc/barsign.rsi/lv426.png From 850abc0f0ea983b1af1ff0a4449e94a4ea2f67ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Aguilera=20Puerto?= Date: Thu, 3 Sep 2020 19:16:17 +0200 Subject: [PATCH 090/103] Update submodule --- RobustToolbox | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RobustToolbox b/RobustToolbox index 4f5d2664b8..49242f8a0a 160000 --- a/RobustToolbox +++ b/RobustToolbox @@ -1 +1 @@ -Subproject commit 4f5d2664b8e3bb7c775c138add41234b15a62164 +Subproject commit 49242f8a0aeea2e25e20c5efb435aaa223dec854 From 5f79d3e31d4930398611ae8af026524415e06118 Mon Sep 17 00:00:00 2001 From: DrSmugleaf Date: Thu, 3 Sep 2020 20:17:30 +0200 Subject: [PATCH 091/103] Fix the health status effect not showing after spawn (#2013) --- .../Components/Mobs/State/MobStateManagerComponent.cs | 2 +- .../Mobs/State/SharedMobStateManagerComponent.cs | 8 +------- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/Content.Client/GameObjects/Components/Mobs/State/MobStateManagerComponent.cs b/Content.Client/GameObjects/Components/Mobs/State/MobStateManagerComponent.cs index a5b16f9e40..207c8f17c2 100644 --- a/Content.Client/GameObjects/Components/Mobs/State/MobStateManagerComponent.cs +++ b/Content.Client/GameObjects/Components/Mobs/State/MobStateManagerComponent.cs @@ -54,7 +54,7 @@ namespace Content.Client.GameObjects.Components.Mobs.State } _currentDamageState = state.DamageState; - CurrentMobState.ExitState(Owner); + CurrentMobState?.ExitState(Owner); CurrentMobState = Behavior[CurrentDamageState]; CurrentMobState.EnterState(Owner); } diff --git a/Content.Shared/GameObjects/Components/Mobs/State/SharedMobStateManagerComponent.cs b/Content.Shared/GameObjects/Components/Mobs/State/SharedMobStateManagerComponent.cs index 98a6899e8f..091b7163ca 100644 --- a/Content.Shared/GameObjects/Components/Mobs/State/SharedMobStateManagerComponent.cs +++ b/Content.Shared/GameObjects/Components/Mobs/State/SharedMobStateManagerComponent.cs @@ -25,17 +25,11 @@ namespace Content.Shared.GameObjects.Components.Mobs.State public virtual DamageState CurrentDamageState { get; protected set; } - public override void OnAdd() - { - base.OnAdd(); - - CurrentDamageState = DamageState.Alive; - } - public override void Initialize() { base.Initialize(); + CurrentDamageState = DamageState.Alive; CurrentMobState = Behavior[CurrentDamageState]; CurrentMobState.EnterState(Owner); CurrentMobState.UpdateState(Owner); From b8bf1002770a948970a04c41321101475d96b411 Mon Sep 17 00:00:00 2001 From: creadth Date: Thu, 3 Sep 2020 21:35:39 +0300 Subject: [PATCH 092/103] Feature/1754 kill player on body parts missing (#2014) * Moved the uplink creation code to the PresetSuspicion.Start method to ensure uplink created when we give the traitor role Moved the starting TC balance to cvars * Added isVital flag for body parts Automatically killing creature if last vital body part removed Marked head as vital part --- Content.Server/Body/BodyPart.cs | 8 ++++ Content.Server/Body/IBodyPart.cs | 5 +++ .../Components/Body/BodyManagerComponent.cs | 44 ++++++++----------- Content.Shared/Body/Part/BodyPartPrototype.cs | 5 +++ .../Components/Damage/DamageableComponent.cs | 23 +++++----- .../Prototypes/Body/Parts/humanoid_parts.yml | 1 + .../Entities/Mobs/Species/human.yml | 2 - 7 files changed, 50 insertions(+), 38 deletions(-) diff --git a/Content.Server/Body/BodyPart.cs b/Content.Server/Body/BodyPart.cs index b176118af4..544ce651ec 100644 --- a/Content.Server/Body/BodyPart.cs +++ b/Content.Server/Body/BodyPart.cs @@ -152,6 +152,13 @@ namespace Content.Server.Body [ViewVariables] public IReadOnlyCollection Mechanisms => _mechanisms; + /// + /// Represents if body part is vital for creature. + /// If the last vital body part is removed creature dies + /// + [ViewVariables] + public bool IsVital { get; private set; } + /// /// This method is called by /// before @@ -451,6 +458,7 @@ namespace Content.Server.Body RSIPath = data.RSIPath; RSIState = data.RSIState; MaxDurability = data.Durability; + IsVital = data.IsVital; if (!prototypeManager.TryIndex(data.DamageContainerPresetId, out DamageContainerPrototype damageContainerData)) diff --git a/Content.Server/Body/IBodyPart.cs b/Content.Server/Body/IBodyPart.cs index 19d1ae9123..eaa49d0e06 100644 --- a/Content.Server/Body/IBodyPart.cs +++ b/Content.Server/Body/IBodyPart.cs @@ -82,6 +82,11 @@ namespace Content.Server.Body // TODO: SpriteComponent rework public Color? RSIColor { get; set; } + /// + /// If body part is vital + /// + public bool IsVital { get; } + bool HasProperty() where T : BodyPartProperty; bool HasProperty(Type type); diff --git a/Content.Server/GameObjects/Components/Body/BodyManagerComponent.cs b/Content.Server/GameObjects/Components/Body/BodyManagerComponent.cs index c7e658e2b9..29329a75dd 100644 --- a/Content.Server/GameObjects/Components/Body/BodyManagerComponent.cs +++ b/Content.Server/GameObjects/Components/Body/BodyManagerComponent.cs @@ -279,16 +279,11 @@ namespace Content.Server.GameObjects.Components.Body if (speedSum <= 0.001f || _activeLegs.Count <= 0) { - // Case: no way of moving. Fall down. - EntitySystem.Get().Down(Owner); playerMover.BaseWalkSpeed = 0.8f; playerMover.BaseSprintSpeed = 2.0f; } else { - // Case: have at least one leg. Set move speed. - EntitySystem.Get().Standing(Owner); - // Extra legs stack diminishingly. // Final speed = speed sum/(leg count-log4(leg count)) playerMover.BaseWalkSpeed = @@ -568,28 +563,10 @@ namespace Content.Server.GameObjects.Components.Body { DebugTools.AssertNotNull(part); - if (!_parts.ContainsValue(part)) - { - return; - } + var slotName = _parts.FirstOrDefault(x => x.Value == part).Key; + if (string.IsNullOrEmpty(slotName)) return; + DisconnectBodyPart(slotName, dropEntity); - var slotName = Parts.FirstOrDefault(x => x.Value == part).Key; - RemoveBodyPart(slotName, dropEntity); - - // Call disconnect on all limbs that were hanging off this limb - if (TryGetBodyPartConnections(slotName, out List connections)) - { - // TODO: Optimize - foreach (var connectionName in connections) - { - if (TryGetBodyPart(connectionName, out var result) && !ConnectedToCenterPart(result)) - { - DisconnectBodyPart(connectionName, dropEntity); - } - } - } - - OnBodyChanged(); } /// @@ -757,6 +734,21 @@ namespace Content.Server.GameObjects.Components.Body SendNetworkMessage(mechanismMessage); } + if (CurrentDamageState == DamageState.Dead) return true; + + // creadth: fall down if no legs + if (part.PartType == BodyPartType.Leg && Parts.Count(x => x.Value.PartType == BodyPartType.Leg) == 0) + { + EntitySystem.Get().Down(Owner); + } + + // creadth: immediately kill entity if last vital part removed + if (part.IsVital && Parts.Count(x => x.Value.PartType == part.PartType) == 0) + { + CurrentDamageState = DamageState.Dead; + ForceHealthChangedEvent(); + } + return true; } diff --git a/Content.Shared/Body/Part/BodyPartPrototype.cs b/Content.Shared/Body/Part/BodyPartPrototype.cs index 7d6158dce3..dd3f64a544 100644 --- a/Content.Shared/Body/Part/BodyPartPrototype.cs +++ b/Content.Shared/Body/Part/BodyPartPrototype.cs @@ -33,6 +33,8 @@ namespace Content.Shared.Body.Part private string _rsiState; private int _size; private string _surgeryDataName; + private bool _isVital; + [ViewVariables] public string Name => _name; @@ -66,6 +68,8 @@ namespace Content.Shared.Body.Part [ViewVariables] public string ID => _id; + [ViewVariables] public bool IsVital => _isVital; + public virtual void LoadFrom(YamlMappingNode mapping) { var serializer = YamlObjectSerializer.NewReader(mapping); @@ -86,6 +90,7 @@ namespace Content.Shared.Body.Part serializer.DataField(ref _resistanceSetId, "resistances", string.Empty); serializer.DataField(ref _properties, "properties", new List()); serializer.DataField(ref _mechanisms, "mechanisms", new List()); + serializer.DataField(ref _isVital, "isVital", false); foreach (var property in _properties) { diff --git a/Content.Shared/GameObjects/Components/Damage/DamageableComponent.cs b/Content.Shared/GameObjects/Components/Damage/DamageableComponent.cs index 7fdfeba0ac..551ffd026d 100644 --- a/Content.Shared/GameObjects/Components/Damage/DamageableComponent.cs +++ b/Content.Shared/GameObjects/Components/Damage/DamageableComponent.cs @@ -367,17 +367,20 @@ namespace Content.Shared.GameObjects.Components.Damage protected virtual void OnHealthChanged(HealthChangedEventArgs e) { - if (DeadThreshold != -1 && TotalDamage > DeadThreshold) + if (CurrentDamageState != DamageState.Dead) { - CurrentDamageState = DamageState.Dead; - } - else if (CriticalThreshold != -1 && TotalDamage > CriticalThreshold) - { - CurrentDamageState = DamageState.Critical; - } - else - { - CurrentDamageState = DamageState.Alive; + if (DeadThreshold != -1 && TotalDamage > DeadThreshold) + { + CurrentDamageState = DamageState.Dead; + } + else if (CriticalThreshold != -1 && TotalDamage > CriticalThreshold) + { + CurrentDamageState = DamageState.Critical; + } + else + { + CurrentDamageState = DamageState.Alive; + } } Owner.EntityManager.EventBus.RaiseEvent(EventSource.Local, e); diff --git a/Resources/Prototypes/Body/Parts/humanoid_parts.yml b/Resources/Prototypes/Body/Parts/humanoid_parts.yml index 5437b3e6a3..a9964674e2 100644 --- a/Resources/Prototypes/Body/Parts/humanoid_parts.yml +++ b/Resources/Prototypes/Body/Parts/humanoid_parts.yml @@ -33,6 +33,7 @@ damageContainer: biologicalDamageContainer resistances: defaultResistances surgeryDataType: Content.Server.Body.Surgery.BiologicalSurgeryData + isVital: true mechanisms: - mechanism.Brain.BasicHuman - mechanism.Eyes.BasicHuman diff --git a/Resources/Prototypes/Entities/Mobs/Species/human.yml b/Resources/Prototypes/Entities/Mobs/Species/human.yml index f309bea3d5..e672beebd5 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/human.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/human.yml @@ -112,8 +112,6 @@ sprite: Mobs/Customization/human_hair.rsi - map: ["enum.Slots.MASK"] - map: ["enum.Slots.HEAD"] - - map: ["hand-left"] - - map: ["hand-right"] - type: Icon sprite: Mobs/Species/Human/parts.rsi state: full From 7991a97ec265dbe717cae1fd4540026c5d397f92 Mon Sep 17 00:00:00 2001 From: Exp Date: Thu, 3 Sep 2020 21:54:10 +0200 Subject: [PATCH 093/103] Fix Airlock Power not restoring after cutting the wire (#2015) --- Content.Server/GameObjects/Components/Doors/AirlockComponent.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Content.Server/GameObjects/Components/Doors/AirlockComponent.cs b/Content.Server/GameObjects/Components/Doors/AirlockComponent.cs index 64652f456f..03dabcc6c4 100644 --- a/Content.Server/GameObjects/Components/Doors/AirlockComponent.cs +++ b/Content.Server/GameObjects/Components/Doors/AirlockComponent.cs @@ -306,6 +306,7 @@ namespace Content.Server.GameObjects.Components.Doors case Wires.BackupPower: PowerWiresPulsed = true; _powerWiresPulsedTimerCancel.Cancel(); + _powerWiresPulsedTimerCancel = new CancellationTokenSource(); Timer.Spawn(PowerWiresTimeout, () => PowerWiresPulsed = false, _powerWiresPulsedTimerCancel.Token); From c3630b7301020c8417bd06572ca71356d0149f64 Mon Sep 17 00:00:00 2001 From: nuke <47336974+nuke-makes-games@users.noreply.github.com> Date: Thu, 3 Sep 2020 16:02:40 -0400 Subject: [PATCH 094/103] Glowsticks, flares and lighting behaviours (#1886) * Assets * LightingBehaviours, flares, and such. * More changes * More changes, more flare work. * More work on flares + light behaviours * another refactor * missed * Light behaviours refactor, added sfx, improved graphics, improved lighting effects for glowstick and flare. * remove unneeded value * nullables * remove old code * nullable * one last push * net id * more work * more colors for glowsticks * Adjust flare so it fades in * fix name * sprite fix --- .../Components/ExpendableLightVisualizer.cs | 39 ++ .../Interactable/ExpendableLightComponent.cs | 16 + .../Components/LightBehaviourComponent.cs | 539 ++++++++++++++++++ .../Interactable/ExpendableLightComponent.cs | 221 +++++++ .../Components/LightBehaviourComponent.cs | 15 + .../EntitySystems/ExpendableLightSystem.cs | 18 + .../SharedExpendableLightComponent.cs | 80 +++ .../SharedLightBehaviourComponent.cs | 13 + Resources/Audio/Items/Flare/flare_burn.ogg | Bin 0 -> 298816 bytes Resources/Audio/Items/Flare/flare_on.ogg | Bin 0 -> 58648 bytes .../Entities/Objects/Tools/flare.yml | 77 +++ .../Entities/Objects/Tools/glowstick.yml | 417 ++++++++++++++ .../Objects/Misc/flare.rsi/flare_base.png | Bin 0 -> 2907 bytes .../Objects/Misc/flare.rsi/flare_burn.png | Bin 0 -> 3121 bytes .../Objects/Misc/flare.rsi/flare_spent.png | Bin 0 -> 2973 bytes .../Objects/Misc/flare.rsi/flare_unlit.png | Bin 0 -> 2996 bytes .../Textures/Objects/Misc/flare.rsi/meta.json | 126 ++++ .../Misc/flare.rsi/off-inhand-left.png | Bin 0 -> 3053 bytes .../Misc/flare.rsi/off-inhand-right.png | Bin 0 -> 3039 bytes .../Objects/Misc/flare.rsi/on-inhand-left.png | Bin 0 -> 3039 bytes .../Misc/flare.rsi/on-inhand-right.png | Bin 0 -> 3040 bytes .../Misc/glowstick.rsi/glowstick_base.png | Bin 0 -> 2984 bytes .../Misc/glowstick.rsi/glowstick_glow.png | Bin 0 -> 2916 bytes .../Misc/glowstick.rsi/glowstick_lit.png | Bin 0 -> 2944 bytes .../Misc/glowstick.rsi/glowstick_unlit.png | Bin 0 -> 2964 bytes .../Objects/Misc/glowstick.rsi/meta.json | 121 ++++ .../Misc/glowstick.rsi/off-inhand-left.png | Bin 0 -> 3053 bytes .../Misc/glowstick.rsi/off-inhand-right.png | Bin 0 -> 3039 bytes .../Misc/glowstick.rsi/on-inhand-left.png | Bin 0 -> 3037 bytes .../Misc/glowstick.rsi/on-inhand-right.png | Bin 0 -> 3026 bytes 30 files changed, 1682 insertions(+) create mode 100644 Content.Client/GameObjects/Components/ExpendableLightVisualizer.cs create mode 100644 Content.Client/GameObjects/Components/Interactable/ExpendableLightComponent.cs create mode 100644 Content.Client/GameObjects/Components/LightBehaviourComponent.cs create mode 100644 Content.Server/GameObjects/Components/Interactable/ExpendableLightComponent.cs create mode 100644 Content.Server/GameObjects/Components/LightBehaviourComponent.cs create mode 100644 Content.Server/GameObjects/EntitySystems/ExpendableLightSystem.cs create mode 100644 Content.Shared/GameObjects/Components/SharedExpendableLightComponent.cs create mode 100644 Content.Shared/GameObjects/Components/SharedLightBehaviourComponent.cs create mode 100644 Resources/Audio/Items/Flare/flare_burn.ogg create mode 100644 Resources/Audio/Items/Flare/flare_on.ogg create mode 100644 Resources/Prototypes/Entities/Objects/Tools/flare.yml create mode 100644 Resources/Prototypes/Entities/Objects/Tools/glowstick.yml create mode 100644 Resources/Textures/Objects/Misc/flare.rsi/flare_base.png create mode 100644 Resources/Textures/Objects/Misc/flare.rsi/flare_burn.png create mode 100644 Resources/Textures/Objects/Misc/flare.rsi/flare_spent.png create mode 100644 Resources/Textures/Objects/Misc/flare.rsi/flare_unlit.png create mode 100644 Resources/Textures/Objects/Misc/flare.rsi/meta.json create mode 100644 Resources/Textures/Objects/Misc/flare.rsi/off-inhand-left.png create mode 100644 Resources/Textures/Objects/Misc/flare.rsi/off-inhand-right.png create mode 100644 Resources/Textures/Objects/Misc/flare.rsi/on-inhand-left.png create mode 100644 Resources/Textures/Objects/Misc/flare.rsi/on-inhand-right.png create mode 100644 Resources/Textures/Objects/Misc/glowstick.rsi/glowstick_base.png create mode 100644 Resources/Textures/Objects/Misc/glowstick.rsi/glowstick_glow.png create mode 100644 Resources/Textures/Objects/Misc/glowstick.rsi/glowstick_lit.png create mode 100644 Resources/Textures/Objects/Misc/glowstick.rsi/glowstick_unlit.png create mode 100644 Resources/Textures/Objects/Misc/glowstick.rsi/meta.json create mode 100644 Resources/Textures/Objects/Misc/glowstick.rsi/off-inhand-left.png create mode 100644 Resources/Textures/Objects/Misc/glowstick.rsi/off-inhand-right.png create mode 100644 Resources/Textures/Objects/Misc/glowstick.rsi/on-inhand-left.png create mode 100644 Resources/Textures/Objects/Misc/glowstick.rsi/on-inhand-right.png diff --git a/Content.Client/GameObjects/Components/ExpendableLightVisualizer.cs b/Content.Client/GameObjects/Components/ExpendableLightVisualizer.cs new file mode 100644 index 0000000000..e24a50ea84 --- /dev/null +++ b/Content.Client/GameObjects/Components/ExpendableLightVisualizer.cs @@ -0,0 +1,39 @@ + +using Content.Shared.GameObjects.Components; +using JetBrains.Annotations; +using Robust.Client.GameObjects; +using System; + +namespace Content.Client.GameObjects.Components +{ + [UsedImplicitly] + public class ExpendableLightVisualizer : AppearanceVisualizer + { + public override void OnChangeData(AppearanceComponent component) + { + base.OnChangeData(component); + + if (component.Deleted) + { + return; + } + + if (component.TryGetData(ExpendableLightVisuals.State, out string lightBehaviourID)) + { + if (component.Owner.TryGetComponent(out var lightBehaviour)) + { + lightBehaviour.StopLightBehaviour(); + + if (lightBehaviourID != string.Empty) + { + lightBehaviour.StartLightBehaviour(lightBehaviourID); + } + else if (component.Owner.TryGetComponent(out var light)) + { + light.Enabled = false; + } + } + } + } + } +} diff --git a/Content.Client/GameObjects/Components/Interactable/ExpendableLightComponent.cs b/Content.Client/GameObjects/Components/Interactable/ExpendableLightComponent.cs new file mode 100644 index 0000000000..7559d71356 --- /dev/null +++ b/Content.Client/GameObjects/Components/Interactable/ExpendableLightComponent.cs @@ -0,0 +1,16 @@ + +using Content.Shared.GameObjects.Components; +using Robust.Shared.GameObjects; +using Robust.Client.GameObjects; + +namespace Content.Client.GameObjects.Components.Interactable +{ + /// + /// Component that represents a handheld expendable light which can be activated and eventually dies over time. + /// + [RegisterComponent] + public class ExpendableLightComponent : SharedExpendableLightComponent + { + + } +} diff --git a/Content.Client/GameObjects/Components/LightBehaviourComponent.cs b/Content.Client/GameObjects/Components/LightBehaviourComponent.cs new file mode 100644 index 0000000000..83ff452c0e --- /dev/null +++ b/Content.Client/GameObjects/Components/LightBehaviourComponent.cs @@ -0,0 +1,539 @@ + +using System; +using System.Collections.Generic; +using Robust.Client.GameObjects; +using Robust.Shared.Animations; +using Robust.Shared.GameObjects; +using Robust.Shared.Interfaces.Random; +using Robust.Shared.IoC; +using Robust.Shared.Serialization; +using Robust.Shared.ViewVariables; +using Content.Shared.GameObjects.Components; +using Robust.Shared.Log; +using Robust.Shared.Maths; +using Robust.Shared.Interfaces.Serialization; +using Robust.Client.Animations; +using Robust.Shared.Interfaces.GameObjects; +using Microsoft.CodeAnalysis.CSharp.Syntax; +using Robust.Client.GameObjects.Components.Animations; +using System.Linq; + +namespace Content.Client.GameObjects.Components +{ + #region LIGHT_BEHAVIOURS + /// + /// Base class for all light behaviours to derive from. + /// This AnimationTrack derivative does not rely on keyframes since it often needs to have a randomized duration. + /// + [Serializable] + public abstract class LightBehaviourAnimationTrack : AnimationTrackProperty, IExposeData + { + [ViewVariables] public string ID { get; set; } + [ViewVariables] public string Property { get; protected set; } + [ViewVariables] public bool IsLooped { get; set; } + [ViewVariables] public bool Enabled { get; set; } + [ViewVariables] public float StartValue { get; set; } + [ViewVariables] public float EndValue { get; set; } + [ViewVariables] public float MinDuration { get; set; } + [ViewVariables] public float MaxDuration { get; set; } + [ViewVariables] public AnimationInterpolationMode InterpolateMode { get; set; } + + [ViewVariables] protected float MaxTime { get; set; } + protected PointLightComponent Light = default; + protected IRobustRandom RobustRandom = default; + + private float _maxTime = default; + + public virtual void ExposeData(ObjectSerializer serializer) + { + serializer.DataField(this, x => x.ID, "id", string.Empty); + serializer.DataField(this, x => x.IsLooped, "isLooped", false); + serializer.DataField(this, x => x.Enabled, "enabled", false); + serializer.DataField(this, x => x.StartValue, "startValue", 0f); + serializer.DataField(this, x => x.EndValue, "endValue", 2f); + serializer.DataField(this, x => x.MinDuration, "minDuration", -1f); + serializer.DataField(this, x => x.MaxDuration, "maxDuration", 2f); + serializer.DataField(this, x => x.Property, "property", "Radius"); + serializer.DataField(this, x => x.InterpolateMode, "interpolate", AnimationInterpolationMode.Linear); + } + + public void Initialize(PointLightComponent light) + { + Light = light; + RobustRandom = IoCManager.Resolve(); + + if (Enabled) + { + Light.Enabled = true; + } + + OnInitialize(); + } + + public void UpdatePlaybackValues(Animation owner) + { + Light.Enabled = true; + + if (MinDuration > 0) + { + MaxTime = (float) RobustRandom.NextDouble() * (MaxDuration - MinDuration) + MinDuration; + } + else + { + MaxTime = MaxDuration; + } + + owner.Length = TimeSpan.FromSeconds(MaxTime); + } + + public override (int KeyFrameIndex, float FramePlayingTime) InitPlayback() + { + OnStart(); + + return (-1, _maxTime); + } + + protected void ApplyProperty(object value) + { + if (Property == null) + { + throw new InvalidOperationException("Property parameter is null! Check the prototype!"); + } + + if (Light is IAnimationProperties properties) + { + properties.SetAnimatableProperty(Property, value); + } + else + { + AnimationHelper.SetAnimatableProperty(Light, Property, value); + } + } + + protected override void ApplyProperty(object context, object value) + { + ApplyProperty(value); + } + + public virtual void OnInitialize() { } + public virtual void OnStart() { } + } + + /// + /// A light behaviour that alternates between StartValue and EndValue + /// + public class PulseBehaviour: LightBehaviourAnimationTrack + { + public override (int KeyFrameIndex, float FramePlayingTime) AdvancePlayback( + object context, int prevKeyFrameIndex, float prevPlayingTime, float frameTime) + { + var playingTime = prevPlayingTime + frameTime; + var interpolateValue = playingTime / MaxTime; + + if (Property == "Enabled") // special case for boolean + { + ApplyProperty(interpolateValue < 0.5f? true : false); + return (-1, playingTime); + } + + if (interpolateValue < 0.5f) + { + switch (InterpolateMode) + { + case AnimationInterpolationMode.Linear: + ApplyProperty(InterpolateLinear(StartValue, EndValue, interpolateValue * 2f)); + break; + case AnimationInterpolationMode.Cubic: + ApplyProperty(InterpolateCubic(EndValue, StartValue, EndValue, StartValue, interpolateValue * 2f)); + break; + default: + case AnimationInterpolationMode.Nearest: + ApplyProperty(StartValue); + break; + } + } + else + { + switch (InterpolateMode) + { + case AnimationInterpolationMode.Linear: + ApplyProperty(InterpolateLinear(EndValue, StartValue, (interpolateValue - 0.5f) * 2f)); + break; + case AnimationInterpolationMode.Cubic: + ApplyProperty(InterpolateCubic(StartValue, EndValue, StartValue, EndValue, (interpolateValue - 0.5f) * 2f)); + break; + default: + case AnimationInterpolationMode.Nearest: + ApplyProperty(EndValue); + break; + } + } + + return (-1, playingTime); + } + } + + /// + /// A light behaviour that interpolates from StartValue to EndValue + /// + public class FadeBehaviour : LightBehaviourAnimationTrack + { + public override (int KeyFrameIndex, float FramePlayingTime) AdvancePlayback( + object context, int prevKeyFrameIndex, float prevPlayingTime, float frameTime) + { + var playingTime = prevPlayingTime + frameTime; + var interpolateValue = playingTime / MaxTime; + + if (Property == "Enabled") // special case for boolean + { + ApplyProperty(interpolateValue < EndValue? true : false); + return (-1, playingTime); + } + + switch (InterpolateMode) + { + case AnimationInterpolationMode.Linear: + ApplyProperty(InterpolateLinear(StartValue, EndValue, interpolateValue)); + break; + case AnimationInterpolationMode.Cubic: + ApplyProperty(InterpolateCubic(EndValue, StartValue, EndValue, StartValue, interpolateValue)); + break; + default: + case AnimationInterpolationMode.Nearest: + ApplyProperty(interpolateValue < 0.5f ? StartValue : EndValue); + break; + } + + return (-1, playingTime); + } + } + + /// + /// A light behaviour that interpolates using random values chosen between StartValue and EndValue. + /// + public class RandomizeBehaviour : LightBehaviourAnimationTrack + { + private object _randomValue1 = default; + private object _randomValue2 = default; + private object _randomValue3 = default; + private object _randomValue4 = default; + + public override void OnInitialize() + { + _randomValue2 = InterpolateLinear(StartValue, EndValue, (float) RobustRandom.NextDouble()); + _randomValue3 = InterpolateLinear(StartValue, EndValue, (float) RobustRandom.NextDouble()); + _randomValue4 = InterpolateLinear(StartValue, EndValue, (float) RobustRandom.NextDouble()); + } + + public override void OnStart() + { + if (Property == "Enabled") // special case for boolean, we randomize it + { + ApplyProperty(RobustRandom.NextDouble() < 0.5 ? true : false); + return; + } + + if (InterpolateMode == AnimationInterpolationMode.Cubic) + { + _randomValue1 = _randomValue2; + _randomValue2 = _randomValue3; + } + + _randomValue3 = _randomValue4; + _randomValue4 = InterpolateLinear(StartValue, EndValue, (float) RobustRandom.NextDouble()); + } + + public override (int KeyFrameIndex, float FramePlayingTime) AdvancePlayback( + object context, int prevKeyFrameIndex, float prevPlayingTime, float frameTime) + { + var playingTime = prevPlayingTime + frameTime; + var interpolateValue = playingTime / MaxTime; + + if (Property == "Enabled") + { + return (-1, playingTime); + } + + switch (InterpolateMode) + { + case AnimationInterpolationMode.Linear: + ApplyProperty(InterpolateLinear(_randomValue3, _randomValue4, interpolateValue)); + break; + case AnimationInterpolationMode.Cubic: + ApplyProperty(InterpolateCubic(_randomValue1, _randomValue2, _randomValue3, _randomValue4, interpolateValue)); + break; + default: + case AnimationInterpolationMode.Nearest: + ApplyProperty(interpolateValue < 0.5f ? _randomValue3 : _randomValue4); + break; + } + + return (-1, playingTime); + } + } + + /// + /// A light behaviour that cycles through a list of colors. + /// + public class ColorCycleBehaviour : LightBehaviourAnimationTrack + { + public List ColorsToCycle { get; set; } + + private int _colorIndex = 0; + + public override void OnStart() + { + _colorIndex++; + + if (_colorIndex > ColorsToCycle.Count - 1) + { + _colorIndex = 0; + } + } + + public override (int KeyFrameIndex, float FramePlayingTime) AdvancePlayback( + object context, int prevKeyFrameIndex, float prevPlayingTime, float frameTime) + { + var playingTime = prevPlayingTime + frameTime; + var interpolateValue = playingTime / MaxTime; + + switch (InterpolateMode) + { + case AnimationInterpolationMode.Linear: + ApplyProperty(InterpolateLinear(ColorsToCycle[(_colorIndex - 1) % ColorsToCycle.Count], + ColorsToCycle[_colorIndex], + interpolateValue)); + break; + case AnimationInterpolationMode.Cubic: + ApplyProperty(InterpolateCubic(ColorsToCycle[_colorIndex], + ColorsToCycle[(_colorIndex + 1) % ColorsToCycle.Count], + ColorsToCycle[(_colorIndex + 2) % ColorsToCycle.Count], + ColorsToCycle[(_colorIndex + 3) % ColorsToCycle.Count], + interpolateValue)); + break; + default: + case AnimationInterpolationMode.Nearest: + ApplyProperty(ColorsToCycle[_colorIndex]); + break; + } + + return (-1, playingTime); + } + + public override void ExposeData(ObjectSerializer serializer) + { + serializer.DataField(this, x => x.ID, "id", string.Empty); + serializer.DataField(this, x => x.IsLooped, "isLooped", false); + serializer.DataField(this, x => x.Enabled, "enabled", false); + serializer.DataField(this, x => x.MinDuration, "minDuration", -1f); + serializer.DataField(this, x => x.MaxDuration, "maxDuration", 2f); + serializer.DataField(this, x => x.InterpolateMode, "interpolate", AnimationInterpolationMode.Linear); + ColorsToCycle = serializer.ReadDataField("colors", new List()); + Property = "Color"; + + if (ColorsToCycle.Count < 2) + { + throw new InvalidOperationException($"{nameof(ColorCycleBehaviour)} has less than 2 colors to cycle"); + } + } + + } + #endregion + + /// + /// A component which applies a specific behaviour to a PointLightComponent on its owner. + /// + [RegisterComponent] + public class LightBehaviourComponent : SharedLightBehaviourComponent + { + private const string KeyPrefix = nameof(LightBehaviourComponent); + + private class AnimationContainer + { + public AnimationContainer(int key, Animation animation, LightBehaviourAnimationTrack track) + { + Key = key; + Animation = animation; + LightBehaviour = track; + } + + public string FullKey => KeyPrefix + Key; + public int Key { get; set; } + public Animation Animation { get; set; } + public LightBehaviourAnimationTrack LightBehaviour { get; set; } + } + + [ViewVariables(VVAccess.ReadOnly)] + private List _animations = new List(); + + private float _originalRadius = default; + private float _originalEnergy = default; + private Angle _originalRotation = default; + private Color _originalColor = default; + private bool _originalEnabled = default; + private PointLightComponent _lightComponent = default; + private AnimationPlayerComponent _animationPlayer = default; + + protected override void Startup() + { + base.Startup(); + + CopyLightSettings(); + _animationPlayer = Owner.EnsureComponent(); + _animationPlayer.AnimationCompleted += s => OnAnimationCompleted(s); + + foreach (var container in _animations) + { + container.LightBehaviour.Initialize(_lightComponent); + } + + // we need to initialize all behaviours before starting any + foreach (var container in _animations) + { + if (container.LightBehaviour.Enabled) + { + StartLightBehaviour(container.LightBehaviour.ID); + } + } + } + + private void OnAnimationCompleted(string key) + { + var container = _animations.FirstOrDefault(x => x.FullKey == key); + + if (container.LightBehaviour.IsLooped) + { + container.LightBehaviour.UpdatePlaybackValues(container.Animation); + _animationPlayer.Play(container.Animation, container.FullKey); + } + } + + /// + /// If we disable all the light behaviours we want to be able to revert the light to its original state. + /// + private void CopyLightSettings() + { + if (Owner.TryGetComponent(out _lightComponent)) + { + _originalColor = _lightComponent.Color; + _originalEnabled = _lightComponent.Enabled; + _originalEnergy = _lightComponent.Energy; + _originalRadius = _lightComponent.Radius; + _originalRotation = _lightComponent.Rotation; + } + else + { + Logger.Warning($"{Owner.Name} has a {nameof(LightBehaviourComponent)} but it has no {nameof(PointLightComponent)}! Check the prototype!"); + } + } + + /// + /// Start animating a light behaviour with the specified ID. If the specified ID is empty, it will start animating all light behaviour entries. + /// If specified light behaviours are already animating, calling this does nothing. + /// Multiple light behaviours can have the same ID. + /// + public void StartLightBehaviour(string id = "") + { + foreach (var container in _animations) + { + if (container.LightBehaviour.ID == id || id == string.Empty) + { + if (!_animationPlayer.HasRunningAnimation(KeyPrefix + container.Key)) + { + container.LightBehaviour.UpdatePlaybackValues(container.Animation); + _animationPlayer.Play(container.Animation, KeyPrefix + container.Key); + } + } + } + } + + /// + /// If any light behaviour with the specified ID is animating, then stop it. + /// If no ID is specified then all light behaviours will be stopped. + /// Multiple light behaviours can have the same ID. + /// + /// + /// Should the behaviour(s) also be removed permanently? + /// Should the light have its original settings applied? + public void StopLightBehaviour(string id = "", bool removeBehaviour = false, bool resetToOriginalSettings = false) + { + var toRemove = new List(); + + foreach (var container in _animations) + { + if (container.LightBehaviour.ID == id || id == string.Empty) + { + if (_animationPlayer.HasRunningAnimation(KeyPrefix + container.Key)) + { + _animationPlayer.Stop(KeyPrefix + container.Key); + } + + if (removeBehaviour) + { + toRemove.Add(container); + } + } + } + + foreach (var container in toRemove) + { + _animations.Remove(container); + } + + if (resetToOriginalSettings) + { + _lightComponent.Color = _originalColor; + _lightComponent.Enabled = _originalEnabled; + _lightComponent.Energy = _originalEnergy; + _lightComponent.Radius = _originalRadius; + _lightComponent.Rotation = _originalRotation; + } + } + + /// + /// Add a new light behaviour to the component and start it immediately unless otherwise specified. + /// + public void AddNewLightBehaviour(LightBehaviourAnimationTrack behaviour, bool playImmediately = true) + { + int key = 0; + + while (_animations.Any(x => x.Key == key)) + { + key++; + } + + var animation = new Animation() + { + AnimationTracks = { behaviour } + }; + + behaviour.Initialize(_lightComponent); + var container = new AnimationContainer(key, animation, behaviour); + _animations.Add(container); + + if (playImmediately) + { + StartLightBehaviour(behaviour.ID); + } + } + + public override void ExposeData(ObjectSerializer serializer) + { + base.ExposeData(serializer); + + var behaviours = serializer.ReadDataField("behaviours", new List()); + var key = 0; + + foreach (LightBehaviourAnimationTrack behaviour in behaviours) + { + var animation = new Animation() + { + AnimationTracks = { behaviour } + }; + + _animations.Add(new AnimationContainer(key, animation, behaviour)); + key++; + } + } + } +} diff --git a/Content.Server/GameObjects/Components/Interactable/ExpendableLightComponent.cs b/Content.Server/GameObjects/Components/Interactable/ExpendableLightComponent.cs new file mode 100644 index 0000000000..da34c87cb6 --- /dev/null +++ b/Content.Server/GameObjects/Components/Interactable/ExpendableLightComponent.cs @@ -0,0 +1,221 @@ + +using Content.Server.GameObjects.Components.Items.Clothing; +using Content.Server.GameObjects.Components.Items.Storage; +using Content.Server.GameObjects.Components.Sound; +using Content.Shared.GameObjects.Components; +using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.GameObjects.Verbs; +using Content.Shared.Interfaces.GameObjects.Components; +using Robust.Server.GameObjects; +using Robust.Server.GameObjects.EntitySystems; +using Robust.Shared.GameObjects; +using Robust.Shared.GameObjects.EntitySystemMessages; +using Robust.Shared.GameObjects.Systems; +using Robust.Shared.Interfaces.GameObjects; +using Robust.Shared.ViewVariables; +using Robust.Shared.Audio; + +namespace Content.Server.GameObjects.Components.Interactable +{ + /// + /// Component that represents a handheld expendable light which can be activated and eventually dies over time. + /// + [RegisterComponent] + public class ExpendableLightComponent : SharedExpendableLightComponent, IUse + { + private static readonly AudioParams LoopedSoundParams = new AudioParams(0, 1, "Master", 62.5f, 1, AudioMixTarget.Stereo, true, 0.3f); + + /// + /// Status of light, whether or not it is emitting light. + /// + [ViewVariables] + public bool Activated => CurrentState == ExpendableLightState.Lit || CurrentState == ExpendableLightState.Fading; + + [ViewVariables] + private float _stateExpiryTime = default; + private AppearanceComponent _appearance = default; + + bool IUse.UseEntity(UseEntityEventArgs eventArgs) + { + return TryActivate(); + } + + public override void Initialize() + { + base.Initialize(); + + if (Owner.TryGetComponent(out var item)) + { + item.EquippedPrefix = "off"; + } + + CurrentState = ExpendableLightState.BrandNew; + Owner.EnsureComponent(); + Owner.TryGetComponent(out _appearance); + } + + /// + /// Enables the light if it is not active. Once active it cannot be turned off. + /// + private bool TryActivate() + { + if (!Activated) + { + if (Owner.TryGetComponent(out var item)) + { + item.EquippedPrefix = "on"; + } + + CurrentState = ExpendableLightState.Lit; + _stateExpiryTime = GlowDuration; + + UpdateSpriteAndSounds(Activated); + UpdateVisualizer(); + + return true; + } + + return false; + } + + private void UpdateVisualizer() + { + switch (CurrentState) + { + case ExpendableLightState.Lit: + _appearance.SetData(ExpendableLightVisuals.State, TurnOnBehaviourID); + break; + + case ExpendableLightState.Fading: + _appearance.SetData(ExpendableLightVisuals.State, FadeOutBehaviourID); + break; + + case ExpendableLightState.Dead: + _appearance.SetData(ExpendableLightVisuals.State, string.Empty); + break; + + default: + break; + } + } + + private void UpdateSpriteAndSounds(bool on) + { + if (Owner.TryGetComponent(out SpriteComponent sprite)) + { + switch (CurrentState) + { + case ExpendableLightState.Lit: + + if (LoopedSound != string.Empty && Owner.TryGetComponent(out var loopingSound)) + { + loopingSound.Play(LoopedSound, LoopedSoundParams); + } + + if (LitSound != string.Empty) + { + EntitySystem.Get().PlayFromEntity(LitSound, Owner); + } + + sprite.LayerSetVisible(1, true); + sprite.LayerSetState(2, IconStateLit); + sprite.LayerSetShader(2, "unshaded"); + break; + + case ExpendableLightState.Fading: + break; + + default: + case ExpendableLightState.Dead: + + if (DieSound != string.Empty) + { + EntitySystem.Get().PlayFromEntity(DieSound, Owner); + } + + if (LoopedSound != string.Empty && Owner.TryGetComponent(out var loopSound)) + { + loopSound.StopAllSounds(); + } + + sprite.LayerSetVisible(1, false); + sprite.LayerSetState(2, IconStateSpent); + sprite.LayerSetShader(2, "shaded"); + break; + } + } + + if (Owner.TryGetComponent(out ClothingComponent clothing)) + { + clothing.ClothingEquippedPrefix = on ? "Activated" : string.Empty; + } + } + + public void Update(float frameTime) + { + if (!Activated) return; + + _stateExpiryTime -= frameTime; + + if (_stateExpiryTime <= 0f) + { + switch (CurrentState) + { + case ExpendableLightState.Lit: + + CurrentState = ExpendableLightState.Fading; + _stateExpiryTime = FadeOutDuration; + + UpdateVisualizer(); + + break; + + default: + case ExpendableLightState.Fading: + + CurrentState = ExpendableLightState.Dead; + Owner.Name = SpentName; + Owner.Description = SpentDesc; + + UpdateSpriteAndSounds(Activated); + UpdateVisualizer(); + + if (Owner.TryGetComponent(out var item)) + { + item.EquippedPrefix = "off"; + } + + break; + } + } + } + + [Verb] + public sealed class ActivateVerb : Verb + { + protected override void GetData(IEntity user, ExpendableLightComponent component, VerbData data) + { + if (!ActionBlockerSystem.CanInteract(user)) + { + data.Visibility = VerbVisibility.Invisible; + return; + } + + if (component.CurrentState == ExpendableLightState.BrandNew) + { + data.Text = "Activate"; + data.Visibility = VerbVisibility.Visible; + } + else + { + data.Visibility = VerbVisibility.Invisible; + } + } + + protected override void Activate(IEntity user, ExpendableLightComponent component) + { + component.TryActivate(); + } + } + } +} diff --git a/Content.Server/GameObjects/Components/LightBehaviourComponent.cs b/Content.Server/GameObjects/Components/LightBehaviourComponent.cs new file mode 100644 index 0000000000..0ab3b8951c --- /dev/null +++ b/Content.Server/GameObjects/Components/LightBehaviourComponent.cs @@ -0,0 +1,15 @@ + +using Robust.Shared.GameObjects; +using Content.Shared.GameObjects.Components; + +namespace Content.Server.GameObjects.Components +{ + /// + /// A component which applies a specific behaviour to a PointLightComponent on its owner. + /// + [RegisterComponent] + public class LightBehaviourComponent : SharedLightBehaviourComponent + { + + } +} diff --git a/Content.Server/GameObjects/EntitySystems/ExpendableLightSystem.cs b/Content.Server/GameObjects/EntitySystems/ExpendableLightSystem.cs new file mode 100644 index 0000000000..70927c4975 --- /dev/null +++ b/Content.Server/GameObjects/EntitySystems/ExpendableLightSystem.cs @@ -0,0 +1,18 @@ + +using JetBrains.Annotations; +using Robust.Shared.GameObjects.Systems; +using Content.Server.GameObjects.Components.Interactable; + +namespace Content.Server.GameObjects.EntitySystems +{ + public class ExpendableLightSystem : EntitySystem + { + public override void Update(float frameTime) + { + foreach (var light in ComponentManager.EntityQuery()) + { + light.Update(frameTime); + } + } + } +} diff --git a/Content.Shared/GameObjects/Components/SharedExpendableLightComponent.cs b/Content.Shared/GameObjects/Components/SharedExpendableLightComponent.cs new file mode 100644 index 0000000000..5db6ad8f9b --- /dev/null +++ b/Content.Shared/GameObjects/Components/SharedExpendableLightComponent.cs @@ -0,0 +1,80 @@ +using System; +using Robust.Shared.GameObjects; +using Robust.Shared.Serialization; +using Robust.Shared.ViewVariables; + +namespace Content.Shared.GameObjects.Components +{ + [Serializable, NetSerializable] + public enum ExpendableLightVisuals + { + State + } + + [Serializable, NetSerializable] + public enum ExpendableLightState + { + BrandNew, + Lit, + Fading, + Dead + } + + public abstract class SharedExpendableLightComponent: Component + { + public sealed override string Name => "ExpendableLight"; + + [ViewVariables(VVAccess.ReadOnly)] + protected ExpendableLightState CurrentState { get; set; } + + [ViewVariables] + protected string TurnOnBehaviourID { get; set; } + + [ViewVariables] + protected string FadeOutBehaviourID { get; set; } + + [ViewVariables] + protected float GlowDuration { get; set; } + + [ViewVariables] + protected float FadeOutDuration { get; set; } + + [ViewVariables] + protected string SpentDesc { get; set; } + + [ViewVariables] + protected string SpentName { get; set; } + + [ViewVariables] + protected string IconStateSpent { get; set; } + + [ViewVariables] + protected string IconStateLit { get; set; } + + [ViewVariables] + protected string LitSound { get; set; } + + [ViewVariables] + protected string LoopedSound { get; set; } + + [ViewVariables] + protected string DieSound { get; set; } + + public override void ExposeData(ObjectSerializer serializer) + { + base.ExposeData(serializer); + + serializer.DataField(this, x => TurnOnBehaviourID, "turnOnBehaviourID", string.Empty); + serializer.DataField(this, x => FadeOutBehaviourID, "fadeOutBehaviourID", string.Empty); + serializer.DataField(this, x => GlowDuration, "glowDuration", 60 * 15f); + serializer.DataField(this, x => FadeOutDuration, "fadeOutDuration", 60 * 5f); + serializer.DataField(this, x => SpentName, "spentName", string.Empty); + serializer.DataField(this, x => SpentDesc, "spentDesc", string.Empty); + serializer.DataField(this, x => IconStateLit, "iconStateOn", string.Empty); + serializer.DataField(this, x => IconStateSpent, "iconStateSpent", string.Empty); + serializer.DataField(this, x => LitSound, "litSound", string.Empty); + serializer.DataField(this, x => LoopedSound, "loopedSound", string.Empty); + serializer.DataField(this, x => DieSound, "dieSound", string.Empty); + } + } +} diff --git a/Content.Shared/GameObjects/Components/SharedLightBehaviourComponent.cs b/Content.Shared/GameObjects/Components/SharedLightBehaviourComponent.cs new file mode 100644 index 0000000000..9965cced26 --- /dev/null +++ b/Content.Shared/GameObjects/Components/SharedLightBehaviourComponent.cs @@ -0,0 +1,13 @@ + +using Robust.Shared.GameObjects; + +namespace Content.Shared.GameObjects.Components +{ + /// + /// A component which applies a specific behaviour to a PointLightComponent on its owner. + /// + public class SharedLightBehaviourComponent : Component + { + public override string Name => "LightBehaviour"; + } +} diff --git a/Resources/Audio/Items/Flare/flare_burn.ogg b/Resources/Audio/Items/Flare/flare_burn.ogg new file mode 100644 index 0000000000000000000000000000000000000000..ea20d8d1f1d53eb200ff6c9c7727f34cfd741e07 GIT binary patch literal 298816 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ΞW+ za^JWR&~0iu&tOTBmew8l=$-fD-jJu-N3~AnR1R(hq{deIlnkV1u)}N=Kg5J99fk`G z0`xbC%>uo6UVQf2F~Y6Q4^FMx7M&rgA=+gLntIgg*$`7STUShC??A|*;&5h&q<~Yl zt*De`J!=EU`@GXj^!F6%DZuU=AreICn#sb| zoIQLkm3c%_4OjgtTEAOAHT8%EeCzP~ZBW>Ygmh-JJI?#N?&1Yib{m&>^dLI-Y8K>- zeUoHNwp%pjA3h3W`A@yDVFG5M+Z38MSeExA>_){ws(GYkN`nMsVsc!7jJc_7veWzq zuG~t&EQNJ^x+fXAt^+H79bR|Fvof>hDliPq^g57a$&@ zaxG}iv2EL7^uVi))n~#rAtK|U(T&tKtS(c(;6Tz9Ti05R4inZPrOqJG4I&6AFOmMOf8{E#fZ?Mi0?!#$l|%TTlysTDPMbf1FhrIA&rCSR#tF=bnkC zscgvV4@}wMe-G0?^{03t*@GLq?ZGZB=Z_oVox`FPvryQhZjaQhpsdMG9yb#DhLb%+ zR^G~u?y-K>Y&PX|gZ(vkGlXleB5I)FU{>7WE~1;J%(pJMJu0~=g@;fFTx z+~m`x9(thgX;AAKBMo3)uK$kk=RsL_MPPQa{1`(dbXs|CbX>DBZjW9<<&Gt-XGFsJ zOVgtHmy`=!+CjbH4hmG#(szR1%IbbRswuehpBKU0d4rq0o)7}C*bLjc`(Q@i*ol@D zOcj+J2uRmS50KfTA9fTu#!z>glZTnQNJ!SYz~oy(1;Fjv$F9(VCaN(YczFW8%e?Hw zqJ<2R(Wc`F8`Dq_k$J`-hVuDrxjX22c|DKPdMzg2GWZiTn(lxI;jcqE`Zr6tDVy!& zoK4Ms=%2ROum1~@9HV2wtWBP~X^&!COmmnsOLzv-qqEI{@a{md!W(9fEt$u+v0!7<&>m+Z9F0DEzr;P_P9f`-4ZrG$t;kZjU{h%8$i zsPPU{NMkl%1wg&Z{RtQ$nOSyfcI+GH+nLqNf+@e0M@%bTK+(FjtJ$s4AB(;s*y^xI zboP2xwd17y?b+g+`_jBjk#bx0$ya_h_m9hOJ>i0L2WYJMVpT zu^d=e3)ZeN1F&ATGLD#pMQ2C+J+jfwX(zOynMTo@koaOSjhp*>ntH|R%Hs3jxC}-t zfA()(sh7JsW2RCVNmEy1qQ`ewCG>B^|Z!Y8wFwG%+K;jsN%V`5~aM39qUT_IJ=B?e7Jm03$g}`dOYM-|H^Jt zlqEmH%&^V+)%iyE^9M0ij)C@Lh|!P9L0Lf+k!b=dPZwg>{tPNN9H=Tf#r5_iHqD2o ziD+BO{MdaS;$vsN$*;tld63&W5g^GLHOZWfQSN>(Y4hjp#7LwoMP>}~Q-1&l8Q}!* zNP0eI+_BSFu;bHICGz$&qRE-P;?r3DOJjE6y2WECZ-SfxIsUa{D@&(0JMuoKLZimC z(-ODiB*;C~uW?av7nn**QM7zWI1m&wv@Z;P{W+i1w13{KklJz3R24cVwH|o|oGvM2qW~E@7bYKPm=JRb|1) zA7FlIDrxU@y(w2LE=+Vlf6p|I4jp(}Mc>No*eIa0Fr=0-Jd0c( zYlEF(-}7pDwjC27D2NYrl6_)wDD-nGh*`lKtK0z3z_GgrOZK<%DwZ7spZ3m& zq~Y!z!M`ZZ*(Hmm5UR#8dF9|t6*}&94O|bXS!2&b zQfZ*y`L92go$UXH-uGM{O1&!6VAn?NJQ#Ijnh!iia1Cf~^CW_om0DV3BkTVxmU>$Y zY~TO?5<%?$FQmXj=!W8mPhtp>q69F3fFV%)A3T8oFA#JVWcXWxs~^Mu?0pj<4e!Nk z^k-1LK210iu;Vu)X3@cyb{8liSmd+a(-^i;2-qE5tvXoqx!gQl|Lew_vDAj#khcKm zC{Vs@sxawe)Iv6-|L#wjuz1H+BOPQM8mbVHWT1G+6YZ;2)WCOISFX zPo1v?+U+p3gn!=*J>TxO73`0X7b8Xd<)%4o6K}+3p&z|~is{m3IGe4{)^0ci!1fmS zUe>#r@@b90mU%R0d`}+#26V5A_2xK@u&@1gUe{Ij8LRVp>|?>q!b#UjYIWbW>zi<$ zjl=jZ#QKr6wxC~M;r%yvR>yVAXsill$!#qP4<9v4jxbaB7I^;o067X1Qi#!YaLqo7 zsCsM3yR{T*Hp!Q|Zh?vu8Tje_#7q8alKhi=0_)7W8)UZ4xZ(-h&{K5YeP^U-kB;;q z_BOhhDbcSWhsJB}2TyJ?-R8g5isZMkR3o3;A!8hhj@}g_I>+r&Ef?^`j=R33v(;~C z^6?_eIzEPVmpb;${4%`*n*|!|9IcMW@e0p361MnLmG1M-#xHzu)^+&(q%t3tY}h@` zP4iGMjgl>7&p;9VrS7P$@{(2|#7P7-a_8Rf#oG$ZXNEhhT=y7he>;AAm@}R$UuR6I z{jR95FGSp5@SM?gUcpR|x^isu+@)nZUshKR;pa6L7!8@9Q~SH{APyVv_==+CCZv%3 zqVBBo#Ow90fq&AFfv7vMq|+;BeiqP25#d5jyk;>u{XO>*vG+4N>m^jno z2hqkP5xBpe4~-U9bJ?F8Yp)`wMHwS)a{OSeTf2@T;wL}Zo*p)QLf>}UdgD%8!Y!=D z#QHzVluJmvod!t1V7qe4TmJ3RP#(8zh;bSt7OT$AE9;A_1Y0Al{}jdLGe`q6-L!2d zB-WSVraqUa>m;OpzuYqH{q52M__ou;13n!p+)&!dH~*DR!DxG_X`z!Z}F7KFDIe!AWR9a3{*R{ZeoxBp0cm5$Md2ZiQp{)`WOGWLMz z9JfC!Q13R&qIh=A*&{N6np!E333?>vGx*XQR+u6h?c7e z!K8N2r8M1g;l(#g?7E)gwAs;&xmiv~y&S-cPAw+|>oteon4)*s6M1ls8N$TPUb9T< zgGETT)RlGU0JMB!I+cYe?FbAkik=C&=}oYEehEw8VD zX=}63Y)@7#uD1Q%GzFR@yil4iOJJ(pFHjqQkPBsyYlzS0JY>2&5SzsP%R{@h32wZb ze~%otP@(?nabu;jYj$24K2k8gC=4F_c61eNp$CvMm768aolU5VHeNXGbg&bGo7c|Q z!<%HshHT>{k?A4$*vhVcQINnGFa8H=YR32&2^+^4tqqROmc}P+FKgVWd3;mPp6%1GQ5d9pjLZE+yLlwLep{$S>! zNUeOhr^UFhQ6|_`YBa!l+F{L6odF{2<{fRgpYa2tv&l|1I=?!+Un@KNhHhkKC58$Y z1jXYuv|5*v2TFqzRSN<(i+Bi|$QDI6&TD6%Hj<^&onI6+rhsaZPi1~Ie;&MwbpL$V z0kLLkynvGj3}|Gt8bJ9gn}aDmruwY1M38-elh`-E^6O zI?$$>SuIZ}0i<n)0FJ6dZdiAb7{huFM2+z?~&7)P^6y=qYzSHU;=t}*R>QSJEO@lVHyVm{Fxyf$r&Zc9 zhqAch)Gt-t5hu~)5L_cS^1N` z;W9U5z?>8;oI!)CNS5V+Dgz8gOF{9Jc6-hZ04!*2iQlxKFa7Ld|pkhOu*h${k7yy#n zL#=J}F?;0oWzGUxWe#CAuYlG~-LSWJ`bDfb+d})bn{H{hN&h9wCcm$4k5PJd;bMo? z*h>5nevP8kg)}3!4Ebo5W;RG(aF08&-x)E<%S-Jt<~n;$?WpOfFV$(*4vMD9qY~dE ziqMLqfmKX#CHylgw8V8zE;ZKfjz9ehpMQuI4+7pq*$MvHF;xiT|Chn)KS43$6SXYC zYB{yMm$}#pCAqbKzQ{;$tU%skE1wAW=sMhzUrj4ARa%EBg`iJj z4jM9@G~F}>s!@$ujQoD!c{j~mt!C>b)8_D@nU=?aafD@Xka%r)_&GUcB;`rxBweQ_EB3$O(E)k1~M0yX>GjWUVH)>e$w#aVrwO z8h;U8eEdzs(>k{ucCtSfELV%OlQOi_TO;00B<=_N8LAxa#pRFk>Q<)rJ&p0*z4x>c zGL5l(KYaK0oXHm(g$R(=wEf^wSwO@*Tk|_rSvbxJwk+&DU2*MJ)yQAu_T48HL6Ut4 zNKmpWJ8_kH;{`YiGg{Zao^_R)5wB}~0I8YVZ1HP;g1ON;dP>{WcXhmg`RL7-+4zYo z>h-|&7jrkIF}()6SE2Kc1Nm-CN`ymuOUu*#EveLA(jSUX56LZ!PUpycB&@0nSwBAp-@rnPSCBbA~#JK@-+s>{G*8Qsd6)*-2+lfl_U8CvWa zvE{0X_qVzFYulsiTPC-I-TJUZ*rFt}?0UAl%>A_jAXLVx>{I=on8YS8{7p)v)-`$~ zC6`>VWlT3xyY!wnR;Kat{6NM_zyT8ZY>G;%(K_qE^Lsi@$6JWDE7u>{0)>koj+nBR z+M@DLaE;L6)q>!^-#Cf5N~&GbX9u~AjG)^~t&n&PLuy(?h<{x7mWoe8p|)is^yn>% z$(9`P9n`inX9bH5Xl;v{`lwRW`M?|S%DS|c$NxDcH}90fn4~Fuvcr)7F&$kO4_8wq z+3Wwa%&5p_r%GAlJb%hYl&uw80mbf>1yfoLzWll!ztAc%WD#$G{AA47!JNX}Dp?aW z4&)CXn}3oLT;hl=xMXi#`S?}2vYZ08m;Khw7eOwuj8ZIpwxBDp6gK4 z5k#nqux$x6f;{T46~}f203%DIA5y^U*;EwFOH#Ku9UB-Z+NU(C-Pj7FcoyD)TeNd^ z6bpIbl&diVeI7~`-}AZcML$f2??^%|QyM?JF~WteJfGvWmPqRp(m+-16zM3!VpeO7 z5*K!n(z9Kb#Zt0Ad|51gOZ-tQ{=@uSIOGnI`cv0_3-@R$3q@aS?xq@#d zUy{~!S7&!)!_QahNG^p_u!FSVAe8?Bbsx>6b=z>+n!B;sZ<*{0G;7J$R@EKfTvBut zQ2ILBvnc*%8|37R19i2YWX4#i-_rSWSI>=KA*P2$TXOFhUg33`HoHs#G2?nu?`R6{ z!jYZr_d{z2Eef;UmFXL_;X(-&-G*l0sapVTQVovtJkj#en1HV&%Kgb__i`I;f?w^) zfMv7ha~e98+uNOaiRzadA#0b9$p0`W?ttlvLPAjyw$k!+EX4Hlnmk)PI#K`Z8g&wA z=^B@BD?G(0XSH6lAKDRG7d5jaRN@H2i}5T=#zUi2ia(#YOyAk8pajt~yMo5_9i~d=HH>S-m(R0Vmq)9eRRoRn~iR3vFtcqHVfm{;P5g zUD_2si1X_mg9JzMrZ*w%mTSq=gZKwv%A3^WeL$ov!=7Sybg_r_a<(;-Rv_O+dbBbT zkHzl7V|(f>sNdW!_o|4jx|af^{r?#C5=e0=<9j8DA4OX6%N|}0v&ir)|8)& znftxJs^JteIVjh!g${0%=qSx!-QW7q$6rEp{HX&e&I&ygx)F!3IY0TD?ObKmb;UVF ze9$I($8YjYIGD5g?wLc)Ozzc$fzGjRUlWY5z`*PNlK}BPTRIW-mL^ttEHX9gH92Z4 zh(jUvOnd->s|T)WGf(c=Ga&O$8r+5^GC+%U;vWzCoHnbRm_uf&YHx81hLF$+t>ad& znt6WrJu8wgDec7PXXpLwy?8OT3QZ*ISqQ z|0h6FYtf6YRB76m+6j4QN4<5Ddla?iWw)`hP!z0v6X#O#S~$rG~OOgHxlHI7LwH4Rx`gG*|@K)4y?6RQG2zUJo325($;(k5_j zGDLmxT)#YGZ>Dr!rJp!lYkTg4zbjaA8s6e%S11ke$-`9mRO{ywswE5+>x&3HK26gj z1+ar|o@>crNFq8GYZgoGB&*4a)m3FJn(R@`{0z?XA(N~5ZUxHP}r_(?e&#OVH`W5RiPrTeBt zb6s~J8P4{eVz;0|*tdhh2lD-|2)nU~^vtTRUh?wo`}@xl;G*3t$PZIL_|>v%M&H6D zelz23n+7K4&trX(qMW_B^40=9GY0$Nt*v}SQ7q^aba zviCLX*w>`%$4OGfa!p5Z#|!s?3E~l>IdAX5q-Bn#JOg#Wi`26`()06iuXe9xC5-4}X^mx#aFMqJn%SiUz6ICqTQPp)t&{Id>s$Oil{Y|YKc~Tfj z8jIIag_g3*w0;utip`^s>eKuDShXuyq0KX7%1_BgdunFZ#-*%B}vi z2N=q$s-0Jq7qg*Y*pyOtWd*C)MAt9MsNuEI*f+*=H9b!qKqy zTRS-pDk$88m(IVGBAcO2sHahp40cO0StK1LwGSm0NOTDR zM_%|pb(Gh!epj!k6}jrMpykWZuX~1no8Q@-+qxZpR5bRK(a$n`q{Q&gcZ-p$G4Vec zmK6o#PJ@Up=UDyY)Q8w2#QhKdWV!+tiiT#P8!lsI4X1x+A)g=zS>(M+eU!>}AFUqP z+Bby}>S>zJ`0@q}7QVN5jV*sXDTnm$@jQX~8eKcA(P6wk`msos7S#O&vgag0OaNEX~CL^7!w=SWOYWLuuq^D3vfoc-D zMLcGEB*_r7Ve29Q2*6L*tgXsAsJbT?$^Qd%1!WSX{pwkSI?ZGAM^fX+gXY}4K21xV zZDauzZB7L-V3bf;gIv#bVu!eTKtGlq%yUe^%QcQs9K`Y?`lvL+3hQ_7qTlo%Y*QzU zNyNb8zjS1PM%FV!Q>Fx7z1bG1T)xtxES7!Ox0pvOh?{bCPh0yf%h5~cJP#PiknRxV zF6rJ#dY$q@{j+jWxXlk~t?MlRc=bcaCe%D!sB zWWbimGR8?IdO{P|+lxT-x%gTZC{{`Sgl0FN-4{3x+?&WzI$lP&vHUwPA7Y%WBA}k5 zWu#?kor{Q7a>fWY@6;ANe-&mK}EjBJvbYq4=&odZ_TlZ7;03&Jyp)aQ^nPL-6t8dmXJi$PZ=e)et#Y-ub1yZUWzcjO57tqv zcA9uz{|e~8%+3wAAoB?#M)f7fSN=3CWQOsJZyZ!nRS2T|W?HiN{yAC=FWRFeb=>uv|t1X;x97Tk5X^eKe7#_d1Xz-ACZt?Dxli0{CFb!%72Pol13Cb zKlJHiP*7*_U5Nv`;}@fMH%IqAp6->x?1eH_$iIBTVP-DaHU!zCW9sZ;uj^qGfA_&c z@T7Lqw!Z^nxtF<( z`_+hFK_pZmyR8Nc{`suX-_8%#)f5+;j*UmjAj>OR_CG}S`PDC5VP*E3y$H(0y71V{ z_Ha;fND3i*oz0)=)cE*VcDlOwQ>oHYx1*ii(P>qK9s^KQ^39_

RM{0NM+xyKL3# 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ž{qjovJZNj}KHFDg*OR z{QK5rD_w7%PvKH?ck?#h1)ax1Bv5fhT^wmqRad(mBMvCm9D(gpuUaGi_VE!U`}JaEvg#UyuMz~keF+5o65zxx?8Wxo9Eb`tJ%5OT7<~{ zb!GkCr z=Atu52@KS{N&5c2c=;)@FOUV5cOQygEJ{avWtAgX)5pvxEJR073Oc~1a}8e5JH^nU z8OR1#<;O-81+||bdtT2{E%+rT*okOPk22KWksGslH>K^FnDjUW>t6{KCt5pT06Mfz-vPx|IvD2qUm^3LbY}9YV zDqntck@KyxshZRI<)WdqY0>WmcWo}?&@dgBh!GKa@g$(ux=DFkjr@3o``FaBJPbm) zWgkl070=R|=(e){SgLaf&+*It5;o(M$)sn)xN*_S zazdoUh2*17N33+c=X>$_3#fPTC}QNWW~2n3MkNua{-CKQwtb=0ciPsT1T5GVvYS(D zG((zZjHxz_dQ0KUN%>`2^}}69HwZ{q2UQMF#I)0AsVOuyJ;q%)Bd6u0>%yw;s%7t{ z^OBlaIa}FLUT@JQKLMWzm9VOqb?ra=a3mr1rkV=3&O2{8@5{{>Rijye0q(%!Y!e;DH%`6X<^ z|0nH$2+;jAdcsWpqzbVZ@pG0^De`B9$~#gV&ZmEV9nXHsVkLHyDH?h`?{1r@9B(}T z_+yhORaJAgnzIR0^T=HODmzoRJ#k6*5PkXQ2Z6PF_Jw*<`T(rvCC9uZ59Q`IZ)qTA zvdF$?uhHShnVuhJR{t2KpJ^^Ma^94n6;*)7$ZTqYH44Cu5&am7+SJ z0i9T0to2qv0h=b+Njw`>omT^Le3c2R@PBBwh zF>kZ?p)h-}1}{{#%2WTox?to_4#sLgWbjX%@%occn&HYmu^Sn$MPMnCUp<7BivJ|p z_pL-cVUu;Mf9dZsqRZvCWIE^?70M=Z8iiK{CItyZLhG_A+ML;8spuXT){3?WEY_8bo5MQq+sl-f>1jef;tO4Un_)@mc~xH zIzVzbscOkqWcw87q^&LgkHL64%kVoB^Bau&1p_#JH;NZXeXEZl?TFM*d30&v}Ip8P5QZ4 z!p@+f?^Q|pTlQ-;d2?+*8q&P>T6F%bnw@b5Dc7hQwr)H|JE6^&Hv;!|Q@YKjn#0^zp_hq5 z>(P<&+IrpZUH1Af@H{{6V}}czOTx~Dpf>GiGCK?Z9r^!{67=E!P@MlH9{Yw2J0!yx zG7@S-3QWHFzbs{2QkF7F$YpVT?eZTpt_`|bqU)r6##vHCdTO5ok8d@Mvu`n?^Q=oLs z%-DFAe^ruf+p)usC}EF{(*{4 z{{`Oy<rbWjD34%Wv*EA zz?jqiWhP4DyRgvchk`qgiljFpEY~Ph+`PM zndIZLDVM6Y-kk!4P@!(Kxt-CmNnC}K5g+&0iNQxU^avIsL6eQv0^K7rt ztV5Z1SpWUWPYO$+{6w{XvjRPiMO9qoJi;jTzWYsBQQGh)5Z}KOqDMJrGzy{YPHJnczfXrMWk=(q4#$*Y zVsfK%ItQnS39eZ5$IK)ar)`Op7m%3%U5d>;Sn_I3+-3iJvo!nTDc;VsWe>9kzZK~8 zcFj@IN`1|{$z9t7oWIvq&!9&mk7S%8_ATMvzZ$XETi)$4v?Z*ZX@g>xVV)?I*aIP~ zSoiDo-!AJp9EFZ__r%Q<=sjk>D}44TU&a&p~iINzih1s)pe$$`;m&`B?{UqOH&$XZ{@3G&HzoX_UCIx-z`D;nV3iU9O3tSvL%zU^*`(@5j~IneYsA6?)X~{6qwq zR$VA6fHoStAwWovXIyZ6UBV0lt7Zkr8Fv9Y;#UkYkbXm5<+kgCV zvZ&rL_WPbQQeE}I`9X2z_oI$K=2y`)l*HybPW@8j^VQ_zHpoePu(SqgIegwBTP5YH zsxGm(&8q2gM9oKlK_?xw&77TDBj3v3RmF=Zq>1-crx~o4t{0u3F~d+|cC3?r9Ek=w zZc8sJ3}u$~zP(6CzK|1F=D;5mD!t!yNPz(J_X(GMM-|ZHkykYbE-7LFD*JIX$lx|# zbo5Ppd(wtsdpoz-sKMPjV293F(1$h3s(3>C!bIwymgPU^M{nO@AA?0|)>tyGI{BL5 z(?D&`I8Se{50u%F^@OOZ5&ITZu(1lJS!u_%<7qq{ZBTB0yP(-C5<$FL0@9_7wWE|V zG!ZfRrJ5S9cnyEQv;^NAI@xXL5bT>p4GXppzvfZtrjhUi*T@twI(u?1at;z2+8}DO zncDSJ#&3xA+9#TJ63Q|_y9r}O=hY0tF74Xws6-9+@TC`^B*WKZTt%QB0YgwG#R&Gc zM3IAyNy~DGX|dbOUk85Dbo+j>S!l22iK5>w;K>_urin-*Pyr|L92({e1%B+tI(%u(-C_!;o8aEv|#~GRE(#d+cK z#SZhHzlJ_%cj&8Vtr(Bis&N`zzE_0jbWG0b)3_k_4fwgxkCD~+1|clUkJgMIa92vM z;dx_hr|#zS=Ctf6x6^gWc-lzHlBuVpv64aGFP3BXs&7)Dl`&xN9M#O|%owKEiVC_< zAN0Wt5+Hj%2Me`4NozRvN^^OvYaIO+`9h4|=hjfZs`{kCMhW(miM<4%YvK8jBb_G_ zp2q4rqSs^&^0RRdxf>Ue{b@v4-mm@q9B%YP+zhG8E?XNAA(wmFUkQg^=1Y~D9tZZ|r+_2MEyOu8L4Ti% zn!f@CzU%&}(wLxYi5dRA-Ab7YbE9`YB6*X;)T2kmKdzP%22Kt`!=UDck2Oc^{()_K8-Q z&-lurXC6K)#7}aS_P~7n8etUIXx)QuZ; zWPLH;*@5=kdfD<{`P6Z94o*6$hZd-9f;i}iTgQ)g76UriTm82LKm{#Rz@Dzy_M;MR z;@kp~XWwgYF~>dvnmH4vFOM;K%m8hwMhBg=7bj1sl)Ku2A4iXERHz5+=dFP9x&MERSn_n#G_&)Cv$eXAC_J{fQWu-#2q$kZg7IQ6>L-IPy zbIK$V&kb`T_`3e&8fC>-Tf(9wBwNg7;U9^T8e?F%KQcvH^Ty_JlpOdcC&4CiGCMIZzsy-|MrQg_8vryYOC)O?fcT*~B<2xP4Qs-C6mC zbN4?qo~G7e`F+Ituqm)8mTsAvaSQTX>SJTbxfRIhH`JDm!MXawx|!q0EyJ`AZOz6L>|-mg z%BaFh`RYk5b*%AnRu$X!=@SzEB}N%|=b^>x;5JO7*(DUyI$e2zcWXSlW}oS^l`k1? zwQcp4pMf+-$RE#~&KCmM%-&_#yxrc!sy5@ru(gDd%Oy=!P*g1p?w6!%&LNj>zIZtx z*^2mXV18br>alLr(o;`tQo;Y8HcMo!o%`4B)G0kc%#A7)@EBs3!Zeq{;pK z%UDf`LSqX8vE;ak}d-JA^4=R!qpFM9QlbL=Yit;mkZlr9_NI!Q**UaL9c}MG$(=)LfFcS zBZg^xG@pkhF2z5Yy}K9)Ers-woHhH^Km9`{Gvlex_$a6t{-ZUrob?w}Ug zad`n*w?-zK$*tQTXem#-Tx?u_dqx%- z5P>UV3wgLByqY9)Dbv1s<>RQ)alz34$5GQIEIg}TE-AXqVs^8&G z;@EpXOi!LA93Hi1VC$at?xu8jIh%24B9rN2I7c4Dfb~ItzQeC@Q9B+1)AGTPvL3M%3qVF_Y`Fnj!r~V-$ ztD`34sww5MxZ{^(3;twpJtmi(dKi$nsXCQI`gG;}P_uHeG~@JuH&ZyD7i6E_nr0ss8^4fo|+;I~chPn=>-Yi@c&vD@aJ!M>5d z<0ZHa%dpya9eHQ0zVlY=O<5d&q~wAixCT68DUH!@eOKvQZIZpYL^?25Go|+-n!-loL*Rs7ZY||A!Nb(Q=NiSnLNz zV)UtFV_oa0wYoXcKL2#i5$13&__g=N{ud@4qm5I|d3^3IGWRLamUd5# zwq|@9&lR9=I;+1{()&X z2mWo@v+i|YV20=}a~w(L8qUsoS&h@gg-eS+cCUoX{TF->Y^H7iP7;$i@?3Pzn z#+$z>D&LZfBfxG{Lc;#<9ng>Dit?BMM$%pL$8U*i z;FWq3T0Y6yx!016%m`5RHjKXDd&$3&p;zp3rZ#^qB{$jNr`5)@KUmW$ThQma($a@kRl--RmkQSA%OgPB74%5`XW z&uT;c#hgDshlej#wza8I2`oj)Im<@)Wsia^BxmdreynPGR)Mc2!igON=e5^68Q5pd z)rHNlD-m`XpYwnW;s9(G9pi*SKWgM`(@*h6<+-)O4~CL}Qohnrh20D~=`AvdOIJ0m zsrC6PSYF=2x5R|J0enDH9@r?HPzo{eY?{6&IAJQWQD1g#4Q7t~3mz3qlt6_xYstSc zrZs7<@-Y*1L=TLgMfj%ShAcEsx-6rGIE1f$Dx)ZX>GM`Hnp(fsDH>{tO>tU+mNniFz>q7(;lS{ zqWS;nGr!#b4|q`|olr(|+fau8!7UWm*SATOng99a{AbmBPD1EDQSJxkkZZ2?+DwUa zCGCh*wp9M5km)*4-HkgsEC>`F~qs!ZVomC5-I;5=ROP*jpzx0%g>wa4b63bx0{l zkJ#yEQ@VGac)&&TZ?OeFLR`-J1w zeH`#yO3lcZq~6R3lY9Vj?%}|~RvVqpSpU?sq`=DwMiYyZ29`ByZWTX~17|wQVGgFF zt{NJb-n=dbHvK+%hdj|PJkoAUKPG&Ymispf6=NEwM+W;PI-3By!!^ZHR~#1I&1kw6 z{%+RMj0EQf0*Y-3@Wy`YG(`7dd*x2`-WP)R3ZJ)$9MECBlrXd{3gA?AJ>_kav!J^j6xAUlXSYT1~-m`L-+D4Ui#?2pNgMOZka*feiKy6V+Ts`)s~(-E8!vt3-8jqoVbe7;rqTL<))D;IsxY~ih76A8ImeJM`KLu--{=nI8{e5rb|#ydQsmKY zx0V0!jpZopL?s&PRy|mvbitbI1xGHpsG1Dhk)cpSAUA#^REHYpjFZ~lT>WgRb1Gpl zM{0^o7rX@*UmU4cqSB08O6k_8)YXKIr=lM3@jCisfa zV~I;DX*>;0KSr)DEa4Cu3aO z#!xjA3}z{#-OtDpdFJ-}AvoH%$t31dSew&E1UF+ck)Cu zz|fzXC!6blQS1I2Nh2^@U8cShx1t~aYSkXN!qm>2e^IkBNI_NWY`YTEx>EK@9~j{e zah5_dI9#f5sOG0bGfzNh0p2i0%*V8&l(U{tNM7&B+bxE>__0oy&Fiv2#6$u~ntI&? z%2k$ca8Pz^etkx#O%atOK5qLFa`Usuf1BXndk-ywe^=OJd}45V)C}zj&*7Zwb;r+cZ!Y;K{A=Z$E! zvBmx{fzx3XS8ag5G{GYpB;6_8S#^+>*majJvcG+H%)n7T*`kWcCBtFZ56`R2e;3-x z(%U{aovs$Ztn)bC-^za2p@qbx+6F$Bz2G)gusTb<+OTj*zWd#CureL6Q#Y$=6B&`va+TqO=1X z%j-sr3ZzJQ5A=o;DzIYinG_g$Vb8y)GWLlBe zo07dG}T)Y${wNYns@2IO;KCdBp5s!^s+oLRMbau}=`^y1E zoC!9s#K#ZzI8Nq%=x&n-=Yn>k_}9xEyFKCc!^818U%jsp=NaM{=kXR0S(AdLaw#Q- z?8*O*|J{dAe#`A}!HamS_~~?_DA@!$Vdj55efHz_T$~VcB9fp|~k+MpG{(k(c%wxha z;m8Yuz(zt+`>kFE_Q$vl=rZDheJ3ZNqVc&i-knQ1ZVX2jYiQGMZScv8c;XUyTkHYAyq-Vw)wJ+uls42$T?UGD7-m0+%N-Mo)Tu~IO0J>K^C2j|1jsnoQZ4`B6=bBDNdv0G z3FLlUC@&&n<&sfoCoC(Z)=IfPY5c>n{&0wQ8j1gQxIBLSp;hW|{omTeXzd*Vj(k#2 zSf?#7zg;mLcB{<)sIo>mv^jiCBVgbpbH~+}LyyPJ&(EeFwwU|z#NxQDJ~@QH=X|V( z<+5O6R(5)WSJl(*U#U-*)!E5euWC+=AD!3mxHH{Tg<7Lbh6d059!x$hOPOja(dEjb zJZy6WXu%HNxp>gug0*3seSpP$PiY5@FUv+c{r2j7o`9{#krmgOL27H_M%`O^n+VU} zPXh$e?-t9`yX*r3?-_AdJ26sAQx7ytchH13T>cqZ^4{cWoNIvXj_+U5fxVAgjS{60 zKvp&+U%wCy0<-c&)9=G60B`9L{ zh9vB@b>I=E_?kf8s<6)SgwI-!ngqYL+sM%^&A7gP06Tf=veskQ!6Y`t2^?KtN@H{d zC&26MOGfK(#j&BgSs(G&kDvblg7+%Wf4oPfr;lE#%?!Ev-8Cf7M1lVTA1VVjxYF%a zR&A*hN<``%1=Pxbns#=J;@Gs?^RX=&vXe$Ae={)!qd29I&eD$0H|&h?jZ@#35N_T% zBLQmC={-Vfh6!AJ(^2;xl9jquai>yLAPq24$xqMb8SR(fl~C+1SAO)fjUlQd^=5sM zi91Lm`4TT>-&!8&K{Oc`YCAKzCEfxA z$Wl~gX9Oi~kSrY>tk3qu)#ni(9#v}IbOJIaygk#3l4A%u#riuhFfXFj6t#*^!_HrV z`J=TjSm3?4^l{fLfG+P;-QiLGiR%I+ap(5;@LKe+8q7*;8vCx0SOyK6^ME6*-f#c9 z%9@zR(8@d0t@iR=$!%#M&aqS5GWT!%{D+k8v-tL&EZJN%(&>#cr!-h1DpN;3jKgB* zxu~y6t*!4qlhk$c$MFZOn6_^~`H(YP4yrgDc}TxLEhdTd!zLck=@jX(GD5B{z}uXo zd{GaK+zeA4@zkF+8LIA5#g_vdEHx7OJxs=(T?gu}N2hxAV8XgR8#kY~mA1+HpPc-f zujh*T%kqk2;>^~k)8%{1RE>^t?GSF&G<>z$af>~J+t~xxqN$04^l6k>_m=lR<|Ynb zzRHu8g&*zji2?Icl#c5hz8a#~Cu5b$bA>S)ijjfd+^>?X``@1xEZ%g_sJ70rVV09N z<%^QJyYFPqog!_%1^7!w_TGR^)#qAaS>T|{gtnN)Fmz$~v&QoE^1M_09+jBj+eh?@% zR?c>$4l=#IgU_i$yZ7wd!_V&FSEAp6$0tV-+UKXx6#F7^vbNF%cIjk8nE6+C@HG5Z z#h}fI&2X^cNjbOIkLnIvr_X{CqHm3BwZnH1ZzM-!QQ80aPw@{Z$+m-9!@vHO1s8#fjG{|`4HIhT?tjtaEi`yW_fZeZ+WXQssYiN@|G{@04j_np-K zcdhKv9&WV3iNEKMg-ughR4^v9Vz?=sti-X=W?}sfJ0~Fhd5t6XVZUUmanVwrh9jD4 z=X|-Af!zGdK{h~`8_gC1@YVpfxC->LqlJ5IWYzoT2enlgH_1m4JoYgeAL9O;9N_A7 zn}fdRg})U|>yBFTNVmB5tv%>|zq-AWWAA)0^V>zBG3Zww^E7xGFIUf$GXr8>rR@^N zFlaNNsKC3v#9&P~HhI3Ih@%HBc9Cj5S{7|3H6xQnJs`Qcz+I2yu^#ChuXnFXP3}>gYIX1eBj5VHzbf@ zaD5!N%{2U>xL4Lb+W)QoiOtv;ab?U(eVt%Z&8{L<1TwZP;|HpyP_1yUSwnkcp z@7Um!#B9)x&Ntgdtx?HZ1!Bf*eOh~}hS4n5vy8ZoS?wU-2z=F6*5`}p%5lHhM+X|H z%Nm;H3K^HfN%Fok?CP@hTYUs;rcboMmu|=B3Dc%`22G=aJ?r)ag}6-B*q>6}0_!eC z=qenlw>}RB?110>R6Nq#%kc7>$FZrLbh|QuKma4xzD3nbloGmV;8LEDK z&x`6*Me%3QI`X?sRMj?%=U8H$Sc~&XfriIoRixiTAohtzKzna%gYrt7|9qP3BU%Dm z;w)5`X~Z6^x1%%d=j)&9cG$qDOx$eJZ@C~G8D6Ovxn26&9v%6#%8v&$m!4Ocw>CDU z%nG`4s0bh9upc!w#$>nZSp&TN7od(5wZ0w)_^JBT>-turBK`oo5V-ynnFIf}(+Uix z1s}V+&+NMmg;ArE|EAUnTH}xtqNceQPGfS%xGmf4)EbJ}wzWuIVnXv91h5&s(lQRL zs3uZEQrKHap}M3rsm3hafhedoNv@Gl{WTYfylUGhHOS46 zG_Xyv>xl=Bn+*@isRh6W8*C@$efetqPWQ~Ff?H@D$6m!?-ll(m*8Q{W*olawulx_R+2s4dj6cVf0erh zc+5=d%J8CL>V4KoC)u!jqf!zGJ|jQ_+`I^I*!^)<{l6ZTm*EkdPRWsRIg_trMHR%)P^TSdlG2Im7GtvV+e_2ehdW4!xm zGswx@!2?C`-%@)%Rt+&w3+a>k=0`z8U#|w8Iw#=wz~0_NdN)YV4d;LQ-9%;tZWIanu(= zoP@Ts-FsET)%ifO{TAaFhFd>W9$20C_sQKNI~;j=tBEb$vjRUWj~GBEKAy4%HcHA# zpCn^|NuEc394E~(efgMRR|2z6ppaN__N8V(z^rWgbZdb8HHANgk6e-fJX=@nY%cb` fZ-1koAHb%otT?^2G+iXH&`YT4T#ID8PWJx*jS6~{ literal 0 HcmV?d00001 diff --git a/Resources/Audio/Items/Flare/flare_on.ogg b/Resources/Audio/Items/Flare/flare_on.ogg new file mode 100644 index 0000000000000000000000000000000000000000..f855723f474864600cbcf2694b72d389dda4426e GIT binary patch literal 58648 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 Q_p4p50lyt6sDK>sKlZr982|tP literal 0 HcmV?d00001 diff --git a/Resources/Prototypes/Entities/Objects/Tools/flare.yml b/Resources/Prototypes/Entities/Objects/Tools/flare.yml new file mode 100644 index 0000000000..e9311b8b39 --- /dev/null +++ b/Resources/Prototypes/Entities/Objects/Tools/flare.yml @@ -0,0 +1,77 @@ +- type: entity + name: emergency flare # todo: we need some sort of IgnitionSourceComponent we can add to this, so when it's lit it will cause fires when touching fuel + parent: BaseItem + id: FlareBase + description: A flare that produces a very bright light for a short while. Point the flame away from yourself. + components: + - type: ExpendableLight + spentName: spent flare + spentDesc: It looks like this flare has burnt out. What a bummer. + glowDuration: 400 + fadeOutDuration: 4 + iconStateOn: flare_unlit + iconStateSpent: flare_spent + turnOnBehaviourID: turn_on + fadeOutBehaviourID: fade_out + litSound: /Audio/Items/Flare/flare_on.ogg + loopedSound: /Audio/Items/Flare/flare_burn.ogg + - type: Sprite + sprite: Objects/Misc/flare.rsi + layers: + - state: flare_base + - state: flare_burn + color: "#FFFFFF" + visible: false + shader: unshaded + - state: flare_unlit + color: "#FF0000" + - type: Icon + sprite: Objects/Misc/flare.rsi + state: flare_spent + - type: Item + sprite: Objects/Misc/flare.rsi + color: "#FF0000" + HeldPrefix: off + - type: LoopingSound + - type: Appearance + visuals: + - type: ExpendableLightVisualizer + - type: PointLight + enabled: false + color: "#FF8080" + radius: 1.0 + energy: 9.0 + - type: LightBehaviour + behaviours: + - !type:RandomizeBehaviour # immediately make it bright and flickery + id: turn_on + interpolate: Nearest + minDuration: 0.02 + maxDuration: 0.06 + startValue: 6.0 + endValue: 9.0 + property: Energy + isLooped: true + - !type:FadeBehaviour # have the radius start small and get larger as it starts to burn + id: turn_on + interpolate: Linear + maxDuration: 8.0 + startValue: 1.0 + endValue: 6.0 + property: Radius + - !type:RandomizeBehaviour # weaker flicker as it fades out + id: fade_out + interpolate: Nearest + minDuration: 0.02 + maxDuration: 0.06 + startValue: 4.0 + endValue: 8.0 + property: Energy + isLooped: true + - !type:FadeBehaviour # fade out radius as it burns out + id: fade_out + interpolate: Linear + maxDuration: 4.0 + startValue: 6.0 + endValue: 1.0 + property: Radius \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Objects/Tools/glowstick.yml b/Resources/Prototypes/Entities/Objects/Tools/glowstick.yml new file mode 100644 index 0000000000..6b42ea0bbe --- /dev/null +++ b/Resources/Prototypes/Entities/Objects/Tools/glowstick.yml @@ -0,0 +1,417 @@ +- type: entity + name: green glowstick + parent: BaseItem + id: GlowstickBase + description: Useful for raves and emergencies. + components: + - type: ExpendableLight + spentName: spent green glowstick + spentDesc: It looks like this glowstick has stopped glowing. How tragic. + glowDuration: 900 # time in seconds + fadeOutDuration: 300 + iconStateOn: glowstick_lit + iconStateSpent: glowstick_unlit + turnOnBehaviourID: turn_on + fadeOutBehaviourID: fade_out + litSound: /Audio/Items/Handcuffs/rope_breakout.ogg + - type: Sprite + sprite: Objects/Misc/glowstick.rsi + layers: + - state: glowstick_base + - state: glowstick_glow + color: "#00FF00" + visible: false + shader: unshaded + - state: glowstick_unlit + color: "#00FF00" + - type: Icon + sprite: Objects/Misc/glowstick.rsi + state: glowstick_unlit + - type: Item + sprite: Objects/Misc/glowstick.rsi + color: "#00FF00" + HeldPrefix: off + - type: Appearance + visuals: + - type: ExpendableLightVisualizer + - type: PointLight + enabled: false + color: "#00FF00" + radius: 5 + energy: 0 + - type: LightBehaviour + behaviours: + - !type:FadeBehaviour # slowly fade in once activated + id: turn_on + interpolate: Linear + maxDuration: 10.0 + startValue: 0.0 + endValue: 3.0 + property: Energy + - !type:FadeBehaviour # fade out energy as it burns out + id: fade_out + interpolate: Linear + maxDuration: 10 # 300.0 + startValue: 3.0 + endValue: 0.2 + property: Energy + - !type:FadeBehaviour # fade out radius as it burns out + id: fade_out + interpolate: Linear + maxDuration: 10 # 300.0 + startValue: 5.0 + endValue: 1.5 + property: Radius + +- type: entity + name: red glowstick + parent: GlowstickBase + id: GlowstickRed + components: + - type: ExpendableLight + spentName: spent red glowstick + spentDesc: It looks like this glowstick has stopped glowing. How tragic. + glowDuration: 900 + fadeOutDuration: 300 + iconStateOn: glowstick_lit + iconStateSpent: glowstick_unlit + turnOnBehaviourID: turn_on + fadeOutBehaviourID: fade_out + litSound: /Audio/Items/Handcuffs/rope_breakout.ogg + - type: Sprite + sprite: Objects/Misc/glowstick.rsi + layers: + - state: glowstick_base + - state: glowstick_glow + color: "#FF0000" + visible: false + shader: unshaded + - state: glowstick_unlit + color: "#FF0000" + - type: Item + sprite: Objects/Misc/glowstick.rsi + color: "#FF0000" + HeldPrefix: off + - type: PointLight + enabled: false + color: "#FF0000" + radius: 5 + energy: 0 + +- type: entity + name: purple glowstick + parent: GlowstickBase + id: GlowstickPurple + components: + - type: ExpendableLight + spentName: spent purple glowstick + spentDesc: It looks like this glowstick has stopped glowing. How tragic. + glowDuration: 900 + fadeOutDuration: 300 + iconStateOn: glowstick_lit + iconStateSpent: glowstick_unlit + turnOnBehaviourID: turn_on + fadeOutBehaviourID: fade_out + litSound: /Audio/Items/Handcuffs/rope_breakout.ogg + - type: Sprite + sprite: Objects/Misc/glowstick.rsi + layers: + - state: glowstick_base + - state: glowstick_glow + color: "#FF00FF" + visible: false + shader: unshaded + - state: glowstick_unlit + color: "#FF00FF" + - type: Item + sprite: Objects/Misc/glowstick.rsi + color: "#FF00FF" + HeldPrefix: off + - type: PointLight + enabled: false + color: "#FF00FF" + radius: 5 + energy: 0 + +- type: entity + name: yellow glowstick + parent: GlowstickBase + id: GlowstickYellow + components: + - type: ExpendableLight + spentName: spent yellow glowstick + spentDesc: It looks like this glowstick has stopped glowing. How tragic. + glowDuration: 900 + fadeOutDuration: 300 + iconStateOn: glowstick_lit + iconStateSpent: glowstick_unlit + turnOnBehaviourID: turn_on + fadeOutBehaviourID: fade_out + litSound: /Audio/Items/Handcuffs/rope_breakout.ogg + - type: Sprite + sprite: Objects/Misc/glowstick.rsi + layers: + - state: glowstick_base + - state: glowstick_glow + color: "#FFFF00" + visible: false + shader: unshaded + - state: glowstick_unlit + color: "#FFFF00" + - type: Item + sprite: Objects/Misc/glowstick.rsi + color: "#FFFF00" + HeldPrefix: off + - type: PointLight + enabled: false + color: "#FFFF00" + radius: 5 + energy: 0 + +- type: entity + name: blue glowstick + parent: GlowstickBase + id: GlowstickBlue + components: + - type: ExpendableLight + spentName: spent blue glowstick + spentDesc: It looks like this glowstick has stopped glowing. How tragic. + glowDuration: 900 + fadeOutDuration: 300 + iconStateOn: glowstick_lit + iconStateSpent: glowstick_unlit + turnOnBehaviourID: turn_on + fadeOutBehaviourID: fade_out + litSound: /Audio/Items/Handcuffs/rope_breakout.ogg + - type: Sprite + sprite: Objects/Misc/glowstick.rsi + layers: + - state: glowstick_base + - state: glowstick_glow + color: "#0000FF" + visible: false + shader: unshaded + - state: glowstick_unlit + color: "#0000FF" + - type: Item + sprite: Objects/Misc/glowstick.rsi + color: "#0000FF" + HeldPrefix: off + - type: PointLight + enabled: false + color: "#0000FF" + radius: 5 + energy: 0 + +# ---------------------------------------------------------------------------- +# THE FOLLOWING ARE ALL DUMMY ENTITIES USED TO TEST THE LIGHT BEHAVIOUR SYSTEM +# ---------------------------------------------------------------------------- +- type: entity + name: light pulse test + parent: BaseItem + id: LightBehaviourTest1 + components: + - type: Sprite + sprite: Objects/Misc/glowstick.rsi + layers: + - state: glowstick_base + - state: glowstick_unlit + shader: unshaded + color: "#FF0000" + - type: Item + sprite: Objects/Misc/glowstick.rsi + HeldPrefix: off + - type: Icon + sprite: Objects/Misc/glowstick.rsi + state: glowstick_unlit + - type: PointLight + enabled: true + color: "#FF0000" + radius: 5 + - type: LightBehaviour + behaviours: + - !type:PulseBehaviour + interpolate: Cubic + maxDuration: 10.0 + minValue: 1.0 + maxValue: 7.0 + isLooped: true + property: Energy + enabled: true + +- type: entity + name: color cycle test + parent: BaseItem + id: LightBehaviourTest2 + components: + - type: Sprite + sprite: Objects/Misc/glowstick.rsi + layers: + - state: glowstick_base + - state: glowstick_unlit + shader: unshaded + color: "#FF0000" + - type: Item + sprite: Objects/Misc/glowstick.rsi + HeldPrefix: off + - type: Icon + sprite: Objects/Misc/glowstick.rsi + state: glowstick_unlit + - type: PointLight + enabled: true + color: "#FF0000" + radius: 5 + - type: LightBehaviour + behaviours: + - !type:ColorCycleBehaviour + interpolate: Nearest + maxDuration: 0.8 + isLooped: true + enabled: true + colors: + - red + - blue + - green + +- type: entity + name: multi-behaviour light test + parent: BaseItem + id: LightBehaviourTest3 + components: + - type: Sprite + sprite: Objects/Misc/glowstick.rsi + layers: + - state: glowstick_base + - state: glowstick_unlit + shader: unshaded + color: "#FF0000" + - type: Item + sprite: Objects/Misc/glowstick.rsi + HeldPrefix: off + - type: Icon + sprite: Objects/Misc/glowstick.rsi + state: glowstick_unlit + - type: PointLight + enabled: false + color: "#FF0000" + radius: 5 + - type: LightBehaviour + behaviours: + - !type:PulseBehaviour + interpolate: Nearest + minDuration: 0.2 + maxDuration: 1.0 + maxValue: 0.2 + property: Enabled + isLooped: true + enabled: true + - !type:ColorCycleBehaviour + interpolate: Cubic + maxDuration: 0.8 + isLooped: true + enabled: true + colors: + - red + - blue + - green + +- type: entity + name: light fade in test + parent: BaseItem + id: LightBehaviourTest4 + components: + - type: Sprite + sprite: Objects/Misc/glowstick.rsi + layers: + - state: glowstick_base + - state: glowstick_unlit + shader: unshaded + color: "#FF0000" + - type: Item + sprite: Objects/Misc/glowstick.rsi + HeldPrefix: off + - type: Icon + sprite: Objects/Misc/glowstick.rsi + state: glowstick_unlit + - type: PointLight + enabled: false + color: "#FF0000" + radius: 5 + - type: LightBehaviour + behaviours: + - !type:FadeBehaviour + interpolate: Cubic + maxDuration: 5.0 + minValue: 0.0 + maxValue: 10.0 + isLooped: true + property: Energy + enabled: true + +- type: entity + name: light pulse radius test + parent: BaseItem + id: LightBehaviourTest5 + components: + - type: Sprite + sprite: Objects/Misc/glowstick.rsi + layers: + - state: glowstick_base + - state: glowstick_unlit + shader: unshaded + color: "#FF0000" + - type: Item + sprite: Objects/Misc/glowstick.rsi + HeldPrefix: off + - type: Icon + sprite: Objects/Misc/glowstick.rsi + state: glowstick_unlit + - type: PointLight + enabled: false + color: "#FF0000" + radius: 5 + - type: LightBehaviour + behaviours: + - !type:PulseBehaviour + interpolate: Cubic + minDuration: 1.0 + maxDuration: 5.0 + minValue: 2.0 + maxValue: 10.0 + isLooped: true + property: Radius + enabled: true + +- type: entity + name: light randomize radius test + parent: BaseItem + id: LightBehaviourTest6 + components: + - type: Sprite + sprite: Objects/Misc/glowstick.rsi + layers: + - state: glowstick_base + - state: glowstick_unlit + shader: unshaded + color: "#FF0000" + - type: Item + sprite: Objects/Misc/glowstick.rsi + HeldPrefix: off + - type: Icon + sprite: Objects/Misc/glowstick.rsi + state: glowstick_unlit + - type: PointLight + enabled: false + color: "#FF0000" + radius: 5 + energy: 10 + - type: LightBehaviour + behaviours: + - !type:RandomizeBehaviour + interpolate: Nearest + maxDuration: 0.5 + minValue: 10.0 + maxValue: 25.0 + isLooped: true + property: Radius + enabled: true \ No newline at end of file diff --git a/Resources/Textures/Objects/Misc/flare.rsi/flare_base.png b/Resources/Textures/Objects/Misc/flare.rsi/flare_base.png new file mode 100644 index 0000000000000000000000000000000000000000..9701612e684aaa7192876f5ef6e0864d90a95e12 GIT binary patch literal 2907 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 Tukou?00000NkvXXu0mjf4MKyY literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Misc/flare.rsi/flare_unlit.png b/Resources/Textures/Objects/Misc/flare.rsi/flare_unlit.png new file mode 100644 index 0000000000000000000000000000000000000000..199c041e19ff8c2107829334c91a1d9e30388332 GIT binary patch literal 2996 zcmV;l3rqBgP)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z0002rNklO@@W;SNNM}V2lIR_Cj?|oW<89q%D06oW!2t4K2m!!m?}tEKz3Ph%!-o1|gCr~w2#KH&tdHLvZvY~u z2~HTK)0%)jZEg>4os4^KjdkQ_k#K~k;`lOT6(m`Ctdb>*ruZFN&zYJsiS`sGGp42C zp71*;ay(|6ge*(GN{fG;{J8IMA^LT|cr)$$;K_#xgVm~CLj4eg%)*gvq3)oG<0yw; zIQK2SyQ6DiS=lI#O*#nhu+-m{3_X@&00*&pdY3PfA)f$4#3(xpAlu@}Dq=}=?sa(H zbq3rc269-&6>An8A25nagO>m!GX@+XSJnv>G69c%FV7`#RS9^=J@`HfaD;=rXa?Z^ zT#}!mFat=O_f9qezPg}l=-OjbfKmZ`KGq#DFsTGoEM0soKy3pcQ+U|x01F3DaY#z2~`XJ-0EPtT>3m7&U@)5k4@ z#SWh+LhD6vy3Dx1lUFiZOujeS3;(30`qXh7eE@}P(=NL~|K7&5=qYJxYGrwO(y9aQ zj_z}bIl;8uBD);l`4y{oMBD%NX;C^(?M9qA)4{j4fjygIv7u+Ik346-r<)%&u+xvk zM=y3*dXi8Id`k|z!D%M>Pj=OcFQ&ksUFwt>q2FGdS3G1inAZfg{ss)u8A@e0ycmC4 z%kiMX$cr=pcABuQU*%aCalY{jL*evo!(;P88G!S#d=?DAO%rKlWM92uHwyqJg>eeC z#-e+zLW*Q&vDULQt?Wl0T94q;9c^$PINNQUScu1^s)um-#KBr|1rO*~BXJF~gKuJH z5SMbB^G7cIAnxC2mV#FK<~UX+;~tjtXvyhh2G7SRsWcYByo3YERtqNHRB4IcWIl(B z))|@>s*aD563!OlJNhAKU`f}_8Z&fzfZD^O#Ab8V=W%ro`d>LdAV_7}B9F{ov46Q8 zrkbBFP>BB$@?J#$iB{3-mr7sm>2w1`w+i`(5JbJ>j*4Hl^%)4ZRCz;*B#UvuZJg!zIucj4e<$D7#6EG6^whjdRni+N_L^9NOeAW|mpM zmu)=vt3$|BO*IK+p(r)Zn|>b36P=9c(3a*+L8!@*o}RIM_Xat_J7P9+*HLOsu^g{q zAtII8JAFH#4g!0wC~>(bVVSVpzO241x-7Zl&PMPw3Vw6ov?%Y`=Wivv!n2~W!t9-^ zX6*br-*L9A2zgF3-3?w{M09-XkW_YF^9aW9;MGm$^OI~gM{j2D6kVT8kl-sakr2#=-;cOzA_RX1{1^SJY{ z&L{<`pWX{ns`Yj&k`1>x$3 zlc*D>T(>N#0#k-X8or5jJx*bEZMSK+N4#+;e0OW9xl4lGOSnElQ8IwDGV#wi%?{aj zgH!kKDKzCCi#Mg}SCkjQ5b9RyF7=MP&wUIbOS!=ZFT(6tSLI7{c4HsU@oisPyd+wp zVM9{&z8+AKos*5Kw5W8bG~Z~^s@W_hl(d*OxgN%G8FyRBU6(V*q*KlkR-LAtW=q*h z1#IuG?#I(vt>Rbl6ZrWC54Q+6MPeE8qqk+< zvRjGk7P0wmf*Z`W80GACqu#8VP%SgwRNYj1u9Re#X;)b=j%ly`huBLjZxF6snPjHc z5Ce%ZXpE;IrlGT@eJisiGo~@-uVZ}(XVMf`rMR1TZ0P$CKAmeibNQ4PTZS>6d)aGH z3~GpHXi|NNc)tHqhabTSKWdH<#E?Sccau|7tRMC(=NKsCMZ0EuT9&QC_JeOMM2+kd z@b&n%%`)oSEv+rTt)!Wk0~#+c6}YO0erfMPd~;YCHe`R9r4le-6>E>MkHdUem4bRf zGhC`CY8#5fD`@C#L4%(LAupEIY-#GnY^~06cYDwRozn@l1(pGaR z85BRRgsZVX#=k(&-_fbLPaafS3quKa1U4X4d4UZ+4H|DHskn!ZkpYW%Z|r@`=!GmuZ$SOisGsE;%)^EwWLz0dY55`yRG_Uto8h#K&xJg(uR z3g+-Xn3SK1SP@Oa_I=KqdH%k+ks*4D`E2lT|j-Qg|K=;ogqe~(e! zn`y@ey`QMg49>P=K4ad8mWTB;!PL+u=%_TAa>*z35t$3NndYUZb(j(=Kr8Oy7GFU9|ui{o|fEMjYx7 z&)>;6!#m|4x_i1e+7B2EkFU=~9hp=A;C`W@=Nf6Xi|qBAUVAv2iP;%?LdYV-#47)q z@u0pUMz4BN=KZ;`+l@S73nQlV)K%SPUCQ;Hk6}A?)RprtA6@d_>f8!k4_nte$sD!s zZhFy_UqiYcK-!9G`4H_xTN5qNrp)fOME)Z{A0I1#>Cd+8Mqz24wEcO3+1L=dV@iM1 zRJhz$b+di*tv#bn<0-^!(wL$9$;{;T%maUNc;W8wj5&=tA%5s2V?Ui6aW*|Ky+4sN zaiidh0SvZi7;?OJREik7JtSKoc=GC`zeZ318hbFdF+my59WKh*$;td2c)$2~oxCCZ zmfF?Ub>UNQgu3d@y=#Y?t>H7_;@hw1x$T$lOFWRL`~G^j@ARegFjF`)lg`ALyL;rN zu0%ccn-X3Yj0T9GKyVYq10E3XFi7_%_`fsWO zSDOR}4()%>ZEN&qgF&vaj7~!u@4$&{vru3cM4bIfFfC-|V^%8URN#MuyvCD(QCFYe zoyDSk?)qS14Q}!?EdlNb=i|{;^S9{1%rU{W7P*gU9RYJceuxd8TeGI|`kE{1Y2xQA zDk}Zyc%yCJN%fWZTEkF#hco(S25wwV&yCDh>qD{~`*xs$`B`{~fXIT*e z@oJ&eJ0duTLX0Zu|L2=UI43nHdis=d+c?=J1ysKtheay#1Y>*eW8|Y-u-rDKFfsA{ s+R>8-9*x4}Qy=-?Pzj!40Dw+s1nx-l7^2@dn+a literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Misc/flare.rsi/off-inhand-right.png b/Resources/Textures/Objects/Misc/flare.rsi/off-inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..f0190388116390c4f24c7b1e2ef1538bdb2bec4e GIT binary patch literal 3039 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Misc/flare.rsi/on-inhand-left.png b/Resources/Textures/Objects/Misc/flare.rsi/on-inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..7d5e391e47ce8b7ce1344fb629c01fa067b2d059 GIT binary patch literal 3039 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Misc/flare.rsi/on-inhand-right.png b/Resources/Textures/Objects/Misc/flare.rsi/on-inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..56e77879d034d3dab236e48a340c9cd9d781555f GIT binary patch literal 3040 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Misc/glowstick.rsi/glowstick_base.png b/Resources/Textures/Objects/Misc/glowstick.rsi/glowstick_base.png new file mode 100644 index 0000000000000000000000000000000000000000..9148f4e09cedd5020e821ecdb5c878f425af7905 GIT binary patch literal 2984 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Misc/glowstick.rsi/glowstick_unlit.png b/Resources/Textures/Objects/Misc/glowstick.rsi/glowstick_unlit.png new file mode 100644 index 0000000000000000000000000000000000000000..87c7e2638377a6a02e9ee4ac0b70f23ef7029ba7 GIT binary patch literal 2964 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 s+R>8-9*x4}Qy=-?Pzj!40Dw+s1nx-l7^2@dn+a literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Misc/glowstick.rsi/off-inhand-right.png b/Resources/Textures/Objects/Misc/glowstick.rsi/off-inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..f0190388116390c4f24c7b1e2ef1538bdb2bec4e GIT binary patch literal 3039 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Misc/glowstick.rsi/on-inhand-left.png b/Resources/Textures/Objects/Misc/glowstick.rsi/on-inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..e6528b346dc7eabccb002ad7e6528b71a4cb741d GIT binary patch literal 3037 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 RK0*AIG|(~Cu7cS=`!BjmjUfO4 literal 0 HcmV?d00001 From ae8bde221b63452a5049bf58b4f96bf40fcdf7d1 Mon Sep 17 00:00:00 2001 From: DrSmugleaf Date: Thu, 3 Sep 2020 22:10:23 +0200 Subject: [PATCH 095/103] Update RobustToolbox --- RobustToolbox | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RobustToolbox b/RobustToolbox index 49242f8a0a..d9f5c7d7b5 160000 --- a/RobustToolbox +++ b/RobustToolbox @@ -1 +1 @@ -Subproject commit 49242f8a0aeea2e25e20c5efb435aaa223dec854 +Subproject commit d9f5c7d7b58d72900fb9e901648a4818e90d9914 From e3ace03cadb5055b8c66d7a181df3956fbe08f24 Mon Sep 17 00:00:00 2001 From: Swept Date: Thu, 3 Sep 2020 21:13:45 +0000 Subject: [PATCH 096/103] Boxes (and sterile mask) (#1964) * Added sprites and lights, handcuffs and PDA box. * Syringe and Beaker * Adds flashbang latex and a sterile mask * Adds a box to store those sterile masks * Adds donkpocket box WHY WASN'T THIS IN ALREADY I'LL KILL YOU ALL AHHHHH * Makes inhand boxes grey * Security boxes now have proper layer * Adds meson, sechud, and better inhands * Adds survival box (no o2 can or injector because they're not included yet * Adds survival box sprites * Blank commit * Adds filled backpacks for starting-gear * Moves filled backpacks to a sensible place * Builds now * Fixes rsi --- .../Prototypes/Catalog/Fills/backpack.yml | 57 ++++ .../Entities/Clothing/Masks/masks.yml | 15 + .../Entities/Objects/Boxes/boxbase.yml | 15 + .../Entities/Objects/Boxes/boxes_food.yml | 26 ++ .../Entities/Objects/Boxes/boxes_general.yml | 149 +++++++++ .../Entities/Objects/Boxes/boxes_medical.yml | 67 ++++ .../Entities/Objects/Boxes/boxes_science.yml | 23 ++ .../Entities/Objects/Boxes/boxes_security.yml | 67 ++++ .../Entities/Objects/Misc/handcuffs.yml | 10 +- .../Roles/Jobs/Cargo/cargo_technician.yml | 2 +- .../Roles/Jobs/Civilian/assistant.yml | 3 +- .../Roles/Jobs/Civilian/bartender.yml | 2 +- .../Prototypes/Roles/Jobs/Civilian/chef.yml | 2 +- .../Prototypes/Roles/Jobs/Civilian/clown.yml | 2 +- .../Roles/Jobs/Civilian/janitor.yml | 2 +- .../Prototypes/Roles/Jobs/Command/captain.yml | 2 +- .../Roles/Jobs/Command/head_of_personnel.yml | 2 +- .../Roles/Jobs/Engineering/chief_engineer.yml | 2 +- .../Jobs/Engineering/station_engineer.yml | 2 +- .../Jobs/Medical/chief_medical_officer.yml | 2 +- .../Roles/Jobs/Medical/medical_doctor.yml | 2 +- .../Roles/Jobs/Science/research_director.yml | 3 +- .../Roles/Jobs/Science/scientist.yml | 2 +- .../Roles/Jobs/Security/head_of_security.yml | 2 +- .../Roles/Jobs/Security/security_officer.yml | 2 +- .../Masks/mask_sterile.rsi/equipped-MASK.png | Bin 0 -> 299 bytes .../Clothing/Masks/mask_sterile.rsi/icon.png | Bin 0 -> 145 bytes .../Clothing/Masks/mask_sterile.rsi/meta.json | 51 +++ .../mask_sterile.rsi/up-equipped-MASK.png | Bin 0 -> 297 bytes .../Objects/Storage/boxes.rsi/beaker.png | Bin 0 -> 165 bytes .../Objects/Storage/boxes.rsi/bodybags.png | Bin 0 -> 170 bytes .../Objects/Storage/boxes.rsi/box.png | Bin 0 -> 305 bytes .../Storage/boxes.rsi/box_donk_pocket.png | Bin 0 -> 510 bytes .../Objects/Storage/boxes.rsi/box_id.png | Bin 0 -> 358 bytes .../Objects/Storage/boxes.rsi/box_of_doom.png | Bin 0 -> 291 bytes .../Storage/boxes.rsi/box_of_doom_big.png | Bin 0 -> 300 bytes .../Storage/boxes.rsi/box_security.png | Bin 0 -> 337 bytes .../Objects/Storage/boxes.rsi/circuit.png | Bin 0 -> 189 bytes .../Objects/Storage/boxes.rsi/disk.png | Bin 0 -> 215 bytes .../Objects/Storage/boxes.rsi/flashbang.png | Bin 0 -> 179 bytes .../Objects/Storage/boxes.rsi/glasses.png | Bin 0 -> 155 bytes .../Objects/Storage/boxes.rsi/handcuff.png | Bin 0 -> 114 bytes .../Objects/Storage/boxes.rsi/implant.png | Bin 0 -> 182 bytes .../Objects/Storage/boxes.rsi/inhand-left.png | Bin 0 -> 197 bytes .../Storage/boxes.rsi/inhand-right.png | Bin 0 -> 213 bytes .../Objects/Storage/boxes.rsi/latex.png | Bin 0 -> 148 bytes .../Objects/Storage/boxes.rsi/light.png | Bin 0 -> 150 bytes .../Objects/Storage/boxes.rsi/lightmixed.png | Bin 0 -> 167 bytes .../Objects/Storage/boxes.rsi/lighttube.png | Bin 0 -> 177 bytes .../Objects/Storage/boxes.rsi/meson.png | Bin 0 -> 142 bytes .../Objects/Storage/boxes.rsi/meta.json | 299 ++++++++++++++++++ .../Objects/Storage/boxes.rsi/mousetraps.png | Bin 0 -> 146 bytes .../Objects/Storage/boxes.rsi/pda.png | Bin 0 -> 152 bytes .../Objects/Storage/boxes.rsi/pillbox.png | Bin 0 -> 182 bytes .../Objects/Storage/boxes.rsi/sechud.png | Bin 0 -> 134 bytes .../Storage/boxes.rsi/solution_trays.png | Bin 0 -> 139 bytes .../Objects/Storage/boxes.rsi/sterile.png | Bin 0 -> 139 bytes .../Objects/Storage/boxes.rsi/syringe.png | Bin 0 -> 160 bytes .../Objects/Storage/boxes.rsi/writing.png | Bin 0 -> 135 bytes .../Storage/boxes.rsi/writing_of_doom.png | Bin 0 -> 135 bytes .../Objects/Storage/boxicons.rsi/beaker.png | Bin 0 -> 398 bytes .../Objects/Storage/boxicons.rsi/bodybags.png | Bin 0 -> 406 bytes .../Objects/Storage/boxicons.rsi/box.png | Bin 0 -> 371 bytes .../Storage/boxicons.rsi/box_of_doom.png | Bin 0 -> 401 bytes .../Objects/Storage/boxicons.rsi/circuit.png | Bin 0 -> 388 bytes .../Objects/Storage/boxicons.rsi/disk_kit.png | Bin 0 -> 421 bytes .../Objects/Storage/boxicons.rsi/donk_kit.png | Bin 0 -> 461 bytes .../Storage/boxicons.rsi/flashbang.png | Bin 0 -> 387 bytes .../Objects/Storage/boxicons.rsi/glasses.png | Bin 0 -> 385 bytes .../Objects/Storage/boxicons.rsi/handcuff.png | Bin 0 -> 338 bytes .../Objects/Storage/boxicons.rsi/implant.png | Bin 0 -> 392 bytes .../Objects/Storage/boxicons.rsi/latex.png | Bin 0 -> 393 bytes .../Objects/Storage/boxicons.rsi/light.png | Bin 0 -> 370 bytes .../Storage/boxicons.rsi/lightmixed.png | Bin 0 -> 416 bytes .../Storage/boxicons.rsi/lighttube.png | Bin 0 -> 395 bytes .../Objects/Storage/boxicons.rsi/meson.png | Bin 0 -> 399 bytes .../Objects/Storage/boxicons.rsi/meta.json | 218 +++++++++++++ .../Storage/boxicons.rsi/mousetraps.png | Bin 0 -> 382 bytes .../Objects/Storage/boxicons.rsi/pda.png | Bin 0 -> 369 bytes .../Objects/Storage/boxicons.rsi/pillbox.png | Bin 0 -> 392 bytes .../Objects/Storage/boxicons.rsi/sechud.png | Bin 0 -> 399 bytes .../Storage/boxicons.rsi/solution_trays.png | Bin 0 -> 353 bytes .../Objects/Storage/boxicons.rsi/sterile.png | Bin 0 -> 386 bytes .../Objects/Storage/boxicons.rsi/syringe.png | Bin 0 -> 369 bytes .../Objects/Storage/donkpocket.rsi/icon.png | Bin 0 -> 309 bytes .../Storage/donkpocket.rsi/inhand-left.png | Bin 0 -> 320 bytes .../Storage/donkpocket.rsi/inhand-right.png | Bin 0 -> 317 bytes .../Objects/Storage/donkpocket.rsi/meta.json | 56 ++++ 88 files changed, 1063 insertions(+), 24 deletions(-) create mode 100644 Resources/Prototypes/Catalog/Fills/backpack.yml create mode 100644 Resources/Prototypes/Entities/Objects/Boxes/boxbase.yml create mode 100644 Resources/Prototypes/Entities/Objects/Boxes/boxes_food.yml create mode 100644 Resources/Prototypes/Entities/Objects/Boxes/boxes_general.yml create mode 100644 Resources/Prototypes/Entities/Objects/Boxes/boxes_medical.yml create mode 100644 Resources/Prototypes/Entities/Objects/Boxes/boxes_science.yml create mode 100644 Resources/Prototypes/Entities/Objects/Boxes/boxes_security.yml create mode 100644 Resources/Textures/Clothing/Masks/mask_sterile.rsi/equipped-MASK.png create mode 100644 Resources/Textures/Clothing/Masks/mask_sterile.rsi/icon.png create mode 100644 Resources/Textures/Clothing/Masks/mask_sterile.rsi/meta.json create mode 100644 Resources/Textures/Clothing/Masks/mask_sterile.rsi/up-equipped-MASK.png create mode 100644 Resources/Textures/Objects/Storage/boxes.rsi/beaker.png create mode 100644 Resources/Textures/Objects/Storage/boxes.rsi/bodybags.png create mode 100644 Resources/Textures/Objects/Storage/boxes.rsi/box.png create mode 100644 Resources/Textures/Objects/Storage/boxes.rsi/box_donk_pocket.png create mode 100644 Resources/Textures/Objects/Storage/boxes.rsi/box_id.png create mode 100644 Resources/Textures/Objects/Storage/boxes.rsi/box_of_doom.png create mode 100644 Resources/Textures/Objects/Storage/boxes.rsi/box_of_doom_big.png create mode 100644 Resources/Textures/Objects/Storage/boxes.rsi/box_security.png create mode 100644 Resources/Textures/Objects/Storage/boxes.rsi/circuit.png create mode 100644 Resources/Textures/Objects/Storage/boxes.rsi/disk.png create mode 100644 Resources/Textures/Objects/Storage/boxes.rsi/flashbang.png create mode 100644 Resources/Textures/Objects/Storage/boxes.rsi/glasses.png create mode 100644 Resources/Textures/Objects/Storage/boxes.rsi/handcuff.png create mode 100644 Resources/Textures/Objects/Storage/boxes.rsi/implant.png create mode 100644 Resources/Textures/Objects/Storage/boxes.rsi/inhand-left.png create mode 100644 Resources/Textures/Objects/Storage/boxes.rsi/inhand-right.png create mode 100644 Resources/Textures/Objects/Storage/boxes.rsi/latex.png create mode 100644 Resources/Textures/Objects/Storage/boxes.rsi/light.png create mode 100644 Resources/Textures/Objects/Storage/boxes.rsi/lightmixed.png create mode 100644 Resources/Textures/Objects/Storage/boxes.rsi/lighttube.png create mode 100644 Resources/Textures/Objects/Storage/boxes.rsi/meson.png create mode 100644 Resources/Textures/Objects/Storage/boxes.rsi/meta.json create mode 100644 Resources/Textures/Objects/Storage/boxes.rsi/mousetraps.png create mode 100644 Resources/Textures/Objects/Storage/boxes.rsi/pda.png create mode 100644 Resources/Textures/Objects/Storage/boxes.rsi/pillbox.png create mode 100644 Resources/Textures/Objects/Storage/boxes.rsi/sechud.png create mode 100644 Resources/Textures/Objects/Storage/boxes.rsi/solution_trays.png create mode 100644 Resources/Textures/Objects/Storage/boxes.rsi/sterile.png create mode 100644 Resources/Textures/Objects/Storage/boxes.rsi/syringe.png create mode 100644 Resources/Textures/Objects/Storage/boxes.rsi/writing.png create mode 100644 Resources/Textures/Objects/Storage/boxes.rsi/writing_of_doom.png create mode 100644 Resources/Textures/Objects/Storage/boxicons.rsi/beaker.png create mode 100644 Resources/Textures/Objects/Storage/boxicons.rsi/bodybags.png create mode 100644 Resources/Textures/Objects/Storage/boxicons.rsi/box.png create mode 100644 Resources/Textures/Objects/Storage/boxicons.rsi/box_of_doom.png create mode 100644 Resources/Textures/Objects/Storage/boxicons.rsi/circuit.png create mode 100644 Resources/Textures/Objects/Storage/boxicons.rsi/disk_kit.png create mode 100644 Resources/Textures/Objects/Storage/boxicons.rsi/donk_kit.png create mode 100644 Resources/Textures/Objects/Storage/boxicons.rsi/flashbang.png create mode 100644 Resources/Textures/Objects/Storage/boxicons.rsi/glasses.png create mode 100644 Resources/Textures/Objects/Storage/boxicons.rsi/handcuff.png create mode 100644 Resources/Textures/Objects/Storage/boxicons.rsi/implant.png create mode 100644 Resources/Textures/Objects/Storage/boxicons.rsi/latex.png create mode 100644 Resources/Textures/Objects/Storage/boxicons.rsi/light.png create mode 100644 Resources/Textures/Objects/Storage/boxicons.rsi/lightmixed.png create mode 100644 Resources/Textures/Objects/Storage/boxicons.rsi/lighttube.png create mode 100644 Resources/Textures/Objects/Storage/boxicons.rsi/meson.png create mode 100644 Resources/Textures/Objects/Storage/boxicons.rsi/meta.json create mode 100644 Resources/Textures/Objects/Storage/boxicons.rsi/mousetraps.png create mode 100644 Resources/Textures/Objects/Storage/boxicons.rsi/pda.png create mode 100644 Resources/Textures/Objects/Storage/boxicons.rsi/pillbox.png create mode 100644 Resources/Textures/Objects/Storage/boxicons.rsi/sechud.png create mode 100644 Resources/Textures/Objects/Storage/boxicons.rsi/solution_trays.png create mode 100644 Resources/Textures/Objects/Storage/boxicons.rsi/sterile.png create mode 100644 Resources/Textures/Objects/Storage/boxicons.rsi/syringe.png create mode 100644 Resources/Textures/Objects/Storage/donkpocket.rsi/icon.png create mode 100644 Resources/Textures/Objects/Storage/donkpocket.rsi/inhand-left.png create mode 100644 Resources/Textures/Objects/Storage/donkpocket.rsi/inhand-right.png create mode 100644 Resources/Textures/Objects/Storage/donkpocket.rsi/meta.json diff --git a/Resources/Prototypes/Catalog/Fills/backpack.yml b/Resources/Prototypes/Catalog/Fills/backpack.yml new file mode 100644 index 0000000000..f6ddfd31de --- /dev/null +++ b/Resources/Prototypes/Catalog/Fills/backpack.yml @@ -0,0 +1,57 @@ +- type: entity + abstract: true + parent: BackpackClothing + id: BackpackClothingFilled + components: + - type: StorageFill + contents: + - BoxSurvival + +- type: entity + abstract: true + parent: ClownPack + id: ClownPackFilled + components: + - type: StorageFill + contents: + - BoxSurvival + +- type: entity + abstract: true + parent: SecPack + id: SecPackFilled + components: + - type: StorageFill + contents: + - BoxSurvival + - Stunbaton + - Flash + +- type: entity + abstract: true + parent: BackpackMedical + id: BackpackMedicalFilled + components: + - type: StorageFill + contents: + - BoxSurvival + +- type: entity + abstract: true + parent: BackpackCaptain + id: BackpackCaptainFilled + components: + - type: StorageFill + contents: + - BoxSurvival + #- StationCharter + #- TelescopicBaton + +- type: entity + abstract: true + parent: BackpackEngineering + id: BackpackEngineeringFilled + components: + - type: StorageFill + contents: + - BoxSurvival diff --git a/Resources/Prototypes/Entities/Clothing/Masks/masks.yml b/Resources/Prototypes/Entities/Clothing/Masks/masks.yml index 96b0556f18..e3e11dea52 100644 --- a/Resources/Prototypes/Entities/Clothing/Masks/masks.yml +++ b/Resources/Prototypes/Entities/Clothing/Masks/masks.yml @@ -95,3 +95,18 @@ state: icon - type: Clothing sprite: Clothing/Masks/mask_mime.rsi + +- type: entity + parent: MasksBase + id: MaskSterile + name: sterile mask + description: + components: + - type: Sprite + sprite: Clothing/Masks/mask_sterile.rsi + state: icon + - type: Icon + sprite: Clothing/Masks/mask_sterile.rsi + state: icon + - type: Clothing + sprite: Clothing/Masks/mask_sterile.rsi diff --git a/Resources/Prototypes/Entities/Objects/Boxes/boxbase.yml b/Resources/Prototypes/Entities/Objects/Boxes/boxbase.yml new file mode 100644 index 0000000000..0fadbb8698 --- /dev/null +++ b/Resources/Prototypes/Entities/Objects/Boxes/boxbase.yml @@ -0,0 +1,15 @@ +- type: entity + id: BoxBase + parent: BaseItem + abstract: true + components: + - type: Sprite + sprite: Objects/Storage/boxes.rsi + - type: Icon + sprite: Objects/Storage/boxicons.rsi + - type: Item + sprite: Objects/Storage/boxes.rsi + size: 9999 + - type: Storage + capacity: 60 + size: 9999 diff --git a/Resources/Prototypes/Entities/Objects/Boxes/boxes_food.yml b/Resources/Prototypes/Entities/Objects/Boxes/boxes_food.yml new file mode 100644 index 0000000000..29a21b0c4c --- /dev/null +++ b/Resources/Prototypes/Entities/Objects/Boxes/boxes_food.yml @@ -0,0 +1,26 @@ +- type: entity + name: donkpocket box + parent: BoxBase + id: BoxDonkpocket + description: + components: + - type: StorageFill + contents: + - FoodDonkPocket + - FoodDonkPocket + - FoodDonkPocket + - FoodDonkPocket + - FoodDonkPocket + - FoodDonkPocket + - type: Sprite + sprite: Objects/Storage/donkpocket.rsi + state: icon + - type: Icon + sprite: Objects/Storage/donkpocket.rsi + state: icon + - type: Item + color: "#951710" + sprite: Objects/Storage/donkpocket.rsi + state: icon + - type: Storage + capacity: 30 diff --git a/Resources/Prototypes/Entities/Objects/Boxes/boxes_general.yml b/Resources/Prototypes/Entities/Objects/Boxes/boxes_general.yml new file mode 100644 index 0000000000..ab23c1689d --- /dev/null +++ b/Resources/Prototypes/Entities/Objects/Boxes/boxes_general.yml @@ -0,0 +1,149 @@ +- type: entity + name: lightbulb box + parent: BoxBase + id: BoxLightbulb + description: + components: + - type: StorageFill + contents: + - LightBulb + - LightBulb + - LightBulb + - LightBulb + - LightBulb + - LightBulb + - LightBulb + - LightBulb + - LightBulb + - LightBulb + - LightBulb + - LightBulb + - type: Sprite + layers: + - state: box + - state: light + - type: Icon + state: light + - type: Item + +- type: entity + name: lighttube box + parent: BoxBase + id: BoxLighttube + description: + components: + - type: StorageFill + contents: + - LightTube + - LightTube + - LightTube + - LightTube + - LightTube + - LightTube + - LightTube + - LightTube + - LightTube + - LightTube + - LightTube + - LightTube + - type: Sprite + layers: + - state: box + - state: lighttube + - type: Icon + state: lighttube + - type: Item + +- type: entity + name: mixed lights box + parent: BoxBase + id: BoxLightMixed + description: + components: + - type: StorageFill + contents: + - LightTube + - LightTube + - LightTube + - LightTube + - LightTube + - LightTube + - LightBulb + - LightBulb + - LightBulb + - LightBulb + - LightBulb + - LightBulb + - type: Sprite + layers: + - state: box + - state: lightmixed + - type: Icon + state: lightmixed + - type: Item + +- type: entity + name: pda box + parent: BoxBase + id: BoxPDA + description: + components: + - type: StorageFill + contents: + - AssistantPDA + - AssistantPDA + - AssistantPDA + - type: Sprite + layers: + - state: box + - state: pda + - type: Icon + state: pda + - type: Item + - type: Storage + capacity: 3 + +- type: entity + name: meson box + parent: BoxBase + id: BoxMesonScanners + description: + components: + - type: StorageFill + contents: + - MesonGlasses + - MesonGlasses + - MesonGlasses + - MesonGlasses + - type: Sprite + layers: + - state: box + - state: meson + - type: Icon + state: meson + - type: Item + - type: Storage + capacity: 20 + +- type: entity + name: survival box + parent: BoxBase + id: BoxSurvival + description: + components: + - type: StorageFill + contents: + - BreathMaskClothing + #- O2 Canister + #- Injector + - type: Sprite + layers: + - state: box + - state: writing + - type: Icon + state: box + - type: Item + size: 15 + - type: Storage + capacity: 15 + size: 15 diff --git a/Resources/Prototypes/Entities/Objects/Boxes/boxes_medical.yml b/Resources/Prototypes/Entities/Objects/Boxes/boxes_medical.yml new file mode 100644 index 0000000000..09d5699b22 --- /dev/null +++ b/Resources/Prototypes/Entities/Objects/Boxes/boxes_medical.yml @@ -0,0 +1,67 @@ +- type: entity + name: syringe box + parent: BoxBase + id: BoxSyringe + description: + components: + - type: StorageFill + contents: + - Syringe + - Syringe + - Syringe + - Syringe + - Syringe + - Syringe + - type: Sprite + layers: + - state: box + - state: syringe + - type: Icon + state: syringe + - type: Item + - type: Storage + capacity: 30 + +- type: entity + name: sterile box + parent: BoxBase + id: BoxSterile + description: + components: + - type: StorageFill + contents: + - MaskSterile + - MaskSterile + - MaskSterile + - MaskSterile + - type: Sprite + layers: + - state: box + - state: sterile + - type: Icon + state: sterile + - type: Item + - type: Storage + capacity: 20 + +- type: entity + name: latex box + parent: BoxBase + id: BoxLatex + description: + components: + - type: StorageFill + contents: + - GlovesLatex + - GlovesLatex + - GlovesLatex + - GlovesLatex + - type: Sprite + layers: + - state: box + - state: latex + - type: Icon + state: latex + - type: Item + - type: Storage + capacity: 20 diff --git a/Resources/Prototypes/Entities/Objects/Boxes/boxes_science.yml b/Resources/Prototypes/Entities/Objects/Boxes/boxes_science.yml new file mode 100644 index 0000000000..b52f00a68b --- /dev/null +++ b/Resources/Prototypes/Entities/Objects/Boxes/boxes_science.yml @@ -0,0 +1,23 @@ +- type: entity + name: beaker box + parent: BoxBase + id: BoxBeaker + description: + components: + - type: StorageFill + contents: + - Beaker + - Beaker + - Beaker + - LargeBeaker + - LargeBeaker + - LargeBeaker + - type: Sprite + layers: + - state: box + - state: beaker + - type: Icon + state: beaker + - type: Item + - type: Storage + capacity: 30 diff --git a/Resources/Prototypes/Entities/Objects/Boxes/boxes_security.yml b/Resources/Prototypes/Entities/Objects/Boxes/boxes_security.yml new file mode 100644 index 0000000000..1308c376eb --- /dev/null +++ b/Resources/Prototypes/Entities/Objects/Boxes/boxes_security.yml @@ -0,0 +1,67 @@ +- type: entity + name: handcuff box + parent: BoxBase + id: BoxHandcuff + description: + components: + - type: StorageFill + contents: + - Handcuffs + - Handcuffs + - Handcuffs + - Handcuffs + - Handcuffs + - Handcuffs + - type: Sprite + layers: + - state: box_security + - state: handcuff + - type: Icon + state: handcuff + - type: Item + - type: Storage + capacity: 6 + +- type: entity + name: flashbang box + parent: BoxBase + id: BoxFlashbang + description: + components: + - type: StorageFill + contents: + - GrenadeFlashBang + - GrenadeFlashBang + - GrenadeFlashBang + - GrenadeFlashBang + - type: Sprite + layers: + - state: box_security + - state: flashbang + - type: Icon + state: flashbang + - type: Item + - type: Storage + capacity: 20 + +- type: entity + name: sechud box + parent: BoxBase + id: BoxSechud + description: + components: + - type: StorageFill + contents: + - SecGlasses + - SecGlasses + - SecGlasses + - SecGlasses + - type: Sprite + layers: + - state: box_security + - state: sechud + - type: Icon + state: sechud + - type: Item + - type: Storage + capacity: 20 diff --git a/Resources/Prototypes/Entities/Objects/Misc/handcuffs.yml b/Resources/Prototypes/Entities/Objects/Misc/handcuffs.yml index 51544fabf1..c972607ef5 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/handcuffs.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/handcuffs.yml @@ -9,22 +9,18 @@ uncuffTime: 3.0 stunBonus: 2.0 breakoutTime: 20.0 - cuffedRSI: Objects/Misc/handcuffs.rsi + cuffedRSI: Objects/Misc/handcuffs.rsi iconState: body-overlay - - type: Sprite sprite: Objects/Misc/handcuffs.rsi state: handcuff - - type: Icon sprite: Objects/Misc/handcuffs.rsi state: handcuff - - type: Clothing sprite: Objects/Misc/handcuffs.rsi Slots: [belt] - - type: entity name: makeshift handcuffs description: Homemade handcuffs crafted from spare cables. @@ -36,7 +32,7 @@ uncuffTime: 3.5 stunBonus: 2.0 breakoutTime: 15.0 - cuffedRSI: Objects/Misc/cablecuffs.rsi + cuffedRSI: Objects/Misc/cablecuffs.rsi bodyIconState: body-overlay color: red breakOnRemove: true @@ -62,4 +58,4 @@ - type: Clothing sprite: Objects/Misc/cablecuffs.rsi color: red - Slots: [belt] \ No newline at end of file + Slots: [belt] diff --git a/Resources/Prototypes/Roles/Jobs/Cargo/cargo_technician.yml b/Resources/Prototypes/Roles/Jobs/Cargo/cargo_technician.yml index d62b69d882..fd044ba811 100644 --- a/Resources/Prototypes/Roles/Jobs/Cargo/cargo_technician.yml +++ b/Resources/Prototypes/Roles/Jobs/Cargo/cargo_technician.yml @@ -15,6 +15,6 @@ id: CargoTechGear equipment: innerclothing: UniformCargoTech - backpack: BackpackClothing + backpack: BackpackClothingFilled shoes: ShoesBlack idcard: CargoPDA diff --git a/Resources/Prototypes/Roles/Jobs/Civilian/assistant.yml b/Resources/Prototypes/Roles/Jobs/Civilian/assistant.yml index 38e1f44803..d70aedb6dc 100644 --- a/Resources/Prototypes/Roles/Jobs/Civilian/assistant.yml +++ b/Resources/Prototypes/Roles/Jobs/Civilian/assistant.yml @@ -13,7 +13,6 @@ id: AssistantGear equipment: innerclothing: UniformColorGrey - backpack: BackpackClothing + backpack: BackpackClothingFilled shoes: ShoesBlack idcard: AssistantPDA - diff --git a/Resources/Prototypes/Roles/Jobs/Civilian/bartender.yml b/Resources/Prototypes/Roles/Jobs/Civilian/bartender.yml index 14f9ea8bcd..c53e4a8602 100644 --- a/Resources/Prototypes/Roles/Jobs/Civilian/bartender.yml +++ b/Resources/Prototypes/Roles/Jobs/Civilian/bartender.yml @@ -15,6 +15,6 @@ equipment: innerclothing: UniformBartender outerclothing: OuterclothingArmorVest - backpack: BackpackClothing + backpack: BackpackClothingFilled shoes: ShoesBlack idcard: BartenderPDA diff --git a/Resources/Prototypes/Roles/Jobs/Civilian/chef.yml b/Resources/Prototypes/Roles/Jobs/Civilian/chef.yml index 8cd3ed63e8..c894a616b2 100644 --- a/Resources/Prototypes/Roles/Jobs/Civilian/chef.yml +++ b/Resources/Prototypes/Roles/Jobs/Civilian/chef.yml @@ -14,6 +14,6 @@ id: ChefGear equipment: innerclothing: UniformChef - backpack: BackpackClothing + backpack: BackpackClothingFilled shoes: ShoesBlack idcard: ChefPDA diff --git a/Resources/Prototypes/Roles/Jobs/Civilian/clown.yml b/Resources/Prototypes/Roles/Jobs/Civilian/clown.yml index ff6ce07861..b207def046 100644 --- a/Resources/Prototypes/Roles/Jobs/Civilian/clown.yml +++ b/Resources/Prototypes/Roles/Jobs/Civilian/clown.yml @@ -15,7 +15,7 @@ id: ClownGear equipment: innerclothing: UniformClown - backpack: ClownPack + backpack: ClownPackFilled shoes: ShoesClown mask: MaskClown pocket1: BikeHorn diff --git a/Resources/Prototypes/Roles/Jobs/Civilian/janitor.yml b/Resources/Prototypes/Roles/Jobs/Civilian/janitor.yml index 801d162339..6258c02c90 100644 --- a/Resources/Prototypes/Roles/Jobs/Civilian/janitor.yml +++ b/Resources/Prototypes/Roles/Jobs/Civilian/janitor.yml @@ -14,7 +14,7 @@ id: JanitorGear equipment: innerclothing: UniformJanitor - backpack: BackpackClothing + backpack: BackpackClothingFilled shoes: ShoesGaloshes head: HatPurplesoft idcard: JanitorPDA diff --git a/Resources/Prototypes/Roles/Jobs/Command/captain.yml b/Resources/Prototypes/Roles/Jobs/Command/captain.yml index dc5ca4269b..d1e7de6324 100644 --- a/Resources/Prototypes/Roles/Jobs/Command/captain.yml +++ b/Resources/Prototypes/Roles/Jobs/Command/captain.yml @@ -28,7 +28,7 @@ id: CaptainGear equipment: innerclothing: UniformCaptain - backpack: BackpackCaptain + backpack: BackpackCaptainFilled shoes: ShoesBlack head: HatCaptain eyes: SunGlasses diff --git a/Resources/Prototypes/Roles/Jobs/Command/head_of_personnel.yml b/Resources/Prototypes/Roles/Jobs/Command/head_of_personnel.yml index a92ccc03e1..a0d26826f9 100644 --- a/Resources/Prototypes/Roles/Jobs/Command/head_of_personnel.yml +++ b/Resources/Prototypes/Roles/Jobs/Command/head_of_personnel.yml @@ -23,7 +23,7 @@ id: HoPGear equipment: innerclothing: UniformHoP - backpack: BackpackClothing + backpack: BackpackClothingFilled shoes: ShoesBrown head: HatHopcap idcard: HoPPDA diff --git a/Resources/Prototypes/Roles/Jobs/Engineering/chief_engineer.yml b/Resources/Prototypes/Roles/Jobs/Engineering/chief_engineer.yml index c92118c6f0..f42372b89c 100644 --- a/Resources/Prototypes/Roles/Jobs/Engineering/chief_engineer.yml +++ b/Resources/Prototypes/Roles/Jobs/Engineering/chief_engineer.yml @@ -19,6 +19,6 @@ equipment: head: HatHardhatWhite innerclothing: UniformChiefEngineer - backpack: BackpackEngineering + backpack: BackpackEngineeringFilled shoes: ShoesBrown idcard: CEPDA diff --git a/Resources/Prototypes/Roles/Jobs/Engineering/station_engineer.yml b/Resources/Prototypes/Roles/Jobs/Engineering/station_engineer.yml index 0f1099d79d..fbeaf3b5b8 100644 --- a/Resources/Prototypes/Roles/Jobs/Engineering/station_engineer.yml +++ b/Resources/Prototypes/Roles/Jobs/Engineering/station_engineer.yml @@ -16,7 +16,7 @@ id: StationEngineerGear equipment: innerclothing: UniformEngineering - backpack: BackpackEngineering + backpack: BackpackEngineeringFilled shoes: ShoesWorkboots outerclothing: OuterclothingHazard idcard: EngineerPDA diff --git a/Resources/Prototypes/Roles/Jobs/Medical/chief_medical_officer.yml b/Resources/Prototypes/Roles/Jobs/Medical/chief_medical_officer.yml index 7629149734..2e738fb1c1 100644 --- a/Resources/Prototypes/Roles/Jobs/Medical/chief_medical_officer.yml +++ b/Resources/Prototypes/Roles/Jobs/Medical/chief_medical_officer.yml @@ -19,7 +19,7 @@ id: CMOGear equipment: innerclothing: UniformCMO - backpack: BackpackMedical + backpack: BackpackMedicalFilled shoes: ShoesBrown outerclothing: OuterclothingLabcoatcmo idcard: CMOPDA diff --git a/Resources/Prototypes/Roles/Jobs/Medical/medical_doctor.yml b/Resources/Prototypes/Roles/Jobs/Medical/medical_doctor.yml index 3371416216..db04903106 100644 --- a/Resources/Prototypes/Roles/Jobs/Medical/medical_doctor.yml +++ b/Resources/Prototypes/Roles/Jobs/Medical/medical_doctor.yml @@ -15,7 +15,7 @@ id: DoctorGear equipment: innerclothing: UniformMedicalDoctor - backpack: BackpackMedical + backpack: BackpackMedicalFilled shoes: ShoesWhite outerclothing: OuterclothingLabcoatmedspecopen idcard: MedicalPDA diff --git a/Resources/Prototypes/Roles/Jobs/Science/research_director.yml b/Resources/Prototypes/Roles/Jobs/Science/research_director.yml index 75a3ed2fe7..a9b41a2cb1 100644 --- a/Resources/Prototypes/Roles/Jobs/Science/research_director.yml +++ b/Resources/Prototypes/Roles/Jobs/Science/research_director.yml @@ -17,7 +17,8 @@ id: ResearchDirectorGear equipment: innerclothing: UniformResearchDirector - backpack: BackpackClothing + # Note to Swept add science backpacks + backpack: BackpackClothingFilled shoes: ShoesBrown outerclothing: OuterclothingLabcoatopen idcard: RnDPDA diff --git a/Resources/Prototypes/Roles/Jobs/Science/scientist.yml b/Resources/Prototypes/Roles/Jobs/Science/scientist.yml index 7ae835700b..787f88037c 100644 --- a/Resources/Prototypes/Roles/Jobs/Science/scientist.yml +++ b/Resources/Prototypes/Roles/Jobs/Science/scientist.yml @@ -15,7 +15,7 @@ id: ScientistGear equipment: innerclothing: UniformScientist - backpack: BackpackClothing + backpack: BackpackClothingFilled shoes: ShoesWhite outerclothing: OuterclothingLabcoat idcard: SciencePDA diff --git a/Resources/Prototypes/Roles/Jobs/Security/head_of_security.yml b/Resources/Prototypes/Roles/Jobs/Security/head_of_security.yml index 9f567a046f..00293c4e3a 100644 --- a/Resources/Prototypes/Roles/Jobs/Security/head_of_security.yml +++ b/Resources/Prototypes/Roles/Jobs/Security/head_of_security.yml @@ -18,7 +18,7 @@ id: HoSGear equipment: innerclothing: UniformHoS - backpack: SecPack + backpack: SecPackFilled shoes: ShoesJackboots outerclothing: OuterclothingHoSTrenchcoat eyes: SecGlasses diff --git a/Resources/Prototypes/Roles/Jobs/Security/security_officer.yml b/Resources/Prototypes/Roles/Jobs/Security/security_officer.yml index 58c8a3ce4d..1ee779bce6 100644 --- a/Resources/Prototypes/Roles/Jobs/Security/security_officer.yml +++ b/Resources/Prototypes/Roles/Jobs/Security/security_officer.yml @@ -16,7 +16,7 @@ id: SecurityOfficerGear equipment: innerclothing: UniformSec - backpack: SecPack + backpack: SecPackFilled shoes: ShoesJackboots eyes: SecGlasses outerclothing: OuterclothingArmorVest diff --git a/Resources/Textures/Clothing/Masks/mask_sterile.rsi/equipped-MASK.png b/Resources/Textures/Clothing/Masks/mask_sterile.rsi/equipped-MASK.png new file mode 100644 index 0000000000000000000000000000000000000000..7502e741a8cd199fd96d133516cad500d7cceb69 GIT binary patch literal 299 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|e{s5m4*8>L*^q)Af=ia@Wj~_q$ z`gKv8b_P(2u_VYZn8D%MjWi%9rz#|(#3i*jxhS)sBr`vcfuUkfa9BZ6>GvSI(O!L@P<%>i^dNg>74h`Jjqbh)4RjMILP?2v6sS}N0W|B3Q-7NxkF{EhOv5R zXScEH<`oi4db^F+Y8aY}9x;0o6jt!Hm{FRCp{7=vjjzFe642ftPZ!4!kIv)-iG2-$ zo&g?$kqsvs8V_=;7gH1d^NFYDSQ|@@sEER`+{FnZJxvGMrcAl$+B4+>%apmI0x~&A tTQ?X6F*dB-ks#votXE8YaRLW3!L*Fr4{+=Kuf59G@dV zLB^6GzhDN3XE)M-95YWB#}J9B$q5Uz6L?xLtXa3(Nzx&QabxJ}14(>2tHUfCo;E1) qDJ%@QejzmADbGT_FQw`-3=9|ZxD+L*+V$7mXi0(mC&=d6J>1r+0^iaggz4V=sj{k0u?N6rvEka)-)R4P$lF zeOnwlyNy*huaH#Z%BCI}2PCtAT#6;8*+BY&v@=3EUP7vX#JFsNMixmw=LyI zb6h4VVwrGP+p8q_AmbGd#!JGAJPyLjG7|*0_&qt$* z^LJOCnHjs_dtJqI)x&2lL^aPmcz31EFDAv7b^WJ3Jbo_VB%`sop3-T?BMggV7OY%)@&FJN{JmAmR;$UnCrjV1x?#~gExrcH zV}}nPE%+|{?^8p2d-ua%TVEHr2b^WJv5Dc)^o(>_IoCK}YU44X_Y7=6P+MEuc7DG7 zrkTf=hIW^!$-TtJHxz7*)y^-jeKTYIeg&oVb=>qNv9bm z$uKZ)D*Ex7HOb3-{TyACz4DFZfj{aHYCISot22WQ%mvv4FO#lUj Bdn*6{ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Storage/boxes.rsi/box_donk_pocket.png b/Resources/Textures/Objects/Storage/boxes.rsi/box_donk_pocket.png new file mode 100644 index 0000000000000000000000000000000000000000..53695eb6ae57a9f23a305e974f3ebfb929b7ca75 GIT binary patch literal 510 zcmVxZC*;k=SO=W`S-cLbsoFO*`_acYHMS&OLh0ha=}BDf-W z(u{OW{CVvS)D#C3A&{D)%xG%y$hHQ6Sc6Zi^oEVem_#&7*XLo0v?T*Vp zhWOKW+zLlm`4Y}_o!*g5o&xs|6p^*;A1IPZ&UJcM*RCFbwjpLTAy|8Q4m^(!hXH}- z5v+k3P0%*{hX9U)wjpQdDe?H0#2CJON=S_1>^w!=5MA@K*8aY<lGhj$ouo^;^6=l!1Y9dI~?osq1-%4*~DF9YuHTB$R}BqjCQG9S^K zYVf32q}_SQ%!vd5f?j|zo+xW=M7>rNWyJ!b8~si`qo-vrZKfd>-~|F(<5oE zTmWFER01Fj!^HdXvuO&41x=+~z}kq-?Ir+E=iS7N&jP!9JNXM#D`l#c4OKBfyOWc^ z#nrWXxD=6qzvu(soA7h~jd&*L1^EcXd3|}-KFLqO7?1gh^!@Im`>;k;=>gyboWQ>e zsMgThD09uMjRq$GFgsUHy_fucYJqsEWPnz};TUed0HLT!-~DmfHB7FyTK9|$MJD}8U`y{ p3h{Q&Vu9zsp?Lt84+#lzne002ovPDHLkV1iEzb?X2C literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Storage/boxes.rsi/box_of_doom_big.png b/Resources/Textures/Objects/Storage/boxes.rsi/box_of_doom_big.png new file mode 100644 index 0000000000000000000000000000000000000000..00833bb163c78ec86b760755508043149c1b89bd GIT binary patch literal 300 zcmV+{0n`48P)?Z+iw-RW-=G*d|3$1ORB7W|L4UB>^A0};oWS7%vrVYAhEfVjDRyzK^?Cs*CGtE6@Ys@^@Fo8et3cOv yld-Jt0mf;V3h}bmtbpw%WD0WF>PF>o{5E$3uSnN1*7D~70000!4GQVwl=Dp7;CrDxFMn)H7^LPUjN}IqouPr3u4gJ_Rja0|SRg zB?n{{tk(6P_VD<*fRl{I;(AJ_8ILe5l3Ad?^Z*DHe7wob=Bw+wCu@ED?!HCywD=k% zpKbWd*8F$f^NOpoe|}GV*r0ysVn}hr#cz{&*lvd#*QhKw*U;GbaB{lF;rl6%WE@J& zwxmB$57YF_>f~dT2nY%~q+S31p6#SF$~PI8L^+hQ8yGy`V=a<#pT@jGlFLQ?P&3PA z`%0kV#{DNB@`&36OYm^6u;vf-2B|bKkoj;Wp~8Pb!_FUX7@O@l(}bQfJW-lDxcV`X44VUhKG%gLDnbPt24tDnm{r-UW|c%(wq literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Storage/boxes.rsi/disk.png b/Resources/Textures/Objects/Storage/boxes.rsi/disk.png new file mode 100644 index 0000000000000000000000000000000000000000..219e8942f4b945d7f1111fdb175f08c97fc4905c GIT binary patch literal 215 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJd7dtgAr*7pUQ*;c^ zqiMwMmb)Ka-U{`8@S OQU*^~KbLh*2~7aGcvRg0 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Storage/boxes.rsi/flashbang.png b/Resources/Textures/Objects/Storage/boxes.rsi/flashbang.png new file mode 100644 index 0000000000000000000000000000000000000000..7feb84489d21c6f5dbb0c3001e063e9c50997109 GIT binary patch literal 179 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJDo+>3kcv5PFKpy(cHn7!Xy2i< zW8Y%ivV;XbuHL6zUOM|vWu3#ub|BoP=lLLn434uU|`;LW9H^`$xhSBog(ZC w%sFBcvn(SI9J%phf9J-JKs_+C+ISckzOPr$KX7K%X`pQkp00i_>zopr06<1L1poj5 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Storage/boxes.rsi/handcuff.png b/Resources/Textures/Objects/Storage/boxes.rsi/handcuff.png new file mode 100644 index 0000000000000000000000000000000000000000..625b865dd1c13ff9d716a6615cce64cf6bfb4c11 GIT binary patch literal 114 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzOHUWakcv5PFK*;yFyL@?EHCP+f)98w6wHu?>)MfEc%)2o6H~) zw2$fXiXgAgTh6K9s_~Gl-v8*k?nI$Nm8~*C=IN!y*NRrWV(AYr^XF%{ZNkK$w0eEe f?~1gv^+im(=4rKSy$DVOI)uT~)z4*}Q$iB}&K*N~ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Storage/boxes.rsi/inhand-left.png b/Resources/Textures/Objects/Storage/boxes.rsi/inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..a45ce6c6938fb01f35cef1f86abbd91f7ef8eb4f GIT binary patch literal 197 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=J)SO(Ar*7p-rC4}SV4p(Kq$4_ zo~e36{b7zXj#1?knQkc7mfu$!+f}aP&|UhaW5y&=!Ie`s zt!a75y2k3wsynLs3F_-_Hm=<|{~R+&14F~?s+ih_d>M1*t=AS>=lr&o5e(kOd|Rx* rWRud*ZYH-o`x;&{cW##OV_;Z(FVRN!pRShnB#=f=S3j3^P6V1@9@k z5{Doi>|$1^-(=lMCA|%k>|`+eR_J-qm;Fqw(gatRSrn4UT#4cI$qBPmSc8 zTRJVx@|S0<^Z6K$va63b?~|&0{^>ol-u{Mn)(Ox4%P}Y@J>q0)Rp4d(zgrHZ*VEO{ JWt~$(696HMRa5`~ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Storage/boxes.rsi/latex.png b/Resources/Textures/Objects/Storage/boxes.rsi/latex.png new file mode 100644 index 0000000000000000000000000000000000000000..46a4cbbfad7ec5a86fac6c80f06f31ea617dd3c5 GIT binary patch literal 148 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJXipc%kcv5PFB$SR81OJV9G<<| z{pROrdj_?L8*`Yt{a;;D+%}6T4G5eC3;#&@6@?@OH!~_22ZnyHE%*Msgh@r-J@WXz uRUx6C`Wu!sNb&LfKk#((-PtquK4jrOYj}BKZqNy!H4L7velF{r5}E)l6*Q3m literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Storage/boxes.rsi/light.png b/Resources/Textures/Objects/Storage/boxes.rsi/light.png new file mode 100644 index 0000000000000000000000000000000000000000..ddb5fa3147ad31b4485bbbd89fa0c4dbe70c9954 GIT binary patch literal 150 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJSWg$nkcv6U2@+}D*x$$3lgVX=*zx@4Q#m(*7m!Ne0Q-ejm#r$G(!k6RS)kB+bhqYuphXOxu6{1-oD!M<)15Vm literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Storage/boxes.rsi/lightmixed.png b/Resources/Textures/Objects/Storage/boxes.rsi/lightmixed.png new file mode 100644 index 0000000000000000000000000000000000000000..8df25a0b7bb412063658c4a35f3b52c0f7e0488c GIT binary patch literal 167 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJJWm(Lkcv6U2@^WlWuqaod3sx z;s*pgnx69Tq_i;jb!Y#dC^}0evr6>fhxvwWty*G}pE5)+{T4XmvhgU?jtmBdQ@;8W UpL(lx0o}mh>FVdQ&MBb@0AtcaoB#j- literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Storage/boxes.rsi/meson.png b/Resources/Textures/Objects/Storage/boxes.rsi/meson.png new file mode 100644 index 0000000000000000000000000000000000000000..57c7818d217b200225bdef2dc9a310c7a3054562 GIT binary patch literal 142 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJP)`@fkcie~3D(64B0Wuk23&3j zH6%VZOuWLd;w_QRt$r3QIPF+v>4%?2DkbFHSP i@b|)WK5S@gWMl}vF7_i}563Z}1q`09elF{r5}E)IcP!Wd literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Storage/boxes.rsi/meta.json b/Resources/Textures/Objects/Storage/boxes.rsi/meta.json new file mode 100644 index 0000000000..c2a70f35aa --- /dev/null +++ b/Resources/Textures/Objects/Storage/boxes.rsi/meta.json @@ -0,0 +1,299 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA 3", + "copyright": "https://github.com/discordia-space/CEV-Eris/commit/9216a1754b1e1d25b8f771b15fbaf4e086fcade9", + "states": [ + { + "name": "beaker", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "bodybags", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "meson", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "sechud", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "box", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "box_donk_pocket", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "box_id", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "box_of_doom", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "box_of_doom_big", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "box_security", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "circuit", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "disk", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "flashbang", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "glasses", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "handcuff", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "implant", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "latex", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "light", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "lightmixed", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "lighttube", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "mousetraps", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "pda", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "pillbox", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "solution_trays", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "sterile", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "syringe", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "writing", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "writing_of_doom", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "inhand-left", + "directions": 4, + "delays": [ + [ + 1 + ], + [ + 1 + ], + [ + 1 + ], + [ + 1 + ] + ] + }, + { + "name": "inhand-right", + "directions": 4, + "delays": [ + [ + 1 + ], + [ + 1 + ], + [ + 1 + ], + [ + 1 + ] + ] + } + ] +} diff --git a/Resources/Textures/Objects/Storage/boxes.rsi/mousetraps.png b/Resources/Textures/Objects/Storage/boxes.rsi/mousetraps.png new file mode 100644 index 0000000000000000000000000000000000000000..2d19c7d55be752107ce8ac008b20ed5845f98dde GIT binary patch literal 146 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJNKY5Xkcv5PFCFAOpdjFK(KE{{ zU2JOFHuYkzjvdnv&S?HW*Cir7VhRJpfp>iA8cVEp?eF>Sx7F){iwS5bIu4Z94^MQf6mdE;l#FE=UOBg&|{an^LB{Ts5htD;0 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Storage/boxes.rsi/pda.png b/Resources/Textures/Objects/Storage/boxes.rsi/pda.png new file mode 100644 index 0000000000000000000000000000000000000000..349cab8e1e28cadab5c58e6d0ee4042ea8cdba3a GIT binary patch literal 152 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJcuyC{kcv6U2@f8Kw;{``V_8|O4CUiofs*_WUc%53(b tHp=j3l_wt~8(YWvm8@(wyfAYZ80KCOSGjuMIuU3UgQu&X%Q~loCII`qGjIR^ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Storage/boxes.rsi/pillbox.png b/Resources/Textures/Objects/Storage/boxes.rsi/pillbox.png new file mode 100644 index 0000000000000000000000000000000000000000..572cfd01f4b27f7ade617abb8d69e0d0c3eab3ee GIT binary patch literal 182 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJT2B|pkcv5PFK*;)Fc4{Z7<|Nc z&Dz=>?OV6@YTK%xWSSOs(5>Z4Q-Y+n_zC8%JNSd*et0q{DJd;-xn6nfdByw1ep12j zG<5{4Ii~H@O_0laa+`}Gf^UJ$*Sihv??sm;&W~nZBIu!fpLNH&rq`>U)P54*vMbFh gbBm3=;6?pA%C}UFRvlt<1v-Sm)78&qol`;+0B1Wy^Z)<= literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Storage/boxes.rsi/sechud.png b/Resources/Textures/Objects/Storage/boxes.rsi/sechud.png new file mode 100644 index 0000000000000000000000000000000000000000..0f52ce46bdf57956fa6852b689f306263c07d7b4 GIT binary patch literal 134 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzUr!gukcif|7Y=eBFyL_xEagdG zT6TAxNdLm5jD=4EUMMdAQ$C50O_`B_K_~yWwS&u!^x*C~uUp#FcWWE>-(0+FUd8j} hxBu;9VMtJU$>e-U8;m9u~6FgCoY%`khUv9#g!SA*{I mQ>^E*3S1jAaxYeU3fX+w#2s*eJ1!1rI)kUHpUXO@geCyeQZf(# literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Storage/boxes.rsi/sterile.png b/Resources/Textures/Objects/Storage/boxes.rsi/sterile.png new file mode 100644 index 0000000000000000000000000000000000000000..f78f0813ba96c362debc06ae6c433ecea58a5bf9 GIT binary patch literal 139 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJAWs*^kcv5PFCOG%P~>q5jD2(B z?f#}OBKnUU%N^MQTmCBuaGaD8Vq#!8kXU$9v^f8-^z}P)xYnk|RXYY9*7cs6%|Y8zKsH!&fw|l=d#Wzp$Py{VJ?IK literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Storage/boxes.rsi/syringe.png b/Resources/Textures/Objects/Storage/boxes.rsi/syringe.png new file mode 100644 index 0000000000000000000000000000000000000000..f047d818913fdd32ccf5cbea3394f8cdd6ae455b GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJbWaz@kcv5PFD&Fepdi9>p*lG6`o2GT`stBQ0YO2*zjJ46vWL#uYi;b@^YPqq ziJ`R`zVg+sxHj2NiE0 jcDMiVbP0l+XkKdoD7M literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Storage/boxes.rsi/writing_of_doom.png b/Resources/Textures/Objects/Storage/boxes.rsi/writing_of_doom.png new file mode 100644 index 0000000000000000000000000000000000000000..fd1977d96bb9868dd12db5d0ad746ee871073529 GIT binary patch literal 135 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzKTj9Okcv5PFKy&)NZ@F>SllZ; z*?_HhQ(M?A3GV-G68ofP(3LcKq`?Y;NoW!3Gj4tW)Y iyTKN$tenZeW5&t;ucLK6TZ8ZU?d literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Storage/boxicons.rsi/beaker.png b/Resources/Textures/Objects/Storage/boxicons.rsi/beaker.png new file mode 100644 index 0000000000000000000000000000000000000000..7bbb9eaa1dc35667999c2951c2fbe4010ed087dc GIT binary patch literal 398 zcmV;90df9`P)0~zI^GO%nj{7RUP=;P7VOW6g^=Wo*ZEZ3Y0~W<192%P}sluf*E0y#WCD ziGg4?$KB-z?k5xFp31KwkCnO>g4tZG`-vgMscY@js!%EcJ1172Ku}Oqn}Iz1#MtZp zQeVP2XR3$ojY#3Anj(}FNEs6X)V1L~e$D}pp1PJ0PZ?951L^N_KuC7p?+XK}G))t) siv^y;uuwzkJTM@n(s@88uF?DnwizdHG<CQXrRq##N(J++lDy%6U)}^VKtn@A!++;QXVLv=w5byA2Z1vGOs6@uZKUgUspe+8 z4FDUJ#A&J218{T!NHoelut zW3`gcSRA8e7yy8G&VMhElZO?@`qhXtA$Fu|699mR@fZL=z6s}B$;Zh=J5yUAA1fgQ z4t4hG5sN?w0q0zE^1} zlLET53tLu8aB0a_RKH^0{0_5ue*_tIKc3V}P9t z;i>!BLLpD{yRXe+Uzjarie>pj-Y!30C<|u0SJFF*L%q4#lqXu8=#Ig%QCVoLrMvN z5Q3s800@GBs;X>nuK@5pdDHYlh{n2i0KiTwgdj;0n}kvdfH;m%2cWe+O5pIay4D_> z-wB{JrV*k}=^+dA$c7r0nz_cvH&Df6$<_>I>`ZYmV3i RdpiIC002ovPDHLkV1k20sZIa@ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Storage/boxicons.rsi/box_of_doom.png b/Resources/Textures/Objects/Storage/boxicons.rsi/box_of_doom.png new file mode 100644 index 0000000000000000000000000000000000000000..89ecc16cde473cb15baf1fdfb384d501227138ef GIT binary patch literal 401 zcmV;C0dD?@P)L2Ll0Qb5^*L80P(CKt4g{Ns+4?q}(l>l_41dvkF?REjMEQ_br>Z<>( z-zU#=0Fos6J-|t)uxzur>XX|oKmlDF0KjxO1iJW!C(Ngi=8&fivZ%S?s|M@t%+yp8rDk}avhDy;{w;SgPzZnjt`RgjpZOh_gI@M~v z*=PX7GKn><)D=*=fbu^w(80noWf z&X-y1pHlDp3OEo%Z2>?7^CXKTR9M3-!cMwI9Zk(Qg z@B5s-e%;raF|&JPsb(btp%4IE?K~t4=fBsg?gOd7BnYxFo!uP@!6XQzbxQvO2ezH- if8fb=mGUbpO63z#a%AkAB-)$+00006IDq4l&jqmm#bI}V(Lh9-x`z`>;@Xeo3G=`T|Pkno#&-8X+xrn#o7 zybp&{HD8X!0Bk>rg{e}1fly%X0=`S=Fj}hl2&}EH1`5{=V>SZ!jYc2=8GHpSA=peL z+_R>t?z@e69Dr`G=RVU7gQ%ha@M4-j7jSUGykq@p#Fh|a(lZkPI4KsnJ3Rp4EtPej zuQVSyd(bgQl2^5wbf&a`Ggg2tWr?FwiPwG~fNtf9i+#u03hKRYo%Is&$|<9 zWC;8t8e|F-FRvM73PB^L7cf0rUCyOAzim>^r6$(MApHp}A>4CEe9+0RvjZHrZ1zNC zthptG^d9(L7}A<%Zzq#u0y0Dug;u-Gv#x*JL+VD9*0ex3BERM#A%B8T67qE|ewK83 P00000NkvXXu0mjfrhBwP literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Storage/boxicons.rsi/donk_kit.png b/Resources/Textures/Objects/Storage/boxicons.rsi/donk_kit.png new file mode 100644 index 0000000000000000000000000000000000000000..615408735d1245bec2ce6424964f5d798f4b11ef GIT binary patch literal 461 zcmV;;0W$uHP)YU7)OsKL#Q!Qo52gVQgL!9rTPYfyJHt$zz6Udd;nj-rIUz*i{KN8QnFSo*g`^S z69}oMm|BOLwt|qPwsbIO$)9`k`wlnXg$oG@3ICmyD3eYqmEkPmm(^-$z7(Z+saT}b z?ZzsuWwQXoFo{&G)CG_TEL|Y92?M^HYB>Vix!g?QHC>;Nz|HOLOaf5|6|iiZ-JPBB zeW_R+j}^AI0BE#Y<99V(XCspV;Q8g{?*aiq*z~ggw#1fg|B#-W0KieRN!@q=KzJI8 zH2J(PnE)L4o7~0dnaJC4Ba@*nndA#;%6sb=atGJ1B{PQH+)E}7$BFjs*9 zt2e;uj|v{1rZ7B@!_yQ_-^c0=;>N`j5T1tH?xU`bo>fKR_)JAr6x3C4+kJ$mEl@y~ z5uV1A-lOyWf#bSdpF23N%ah(icp5^M7b9TV_792I#vAt+p9onVU8jl%bE6Qt3k-A8 zR98YwjTC5v2pgsuDiG;Jv|lRCbRv4J)gt95BrKILdMA%4btpMX00000NkvXXu0mjf DBU8^8 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Storage/boxicons.rsi/flashbang.png b/Resources/Textures/Objects/Storage/boxicons.rsi/flashbang.png new file mode 100644 index 0000000000000000000000000000000000000000..3d2f1dda561729603d9799a553b313bd6ef95caa GIT binary patch literal 387 zcmV-}0et?6P)Nkl1wzT)@O-LaDTiSP&sM8R#OL9-vv|ELr3N*<=wAy2vpKA~adF*iDub=LE%W zR1B3mT1yI@XC;20-~0N`hywzR zOq@5G`U{-gKG9^)UF2u0N(fe z;$9d<^ehX2w>bW}ft-9;Io7I(6Qzz!cV+-!I-3FDI1WOHqgoII#F@#(e6BrH`!mdA zb+R`Lf&c*5b#Yx6Aw*Hjdpk8y76%YQVB0o}i#3n0>&hM-8ZAK;(~o<&1-9E(&o@dS z*4WiLJ!P~LNR%oB@|dNRNGZRFCrWAWgWBKa*!R=B(Wo$>OV6@++3k1^!*4aT&I4oL hZ*?B16E_(C1fRi$X*_+PEsp>I002ovPDHLkV1jM6sKx*Q literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Storage/boxicons.rsi/glasses.png b/Resources/Textures/Objects/Storage/boxicons.rsi/glasses.png new file mode 100644 index 0000000000000000000000000000000000000000..3819d40b22996735b615ecb2e5484ab8f15da997 GIT binary patch literal 385 zcmV-{0e=38P)0ix`|k&^PH;C=S^~q>E$5j9EHJw+unZ7I5fe2q8lziA$jwZ0;k} z!RDgSnwuEO;Qgj>a`^AZ$st_OXf&Gt&XG#f&1AA|5*~zMWqwcPaLY7#-)w3fel{2Y zY^x-WYo-1HoeNZcf|A`xyAe1ajT(i=Nz#tM^K#ipK!r+yLI^GmLq1!kDc@ZThXA~- zRw(*ZBP19QSL)4mpZQDHDUjYzBk*vF} z%Xs`*_dJg<2-+7Ygpdd9Tf!)cP0foscZbRT$$ fW2JnJrc*uu(xz-Ev7B~Y00000NkvXXu0mjfuPdtR literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Storage/boxicons.rsi/handcuff.png b/Resources/Textures/Objects/Storage/boxicons.rsi/handcuff.png new file mode 100644 index 0000000000000000000000000000000000000000..1e695be9d211a26f91a60eec5624cebdcdf4f1f1 GIT binary patch literal 338 zcmV-Y0j>UtP)OTiA>9HA~Iv}(yqtaLEn zlF~eW@8dOr0uG16@$YmfMa#vaunFJo_uBj(rFj?xxZUqY%}2u_02Dfju2Jd_Xk9@2 z2_(;vwj(g{Jge|HNtzKj9FJB46tn`l5SaPCdJcm??M=sH0Kg?p)w?)JFzELI0B6p> z7m&!X@>oBOI2WQK-IxFXtk!D)fL{~NpOV|nhMY;hhH|WR%^72APu4anP;Sl`dt0L@ zs!04q;I-MO)f6KE&iPxj*Oe1azLh{OL`9-buv|+)dkd~vrVf?K>CT0~HOsVhr2m0= k7+U=goZ^_2?{Kur1Lu-*Pnk`gL;wH)07*qoM6N<$f&$}`(*OVf literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Storage/boxicons.rsi/implant.png b/Resources/Textures/Objects/Storage/boxicons.rsi/implant.png new file mode 100644 index 0000000000000000000000000000000000000000..183cd48b2de1c2d4f7192c273c14da431c77acde GIT binary patch literal 392 zcmV;30eAk1P)B;MPGpxVdx|?AYB!2$|&^EHsGC zL05-5*o2lUcNbeac+V7aAMf|@&=(V>B{q zzE`UOOjHt^MyV@c?E=bAkTV_WdISz!w^VqXB+C(a==Dko=%5tHq~yr+is!)hi?c(= z0pN8oDBi_M!fv$+z>5%n7s$!OX2<%|h%+hYq?aZDaM5Z3;QbOVrjobqwsxkrKt9&I z`ORB>p(gUaCGuJwjQ#_&&BMl+ura2791%9g3pFbdm~9Sl^?1qY{xzL`g~)w3jRFjJ zKnMZbbvpeD0M5=Goj!BTg~sNW63CYCZq$pC);3IVC!UY(5mJVEir9-9;oji9zLW&}xE;uY5X`CCB zrLhQ9#0jm6MBb9fvHtJnx1$(ZT3TBEJ7+GF?#AP7lj4uFS!MkTm+&wMc;9Slg z>$M$=lZ1}v0q~lpzZWPdihXYDz7}W3l%x+P0B}E<03d`wDaB|sB8nmaq?DvP$%pCG zxu)}HShQ7ZZNmY3RZ5|?F3okJRtJO-XsvB%ft1qTE2Zj`tS7LKJkLv^Qc9kd%i{Z-{6+$qF#!0!|Lu*xhG)h&?}N(U?@9fzW4F`jyNb|{bYV5yn6D~ZD)q0&P{IJym zNK6uqTwN<*=K{uCpxBIbHv&hUPNC+05R@ZuJD(R4u)!!0OUa4j=wsn|dhNK~2Hxlv2{=D*HDdhJA5&7 zSHPAdiz`y@@;bH2Xc+xN8TfrNyFg#XTtN>Q`XSj7?V_IgtNU6tmBuH($- zk(%eSS%8(yL@JW%FR*n3(j^f1k#5JpUZD_6+_LS>7`QjhSO!#(8gM<2gJLl_H*`Ii z+t23#c%99HG0V2eXc_=7)9KF*2!z;rte-{fdS1x%#tZ;lwORlyhBW{x^+{-c>YKdo zbd)ufKSL4gVp!v%`F=d#mP0i~|EWdoMh&btcgB63ai7!URLDdr-R7)v6GbxG5`0A| z-3GuJ_x+Je<$EI~kUlZF>zd?_&H)&VmZ3xjqa}mUGK!>n0N_h+7DC>Bi4RE);uBMPw)n85qYf*z}}kx0000< KMNUMnLSTZ26~Daz literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Storage/boxicons.rsi/lighttube.png b/Resources/Textures/Objects/Storage/boxicons.rsi/lighttube.png new file mode 100644 index 0000000000000000000000000000000000000000..b257bd68e5ce7cfe1d734a4a364d6fd5ee57062c GIT binary patch literal 395 zcmV;60d)R}P)1G6WDwRaxmTjjaa61?z5>P=Z;0eKAwHjQTh7mm5 zEtdg!8;yc{mTgnibpT$6!`}<|_+iUq4I8m1#1HAz1OQGu9RR8!;k81S_p>{kF=_x--(}M@7ma!yPY6|4;A_)5uFIok pMRq8i2b!jt=sX}R&&c=_d;*N_Z<3k}2}A$@002ovPDHLkV1gYVq|yKY literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Storage/boxicons.rsi/meson.png b/Resources/Textures/Objects/Storage/boxicons.rsi/meson.png new file mode 100644 index 0000000000000000000000000000000000000000..a124ba5d967cc4fb82a7b750d84f0191646fecd5 GIT binary patch literal 399 zcmV;A0dW3_P)NmhxX8%=Rj?%lf?UcY_~#vlM=gXECa5(7vI0g%sc+_=GD*eS_yonb#%>^g{$ zg2>;fyTOnT4JDd500v%MyUW1N&d$JfM3=$9z<^;t>l}uUA3u^~6lo3s#qsp%(-8u$ z5GstJl7T^hfq`K-S+5=}VTp-H)Q7{Sy4lpn<001xNdYIb@3x)sy002ovPDHLkV1hm%q00aO literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Storage/boxicons.rsi/meta.json b/Resources/Textures/Objects/Storage/boxicons.rsi/meta.json new file mode 100644 index 0000000000..7e5c5370c1 --- /dev/null +++ b/Resources/Textures/Objects/Storage/boxicons.rsi/meta.json @@ -0,0 +1,218 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-NA 3", + "copyright": "https://github.com/Baystation12/Baystation12/commit/bc9fbb1722530596e3aa7522ee407280b323ad43", + "states": [ + { + "name": "beaker", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "bodybags", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "meson", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "sechud", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "box", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "box_of_doom", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "circuit", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "disk_kit", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "donk_kit", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "flashbang", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "glasses", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "handcuff", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "implant", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "latex", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "light", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "lightmixed", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "lighttube", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "mousetraps", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "pda", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "pillbox", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "solution_trays", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "sterile", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "syringe", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + } + ] +} diff --git a/Resources/Textures/Objects/Storage/boxicons.rsi/mousetraps.png b/Resources/Textures/Objects/Storage/boxicons.rsi/mousetraps.png new file mode 100644 index 0000000000000000000000000000000000000000..4f9cda8b50af77f09b00163c996da788737a78df GIT binary patch literal 382 zcmV-^0fGLBP)3BudN61t9w*6R0z563jRLq(86eAZZiKMc()aB%uipnCU9as} zoFrU!Ism+C{rdn0BUY~UyNa_s{}lRQ0RZkN699rB03eDY0F+VygkcE4!+h?n=^Vh+ zDoQIe#s(n-T5CJkg<9VMV{TSn#*7Ka>Kg?xD5aQfQhPt!q<`P4fH2LYx1{quy+CN6)1|9?nhwgx~-B&aoml-({kBLzyz&8CM9Q{SFQu!FV9W~0|4IE z>vAuOV|tDQz-yXrFQ8D#ezvu$#hH}9q&pJ;xSCD@5JFU*hhYf7-E3x@(^x>YRS3bw z?XcW`pC1F@-drOJ2^DKXqwj!M)7H<2M{Ug30=uBm45Y;%sr0CXhk}}~Bo|l`yZ?d^Lpe?aX5xt|~-ZD~CMr@daOa6bsD5qKJnN(q>dD-bKixe$77Tb90e*6jlD zIhp8deh_fbZUgWkNmhxX8%=b;z6o!9LFF@%CLXA2{k=jcj^#UwhAj2EDK(D~S1z4Do8s!v~qRiFnf<%TA9|0C@ z;R?wwCRGOfO_BZbzb`Ky3NSY^cjNikdQS+za5CD!Y ziGHKhf1q;#=P%HlN7{|RWIXl?FUqnVfo+y~2}p1X)Jowcip+Bo$7b(&Gy(wp>~?0Y zC`&vJ1^|F>=Gz4{I_z?+*G60`Wl6Ut001cwB1bSYW3^n0GsOaWtP3K1<~iP{Q)^$Z zr9`H-RRI9j*MH=>EpVl#b%9IXd|$jpfSHjJ0e{A?Nr}LMlkX)^D`hou)k@ESQ(#|J zCalTnu9d>Rs+@JA`@n0Gc-;rSib9kh2z1H`uYg`^pvxca00000NkvXXu0mjfhp?2) literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Storage/boxicons.rsi/sterile.png b/Resources/Textures/Objects/Storage/boxicons.rsi/sterile.png new file mode 100644 index 0000000000000000000000000000000000000000..60f2b86001b22801d03d0d2a63b6496f6d495439 GIT binary patch literal 386 zcmV-|0e$|7P)9p~qf1(+&>{wxDujcs9sCjwSsb!D^s{7e&CsQDhwdG^3L&6f{yQf+iyoq=unC_`r^@^@o#G@6@v+?+6~E|q z0iaMxoEoM60!J56zJi*nrNj41X z*K0ABWrxMUWiX00wp9f&t&@%!@|F_!wTJM+-%yq&-y_GRLYnSqf&>eH$V%~Q()K(h~8 z7hs$tS^^XlvD9Z-=5AT;1D0^@eW3hZ4hbo42Lmw9bzK3J8}Vhe!gH2=TSMzSFeJq4 gJfJG>aQq2A0mLwOxLf&c&j07*qoM6N<$f`q=Py8r+H literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Storage/boxicons.rsi/syringe.png b/Resources/Textures/Objects/Storage/boxicons.rsi/syringe.png new file mode 100644 index 0000000000000000000000000000000000000000..90872462f1aee44dfaedad6fa503b44f0e2bfa1b GIT binary patch literal 369 zcmV-%0gnEOP)ud&qeIh(LNWRVI#+k;yVbRu8#j9tNcZWMeadhfkZ{ ztZ(4>+59GVLP|sWB*sl5H{v~aGr3nixS-(OX#Jfn(v?qc*6y`2K<yy85}Sb4q9e E002f^@*0Z zuGYCT=Yuzd8eBAf@JQ#pkLF2+qMqIz7REuwmyNv?<~*8oWKxJiu%@c1y6}qSn-mN! ztqpBMJG+flH?NRbGPm1!t%jkw=n=CgL16`7iy5OC7$(@t*=ZJ>5(iqJ;OXKR;?bF$ zAi=6E#K9#g?GSOyt%)f@gkz_Lqo~AAi^O1sMN61M6BaFL@@*8{#K{&R!Vt?KYL;Md zY*~UxPg9`5hlZOGfdc!PM8#eIaLt)AhjZoup98!+KSX<)7#SD@-8tSIv3m0wXcvR0 LtDnm{r-UW|ATDeI literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Storage/donkpocket.rsi/inhand-right.png b/Resources/Textures/Objects/Storage/donkpocket.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..2dfb972cef32f28f7ff14d8479cdf492170c4a84 GIT binary patch literal 317 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|e{s5m4*Z=?jPl+>Il3{bSCwXU? zOV!R4NuU&CNswPKgTu2MX+TbKRY*jMOKNd)QD#9&W_}(6L&conu!5q}?_YuoK7M_o z<*loA?#%h%4WR}XjUPPHIq#!+lA)-lcZY>>knv?>FNHaeCLNg+q7ba9YN{^0V)-To zLrZHz+tAK#W7W+oB$mwWHeRb?XfArh>`72q!PjEOXap;*5@i2$sOG8y&>{v;S3j3^ HP6 Date: Thu, 3 Sep 2020 21:14:09 +0000 Subject: [PATCH 097/103] Removes Courier backpacks. (#1988) * Macerates the Courier bags. * Removes prototype file --- .../Entities/Clothing/Back/courier.yml | 149 ------------------ .../Couriers/courier.rsi/courier-black.png | Bin 271 -> 0 bytes .../courier.rsi/courier-equipped-BACKPACK.png | Bin 292 -> 0 bytes .../Back/Couriers/courier.rsi/courier.png | Bin 267 -> 0 bytes .../Back/Couriers/courier.rsi/meta.json | 21 --- .../courier-captain-equipped-BACKPACK.png | Bin 309 -> 0 bytes .../courier_captain.rsi/courier-captain.png | Bin 284 -> 0 bytes .../Couriers/courier_captain.rsi/meta.json | 17 -- .../courier-chemistry-equipped-BACKPACK.png | Bin 306 -> 0 bytes .../courier-chemistry.png | Bin 268 -> 0 bytes .../Couriers/courier_chemistry.rsi/meta.json | 17 -- .../courier-engineering-equipped-BACKPACK.png | Bin 307 -> 0 bytes .../courier-engineering.png | Bin 295 -> 0 bytes .../courier_engineering.rsi/meta.json | 17 -- .../courier-hydroponics-equipped-BACKPACK.png | Bin 284 -> 0 bytes .../courier-hydroponics.png | Bin 259 -> 0 bytes .../courier_hydroponics.rsi/meta.json | 17 -- .../courier-medical-equipped-BACKPACK.png | Bin 306 -> 0 bytes .../courier_medical.rsi/courier-medical.png | Bin 283 -> 0 bytes .../Couriers/courier_medical.rsi/meta.json | 17 -- .../courier-science-equipped-BACKPACK.png | Bin 305 -> 0 bytes .../courier_science.rsi/courier-science.png | Bin 267 -> 0 bytes .../Couriers/courier_science.rsi/meta.json | 17 -- .../courier-security-equipped-BACKPACK.png | Bin 311 -> 0 bytes .../courier_security.rsi/courier-security.png | Bin 278 -> 0 bytes .../Couriers/courier_security.rsi/meta.json | 17 -- .../courier-virology-equipped-BACKPACK.png | Bin 305 -> 0 bytes .../courier_virology.rsi/courier-virology.png | Bin 267 -> 0 bytes .../Couriers/courier_virology.rsi/meta.json | 17 -- 29 files changed, 306 deletions(-) delete mode 100644 Resources/Prototypes/Entities/Clothing/Back/courier.yml delete mode 100644 Resources/Textures/Clothing/Back/Couriers/courier.rsi/courier-black.png delete mode 100644 Resources/Textures/Clothing/Back/Couriers/courier.rsi/courier-equipped-BACKPACK.png delete mode 100644 Resources/Textures/Clothing/Back/Couriers/courier.rsi/courier.png delete mode 100644 Resources/Textures/Clothing/Back/Couriers/courier.rsi/meta.json delete mode 100644 Resources/Textures/Clothing/Back/Couriers/courier_captain.rsi/courier-captain-equipped-BACKPACK.png delete mode 100644 Resources/Textures/Clothing/Back/Couriers/courier_captain.rsi/courier-captain.png delete mode 100644 Resources/Textures/Clothing/Back/Couriers/courier_captain.rsi/meta.json delete mode 100644 Resources/Textures/Clothing/Back/Couriers/courier_chemistry.rsi/courier-chemistry-equipped-BACKPACK.png delete mode 100644 Resources/Textures/Clothing/Back/Couriers/courier_chemistry.rsi/courier-chemistry.png delete mode 100644 Resources/Textures/Clothing/Back/Couriers/courier_chemistry.rsi/meta.json delete mode 100644 Resources/Textures/Clothing/Back/Couriers/courier_engineering.rsi/courier-engineering-equipped-BACKPACK.png delete mode 100644 Resources/Textures/Clothing/Back/Couriers/courier_engineering.rsi/courier-engineering.png delete mode 100644 Resources/Textures/Clothing/Back/Couriers/courier_engineering.rsi/meta.json delete mode 100644 Resources/Textures/Clothing/Back/Couriers/courier_hydroponics.rsi/courier-hydroponics-equipped-BACKPACK.png delete mode 100644 Resources/Textures/Clothing/Back/Couriers/courier_hydroponics.rsi/courier-hydroponics.png delete mode 100644 Resources/Textures/Clothing/Back/Couriers/courier_hydroponics.rsi/meta.json delete mode 100644 Resources/Textures/Clothing/Back/Couriers/courier_medical.rsi/courier-medical-equipped-BACKPACK.png delete mode 100644 Resources/Textures/Clothing/Back/Couriers/courier_medical.rsi/courier-medical.png delete mode 100644 Resources/Textures/Clothing/Back/Couriers/courier_medical.rsi/meta.json delete mode 100644 Resources/Textures/Clothing/Back/Couriers/courier_science.rsi/courier-science-equipped-BACKPACK.png delete mode 100644 Resources/Textures/Clothing/Back/Couriers/courier_science.rsi/courier-science.png delete mode 100644 Resources/Textures/Clothing/Back/Couriers/courier_science.rsi/meta.json delete mode 100644 Resources/Textures/Clothing/Back/Couriers/courier_security.rsi/courier-security-equipped-BACKPACK.png delete mode 100644 Resources/Textures/Clothing/Back/Couriers/courier_security.rsi/courier-security.png delete mode 100644 Resources/Textures/Clothing/Back/Couriers/courier_security.rsi/meta.json delete mode 100644 Resources/Textures/Clothing/Back/Couriers/courier_virology.rsi/courier-virology-equipped-BACKPACK.png delete mode 100644 Resources/Textures/Clothing/Back/Couriers/courier_virology.rsi/courier-virology.png delete mode 100644 Resources/Textures/Clothing/Back/Couriers/courier_virology.rsi/meta.json diff --git a/Resources/Prototypes/Entities/Clothing/Back/courier.yml b/Resources/Prototypes/Entities/Clothing/Back/courier.yml deleted file mode 100644 index a9e45b3953..0000000000 --- a/Resources/Prototypes/Entities/Clothing/Back/courier.yml +++ /dev/null @@ -1,149 +0,0 @@ -- type: entity - parent: BackpackClothing - id: MessengerBag - name: messenger bag - description: A sturdy backpack worn over one shoulder. - components: - - type: Sprite - sprite: Clothing/Back/Couriers/courier.rsi - state: courier - - type: Icon - sprite: Clothing/Back/Couriers/courier.rsi - state: courier - - type: Clothing - sprite: Clothing/Back/Couriers/courier.rsi - ClothingPrefix: courier - -- type: entity - parent: BackpackClothing - id: MessengerBagChemistry - name: chemistry messenger bag - description: A sterile backpack worn over one shoulder, in Chemistry colors. - components: - - type: Sprite - sprite: Clothing/Back/Couriers/courier_chemistry.rsi - state: courier-chemistry - - type: Icon - sprite: Clothing/Back/Couriers/courier_chemistry.rsi - state: courier-chemistry - - type: Clothing - sprite: Clothing/Back/Couriers/courier_chemistry.rsi - HeldPrefix: medical - ClothingPrefix: courier-chemistry - -- type: entity - parent: BackpackClothing - id: MessengerBagMedical - name: medical messenger bag - description: A sterile backpack worn over one shoulder used in medical departments. - components: - - type: Sprite - sprite: Clothing/Back/Couriers/courier_medical.rsi - state: courier-medical - - type: Icon - sprite: Clothing/Back/Couriers/courier_medical.rsi - state: courier-medical - - type: Clothing - sprite: Clothing/Back/Couriers/courier_medical.rsi - HeldPrefix: medical - ClothingPrefix: courier-medical - -- type: entity - parent: BackpackClothing - id: MessengerBagVirology - name: virology messenger bag - description: A sterile backpack worn over one shoulder. This one is in Virology colors. - components: - - type: Sprite - sprite: Clothing/Back/Couriers/courier_virology.rsi - state: courier-virology - - type: Icon - sprite: Clothing/Back/Couriers/courier_virology.rsi - state: courier-virology - - type: Clothing - sprite: Clothing/Back/Couriers/courier_virology.rsi - HeldPrefix: medical - ClothingPrefix: courier-virology - -- type: entity - parent: BackpackClothing - id: MessengerBagEngineering - name: engineering messenger bag - description: A strong backpack worn over one shoulder. This one is designed for Industrial work. - components: - - type: Sprite - sprite: Clothing/Back/Couriers/courier_engineering.rsi - state: courier-engineering - - type: Icon - sprite: Clothing/Back/Couriers/courier_engineering.rsi - state: courier-engineering - - type: Clothing - sprite: Clothing/Back/Couriers/courier_engineering.rsi - HeldPrefix: engineering - ClothingPrefix: courier-engineering - -- type: entity - parent: BackpackClothing - id: MessengerBagScience - name: science messenger bag - description: A sterile backpack worn over one shoulder used in scientific departments. - components: - - type: Sprite - sprite: Clothing/Back/Couriers/courier_science.rsi - state: courier-science - - type: Icon - sprite: Clothing/Back/Couriers/courier_science.rsi - state: courier-science - - type: Clothing - sprite: Clothing/Back/Couriers/courier_science.rsi - ClothingPrefix: courier-science - -- type: entity - parent: BackpackClothing - id: MessengerBagCaptain - name: captain's messenger bag - description: A special backpack worn over one shoulder. This one is made specifically for officers. - components: - - type: Sprite - sprite: Clothing/Back/Couriers/courier_captain.rsi - state: courier-captain - - type: Icon - sprite: Clothing/Back/Couriers/courier_captain.rsi - state: courier-captain - - type: Clothing - sprite: Clothing/Back/Couriers/courier_captain.rsi - HeldPrefix: captain - ClothingPrefix: courier-captain - -- type: entity - parent: BackpackClothing - id: MessengerBagHydroponics - name: hydroponics messenger bag - description: A backpack worn over one shoulder. This one is designed for plant-related work. - components: - - type: Sprite - sprite: Clothing/Back/Couriers/courier_hydroponics.rsi - state: courier-hydroponics - - type: Icon - sprite: Clothing/Back/Couriers/courier_hydroponics.rsi - state: courier-hydroponics - - type: Clothing - sprite: Clothing/Back/Couriers/courier_hydroponics.rsi - ClothingPrefix: courier-hydroponics - -- type: entity - parent: BackpackClothing - id: MessengerBagSecurity - name: security messenger bag - description: A tactical backpack worn over one shoulder. This one is in Security colors. - components: - - type: Sprite - sprite: Clothing/Back/Couriers/courier_security.rsi - state: courier-security - - type: Icon - sprite: Clothing/Back/Couriers/courier_security.rsi - state: courier-security - - type: Clothing - sprite: Clothing/Back/Couriers/courier_security.rsi - HeldPrefix: security - ClothingPrefix: courier-security diff --git a/Resources/Textures/Clothing/Back/Couriers/courier.rsi/courier-black.png b/Resources/Textures/Clothing/Back/Couriers/courier.rsi/courier-black.png deleted file mode 100644 index 304c8e7fc60c4eeb62bd53e61e94130aa662aa4e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 271 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv#Q>iWS0K&A#3U^(EiW&xtgNi3 zr)OYbU}IzB;Nalw?3|jK%I(Ey4OGNf666=m;PC858jv%`)5S4F<9u?$0(}7=ho{EN zwl3r{&@5b_73f{;5O_%BqTrm4aEGmXY$6yU9e9lt)+jJ>~*Bbiz z?qUJD=4NJkrp`eDF?O44GToS*8ZAAzV;Gh&s4Pfh5I4}DZ&_TmQgai72dk5U$clut zOpQqlEE0!x9vZklH7-z*Zf2O|-{7d)Aykti*~_~^an3Y1ry53vUmp7J4*&oF diff --git a/Resources/Textures/Clothing/Back/Couriers/courier.rsi/courier-equipped-BACKPACK.png b/Resources/Textures/Clothing/Back/Couriers/courier.rsi/courier-equipped-BACKPACK.png deleted file mode 100644 index c4918a47f54ac6dc59b076c59dbc750500f26da3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 292 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|e=>VS)S0JsUqhn!VVPmLdV`Jmw z-I(*I@;TmiOw-**X{3 zyp`UO%IC4m%z2l!ixr#Eldrpv{)j#k#KoHb>C0oj>C9dGGz-hreYi^08MaQ06<)CN zbAwD$L-~a7wnc(fvt*0}O@2?`y{SXlvHAPoX4f3|15u|Lzj112i-`W+x=ZzcoNlyS zhTQ@c7+4zCFy`U-ryCt;@<_>n6Iw lV!XnB#fFC{TDXc)I$ztaD0e0ss?_YtsM# diff --git a/Resources/Textures/Clothing/Back/Couriers/courier.rsi/courier.png b/Resources/Textures/Clothing/Back/Couriers/courier.rsi/courier.png deleted file mode 100644 index 030e5792216c7305cd81bf6593b73003789459e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 267 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv#Q>iWS0HU>W@clkWNT~d>gpOD z9i1HEnVT3?QBl#_+Is5LsTX?=h5{8amIV0)GdMiEkp|?<@N{tu(Kw%+us}aR%i*c< z)a8r045T+N)Dq+^bqG8paZxa)CEQ`lV&w=%*Mnyy4{BIBSw}VV29&h8ZIN0aar0uM zj>4_PoSZvZ9ZMGMOinu<#L3vg#63Z52ZINrhrRhLaJ4vS1ROkb zEkK2l!=R0Qnx@wL#+5fDSSHjgV&h4g@*r8?+ll+rry`+8+zcyz8B`YK`F#Vrk-^i| K&t;ucLK6V6xmuzC diff --git a/Resources/Textures/Clothing/Back/Couriers/courier.rsi/meta.json b/Resources/Textures/Clothing/Back/Couriers/courier.rsi/meta.json deleted file mode 100644 index 5a48a51c34..0000000000 --- a/Resources/Textures/Clothing/Back/Couriers/courier.rsi/meta.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "version": 1, - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "courier-black", - "directions": 1 - }, - { - "name": "courier-equipped-BACKPACK", - "directions": 4 - }, - { - "name": "courier", - "directions": 1 - } - ] -} diff --git a/Resources/Textures/Clothing/Back/Couriers/courier_captain.rsi/courier-captain-equipped-BACKPACK.png b/Resources/Textures/Clothing/Back/Couriers/courier_captain.rsi/courier-captain-equipped-BACKPACK.png deleted file mode 100644 index 4429ba7d7047abc114f7d6618077b70e47f3fa9a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 309 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|e#Q>iWS0F8*!7F0yD&ZI*=_H~P zmS>gT80f}amB_MT2E*C2XFoHh837eBmIV0)GdMiEkp|=(@^ou_PoF+DU1TxiYBLikJfMI6#e=4JM^0w$WrD9fEYGs6 zbx0I&&{dq#b3wGBNNZD*!UW@hBCQP;0j?SWW=`P@T6|LkT|Kl{Y;f4xe6Z2clna*S0F8*!7F0yDrzAl;TR$5 zB%%|RXO-R<=*C=?$g*Ju!>LoJ!sK09f$A7bg8YIR9G=}s19Fymx;TbtoKH?zpfAAV z@YJ|%)*`Ng5`)EBFX!BBSk#gnb*slAg;8z0iMj~m)Ga3Jj3TU0Q~floVlD;E5eX>S zv16&m0*RT^+H@97x_0s6#6^uu6q28CL_t&- z8STL_YQr!TfZ_j5)+h(ZZN}Urf?gm;$PLt`RyUOn@@gmq-L{jOCnb0)g@V72&95@t z>rjm6&V*t-EqOvqv<8coX!Hk*W;_+i*-=SU4%4(yF&;&(^XFozB+re!=j={Y%*>6v z&X z21oIB0RolCc%^v$00NEim12JeIvV?hLM#u6W%HN50i5j}|3rVhbN~PV07*qoM6N<$ Ef^M>dY5)KL diff --git a/Resources/Textures/Clothing/Back/Couriers/courier_chemistry.rsi/courier-chemistry.png b/Resources/Textures/Clothing/Back/Couriers/courier_chemistry.rsi/courier-chemistry.png deleted file mode 100644 index 7fc412c33cd07130db91136a7f11bed2fbc3f80b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 268 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv#Q>iWS0G*3(l>wp{55OV?B2cm z%9Shc-o5*8%c4{5SIn%hx#qL N;OXk;vd$@?2>@QlVzdAN diff --git a/Resources/Textures/Clothing/Back/Couriers/courier_chemistry.rsi/meta.json b/Resources/Textures/Clothing/Back/Couriers/courier_chemistry.rsi/meta.json deleted file mode 100644 index 6bbd0dc2d2..0000000000 --- a/Resources/Textures/Clothing/Back/Couriers/courier_chemistry.rsi/meta.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "version": 1, - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "courier-chemistry", - "directions": 1 - }, - { - "name": "courier-chemistry-equipped-BACKPACK", - "directions": 4 - } - ] -} diff --git a/Resources/Textures/Clothing/Back/Couriers/courier_engineering.rsi/courier-engineering-equipped-BACKPACK.png b/Resources/Textures/Clothing/Back/Couriers/courier_engineering.rsi/courier-engineering-equipped-BACKPACK.png deleted file mode 100644 index 79a06d2b1931ee71f1bd09be3ee682c7e65f7b02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 307 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|e#Q>iWS0HU;s1$9XV0GfvcCA|$$asaiFbjD7)yfuf*Bm1-ADs+4tTmahIkx*J7pv9Ap-%| z`g7b7rvvizeDu9? zZT6*w0eKupShh37hs%YM>YbZABBV@g(xW>%@-%xMhjKj< zKIZbg^T_|n<{vAsl@u;);Zp9gza)F&WZ57wjX4U9DwSK}u z$FcSkm=)mXRCKFAScpelF{r5}E)L Ck9wK_ diff --git a/Resources/Textures/Clothing/Back/Couriers/courier_engineering.rsi/courier-engineering.png b/Resources/Textures/Clothing/Back/Couriers/courier_engineering.rsi/courier-engineering.png deleted file mode 100644 index f58b5b1e77f59862668fa0ec83f84dd122c7ae04..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 295 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvtpJ}8S0HU;sO0ME8g0pz9O0Rp z7}OlZ*_r3OaYF3LrJ1Kro%*uA_~*&||Mx^+d^}$TRLxitsHj_+#VwrH%jfT`PAhd~Jk)Z^(m}U?@tN&$zjG{H zGo%l&7M(jYr~3I8(@hKkoRbc`GcJFBZq8n5PX>;%k~d~;?9)s=mMoSKtU7qiA))Vy quwa6~Vix)A4&|r`?QN3;;u(%C^0@vgDYh2qYz9wPKbLh*2~7ZHSaj3? diff --git a/Resources/Textures/Clothing/Back/Couriers/courier_engineering.rsi/meta.json b/Resources/Textures/Clothing/Back/Couriers/courier_engineering.rsi/meta.json deleted file mode 100644 index b62916b65c..0000000000 --- a/Resources/Textures/Clothing/Back/Couriers/courier_engineering.rsi/meta.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "version": 1, - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "courier-engineering", - "directions": 1 - }, - { - "name": "courier-engineering-equipped-BACKPACK", - "directions": 4 - } - ] -} diff --git a/Resources/Textures/Clothing/Back/Couriers/courier_hydroponics.rsi/courier-hydroponics-equipped-BACKPACK.png b/Resources/Textures/Clothing/Back/Couriers/courier_hydroponics.rsi/courier-hydroponics-equipped-BACKPACK.png deleted file mode 100644 index a81a1468ceaccac2cab3a6d3d768dd1ddaee94df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 284 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|e(Ey(iS0K%%dY?_}f5SF`*>^;C zz4y5H_{pBxoL_(vj3q&S!3+-1ZlnP@TRmMILnI{M9(3$FtRT|xF#bNPkJtC86Ki-c z)*g&m;PJkGYNTcDtw~o63?{sP{AIPyd!DY+Ju?H=B&%pgB}`F@O4#tUBTZJe(vEws zgSvn4(q!2#n`!G`yVS)S0K%%dY?_}zmxa>hHV0~ z?}#jaCBEyu$Gyi-tUdPY0;L&Cg8YIR9G=}s19GN$x;Tbt1n)h)QSgv~0LuaK6%3~v zi(QzHEn=v2d*u-H?!kJN5XM^J12_J2Iv+{hUhMwm{*K6U;dN3uRxdr*1^VVV@2qX* znc~R%Yw-$q*6Azcwr*s&&ERpO;M_+ow%PChS@IoE`1D~=I+dNB9P%al#;Qr>AUEh$+v@x;V4l{?RHX|VjV)t{HDrn$R6>k`m~44$rjF6*2U FngIE`W}E;3 diff --git a/Resources/Textures/Clothing/Back/Couriers/courier_hydroponics.rsi/meta.json b/Resources/Textures/Clothing/Back/Couriers/courier_hydroponics.rsi/meta.json deleted file mode 100644 index 4474ce28a9..0000000000 --- a/Resources/Textures/Clothing/Back/Couriers/courier_hydroponics.rsi/meta.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "version": 1, - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "courier-hydroponics", - "directions": 1 - }, - { - "name": "courier-hydroponics-equipped-BACKPACK", - "directions": 4 - } - ] -} diff --git a/Resources/Textures/Clothing/Back/Couriers/courier_medical.rsi/courier-medical-equipped-BACKPACK.png b/Resources/Textures/Clothing/Back/Couriers/courier_medical.rsi/courier-medical-equipped-BACKPACK.png deleted file mode 100644 index 880bf5343917759e064c5915ecd685b712ddf063..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 306 zcmV-20nPr2P)DnXiDbx+cJXOf*^MC-{JhVG-ju=b(Kh#cX0pkAn8( zywp4(^G(FjnUJy290(K$=pvz2X`$Akz-Q1jS)>wr932t~dd+XASi(2xQC9ZG5`!V%a+}{cb_F4xZFK&GG zZtYS=4Xd!Vdqo?Pp4{Dif+?=t+1WY2RY7w{Rp7UEQ@1laIlfW7yLw`~OlXWyY22-#%h4EG{yuKX-mP4o3`|ZB8%0}Br6gTe~DWM4f2iA0b diff --git a/Resources/Textures/Clothing/Back/Couriers/courier_medical.rsi/meta.json b/Resources/Textures/Clothing/Back/Couriers/courier_medical.rsi/meta.json deleted file mode 100644 index 0f4a220b06..0000000000 --- a/Resources/Textures/Clothing/Back/Couriers/courier_medical.rsi/meta.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "version": 1, - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "courier-medical-equipped-BACKPACK", - "directions": 4 - }, - { - "name": "courier-medical", - "directions": 1 - } - ] -} diff --git a/Resources/Textures/Clothing/Back/Couriers/courier_science.rsi/courier-science-equipped-BACKPACK.png b/Resources/Textures/Clothing/Back/Couriers/courier_science.rsi/courier-science-equipped-BACKPACK.png deleted file mode 100644 index bc6270f519a12fc3d4e1191141ed7d7ae219d365..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 305 zcmV-10nYx3P))r#(0cq)=`n16O};a*mVmP>rmu6ye*MRaNNmD&go3W4&2E{ z{z_+7jN=&DZ2q<0v^ReP+bb>c?$(4#rv6e%P@j}{zEkwPwDJc1p>bF!B=Q4^Z2riWS0HW7Ff*B9Vqr_)Ooo~B z=g(iWX3g&1yRTfi^6uTc|Ns9#@mbvnRK!>klq&|D@BuC#Mm&KECk%yNxp>gwxTC(5be zwl1nwM_{8@KtO@3(xj$VFRv&uB_u*b_ZHl_TN|30amORtcV;2y`QZ Mr>mdKI;Vst00xR+O8@`> diff --git a/Resources/Textures/Clothing/Back/Couriers/courier_science.rsi/meta.json b/Resources/Textures/Clothing/Back/Couriers/courier_science.rsi/meta.json deleted file mode 100644 index 7b0c7dd7f8..0000000000 --- a/Resources/Textures/Clothing/Back/Couriers/courier_science.rsi/meta.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "version": 1, - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "courier-science-equipped-BACKPACK", - "directions": 4 - }, - { - "name": "courier-science", - "directions": 1 - } - ] -} diff --git a/Resources/Textures/Clothing/Back/Couriers/courier_security.rsi/courier-security-equipped-BACKPACK.png b/Resources/Textures/Clothing/Back/Couriers/courier_security.rsi/courier-security-equipped-BACKPACK.png deleted file mode 100644 index fd076d74bdd743eb7f858d15b729cf206053f414..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 311 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|e#Q>iWS0F7WCMF{zBPS=PsHmu= zrDemwkj%i4o}Rv+f#Es>LmR8FI#3Z~NswPKgTu2MX+X{qPZ!4!kK@S+60BEP-n1OK zA#5PJL^$AprEF_-+d_vdraIQ9WlTIj-X!qwnx-5`Z&}gpt-vg&EaB{=%p`iD$06)s z2G^EDjAuKFQdo~2JNAO>f{mhvhQX`@ZU-;0y=49I^d{G-kJ>ZN9q7wE;HVS;f$k=6za0ap!yLYHs`Ek1`u0S~yebOPQcXe0>m zHWsU>CuuQ6J?uzgWtQH>B3vPxEHK|YfUp6-Z{lnnt>gTe~DWM4f DouOkK diff --git a/Resources/Textures/Clothing/Back/Couriers/courier_security.rsi/courier-security.png b/Resources/Textures/Clothing/Back/Couriers/courier_security.rsi/courier-security.png deleted file mode 100644 index ff9a24f4c1a77151fb29ac0d23273409647c242f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 278 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvtpJ}8S0F7dEiErEudJ-Br>AGb zz+huz*m9`$5& zZSRimV%pTVWs6A)<3tlx)ukf2Dy*KFPcwtRO`k->RTwz}n%JjtY0YmeohZbi@Kc3J;)uq<<69Sr>YfN+tE9M(p)F4@ UUpUIr6zEC@Pgg&ebxsLQ0N*uKc>n+a diff --git a/Resources/Textures/Clothing/Back/Couriers/courier_security.rsi/meta.json b/Resources/Textures/Clothing/Back/Couriers/courier_security.rsi/meta.json deleted file mode 100644 index 69d0af205c..0000000000 --- a/Resources/Textures/Clothing/Back/Couriers/courier_security.rsi/meta.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "version": 1, - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "courier-security-equipped-BACKPACK", - "directions": 4 - }, - { - "name": "courier-security", - "directions": 1 - } - ] -} diff --git a/Resources/Textures/Clothing/Back/Couriers/courier_virology.rsi/courier-virology-equipped-BACKPACK.png b/Resources/Textures/Clothing/Back/Couriers/courier_virology.rsi/courier-virology-equipped-BACKPACK.png deleted file mode 100644 index 4b75c5fbde954cbe78a5eca542c2dc34fb1a3c4f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 305 zcmV-10nYx3P))r#(0cq)=`n16O};a*mVmP>rmu6ye*MRaNNmD&go3W4&2E{ z{z_+7jN=&DZ2q<0v^ReP+bb>c?$(4#rv6e%P@j}{zEkwPwDJc1p>bF!B=Q4^Z2riWS0K%h#=y|PU_6tdu%&PQ z{P}Cvtl7PL_mwMG-o1PG|NsB))qU+iHH;-ee!&b5&u#z}GtBUGaSYKopPaBjU%!Mn91U7mF1QfU`O=@cO@`{o>#KghsbS!Lj*a6lCt|`5ZX&hGx|&sowT_T<FVdQ&MBb@0Hly#MF0Q* diff --git a/Resources/Textures/Clothing/Back/Couriers/courier_virology.rsi/meta.json b/Resources/Textures/Clothing/Back/Couriers/courier_virology.rsi/meta.json deleted file mode 100644 index 18788305e4..0000000000 --- a/Resources/Textures/Clothing/Back/Couriers/courier_virology.rsi/meta.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "version": 1, - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "courier-virology", - "directions": 1 - }, - { - "name": "courier-virology-equipped-BACKPACK", - "directions": 4 - } - ] -} From 5db94dbb07e918c17bc15b489801c15d39d4099f Mon Sep 17 00:00:00 2001 From: Swept Date: Thu, 3 Sep 2020 21:17:32 +0000 Subject: [PATCH 098/103] Adds inhands and removes vir and genetics satchels. (#2003) * Satchels now have a nice RSI * Adds inhands for all the satchels * Annnd we're done! --- .../Entities/Clothing/Back/satchel.yml | 99 +++++------------- ...ped-BACKPACK.png => equipped-BACKPACK.png} | Bin .../satchel.rsi/{satchel.png => icon.png} | Bin .../Back/Satchels/satchel.rsi/inhand-left.png | Bin 0 -> 577 bytes .../Satchels/satchel.rsi/inhand-right.png | Bin 0 -> 489 bytes .../Back/Satchels/satchel.rsi/meta.json | 20 +++- ...ped-BACKPACK.png => equipped-BACKPACK.png} | Bin .../{satchel-captain.png => icon.png} | Bin .../satchel_captain.rsi/inhand-left.png | Bin 0 -> 688 bytes .../satchel_captain.rsi/inhand-right.png | Bin 0 -> 688 bytes .../Satchels/satchel_captain.rsi/meta.json | 16 ++- ...ped-BACKPACK.png => equipped-BACKPACK.png} | Bin .../{satchel-chemistry.png => icon.png} | Bin .../satchel_chemistry.rsi/inhand-left.png | Bin 0 -> 537 bytes .../satchel_chemistry.rsi/inhand-right.png | Bin 0 -> 543 bytes .../Satchels/satchel_chemistry.rsi/meta.json | 16 ++- ...ped-BACKPACK.png => equipped-BACKPACK.png} | Bin .../{satchel-engineering.png => icon.png} | Bin .../satchel_engineering.rsi/inhand-left.png | Bin 0 -> 656 bytes .../satchel_engineering.rsi/inhand-right.png | Bin 0 -> 628 bytes .../satchel_engineering.rsi/meta.json | 16 ++- .../Satchels/satchel_genetics.rsi/meta.json | 17 --- .../satchel-genetics-equipped-BACKPACK.png | Bin 355 -> 0 bytes .../satchel_genetics.rsi/satchel-genetics.png | Bin 361 -> 0 bytes ...ped-BACKPACK.png => equipped-BACKPACK.png} | Bin .../{satchel-hydroponics.png => icon.png} | Bin .../satchel_hydroponics.rsi/inhand-left.png | Bin 0 -> 669 bytes .../satchel_hydroponics.rsi/inhand-right.png | Bin 0 -> 639 bytes .../satchel_hydroponics.rsi/meta.json | 16 ++- ...ped-BACKPACK.png => equipped-BACKPACK.png} | Bin .../{satchel-medical.png => icon.png} | Bin .../satchel_medical.rsi/inhand-left.png | Bin 0 -> 575 bytes .../satchel_medical.rsi/inhand-right.png | Bin 0 -> 612 bytes .../Satchels/satchel_medical.rsi/meta.json | 16 ++- ...ped-BACKPACK.png => equipped-BACKPACK.png} | Bin .../{satchel-science.png => icon.png} | Bin .../satchel_science.rsi/inhand-left.png | Bin 0 -> 591 bytes .../satchel_science.rsi/inhand-right.png | Bin 0 -> 603 bytes .../Satchels/satchel_science.rsi/meta.json | 14 ++- ...ped-BACKPACK.png => equipped-BACKPACK.png} | Bin .../{satchel-security.png => icon.png} | Bin .../satchel_security.rsi/inhand-left.png | Bin 0 -> 584 bytes .../satchel_security.rsi/inhand-right.png | Bin 0 -> 583 bytes .../Satchels/satchel_security.rsi/meta.json | 16 ++- .../Satchels/satchel_virology.rsi/meta.json | 17 --- .../satchel-virology-equipped-BACKPACK.png | Bin 358 -> 0 bytes .../satchel_virology.rsi/satchel-virology.png | Bin 359 -> 0 bytes 47 files changed, 131 insertions(+), 132 deletions(-) rename Resources/Textures/Clothing/Back/Satchels/satchel.rsi/{satchel-equipped-BACKPACK.png => equipped-BACKPACK.png} (100%) rename Resources/Textures/Clothing/Back/Satchels/satchel.rsi/{satchel.png => icon.png} (100%) create mode 100644 Resources/Textures/Clothing/Back/Satchels/satchel.rsi/inhand-left.png create mode 100644 Resources/Textures/Clothing/Back/Satchels/satchel.rsi/inhand-right.png rename Resources/Textures/Clothing/Back/Satchels/satchel_captain.rsi/{satchel-captain-equipped-BACKPACK.png => equipped-BACKPACK.png} (100%) rename Resources/Textures/Clothing/Back/Satchels/satchel_captain.rsi/{satchel-captain.png => icon.png} (100%) create mode 100644 Resources/Textures/Clothing/Back/Satchels/satchel_captain.rsi/inhand-left.png create mode 100644 Resources/Textures/Clothing/Back/Satchels/satchel_captain.rsi/inhand-right.png rename Resources/Textures/Clothing/Back/Satchels/satchel_chemistry.rsi/{satchel-chemistry-equipped-BACKPACK.png => equipped-BACKPACK.png} (100%) rename Resources/Textures/Clothing/Back/Satchels/satchel_chemistry.rsi/{satchel-chemistry.png => icon.png} (100%) create mode 100644 Resources/Textures/Clothing/Back/Satchels/satchel_chemistry.rsi/inhand-left.png create mode 100644 Resources/Textures/Clothing/Back/Satchels/satchel_chemistry.rsi/inhand-right.png rename Resources/Textures/Clothing/Back/Satchels/satchel_engineering.rsi/{satchel-engineering-equipped-BACKPACK.png => equipped-BACKPACK.png} (100%) rename Resources/Textures/Clothing/Back/Satchels/satchel_engineering.rsi/{satchel-engineering.png => icon.png} (100%) create mode 100644 Resources/Textures/Clothing/Back/Satchels/satchel_engineering.rsi/inhand-left.png create mode 100644 Resources/Textures/Clothing/Back/Satchels/satchel_engineering.rsi/inhand-right.png delete mode 100644 Resources/Textures/Clothing/Back/Satchels/satchel_genetics.rsi/meta.json delete mode 100644 Resources/Textures/Clothing/Back/Satchels/satchel_genetics.rsi/satchel-genetics-equipped-BACKPACK.png delete mode 100644 Resources/Textures/Clothing/Back/Satchels/satchel_genetics.rsi/satchel-genetics.png rename Resources/Textures/Clothing/Back/Satchels/satchel_hydroponics.rsi/{satchel-hydroponics-equipped-BACKPACK.png => equipped-BACKPACK.png} (100%) rename Resources/Textures/Clothing/Back/Satchels/satchel_hydroponics.rsi/{satchel-hydroponics.png => icon.png} (100%) create mode 100644 Resources/Textures/Clothing/Back/Satchels/satchel_hydroponics.rsi/inhand-left.png create mode 100644 Resources/Textures/Clothing/Back/Satchels/satchel_hydroponics.rsi/inhand-right.png rename Resources/Textures/Clothing/Back/Satchels/satchel_medical.rsi/{satchel-medical-equipped-BACKPACK.png => equipped-BACKPACK.png} (100%) rename Resources/Textures/Clothing/Back/Satchels/satchel_medical.rsi/{satchel-medical.png => icon.png} (100%) create mode 100644 Resources/Textures/Clothing/Back/Satchels/satchel_medical.rsi/inhand-left.png create mode 100644 Resources/Textures/Clothing/Back/Satchels/satchel_medical.rsi/inhand-right.png rename Resources/Textures/Clothing/Back/Satchels/satchel_science.rsi/{satchel-science-equipped-BACKPACK.png => equipped-BACKPACK.png} (100%) rename Resources/Textures/Clothing/Back/Satchels/satchel_science.rsi/{satchel-science.png => icon.png} (100%) create mode 100644 Resources/Textures/Clothing/Back/Satchels/satchel_science.rsi/inhand-left.png create mode 100644 Resources/Textures/Clothing/Back/Satchels/satchel_science.rsi/inhand-right.png rename Resources/Textures/Clothing/Back/Satchels/satchel_security.rsi/{satchel-security-equipped-BACKPACK.png => equipped-BACKPACK.png} (100%) rename Resources/Textures/Clothing/Back/Satchels/satchel_security.rsi/{satchel-security.png => icon.png} (100%) create mode 100644 Resources/Textures/Clothing/Back/Satchels/satchel_security.rsi/inhand-left.png create mode 100644 Resources/Textures/Clothing/Back/Satchels/satchel_security.rsi/inhand-right.png delete mode 100644 Resources/Textures/Clothing/Back/Satchels/satchel_virology.rsi/meta.json delete mode 100644 Resources/Textures/Clothing/Back/Satchels/satchel_virology.rsi/satchel-virology-equipped-BACKPACK.png delete mode 100644 Resources/Textures/Clothing/Back/Satchels/satchel_virology.rsi/satchel-virology.png diff --git a/Resources/Prototypes/Entities/Clothing/Back/satchel.yml b/Resources/Prototypes/Entities/Clothing/Back/satchel.yml index 43db28946b..dfafbb49b3 100644 --- a/Resources/Prototypes/Entities/Clothing/Back/satchel.yml +++ b/Resources/Prototypes/Entities/Clothing/Back/satchel.yml @@ -1,168 +1,121 @@ - type: entity - parent: BackpackClothing - id: Satchel + parent: Clothing + id: SatchelBase name: satchel description: A trendy looking satchel. components: - type: Sprite sprite: Clothing/Back/Satchels/satchel.rsi - state: satchel + state: icon - type: Icon sprite: Clothing/Back/Satchels/satchel.rsi - state: satchel + state: icon - type: Clothing sprite: Clothing/Back/Satchels/satchel.rsi - ClothingPrefix: satchel - type: Storage - capacity: 300 + capacity: 100 - type: entity - parent: BackpackClothing + parent: SatchelBase id: SatchelEngineering name: engineering satchel description: A tough satchel with extra pockets. components: - type: Sprite sprite: Clothing/Back/Satchels/satchel_engineering.rsi - state: satchel-engineering + state: icon - type: Icon sprite: Clothing/Back/Satchels/satchel_engineering.rsi - state: satchel-engineering + state: icon - type: Clothing sprite: Clothing/Back/Satchels/satchel_engineering.rsi - HeldPrefix: engineering - ClothingPrefix: satchel-engineering - type: entity - parent: BackpackClothing + parent: SatchelBase id: SatchelMedical name: medical satchel description: A sterile satchel used in medical departments. components: - type: Sprite sprite: Clothing/Back/Satchels/satchel_medical.rsi - state: satchel-medical + state: icon - type: Icon sprite: Clothing/Back/Satchels/satchel_medical.rsi - state: satchel-medical + state: icon - type: Clothing sprite: Clothing/Back/Satchels/satchel_medical.rsi - HeldPrefix: medical - ClothingPrefix: satchel-medical - type: entity - parent: BackpackClothing + parent: SatchelBase id: SatchelChemistry name: chemistry satchel description: A sterile satchel with chemist colours. components: - type: Sprite sprite: Clothing/Back/Satchels/satchel_chemistry.rsi - state: satchel-chemistry + state: icon - type: Icon sprite: Clothing/Back/Satchels/satchel_chemistry.rsi - state: satchel-chemistry + state: icon - type: Clothing sprite: Clothing/Back/Satchels/satchel_chemistry.rsi - HeldPrefix: medical - ClothingPrefix: satchel-chemistry - type: entity - parent: BackpackClothing - id: SatchelGenetics - name: genetics satchel - description: A sterile satchel with geneticist colours. - components: - - type: Sprite - sprite: Clothing/Back/Satchels/satchel_genetics.rsi - state: satchel-genetics - - type: Icon - sprite: Clothing/Back/Satchels/satchel_genetics.rsi - state: satchel-genetics - - type: Clothing - sprite: Clothing/Back/Satchels/satchel_genetics.rsi - HeldPrefix: medical - ClothingPrefix: satchel-genetics - -- type: entity - parent: BackpackClothing - id: SatchelVirology - name: virology satchel - description: A sterile satchel with virologist colours. - components: - - type: Sprite - sprite: Clothing/Back/Satchels/satchel_virology.rsi - state: satchel-virology - - type: Icon - sprite: Clothing/Back/Satchels/satchel_virology.rsi - state: satchel-virology - - type: Clothing - sprite: Clothing/Back/Satchels/satchel_virology.rsi - HeldPrefix: medical - ClothingPrefix: satchel-virology - -- type: entity - parent: BackpackClothing + parent: SatchelBase id: SatchelScience name: science satchel description: Useful for holding research materials. components: - type: Sprite sprite: Clothing/Back/Satchels/satchel_science.rsi - state: satchel-science + state: icon - type: Icon sprite: Clothing/Back/Satchels/satchel_science.rsi - state: satchel-science + state: icon - type: Clothing sprite: Clothing/Back/Satchels/satchel_science.rsi - ClothingPrefix: satchel-science - type: entity - parent: BackpackClothing + parent: SatchelBase id: SatchelSecurity name: security satchel description: A robust satchel for security related needs. components: - type: Sprite sprite: Clothing/Back/Satchels/satchel_security.rsi - state: satchel-security + state: icon - type: Icon sprite: Clothing/Back/Satchels/satchel_security.rsi - state: satchel-security + state: icon - type: Clothing sprite: Clothing/Back/Satchels/satchel_security.rsi - HeldPrefix: security - ClothingPrefix: satchel-security - type: entity - parent: BackpackClothing + parent: SatchelBase id: SatchelCaptain name: captain's satchel description: An exclusive satchel for Nanotrasen officers. components: - type: Sprite sprite: Clothing/Back/Satchels/satchel_captain.rsi - state: satchel-captain + state: icon - type: Icon sprite: Clothing/Back/Satchels/satchel_captain.rsi - state: satchel-captain + state: icon - type: Clothing sprite: Clothing/Back/Satchels/satchel_captain.rsi - HeldPrefix: captain - ClothingPrefix: satchel-captain - type: entity - parent: BackpackClothing + parent: SatchelBase id: SatchelHydroponics name: hydroponics satchel description: A satchel made of all natural fibers. components: - type: Sprite sprite: Clothing/Back/Satchels/satchel_hydroponics.rsi - state: satchel-hydroponics + state: icon - type: Icon sprite: Clothing/Back/Satchels/satchel_hydroponics.rsi - state: satchel-hydroponics + state: icon - type: Clothing sprite: Clothing/Back/Satchels/satchel_hydroponics.rsi - ClothingPrefix: satchel-hydroponics diff --git a/Resources/Textures/Clothing/Back/Satchels/satchel.rsi/satchel-equipped-BACKPACK.png b/Resources/Textures/Clothing/Back/Satchels/satchel.rsi/equipped-BACKPACK.png similarity index 100% rename from Resources/Textures/Clothing/Back/Satchels/satchel.rsi/satchel-equipped-BACKPACK.png rename to Resources/Textures/Clothing/Back/Satchels/satchel.rsi/equipped-BACKPACK.png diff --git a/Resources/Textures/Clothing/Back/Satchels/satchel.rsi/satchel.png b/Resources/Textures/Clothing/Back/Satchels/satchel.rsi/icon.png similarity index 100% rename from Resources/Textures/Clothing/Back/Satchels/satchel.rsi/satchel.png rename to Resources/Textures/Clothing/Back/Satchels/satchel.rsi/icon.png diff --git a/Resources/Textures/Clothing/Back/Satchels/satchel.rsi/inhand-left.png b/Resources/Textures/Clothing/Back/Satchels/satchel.rsi/inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..2f5f5f35cd9b9f80fd44b65f19b8012e8093c02d GIT binary patch literal 577 zcmV-H0>1r;P)T*0sw%u7Jc6%P18f8p%dZ1zu9cud_E6tan!re0>&7pwMJdn0D$dw zi?S>o0BEfNz*SZC=F+-e-}j-djtX7?0BGA5Ns_=?i~W8Ntu>TVXqqOtZWKkZ)lQ^3-0!L2E%5ws4gk8YJNm5aI(&TpC|>tfT73RA`iuX!_e1NxN@LARJiwHTAik&W z?{3|Pn;QVYr^%}+)@hOnbBZw`)VzF@k zEZ=7Ye3Q~7^9W*FAc~^HS$)H?a_VOwndg@XVnv1 z06*@-v-~Ok1*Xa)h`Pp^{#1E{VApIwB99<8qTjxLagup}mzpY%K>v%MyB8=}f&ap@ P00000NkvXXu0mjf(XI>q literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Back/Satchels/satchel.rsi/inhand-right.png b/Resources/Textures/Clothing/Back/Satchels/satchel.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..7952889f7d695cef1abe5b0c1ea6059c7a29e09f GIT binary patch literal 489 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 O0000a}Y?bnP0)uiFwpmFy)! ze!&ckOiWD7EQzKM7XgLNd%8G=NJzdtcsl5?fq?75!VRAxJNh+pCK-WL1C8J94xJ&ySW$}y2e(o);t{0O1qC-NjF7RHYTJ-U# zH{Y+6JL0O#=M-`Jbp>6Xl*M_jYZKSGZqdsozW&DOPMIAAfG@lw!WJMQ48qT0TD#pSe=?N9q^X tmEMoMt_bmT1vN_x_Ehy(B+rsNWxnb;`+=Sf6ZU`t#?#f$Wt~$(69Bg|k7@t_ diff --git a/Resources/Textures/Clothing/Back/Satchels/satchel_genetics.rsi/satchel-genetics.png b/Resources/Textures/Clothing/Back/Satchels/satchel_genetics.rsi/satchel-genetics.png deleted file mode 100644 index ceb3eedb7b38d1d4b264b33942b3e04a1600cf74..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 361 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv-2k5uS0FvDeHM^pNc*p)rDdG< z-+1PKTU%QPASn2sl9JNa);4$U+{1?tU%PhA_?_-Eph~8aAirP+4QI8~LqOh3PZ!4! zjq}L~5*Y__av0LrN9An2k#+UVOyLDJ>x#{v@165IEww-*B;oAs^vd&}-pw^S=hMJ- zXZN)4I^W-FrtLToIibsXxx^VYr=Asd#X9dJ&&_*_}ZqzgI+zozJZ7M1cSCPG0fJgHlJ}?HWCzCp00i_>zopr E0NnqZ?*IS* diff --git a/Resources/Textures/Clothing/Back/Satchels/satchel_hydroponics.rsi/satchel-hydroponics-equipped-BACKPACK.png b/Resources/Textures/Clothing/Back/Satchels/satchel_hydroponics.rsi/equipped-BACKPACK.png similarity index 100% rename from Resources/Textures/Clothing/Back/Satchels/satchel_hydroponics.rsi/satchel-hydroponics-equipped-BACKPACK.png rename to Resources/Textures/Clothing/Back/Satchels/satchel_hydroponics.rsi/equipped-BACKPACK.png diff --git a/Resources/Textures/Clothing/Back/Satchels/satchel_hydroponics.rsi/satchel-hydroponics.png b/Resources/Textures/Clothing/Back/Satchels/satchel_hydroponics.rsi/icon.png similarity index 100% rename from Resources/Textures/Clothing/Back/Satchels/satchel_hydroponics.rsi/satchel-hydroponics.png rename to Resources/Textures/Clothing/Back/Satchels/satchel_hydroponics.rsi/icon.png diff --git a/Resources/Textures/Clothing/Back/Satchels/satchel_hydroponics.rsi/inhand-left.png b/Resources/Textures/Clothing/Back/Satchels/satchel_hydroponics.rsi/inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..3a99826f69a6df9c6fb5f885b438f64a9f5a2df1 GIT binary patch literal 669 zcmV;O0%HA%P)}!X=u$a~t>W&T^FNabx}ib-!|B82|v(c8+jzypM&9 z-DyjJ>@@N4CM&tiE3YCA^&0PBkd z3)U~!IqFVbpHiwdi1GjqD$z0g__4A!_If_EZ3|By$B??OUf06jpT2Ujvacrk{@4w= zu3Go6)UR2N8~CS&u)ZCn#^Dk*4wqftzWNbP)-p3{ka&sm)3@48;K5+$as%o{^@&Ulln^!#(9EKNp1ZA3Tkfs}CnkH$w zL2k1FzY|LPX{8z?XA797*?GTGjg7n}+ZNDtgPh~>-Nqu)FV^tvVGcl)Yl#ldJObMm zn9-+ENT$$gH}THDhE}`DRk}yLoa?)mlSinRb0gJbdjbY!1iZkRM_?O(ZJ##Moe}Wj zU%;z80;}^l&h{#gpzJ&w@G6hs3U?l0SYG83#Q)+u1vyqA{q0j500000NkvXXu0mjf D6W}us literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Back/Satchels/satchel_hydroponics.rsi/inhand-right.png b/Resources/Textures/Clothing/Back/Satchels/satchel_hydroponics.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..f486b2d0b923a40f1106fb59413b4ac7df0d44ff GIT binary patch literal 639 zcmV-_0)YLAP)_p zNZ_IlLP#l+9#Wg54uYa0ybkFFgLg@;xyxPJ?`O&J-pjq;``x=+-VY!mA|fIpA|fIp zJEOA&F*;iie#haa2TlerJz2!!+zf)8gvZa0#NFRc+9u%cLYLEqxV=6{<@l<%2t5{_ z9!K=$Hvs@4S?!nv+XO@uNyM}H=C*&c_8p&h4^aP6K|GsBM3Dly3(SW!HuV&f^Xnax zFx;*)mq;R>-N2)fah%pxkj|?(yQw3WNMdq+-QCDt@^fSfV^hG~^OG($63oS$?H8q}?f?CfD#rwXuH$UG1I+hbKhdE>zt)IUFaz zubP3%@fB{b&pk;(*CL7}QstO1x4oum&FfS-CcLN_h$xZ>$*RyaO@w4sxcw@$Jsq~v z@0x*XF#~0@fYaIvl+CR_bE(3u!&yhKK(&~`f;@p-B8jt`I`*WkmYRWTG2=!|_gKy4 z7RNilkD385=W>()KWYXpO3@*Gr}f)n7`okXZ~0j>5Qw9BziS2pkp#bM2F&^UJum&M Zegk7@Qq`sbjdK71002ovPDHLkV1fijE?)ou literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Back/Satchels/satchel_hydroponics.rsi/meta.json b/Resources/Textures/Clothing/Back/Satchels/satchel_hydroponics.rsi/meta.json index dc674418b9..e84a910cb3 100644 --- a/Resources/Textures/Clothing/Back/Satchels/satchel_hydroponics.rsi/meta.json +++ b/Resources/Textures/Clothing/Back/Satchels/satchel_hydroponics.rsi/meta.json @@ -1,17 +1,27 @@ { "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/547852588166c8e091b441e4e67169e156bb09c1", "size": { "x": 32, "y": 32 }, "states": [ { - "name": "satchel-hydroponics-equipped-BACKPACK", + "name": "icon", + "directions": 1 + }, + { + "name": "equipped-BACKPACK", "directions": 4 }, { - "name": "satchel-hydroponics", - "directions": 1 + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 } ] } diff --git a/Resources/Textures/Clothing/Back/Satchels/satchel_medical.rsi/satchel-medical-equipped-BACKPACK.png b/Resources/Textures/Clothing/Back/Satchels/satchel_medical.rsi/equipped-BACKPACK.png similarity index 100% rename from Resources/Textures/Clothing/Back/Satchels/satchel_medical.rsi/satchel-medical-equipped-BACKPACK.png rename to Resources/Textures/Clothing/Back/Satchels/satchel_medical.rsi/equipped-BACKPACK.png diff --git a/Resources/Textures/Clothing/Back/Satchels/satchel_medical.rsi/satchel-medical.png b/Resources/Textures/Clothing/Back/Satchels/satchel_medical.rsi/icon.png similarity index 100% rename from Resources/Textures/Clothing/Back/Satchels/satchel_medical.rsi/satchel-medical.png rename to Resources/Textures/Clothing/Back/Satchels/satchel_medical.rsi/icon.png diff --git a/Resources/Textures/Clothing/Back/Satchels/satchel_medical.rsi/inhand-left.png b/Resources/Textures/Clothing/Back/Satchels/satchel_medical.rsi/inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..bb089a8d4403a4c2bf1877f2e17c2ac404c33e33 GIT binary patch literal 575 zcmV-F0>J%=P)Ks5I38Fh(;-6$#mPXEEvrLjlT0Dd&4ALaLqLZMbm`z=p&bHd za1?aPdP0^Eb#r(b${9^AA>Qx(u7P|%%W)^Xd-s07JBRlGA|fIpA|fIpB8sBf?n<-W zmH(Z`x;|(GX|}uadE*m$caBE56}7r2%f~mVR`+D+Pi5#&W&7JtS-!3jS43p!PpuTd zc*%m*Z+V?3zwPa8;m_YIRChPmzE2Pr0CJfm0Kjn^^)2>MBS_2ZU~gv&xl9uId>(_r z0Hg5?Ew6)YI%O31^q_*#c(y2lHsf!Ae{+k|gUVtDlu9K456SyCw?=Uf&n}S5BrzJ# zOj8YIT!3skwMcF>o}tlbtei*P0gvO_qVi6?^!Imuc8GqzAL%}i<3{}o{ z-8Al-6qc;U1K2Er`j&ECR}zT?0AN0!N8bKnakXL*5fKp)5fKp)5s{`i<^;6n5me>_ zmVN#HTY7hn)goxlBd8bPs9eBgGSLpZB51fCl?yPPM^J4v1PT25ae^=V$H=Br>isrZZw|Z+MaD^dcGR3KrF_5TkY(L_I-aEA9zaAyL_|bHL_|b7w(E=S z`jU1YCOwJs=ioAjqr-hn-H>mFS zta)&r%O?0AZ+>NYD5WHy&jSEvvl%*_PA1EKky1(?L!LxLL_|bHL_|bHkJF}l29k;q zt3P0wP4o=dt}nr54zDl18IKWr0dDsUoE`50K;oOFk(#{#5fKp)5fKp)5$(e{7yBsUzn_!A=i+cU#9NE79oYcT*5;aQz9sMP*pTdgUMuqrfHz65D{FLr^&g!UN3dbdnMn16L*CW ze#hKBsSpBA+!el+wz-y)H=r!bBLEQq>bl0r)YzTWv~ci;P| zxlhurVJ*Huo11WC9XRM*#23p~0DzyJANaETXtKtja}lkwh=_=Yh=_=Yh=|D2A$kH& zwvSMth^iWk7Kd}rnXO^c4_K?JD$cOlbOqYdRv#gmh^((=?4yYLb_4!qefoFT5|OB? zk6zQH9{>Q}`?!9Ve|eeV-G^gLr&j6PEc*y%KLHWJd#RA;If|k{p66E4TdeyCW;Y;& zfPrr?ZR^-?S@#jlHemh5|Lh3dKI1plRv*FCA)e{C)kjEn$N?<+2xeFG4L(K7KEOk@ d)kmQJ#V;koIchLGih=+D002ovPDHLkV1lH-5t#r0 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Back/Satchels/satchel_science.rsi/inhand-right.png b/Resources/Textures/Clothing/Back/Satchels/satchel_science.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..a3d1c9fe225f195b155b9be664dd185f6ddd90e4 GIT binary patch literal 603 zcmV-h0;K(kP)BjE7zW@s#X}ZD!DH#FL0d2xG~AS*;6O)vI5K2up_%*xZfbtOfdYoE?%W^n4F-pj zOakAa4xI%BFW#<0qoi&u*NUY`Dep5GpSkbV@yW}501*)p5fKp)5fK&X!+Nc?Z#qYn zUX}Ur8Gzw%h&CTWAJzldIpfv?P)glzk|c?rV+H3N7K_DxDQk2FKty~LMQizs6dr)q z+8bk_l=6L8ABG`rafr!e0%J^TyI_vh{pZnW^v|4~ZHpoTV+?w|9!^g~e4Z*~SqKrS zC~iHRa|nW9r<{cya1$RxDFqQhmSvbur^vDlA_AopZsOxgLsuz(_+4@qcEFLohI7A{ zopWnz&N&?EYkZ3RyoRme5K0Y50L{z{jJIyqgqw&zjZ!flO|>c&aXPSybN*vv4bEm5D`Bfk1M(TDfJ38H8T)J5v;X{ zq6i;U0;N=Cdzb2fre+3ach}tjFfiGp+WRPV08Pvc-0ivc-v3?u*)%yb(2A@1re_A~ ps8zaUo1PiS>tEqLX8@=IzW~`9Hot8_`|JP!002ovPDHLkV1leg3XlK* literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Back/Satchels/satchel_science.rsi/meta.json b/Resources/Textures/Clothing/Back/Satchels/satchel_science.rsi/meta.json index 8c4a68e1f8..e84a910cb3 100644 --- a/Resources/Textures/Clothing/Back/Satchels/satchel_science.rsi/meta.json +++ b/Resources/Textures/Clothing/Back/Satchels/satchel_science.rsi/meta.json @@ -1,16 +1,26 @@ { "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/547852588166c8e091b441e4e67169e156bb09c1", "size": { "x": 32, "y": 32 }, "states": [ { - "name": "satchel-science", + "name": "icon", "directions": 1 }, { - "name": "satchel-science-equipped-BACKPACK", + "name": "equipped-BACKPACK", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", "directions": 4 } ] diff --git a/Resources/Textures/Clothing/Back/Satchels/satchel_security.rsi/satchel-security-equipped-BACKPACK.png b/Resources/Textures/Clothing/Back/Satchels/satchel_security.rsi/equipped-BACKPACK.png similarity index 100% rename from Resources/Textures/Clothing/Back/Satchels/satchel_security.rsi/satchel-security-equipped-BACKPACK.png rename to Resources/Textures/Clothing/Back/Satchels/satchel_security.rsi/equipped-BACKPACK.png diff --git a/Resources/Textures/Clothing/Back/Satchels/satchel_security.rsi/satchel-security.png b/Resources/Textures/Clothing/Back/Satchels/satchel_security.rsi/icon.png similarity index 100% rename from Resources/Textures/Clothing/Back/Satchels/satchel_security.rsi/satchel-security.png rename to Resources/Textures/Clothing/Back/Satchels/satchel_security.rsi/icon.png diff --git a/Resources/Textures/Clothing/Back/Satchels/satchel_security.rsi/inhand-left.png b/Resources/Textures/Clothing/Back/Satchels/satchel_security.rsi/inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..2311df1b11351156f74b9988c749ccfc231815ff GIT binary patch literal 584 zcmV-O0=NB%P)fZ@qJGM)s>%bv z`F!4_xvLwHrm4^K9IvmhD9aKaYA&>{>${5%xmlK>swzK@5|41M22DTS`<5JeG;F*m>GZEhUL==&Z`)2yy{>7ztQQ55L9ZhjtyVgB7(yDB%1 zV~pd7EX&X|&FWg0RyW|s>iYeDk0eRvqu`u_wH8mttjZ0$YO5n4@(~08r4*cVI3AC1 z&Os?9mfQC|;y4z`TM{_}VYTu+pU=Ow7RH#}GjR8ZaGARWkp=+3lQ9UV{c^e7_2K(d z?mut2+G|#Si=2lz0saN>C*h){^N5Iuh=_=Yh=_kDtVMZWH5)8wD zD2k-w-;tb05Nkl5=LoAGwrAV6Qt>nCc?8k%#zxWQG WH6i_*(gSV)0000cN^eop0NqqWi7cg^G;fIW z6l~)RU`OZcu;sZw2nyc|5D^g(5fKp)5m6uC_l=a&%$oq*jLzZQT;}}XQlx2ycDBihF-UVBHRaMYhU(NICOHc>_r4+W?EtFCaLb%Iz z1h)8F^St;7ymrroVb~q|$af#W;5;uj0QlVm0MJ_Fr6?SvIUcRGyF5R=7T$OLsGR1x z1I$;z?4G3fXUUU@h=_=Yh=_=Y=s8WbGw@@ie|rb-2mH<0I|IJ&o6iuVjN}J5VCtQL z^E2Z(Mv^2>V+@+{Nh!_gbV3wG-5lP|;_NKm_1sWOX;!NhJkRTfvxmdMS&XZ*!MEnv z8K~0qX#u$uAKq3 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Back/Satchels/satchel_security.rsi/meta.json b/Resources/Textures/Clothing/Back/Satchels/satchel_security.rsi/meta.json index 01776a4c20..e84a910cb3 100644 --- a/Resources/Textures/Clothing/Back/Satchels/satchel_security.rsi/meta.json +++ b/Resources/Textures/Clothing/Back/Satchels/satchel_security.rsi/meta.json @@ -1,17 +1,27 @@ { "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/547852588166c8e091b441e4e67169e156bb09c1", "size": { "x": 32, "y": 32 }, "states": [ { - "name": "satchel-security-equipped-BACKPACK", + "name": "icon", + "directions": 1 + }, + { + "name": "equipped-BACKPACK", "directions": 4 }, { - "name": "satchel-security", - "directions": 1 + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 } ] } diff --git a/Resources/Textures/Clothing/Back/Satchels/satchel_virology.rsi/meta.json b/Resources/Textures/Clothing/Back/Satchels/satchel_virology.rsi/meta.json deleted file mode 100644 index a29abae487..0000000000 --- a/Resources/Textures/Clothing/Back/Satchels/satchel_virology.rsi/meta.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "version": 1, - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "satchel-virology", - "directions": 1 - }, - { - "name": "satchel-virology-equipped-BACKPACK", - "directions": 4 - } - ] -} diff --git a/Resources/Textures/Clothing/Back/Satchels/satchel_virology.rsi/satchel-virology-equipped-BACKPACK.png b/Resources/Textures/Clothing/Back/Satchels/satchel_virology.rsi/satchel-virology-equipped-BACKPACK.png deleted file mode 100644 index 49725f781dfd191b4671b3667dbe7a0b88c0970b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 358 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!Yyx~jT!D0*^lBfYx?1Vg*REYN z5_C#QNdXEnq%klwFfdGJ(9+T}p2=WqYYP;gJ9qB9dGoGby><7E`qHk>4ua{GFkN`d8=fm|v!Idea~7cL!OPALdLyvh%EDL7R~E^7E2j zb69FSogYa(KGLMeU3UJM=*mKlT{<`R)~V^atd=?Ra^r(1kF_l(duu+L@WQxm#gs`u zwe#0@#UGoIb=xTY%BmSlZXIFmjC_Ad`t+xOeT?$T>=hHfUuy*Vj=|H_&t;ucLK6TC CFqE+X diff --git a/Resources/Textures/Clothing/Back/Satchels/satchel_virology.rsi/satchel-virology.png b/Resources/Textures/Clothing/Back/Satchels/satchel_virology.rsi/satchel-virology.png deleted file mode 100644 index 809f1b86e011f4bf06200b2c50a7b03003b0f827..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 359 zcmV-t0hs=YP)S-!^76r*7#F+<^TWy0(4SN zQvfJKCS}3^008GnL_t(2&tqU1Xuxc20B5gSY_-^GRcL4cl+ShUir*98H%pzvp#p2( zKCgRTckh&OX#rH=-u1fYwQo-`!v)TQRNOhmU>*oDqWjG8y5}`#b}TT4m}+&R`-smG zpB+6=0p_SPCt93TJbKP7HU=v&UA218Wz9*pr*}aFn4`|UJAF2D+MPY`-YkF$yxx5; zE$!{@eGmcD(AE3)zI~*3@Am6m5F-NCyxV*4-MhE9- Date: Thu, 3 Sep 2020 21:21:16 -0500 Subject: [PATCH 099/103] fixes blackouts permanently turning off power (#2018) Co-authored-by: ancientpower --- Content.Server/StationEvents/PowerGridCheck.cs | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/Content.Server/StationEvents/PowerGridCheck.cs b/Content.Server/StationEvents/PowerGridCheck.cs index 882fa61f7a..0bd41345a6 100644 --- a/Content.Server/StationEvents/PowerGridCheck.cs +++ b/Content.Server/StationEvents/PowerGridCheck.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using Content.Server.GameObjects.Components.Power; using Content.Server.GameObjects.Components.Power.ApcNetComponents; @@ -32,9 +32,9 @@ namespace Content.Server.StationEvents private float _elapsedTime; private int _failDuration; - private Dictionary _powered = new Dictionary(); + private List _powered = new List(); - private readonly List _toPowerDown = new List(); + public override void Startup() { @@ -45,9 +45,10 @@ namespace Content.Server.StationEvents _failDuration = IoCManager.Resolve().Next(30, 120); var componentManager = IoCManager.Resolve(); - foreach (var component in componentManager.EntityQuery()) + foreach (PowerReceiverComponent component in componentManager.EntityQuery()) { component.PowerDisabled = true; + _powered.Add(component.Owner); } } @@ -56,13 +57,13 @@ namespace Content.Server.StationEvents base.Shutdown(); EntitySystem.Get().PlayGlobal("/Audio/Announcements/power_on.ogg"); - foreach (var (entity, powered) in _powered) + foreach (var entity in _powered) { if (entity.Deleted) continue; if (entity.TryGetComponent(out PowerReceiverComponent powerReceiverComponent)) { - powerReceiverComponent.PowerDisabled = powered; + powerReceiverComponent.PowerDisabled = false; } } @@ -86,4 +87,4 @@ namespace Content.Server.StationEvents Running = false; } } -} \ No newline at end of file +} From 313730e1b8a31293ff95af8f14f9f83b36b3525e Mon Sep 17 00:00:00 2001 From: Exp Date: Fri, 4 Sep 2020 11:29:15 +0200 Subject: [PATCH 100/103] Fixes Pills not transfering any reagents (#2016) --- .../GameObjects/Components/Chemistry/PillComponent.cs | 3 --- 1 file changed, 3 deletions(-) diff --git a/Content.Server/GameObjects/Components/Chemistry/PillComponent.cs b/Content.Server/GameObjects/Components/Chemistry/PillComponent.cs index 170795c469..ce4a461b69 100644 --- a/Content.Server/GameObjects/Components/Chemistry/PillComponent.cs +++ b/Content.Server/GameObjects/Components/Chemistry/PillComponent.cs @@ -1,7 +1,6 @@ using Content.Server.GameObjects.Components.Body.Digestive; using Content.Server.GameObjects.Components.Nutrition; using Content.Server.GameObjects.Components.Utensil; -using Content.Server.Utility; using Content.Shared.Chemistry; using Content.Shared.Interfaces; using Content.Shared.Interfaces.GameObjects.Components; @@ -47,8 +46,6 @@ namespace Content.Server.GameObjects.Components.Chemistry { base.Initialize(); _contents = Owner.GetComponent(); - _transferAmount = _contents.CurrentVolume; - } bool IUse.UseEntity(UseEntityEventArgs eventArgs) From 97a603b0b6a4c75c4a2c3e19eb57522558550b68 Mon Sep 17 00:00:00 2001 From: DrSmugleaf Date: Fri, 4 Sep 2020 12:22:33 +0200 Subject: [PATCH 101/103] Add UnsimulatedGridAtmosphereComponent and a command to add it (#2019) * Add UnsimulatedGridAtmosphereComponent * Override prytile, repopulate, invalidate and revalidate * Attributes --- Content.Server/Atmos/AtmosCommands.cs | 70 +++++++++++- .../Atmos/GridAtmosphereComponent.cs | 79 +++++++------- .../UnsimulatedGridAtmosphereComponent.cs | 103 ++++++++++++++++++ 3 files changed, 206 insertions(+), 46 deletions(-) create mode 100644 Content.Server/GameObjects/Components/Atmos/UnsimulatedGridAtmosphereComponent.cs diff --git a/Content.Server/Atmos/AtmosCommands.cs b/Content.Server/Atmos/AtmosCommands.cs index 1db4ac0dc0..60b8fecd81 100644 --- a/Content.Server/Atmos/AtmosCommands.cs +++ b/Content.Server/Atmos/AtmosCommands.cs @@ -17,11 +17,21 @@ namespace Content.Server.Atmos { public string Command => "addatmos"; public string Description => "Adds atmos support to a grid."; - public string Help => "addatmos "; + public string Help => $"{Command} "; + public void Execute(IConsoleShell shell, IPlayerSession? player, string[] args) { - if (args.Length < 1) return; - if(!int.TryParse(args[0], out var id)) return; + if (args.Length < 1) + { + shell.SendText(player, Help); + return; + } + + if (!int.TryParse(args[0], out var id)) + { + shell.SendText(player, $"{args[0]} is not a valid integer."); + return; + } var gridId = new GridId(id); @@ -29,7 +39,7 @@ namespace Content.Server.Atmos if (!gridId.IsValid() || !mapMan.TryGetGrid(gridId, out var gridComp)) { - shell.SendText(player, "Invalid grid ID."); + shell.SendText(player, $"{gridId} is not a valid grid id."); return; } @@ -41,7 +51,7 @@ namespace Content.Server.Atmos return; } - if (grid.HasComponent()) + if (grid.HasComponent()) { shell.SendText(player, "Grid already has an atmosphere."); return; @@ -53,6 +63,56 @@ namespace Content.Server.Atmos } } + public class AddUnsimulatedAtmos : IClientCommand + { + public string Command => "addunsimulatedatmos"; + public string Description => "Adds unimulated atmos support to a grid."; + public string Help => $"{Command} "; + + public void Execute(IConsoleShell shell, IPlayerSession? player, string[] args) + { + if (args.Length < 1) + { + shell.SendText(player, Help); + return; + } + + if (!int.TryParse(args[0], out var id)) + { + shell.SendText(player, $"{args[0]} is not a valid integer."); + return; + } + + var gridId = new GridId(id); + + var mapMan = IoCManager.Resolve(); + + if (!gridId.IsValid() || !mapMan.TryGetGrid(gridId, out var gridComp)) + { + shell.SendText(player, $"{gridId} is not a valid grid id."); + return; + } + + var entMan = IoCManager.Resolve(); + + if (!entMan.TryGetEntity(gridComp.GridEntityId, out var grid)) + { + shell.SendText(player, "Failed to get grid entity."); + return; + } + + if (grid.HasComponent()) + { + shell.SendText(player, "Grid already has an atmosphere."); + return; + } + + grid.AddComponent(); + + shell.SendText(player, $"Added unsimulated atmosphere to grid {id}."); + } + } + public class ListGases : IClientCommand { public string Command => "listgases"; diff --git a/Content.Server/GameObjects/Components/Atmos/GridAtmosphereComponent.cs b/Content.Server/GameObjects/Components/Atmos/GridAtmosphereComponent.cs index d89fdd973f..907a7b278c 100644 --- a/Content.Server/GameObjects/Components/Atmos/GridAtmosphereComponent.cs +++ b/Content.Server/GameObjects/Components/Atmos/GridAtmosphereComponent.cs @@ -14,10 +14,7 @@ using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Components.Map; using Robust.Shared.GameObjects.Components.Transform; using Robust.Shared.Interfaces.Map; -using Robust.Shared.Interfaces.Timing; -using Robust.Shared.IoC; using Robust.Shared.Map; -using Robust.Shared.Maths; using Robust.Shared.Serialization; using Robust.Shared.Timing; using Robust.Shared.ViewVariables; @@ -72,7 +69,7 @@ namespace Content.Server.GameObjects.Components.Atmos private double _excitedGroupLastProcess; [ViewVariables] - private readonly Dictionary _tiles = new Dictionary(1000); + protected readonly Dictionary Tiles = new Dictionary(1000); [ViewVariables] private readonly HashSet _activeTiles = new HashSet(1000); @@ -156,7 +153,7 @@ namespace Content.Server.GameObjects.Components.Atmos } /// - public void PryTile(MapIndices indices) + public virtual void PryTile(MapIndices indices) { if (!Owner.TryGetComponent(out IMapGridComponent? mapGridComponent)) return; if (IsSpace(indices) || IsAirBlocked(indices)) return; @@ -177,17 +174,17 @@ namespace Content.Server.GameObjects.Components.Atmos RepopulateTiles(); } - public void RepopulateTiles() + public virtual void RepopulateTiles() { if (!Owner.TryGetComponent(out IMapGridComponent? mapGrid)) return; foreach (var tile in mapGrid.Grid.GetAllTiles()) { - if(!_tiles.ContainsKey(tile.GridIndices)) - _tiles.Add(tile.GridIndices, new TileAtmosphere(this, tile.GridIndex, tile.GridIndices, new GasMixture(GetVolumeForCells(1)){Temperature = Atmospherics.T20C})); + if(!Tiles.ContainsKey(tile.GridIndices)) + Tiles.Add(tile.GridIndices, new TileAtmosphere(this, tile.GridIndex, tile.GridIndices, new GasMixture(GetVolumeForCells(1)){Temperature = Atmospherics.T20C})); } - foreach (var (_, tile) in _tiles.ToArray()) + foreach (var (_, tile) in Tiles.ToArray()) { tile.UpdateAdjacent(); tile.UpdateVisuals(); @@ -195,12 +192,12 @@ namespace Content.Server.GameObjects.Components.Atmos } /// - public void Invalidate(MapIndices indices) + public virtual void Invalidate(MapIndices indices) { _invalidatedCoords.Add(indices); } - private void Revalidate() + protected virtual void Revalidate() { if (!Owner.TryGetComponent(out IMapGridComponent? mapGrid)) return; @@ -212,14 +209,14 @@ namespace Content.Server.GameObjects.Components.Atmos if (tile == null) { tile = new TileAtmosphere(this, mapGrid.Grid.Index, indices, new GasMixture(GetVolumeForCells(1)){Temperature = Atmospherics.T20C}); - _tiles[indices] = tile; + Tiles[indices] = tile; } if (IsSpace(indices)) { tile.Air = new GasMixture(GetVolumeForCells(1)); tile.Air.MarkImmutable(); - _tiles[indices] = tile; + Tiles[indices] = tile; } else if (IsAirBlocked(indices)) { @@ -257,18 +254,18 @@ namespace Content.Server.GameObjects.Components.Atmos } /// - public void FixVacuum(MapIndices indices) + public virtual void FixVacuum(MapIndices indices) { if (!Owner.TryGetComponent(out IMapGridComponent? mapGrid)) return; var tile = GetTile(indices); if (tile?.GridIndex != mapGrid.Grid.Index) return; var adjacent = GetAdjacentTiles(indices); tile.Air = new GasMixture(GetVolumeForCells(1)){Temperature = Atmospherics.T20C}; - _tiles[indices] = tile; + Tiles[indices] = tile; var ratio = 1f / adjacent.Count; - foreach (var (direction, adj) in adjacent) + foreach (var (_, adj) in adjacent) { var mix = adj.Air.RemoveRatio(ratio); tile.Air.Merge(mix); @@ -278,7 +275,7 @@ namespace Content.Server.GameObjects.Components.Atmos /// [MethodImpl(MethodImplOptions.AggressiveInlining)] - public void AddActiveTile(TileAtmosphere? tile) + public virtual void AddActiveTile(TileAtmosphere? tile) { if (!Owner.TryGetComponent(out IMapGridComponent? mapGrid)) return; if (tile?.GridIndex != mapGrid.Grid.Index) return; @@ -288,7 +285,7 @@ namespace Content.Server.GameObjects.Components.Atmos /// [MethodImpl(MethodImplOptions.AggressiveInlining)] - public void RemoveActiveTile(TileAtmosphere? tile) + public virtual void RemoveActiveTile(TileAtmosphere? tile) { if (tile == null) return; _activeTiles.Remove(tile); @@ -298,7 +295,7 @@ namespace Content.Server.GameObjects.Components.Atmos /// [MethodImpl(MethodImplOptions.AggressiveInlining)] - public void AddHotspotTile(TileAtmosphere? tile) + public virtual void AddHotspotTile(TileAtmosphere? tile) { if (!Owner.TryGetComponent(out IMapGridComponent? mapGrid)) return; if (tile?.GridIndex != mapGrid.Grid.Index || tile?.Air == null) return; @@ -307,20 +304,20 @@ namespace Content.Server.GameObjects.Components.Atmos /// [MethodImpl(MethodImplOptions.AggressiveInlining)] - public void RemoveHotspotTile(TileAtmosphere? tile) + public virtual void RemoveHotspotTile(TileAtmosphere? tile) { if (tile == null) return; _hotspotTiles.Remove(tile); } - public void AddSuperconductivityTile(TileAtmosphere? tile) + public virtual void AddSuperconductivityTile(TileAtmosphere? tile) { if (!Owner.TryGetComponent(out IMapGridComponent? mapGrid)) return; if (tile?.GridIndex != mapGrid.Grid.Index) return; _superconductivityTiles.Add(tile); } - public void RemoveSuperconductivityTile(TileAtmosphere? tile) + public virtual void RemoveSuperconductivityTile(TileAtmosphere? tile) { if (tile == null) return; _superconductivityTiles.Remove(tile); @@ -328,7 +325,7 @@ namespace Content.Server.GameObjects.Components.Atmos /// [MethodImpl(MethodImplOptions.AggressiveInlining)] - public void AddHighPressureDelta(TileAtmosphere? tile) + public virtual void AddHighPressureDelta(TileAtmosphere? tile) { if (!Owner.TryGetComponent(out IMapGridComponent? mapGrid)) return; if (tile?.GridIndex != mapGrid.Grid.Index) return; @@ -337,21 +334,21 @@ namespace Content.Server.GameObjects.Components.Atmos /// [MethodImpl(MethodImplOptions.AggressiveInlining)] - public bool HasHighPressureDelta(TileAtmosphere tile) + public virtual bool HasHighPressureDelta(TileAtmosphere tile) { return _highPressureDelta.Contains(tile); } /// [MethodImpl(MethodImplOptions.AggressiveInlining)] - public void AddExcitedGroup(ExcitedGroup excitedGroup) + public virtual void AddExcitedGroup(ExcitedGroup excitedGroup) { _excitedGroups.Add(excitedGroup); } /// [MethodImpl(MethodImplOptions.AggressiveInlining)] - public void RemoveExcitedGroup(ExcitedGroup excitedGroup) + public virtual void RemoveExcitedGroup(ExcitedGroup excitedGroup) { _excitedGroups.Remove(excitedGroup); } @@ -387,7 +384,7 @@ namespace Content.Server.GameObjects.Components.Atmos { if (!Owner.TryGetComponent(out IMapGridComponent? mapGrid)) return null; - if (_tiles.TryGetValue(indices, out var tile)) return tile; + if (Tiles.TryGetValue(indices, out var tile)) return tile; // We don't have that tile! if (IsSpace(indices) && createSpace) @@ -440,7 +437,7 @@ namespace Content.Server.GameObjects.Components.Atmos } /// - public void Update(float frameTime) + public virtual void Update(float frameTime) { _timer += frameTime; @@ -540,7 +537,7 @@ namespace Content.Server.GameObjects.Components.Atmos UpdateCounter++; } - public bool ProcessTileEqualize(bool resumed = false) + public virtual bool ProcessTileEqualize(bool resumed = false) { _stopwatch.Restart(); @@ -567,7 +564,7 @@ namespace Content.Server.GameObjects.Components.Atmos return true; } - public bool ProcessActiveTiles(bool resumed = false) + public virtual bool ProcessActiveTiles(bool resumed = false) { _stopwatch.Restart(); @@ -594,7 +591,7 @@ namespace Content.Server.GameObjects.Components.Atmos return true; } - public bool ProcessExcitedGroups(bool resumed = false) + public virtual bool ProcessExcitedGroups(bool resumed = false) { _stopwatch.Restart(); @@ -628,7 +625,7 @@ namespace Content.Server.GameObjects.Components.Atmos return true; } - public bool ProcessHighPressureDelta(bool resumed = false) + public virtual bool ProcessHighPressureDelta(bool resumed = false) { _stopwatch.Restart(); @@ -658,7 +655,7 @@ namespace Content.Server.GameObjects.Components.Atmos return true; } - private bool ProcessHotspots(bool resumed = false) + protected virtual bool ProcessHotspots(bool resumed = false) { _stopwatch.Restart(); @@ -685,7 +682,7 @@ namespace Content.Server.GameObjects.Components.Atmos return true; } - private bool ProcessSuperconductivity(bool resumed = false) + protected virtual bool ProcessSuperconductivity(bool resumed = false) { _stopwatch.Restart(); @@ -712,7 +709,7 @@ namespace Content.Server.GameObjects.Components.Atmos return true; } - private bool ProcessPipeNets(bool resumed = false) + protected virtual bool ProcessPipeNets(bool resumed = false) { _stopwatch.Restart(); @@ -739,7 +736,7 @@ namespace Content.Server.GameObjects.Components.Atmos return true; } - private bool ProcessPipeNetDevices(bool resumed = false) + protected virtual bool ProcessPipeNetDevices(bool resumed = false) { _stopwatch.Restart(); @@ -796,11 +793,11 @@ namespace Content.Server.GameObjects.Components.Atmos !serializer.TryReadDataField("tiles", out Dictionary? tiles)) return; - _tiles.Clear(); + Tiles.Clear(); foreach (var (indices, mix) in tiles!) { - _tiles.Add(indices, new TileAtmosphere(this, gridId, indices, (GasMixture)uniqueMixes![mix].Clone())); + Tiles.Add(indices, new TileAtmosphere(this, gridId, indices, (GasMixture)uniqueMixes![mix].Clone())); Invalidate(indices); } } @@ -809,7 +806,7 @@ namespace Content.Server.GameObjects.Components.Atmos var uniqueMixes = new List(); var uniqueMixHash = new Dictionary(); var tiles = new Dictionary(); - foreach (var (indices, tile) in _tiles) + foreach (var (indices, tile) in Tiles) { if (tile.Air == null) continue; @@ -832,7 +829,7 @@ namespace Content.Server.GameObjects.Components.Atmos public IEnumerator GetEnumerator() { - return _tiles.Values.GetEnumerator(); + return Tiles.Values.GetEnumerator(); } IEnumerator IEnumerable.GetEnumerator() @@ -841,7 +838,7 @@ namespace Content.Server.GameObjects.Components.Atmos } /// - public void BurnTile(MapIndices gridIndices) + public virtual void BurnTile(MapIndices gridIndices) { // TODO ATMOS } diff --git a/Content.Server/GameObjects/Components/Atmos/UnsimulatedGridAtmosphereComponent.cs b/Content.Server/GameObjects/Components/Atmos/UnsimulatedGridAtmosphereComponent.cs new file mode 100644 index 0000000000..b421ff9800 --- /dev/null +++ b/Content.Server/GameObjects/Components/Atmos/UnsimulatedGridAtmosphereComponent.cs @@ -0,0 +1,103 @@ +#nullable enable +using System; +using Content.Server.Atmos; +using Content.Shared.Atmos; +using Robust.Shared.GameObjects; +using Robust.Shared.GameObjects.Components.Map; +using Robust.Shared.Map; + +namespace Content.Server.GameObjects.Components.Atmos +{ + [RegisterComponent] + [ComponentReference(typeof(IGridAtmosphereComponent))] + [ComponentReference(typeof(GridAtmosphereComponent))] + [Serializable] + public class UnsimulatedGridAtmosphereComponent : GridAtmosphereComponent, IGridAtmosphereComponent + { + public override string Name => "UnsimulatedGridAtmosphere"; + + public override void PryTile(MapIndices indices) { } + + public override void RepopulateTiles() + { + if (!Owner.TryGetComponent(out IMapGridComponent? mapGrid)) return; + + foreach (var tile in mapGrid.Grid.GetAllTiles()) + { + if(!Tiles.ContainsKey(tile.GridIndices)) + Tiles.Add(tile.GridIndices, new TileAtmosphere(this, tile.GridIndex, tile.GridIndices, new GasMixture(GetVolumeForCells(1)){Temperature = Atmospherics.T20C})); + } + } + + public override void Invalidate(MapIndices indices) { } + + protected override void Revalidate() { } + + public override void FixVacuum(MapIndices indices) { } + + public override void AddActiveTile(TileAtmosphere? tile) { } + + public override void RemoveActiveTile(TileAtmosphere? tile) { } + + public override void AddHotspotTile(TileAtmosphere? tile) { } + + public override void RemoveHotspotTile(TileAtmosphere? tile) { } + + public override void AddSuperconductivityTile(TileAtmosphere? tile) { } + + public override void RemoveSuperconductivityTile(TileAtmosphere? tile) { } + + public override void AddHighPressureDelta(TileAtmosphere? tile) { } + + public override bool HasHighPressureDelta(TileAtmosphere tile) + { + return false; + } + + public override void AddExcitedGroup(ExcitedGroup excitedGroup) { } + + public override void RemoveExcitedGroup(ExcitedGroup excitedGroup) { } + + public override void Update(float frameTime) { } + + public override bool ProcessTileEqualize(bool resumed = false) + { + return false; + } + + public override bool ProcessActiveTiles(bool resumed = false) + { + return false; + } + + public override bool ProcessExcitedGroups(bool resumed = false) + { + return false; + } + + public override bool ProcessHighPressureDelta(bool resumed = false) + { + return false; + } + + protected override bool ProcessHotspots(bool resumed = false) + { + return false; + } + + protected override bool ProcessSuperconductivity(bool resumed = false) + { + return false; + } + + protected override bool ProcessPipeNets(bool resumed = false) + { + return false; + } + + protected override bool ProcessPipeNetDevices(bool resumed = false) + { + return false; + } + } +} From f42ecf73b59d0336a387974592b03fe7e1fa30cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Aguilera=20Puerto?= Date: Fri, 4 Sep 2020 13:48:46 +0200 Subject: [PATCH 102/103] Reparenting is a word --- SpaceStation14.sln.DotSettings | 1 + 1 file changed, 1 insertion(+) diff --git a/SpaceStation14.sln.DotSettings b/SpaceStation14.sln.DotSettings index 3a7c65e9f5..6e40eed366 100644 --- a/SpaceStation14.sln.DotSettings +++ b/SpaceStation14.sln.DotSettings @@ -92,6 +92,7 @@ True True True + True True True True From 6969b79c1c4b968f3910e7b15c0f64c3e56300d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Aguilera=20Puerto?= Date: Fri, 4 Sep 2020 17:40:44 +0200 Subject: [PATCH 103/103] Improves atmos even more. * Adds AtmosCooldown to tiles, so they stop being active after a certain number of cycles without a cooldown reset. * Fixes adjacentTileLength in ProcessCell. It wasn't being set beforehand, (probably) causing some incorrect air shares. * Removing a tile from active tiles no longer unexcites every other tile in their excited group. (Basically, Dismantle in ExcitedGroup's Dispose() method no longer unexcites tiles) --- Content.Server/Atmos/ExcitedGroup.cs | 3 ++- Content.Server/Atmos/TileAtmosphere.cs | 31 +++++++++++++++++++++++--- 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/Content.Server/Atmos/ExcitedGroup.cs b/Content.Server/Atmos/ExcitedGroup.cs index 7935be28b5..6a32a422eb 100644 --- a/Content.Server/Atmos/ExcitedGroup.cs +++ b/Content.Server/Atmos/ExcitedGroup.cs @@ -105,6 +105,7 @@ namespace Content.Server.Atmos { if (tile?.Air == null) continue; tile.Air.CopyFromMutable(combined); + tile.AtmosCooldown = 0; tile.UpdateVisuals(); } @@ -131,7 +132,7 @@ namespace Content.Server.Atmos _disposed = true; _gridAtmosphereComponent.RemoveExcitedGroup(this); - Dismantle(); + Dismantle(false); _gridAtmosphereComponent = null; } diff --git a/Content.Server/Atmos/TileAtmosphere.cs b/Content.Server/Atmos/TileAtmosphere.cs index a8afc84cb5..5718263124 100644 --- a/Content.Server/Atmos/TileAtmosphere.cs +++ b/Content.Server/Atmos/TileAtmosphere.cs @@ -9,6 +9,7 @@ using Content.Server.Interfaces; using Content.Shared.Atmos; using Content.Shared.Audio; using Content.Shared.Maps; +using JetBrains.Annotations; using Robust.Server.GameObjects.EntitySystems; using Robust.Shared.Containers; using Robust.Shared.GameObjects; @@ -40,6 +41,9 @@ namespace Content.Server.Atmos [ViewVariables] private static GasTileOverlaySystem _gasTileOverlaySystem; + [ViewVariables] + public int AtmosCooldown { get; set; } = 0; + [ViewVariables] private float _temperature = Atmospherics.T20C; @@ -73,9 +77,11 @@ namespace Content.Server.Atmos [ViewVariables] private readonly TileAtmosphere[] _adjacentTiles = new TileAtmosphere[Atmospherics.Directions]; - [ViewVariables] private AtmosDirection _adjacentBits = AtmosDirection.Invalid; + [ViewVariables, UsedImplicitly] + private int AdjacentBitsInt => (int)_adjacentBits; + [ViewVariables] private TileAtmosInfo _tileAtmosInfo; @@ -84,6 +90,9 @@ namespace Content.Server.Atmos private AtmosDirection _pressureDirection; + [ViewVariables, UsedImplicitly] + private int PressureDirectionInt => (int)_pressureDirection; + [ViewVariables] public GridId GridIndex { get; } @@ -635,6 +644,15 @@ namespace Content.Server.Atmos _currentCycle = fireCount; var adjacentTileLength = 0; + + AtmosCooldown++; + for (var i = 0; i < Atmospherics.Directions; i++) + { + var direction = (AtmosDirection) (1 << i); + if(_adjacentBits.HasFlag(direction)) + adjacentTileLength++; + } + for(var i = 0; i < Atmospherics.Directions; i++) { var direction = (AtmosDirection) (1 << i); @@ -643,7 +661,6 @@ namespace Content.Server.Atmos // If the tile is null or has no air, we don't do anything for it. if(enemyTile?.Air == null) continue; - adjacentTileLength++; if (fireCount <= enemyTile._currentCycle) continue; enemyTile.Archive(fireCount); @@ -703,7 +720,13 @@ namespace Content.Server.Atmos React(); UpdateVisuals(); - if((!(Air.Temperature > Atmospherics.MinimumTemperatureStartSuperConduction && ConsiderSuperconductivity(true))) && ExcitedGroup == null) + var remove = true; + + if(Air.Temperature > Atmospherics.MinimumTemperatureStartSuperConduction) + if (ConsiderSuperconductivity(true)) + remove = false; + + if((ExcitedGroup == null && remove) || (AtmosCooldown > (Atmospherics.ExcitedGroupsDismantleCycles * 2))) _gridAtmosphereComponent.RemoveActiveTile(this); } @@ -1124,9 +1147,11 @@ namespace Content.Server.Atmos if (lastShare > Atmospherics.MinimumAirToSuspend) { ExcitedGroup.ResetCooldowns(); + AtmosCooldown = 0; } else if (lastShare > Atmospherics.MinimumMolesDeltaToMove) { ExcitedGroup.DismantleCooldown = 0; + AtmosCooldown = 0; } }