From 2a7dffcea44ba6e1da1fd7f9693a878af9b0ff7a Mon Sep 17 00:00:00 2001 From: Radezolid Date: Mon, 4 Nov 2024 04:39:15 -0300 Subject: [PATCH 01/80] Add prescription security/corpsman glasses (#2083) * Added prescription glasses * Forgor to assign the tags. * Forgor to remove the copy paste description. * Modified to use an abstract parent. * Grammar --- .../DeltaV/Entities/Clothing/Eyes/glasses.yml | 41 ++++++++++++ .../prescription_departamental_glasses.yml | 63 ++++++++++++++++++ .../DeltaV/Recipes/Construction/clothing.yml | 22 ++++++ Resources/Prototypes/DeltaV/tags.yml | 6 ++ .../Entities/Clothing/Eyes/glasses.yml | 1 + .../equipped-EYES-hamster.png | Bin 0 -> 241 bytes .../equipped-EYES-secdog.png | Bin 0 -> 189 bytes .../presccorpsglasses.rsi/equipped-EYES.png | Bin 0 -> 201 bytes .../Glasses/presccorpsglasses.rsi/icon.png | Bin 0 -> 290 bytes .../presccorpsglasses.rsi/inhand-left.png | Bin 0 -> 232 bytes .../presccorpsglasses.rsi/inhand-right.png | Bin 0 -> 230 bytes .../Glasses/presccorpsglasses.rsi/meta.json | 34 ++++++++++ .../equipped-EYES-hamster.png | Bin 0 -> 257 bytes .../equipped-EYES-secdog.png | Bin 0 -> 218 bytes .../prescsecglasses.rsi/equipped-EYES.png | Bin 0 -> 216 bytes .../Eyes/Glasses/prescsecglasses.rsi/icon.png | Bin 0 -> 280 bytes .../prescsecglasses.rsi/inhand-left.png | Bin 0 -> 244 bytes .../prescsecglasses.rsi/inhand-right.png | Bin 0 -> 240 bytes .../Glasses/prescsecglasses.rsi/meta.json | 34 ++++++++++ 19 files changed, 201 insertions(+) create mode 100644 Resources/Prototypes/DeltaV/Recipes/Construction/Graphs/clothing/prescription_departamental_glasses.yml create mode 100644 Resources/Textures/DeltaV/Clothing/Eyes/Glasses/presccorpsglasses.rsi/equipped-EYES-hamster.png create mode 100644 Resources/Textures/DeltaV/Clothing/Eyes/Glasses/presccorpsglasses.rsi/equipped-EYES-secdog.png create mode 100644 Resources/Textures/DeltaV/Clothing/Eyes/Glasses/presccorpsglasses.rsi/equipped-EYES.png create mode 100644 Resources/Textures/DeltaV/Clothing/Eyes/Glasses/presccorpsglasses.rsi/icon.png create mode 100644 Resources/Textures/DeltaV/Clothing/Eyes/Glasses/presccorpsglasses.rsi/inhand-left.png create mode 100644 Resources/Textures/DeltaV/Clothing/Eyes/Glasses/presccorpsglasses.rsi/inhand-right.png create mode 100644 Resources/Textures/DeltaV/Clothing/Eyes/Glasses/presccorpsglasses.rsi/meta.json create mode 100644 Resources/Textures/DeltaV/Clothing/Eyes/Glasses/prescsecglasses.rsi/equipped-EYES-hamster.png create mode 100644 Resources/Textures/DeltaV/Clothing/Eyes/Glasses/prescsecglasses.rsi/equipped-EYES-secdog.png create mode 100644 Resources/Textures/DeltaV/Clothing/Eyes/Glasses/prescsecglasses.rsi/equipped-EYES.png create mode 100644 Resources/Textures/DeltaV/Clothing/Eyes/Glasses/prescsecglasses.rsi/icon.png create mode 100644 Resources/Textures/DeltaV/Clothing/Eyes/Glasses/prescsecglasses.rsi/inhand-left.png create mode 100644 Resources/Textures/DeltaV/Clothing/Eyes/Glasses/prescsecglasses.rsi/inhand-right.png create mode 100644 Resources/Textures/DeltaV/Clothing/Eyes/Glasses/prescsecglasses.rsi/meta.json diff --git a/Resources/Prototypes/DeltaV/Entities/Clothing/Eyes/glasses.yml b/Resources/Prototypes/DeltaV/Entities/Clothing/Eyes/glasses.yml index 287ccc3ba99..52c7a6f3821 100644 --- a/Resources/Prototypes/DeltaV/Entities/Clothing/Eyes/glasses.yml +++ b/Resources/Prototypes/DeltaV/Entities/Clothing/Eyes/glasses.yml @@ -31,6 +31,7 @@ node: glassesCorps - type: Tag tags: + - GlassesCorpsman # Added for prescription glasses. - HamsterWearable - WhitelistChameleon - SecDogWearable @@ -42,3 +43,43 @@ - type: IdentityBlocker coverage: EYES +- type: entity + parent: ClothingEyesBase + id: ClothingEyesPrescriptionBaseSecGlasses + abstract: true + components: + - type: FlashImmunity + - type: EyeProtection + protectionTime: 5 + - type: VisionCorrection + correctionPower: 1.50 # Being flash proof comes at the cost of less range of vision + - type: IdentityBlocker + coverage: EYES + +- type: entity + parent: [ClothingEyesPrescriptionBaseSecGlasses, ShowSecurityIcons, BaseRestrictedContraband] + id: ClothingEyesPrescriptionSecurityGlasses + name: prescription security glasses + description: A pair of security glasses with what appears to be a... prescription lens glued on top? + components: + - type: Construction + graph: PrescriptionSecGlasses + node: prescsecglasses + - type: Sprite + sprite: DeltaV/Clothing/Eyes/Glasses/prescsecglasses.rsi + - type: Clothing + sprite: DeltaV/Clothing/Eyes/Glasses/prescsecglasses.rsi + +- type: entity + parent: [ClothingEyesPrescriptionBaseSecGlasses, ShowMedicalIcons, BaseRestrictedContraband] + id: ClothingEyesPrescriptionCorpsmanGlasses + name: prescription corpsman glasses + description: A pair of corpsman glasses with what appears to be a... prescription lens glued on top? + components: + - type: Construction + graph: PrescriptionCorpsmanGlasses + node: presccorpsglasses + - type: Sprite + sprite: DeltaV/Clothing/Eyes/Glasses/presccorpsglasses.rsi + - type: Clothing + sprite: DeltaV/Clothing/Eyes/Glasses/presccorpsglasses.rsi diff --git a/Resources/Prototypes/DeltaV/Recipes/Construction/Graphs/clothing/prescription_departamental_glasses.yml b/Resources/Prototypes/DeltaV/Recipes/Construction/Graphs/clothing/prescription_departamental_glasses.yml new file mode 100644 index 00000000000..bc581f430c5 --- /dev/null +++ b/Resources/Prototypes/DeltaV/Recipes/Construction/Graphs/clothing/prescription_departamental_glasses.yml @@ -0,0 +1,63 @@ +- type: constructionGraph + id: PrescriptionSecGlasses + start: start + graph: + - node: start + edges: + - to: prescsecglasses + steps: + - tag: GlassesSecurity + name: security glasses + icon: + sprite: Clothing/Eyes/Glasses/secglasses.rsi + state: icon + doAfter: 5 + - component: VisionCorrection + name: glasses + icon: + sprite: Clothing/Eyes/Glasses/glasses.rsi + state: icon + doAfter: 5 + - material: Cable + amount: 5 + doAfter: 5 + - tag: DrinkSpaceGlue + name: space glue + icon: + sprite: Objects/Consumable/Drinks/glue-tube.rsi + state: icon + doAfter: 5 + - node: prescsecglasses + entity: ClothingEyesPrescriptionSecurityGlasses + +- type: constructionGraph + id: PrescriptionCorpsmanGlasses + start: start + graph: + - node: start + edges: + - to: presccorpsglasses + steps: + - tag: GlassesCorpsman + name: corpsman glasses + icon: + sprite: DeltaV/Clothing/Eyes/Glasses/corpsglasses.rsi + state: icon + doAfter: 5 + - component: VisionCorrection + name: glasses + icon: + sprite: Clothing/Eyes/Glasses/glasses.rsi + state: icon + doAfter: 5 + - material: Cable + amount: 5 + doAfter: 5 + - tag: DrinkSpaceGlue + name: space glue + icon: + sprite: Objects/Consumable/Drinks/glue-tube.rsi + state: icon + doAfter: 5 + - node: presccorpsglasses + entity: ClothingEyesPrescriptionCorpsmanGlasses diff --git a/Resources/Prototypes/DeltaV/Recipes/Construction/clothing.yml b/Resources/Prototypes/DeltaV/Recipes/Construction/clothing.yml index 5eee1b7c6e2..281067b4114 100644 --- a/Resources/Prototypes/DeltaV/Recipes/Construction/clothing.yml +++ b/Resources/Prototypes/DeltaV/Recipes/Construction/clothing.yml @@ -30,3 +30,25 @@ description: A pair of sunglasses, modified to have a built-in security and medical HUD. icon: { sprite: DeltaV/Clothing/Eyes/Glasses/corpsglasses.rsi, state: icon } objectType: Item + +- type: construction + name: prescription security glasses + id: ClothingEyesPrescriptionSecurityGlasses + graph: PrescriptionSecGlasses + startNode: start + targetNode: prescsecglasses + category: construction-category-clothing + description: A pair of security glasses with a prescription glass glued on top. + icon: { sprite: DeltaV/Clothing/Eyes/Glasses/prescsecglasses.rsi, state: icon } + objectType: Item + +- type: construction + name: prescription corpsman glasses + id: ClothingEyesPrescriptionCorpsmanGlasses + graph: PrescriptionCorpsmanGlasses + startNode: start + targetNode: presccorpsglasses + category: construction-category-clothing + description: A pair of corpsman glasses with a prescription glass glued on top. + icon: { sprite: DeltaV/Clothing/Eyes/Glasses/presccorpsglasses.rsi, state: icon } + objectType: Item diff --git a/Resources/Prototypes/DeltaV/tags.yml b/Resources/Prototypes/DeltaV/tags.yml index 212ce68c672..43ce7308bae 100644 --- a/Resources/Prototypes/DeltaV/tags.yml +++ b/Resources/Prototypes/DeltaV/tags.yml @@ -95,3 +95,9 @@ - type: Tag id: Wakizashi + +- type: Tag + id: GlassesSecurity # Prescription sec glasses. + +- type: Tag + id: GlassesCorpsman # Prescription corpsman glasses. diff --git a/Resources/Prototypes/Entities/Clothing/Eyes/glasses.yml b/Resources/Prototypes/Entities/Clothing/Eyes/glasses.yml index c900464076b..22bf43ba21b 100644 --- a/Resources/Prototypes/Entities/Clothing/Eyes/glasses.yml +++ b/Resources/Prototypes/Entities/Clothing/Eyes/glasses.yml @@ -179,6 +179,7 @@ node: glassesSec - type: Tag tags: + - GlassesSecurity # DeltaV - Added for prescription glasses. - HamsterWearable - WhitelistChameleon - SecDogWearable # DeltaV - let Laika wear secglasses diff --git a/Resources/Textures/DeltaV/Clothing/Eyes/Glasses/presccorpsglasses.rsi/equipped-EYES-hamster.png b/Resources/Textures/DeltaV/Clothing/Eyes/Glasses/presccorpsglasses.rsi/equipped-EYES-hamster.png new file mode 100644 index 0000000000000000000000000000000000000000..78d6ddca86eb6f0631d5e5a668977746ea66e745 GIT binary patch literal 241 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=J3L(+Ln`LHy|t0^P=LU(kL3^e z9?_V%@33C?&k1M< zLqn_fr!!}D{H~tS5vzQ5a(Y1M`d#<#-aWe}FjW8bwXtOmp4%du>x}%edy1Gff4r`} c1JxLB!}#;Aaj&w9-%gMzp00i_>zopr0HoMoo&W#< literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Clothing/Eyes/Glasses/presccorpsglasses.rsi/equipped-EYES-secdog.png b/Resources/Textures/DeltaV/Clothing/Eyes/Glasses/presccorpsglasses.rsi/equipped-EYES-secdog.png new file mode 100644 index 0000000000000000000000000000000000000000..7cf03bf0a5617004249b0a376461dc6dd4982f85 GIT binary patch literal 189 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=EuJopAr*7p-rC4{h(Ulg;QEf) zhh$?9pA!wb?ftEQed7-^PL_iTN`g;pcRcER&6?y_w)1hlJBKE?Wby8 gOPMu&J4n@oV*VHV&BEjwuj+ufp00i_>zopr01T)~iU0rr literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Clothing/Eyes/Glasses/presccorpsglasses.rsi/equipped-EYES.png b/Resources/Textures/DeltaV/Clothing/Eyes/Glasses/presccorpsglasses.rsi/equipped-EYES.png new file mode 100644 index 0000000000000000000000000000000000000000..a3348c1a3c52501488933f37c96e80e561e39a8c GIT binary patch literal 201 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=6FglULn`LHy|t0^P=Em2gEfWh z-^9dj8fGs!&9(BaYV{6hk3uspEu|jRmeBSE$({}ZX3V!{{3^X1D-h`+1^b;@5JjI6N<)LDLrAIIZ~?bzeE?b-s$9S~Kxv~KAZJLKG7V)qBl!fDD-RZtC?H`| zVOfh2MwHBxrda*iKVP#8hG7_naqk3|8bri3&#D@n(|rBr03zbbvIJo9wFBUFIzm+g z5pj=ipA5qT-(=NF2iAWhS&LiD>dy?_4#uzA?l!GM$D&EUSrxlp}J!{;A+il0M0 zylFO`3|KwQ$g+&8s>t)a)}tswRfA)-h3bTexMaC@$#U&{6A^J?7}n+MaU7rY`~IEY o>UgnjjZM>QKcHb4hG78w1GMC7g>FB#bpQYW07*qoM6N<$f{$~4x&QzG literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Clothing/Eyes/Glasses/presccorpsglasses.rsi/inhand-left.png b/Resources/Textures/DeltaV/Clothing/Eyes/Glasses/presccorpsglasses.rsi/inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..9654e9aac85e0eca6e1d08454d03013a4f84a48d GIT binary patch literal 232 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=>pfi@Ln`LHy|t0I#ek>v;ft^n z4D%F(CK>C6_%tW*vn^oxsNr`#=BO*<%M1Un_C1Zzi{}7p0|773AnSFz7L{ACn-sG5 z`|7mKdAAPjd84>{^-K1pQ>NVQZaeqR$k_Dnf;a0bZ#tXjnjYU9=H+SV*81V!8U1|w zuZC_jZ>oxy?%wRJu~!0OB8aS55*699>Su#>ZMxu@H5T0;zJo~*9YzL*2QAD3=X}0= SHjo4PfWgz%&t;ucLK6Uf8d@g+ literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Clothing/Eyes/Glasses/presccorpsglasses.rsi/inhand-right.png b/Resources/Textures/DeltaV/Clothing/Eyes/Glasses/presccorpsglasses.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..0d56eda11b72749cb33ddc29eceab184e342402f GIT binary patch literal 230 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=Ydu{YLn`LHy>*(m*+8HrQCoKh zLwEvbW~|N_3A_oMIJP~;+wAf*u+yC;dI%li;<(>nzfq+fW_suFVuUl^O2)cWI zw^3XX`$-=~meAbgDa#6@VvTjyFaNV3E#i*FTD_Sov#gIwOg-~W|83dH>h%JL;`43Q zk7>N$J7@R#&r_WB!x}c9V}%$BBp-Ntz2MC``Hi{A>kaRovyxTJ?H~8^F)$Pug~x35 U`66_tt_Gym)78&qol`;+0QgH*T>t<8 literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Clothing/Eyes/Glasses/presccorpsglasses.rsi/meta.json b/Resources/Textures/DeltaV/Clothing/Eyes/Glasses/presccorpsglasses.rsi/meta.json new file mode 100644 index 00000000000..e0110675313 --- /dev/null +++ b/Resources/Textures/DeltaV/Clothing/Eyes/Glasses/presccorpsglasses.rsi/meta.json @@ -0,0 +1,34 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Remodeled design of the Security Glasses done by Unkn0wn_Gh0st on github, modified for prescription corpsman glasses by Radezolid", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-EYES", + "directions": 4 + }, + { + "name": "equipped-EYES-hamster", + "directions": 4 + }, + { + "name": "equipped-EYES-secdog", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/DeltaV/Clothing/Eyes/Glasses/prescsecglasses.rsi/equipped-EYES-hamster.png b/Resources/Textures/DeltaV/Clothing/Eyes/Glasses/prescsecglasses.rsi/equipped-EYES-hamster.png new file mode 100644 index 0000000000000000000000000000000000000000..8e95ab776a31e09df5e0dee931adfff8c7f56987 GIT binary patch literal 257 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=Cp=voLn`LHy>*b2$xxv6q05`Z znU-%(@@?UMd&qAK?`(lcKV_)#=@ z(}dm2_t}>FPu>*pP34TwY-eT9qVK29EHRk6JN#yIJ+m?Q>%X3}oiB$)r%l`cY37lI z>}TFst$+P%?a7)$87~^+D@;HJfkDH6;~(WaUT@P+*lK%j`sTt8!+kaR@~tcH1a%m` vyR~)7B_;PY%S(2fTGcXJzA$?C462L$T>m!*uJkb^+m!`Ka- zKW|;o+rn*q(d<&ogqU1~(2ARD9gBYKap73x*fQhv?*lSv33XgErT{fF)F><6`O=&l z9V9JSb}K4q_qW{o;(hn-erY~_MeyNGkTo!{VcDK1A6{NQ^0Mf*eEDn@&8t!O-}Q1# zU$sO-^Z6ay*Gs1yo>Z>q6g2ahzQ1U(&9UQ=5RC`k%e_%B*tCF;Rf+fxqPA zWo)Szu5NpS?XSi2 z&!7e>9=^@bxRwKS>^qVL}|Mz;>#Z6~Ycq(K6nu6{1- HoD!M1p=5JjIt$N{EH8Ib#cKxfba(zx{JsB82_DMtU*Lv|E#LPJ|~swx0BUuOV5KVDJQKtx=n zZx8_yERPGyvLws0Ss|XMG;Q|{0LPb87YrB-?+5oi?uB|98@}3ID1Uyt;a6r6yni?3 zc}`u|6h+bLaU7$nL0h*%O+rN6Iz6~`dT_pph`2BeyYlrUNe2DC|D?BSFWy>X-*oN= eGz`Nq41hlfE@)Wz8lvg|0000J!NGvBgA+h`D2ph7q(+AzZngS-|+4^D^$ho fpS+)sfnkF|c Date: Mon, 4 Nov 2024 08:39:34 +0100 Subject: [PATCH 02/80] Automatic changelog update --- Resources/Changelog/DeltaVChangelog.yml | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/Resources/Changelog/DeltaVChangelog.yml b/Resources/Changelog/DeltaVChangelog.yml index d479d46e059..05ecd6d330d 100644 --- a/Resources/Changelog/DeltaVChangelog.yml +++ b/Resources/Changelog/DeltaVChangelog.yml @@ -1,10 +1,4 @@ Entries: -- author: Colin-Tel - changes: - - message: Adjusted Asterisk and Shoukou's min/max population to 0/60. - type: Tweak - id: 145 - time: '2023-11-19T06:10:32.0000000+00:00' - author: IamVelcroboy changes: - message: Salvage has been rebased. New but strangely familiar space debris will @@ -3702,3 +3696,10 @@ id: 644 time: '2024-11-04T02:03:38.0000000+00:00' url: https://github.com/DeltaV-Station/Delta-v/pull/2108 +- author: Radezolid + changes: + - message: Added prescription security glasses and prescription corpsman glasses! + type: Add + id: 645 + time: '2024-11-04T07:39:15.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/2083 From 7f53bd379244522b4b0ebb39af066076133fb58c Mon Sep 17 00:00:00 2001 From: Milon Date: Mon, 4 Nov 2024 15:55:13 +0100 Subject: [PATCH 03/80] Addictions 2 electric boogaloo (#1897) * OMG FINALLY FIXED THIS JANKY SHIT * oh * no structure, zero fucks given * this also * trolled * shitcode v2 * FUCK * what was i even fucking thinking??? * remove unused codeanalysis import Signed-off-by: deltanedas <39013340+deltanedas@users.noreply.github.com> --------- Signed-off-by: deltanedas <39013340+deltanedas@users.noreply.github.com> Co-authored-by: deltanedas <39013340+deltanedas@users.noreply.github.com> --- .../DeltaV/Addictions/AddictionSystem.cs | 8 ++ .../DeltaV/Addictions/AddictionSystem.cs | 89 +++++++++++++++++++ .../DeltaV/EntityEffects/Effects/Addicted.cs | 29 ++++++ .../DeltaV/Addictions/AddictedComponent.cs | 37 ++++++++ .../Addictions/SharedAddictionSystem.cs | 30 +++++++ .../deltav/guidebook/chemistry/effects.ftl | 5 ++ .../Prototypes/DeltaV/Datasets/addictions.yml | 5 ++ .../Prototypes/DeltaV/status_effects.yml | 2 + .../Prototypes/Entities/Mobs/Species/base.yml | 1 + 9 files changed, 206 insertions(+) create mode 100644 Content.Client/DeltaV/Addictions/AddictionSystem.cs create mode 100644 Content.Server/DeltaV/Addictions/AddictionSystem.cs create mode 100644 Content.Server/DeltaV/EntityEffects/Effects/Addicted.cs create mode 100644 Content.Shared/DeltaV/Addictions/AddictedComponent.cs create mode 100644 Content.Shared/DeltaV/Addictions/SharedAddictionSystem.cs create mode 100644 Resources/Locale/en-US/deltav/guidebook/chemistry/effects.ftl create mode 100644 Resources/Prototypes/DeltaV/Datasets/addictions.yml diff --git a/Content.Client/DeltaV/Addictions/AddictionSystem.cs b/Content.Client/DeltaV/Addictions/AddictionSystem.cs new file mode 100644 index 00000000000..75ac6969a48 --- /dev/null +++ b/Content.Client/DeltaV/Addictions/AddictionSystem.cs @@ -0,0 +1,8 @@ +using Content.Shared.DeltaV.Addictions; + +namespace Content.Client.DeltaV.Addictions; + +public sealed class AddictionSystem : SharedAddictionSystem +{ + protected override void UpdateTime(EntityUid uid) {} +} diff --git a/Content.Server/DeltaV/Addictions/AddictionSystem.cs b/Content.Server/DeltaV/Addictions/AddictionSystem.cs new file mode 100644 index 00000000000..1df7eeecbee --- /dev/null +++ b/Content.Server/DeltaV/Addictions/AddictionSystem.cs @@ -0,0 +1,89 @@ +using Content.Shared.Dataset; +using Content.Shared.DeltaV.Addictions; +using Content.Shared.Popups; +using Robust.Shared.Prototypes; +using Robust.Shared.Random; +using Robust.Shared.Timing; + +namespace Content.Server.DeltaV.Addictions; + +public sealed class AddictionSystem : SharedAddictionSystem +{ + [Dependency] private readonly SharedPopupSystem _popup = default!; + [Dependency] private readonly IPrototypeManager _prototypeManager = default!; + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly IGameTiming _timing = default!; + + // Define the numbers, we're not making another DeepFryerSystem.cs + // Minimum time between popups + private const int MinEffectInterval = 10; + + // Maximum time between popups + private const int MaxEffectInterval = 41; + + // The time to add after the last metabolism cycle + private const int SuppressionDuration = 10; + + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnInit); + } + + public override void Update(float frameTime) + { + base.Update(frameTime); + + var curTime = _timing.CurTime; + var query = EntityQueryEnumerator(); + + while (query.MoveNext(out var uid, out var component)) + { + // If it's suppressed, check if it's still supposed to be + if (component.Suppressed) + { + UpdateSuppressed(component); + continue; + } + + if (curTime < component.NextEffectTime) + continue; + + DoAddictionEffect(uid); + component.NextEffectTime = curTime + TimeSpan.FromSeconds(_random.Next(MinEffectInterval, MaxEffectInterval)); + } + } + + // Make sure we don't get a popup on the first update + private void OnInit(Entity ent, ref ComponentStartup args) + { + var curTime = _timing.CurTime; + ent.Comp.NextEffectTime = curTime + TimeSpan.FromSeconds(_random.Next(MinEffectInterval, MaxEffectInterval)); + } + + private void UpdateSuppressed(AddictedComponent component) + { + component.Suppressed = (_timing.CurTime < component.SuppressionEndTime); + } + + private string GetRandomPopup() + { + return Loc.GetString(_random.Pick(_prototypeManager.Index("AddictionEffects").Values)); + } + + private void DoAddictionEffect(EntityUid uid) + { + _popup.PopupEntity(GetRandomPopup(), uid, uid); + } + + // Called each time a reagent with the Addicted effect gets metabolized + protected override void UpdateTime(EntityUid uid) + { + if (!TryComp(uid, out var component)) + return; + + component.LastMetabolismTime = _timing.CurTime; + component.SuppressionEndTime = _timing.CurTime + TimeSpan.FromSeconds(SuppressionDuration); + UpdateSuppressed(component); + } +} diff --git a/Content.Server/DeltaV/EntityEffects/Effects/Addicted.cs b/Content.Server/DeltaV/EntityEffects/Effects/Addicted.cs new file mode 100644 index 00000000000..591e51a3d62 --- /dev/null +++ b/Content.Server/DeltaV/EntityEffects/Effects/Addicted.cs @@ -0,0 +1,29 @@ +using Content.Shared.DeltaV.Addictions; +using Content.Shared.EntityEffects; +using Robust.Shared.Prototypes; + +namespace Content.Server.EntityEffects.Effects; + +public sealed partial class Addicted : EntityEffect +{ + /// + /// How long should each metabolism cycle make the effect last for. + /// + [DataField] + public float AddictionTime = 3f; + + protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) + => Loc.GetString("reagent-effect-guidebook-addicted", ("chance", Probability)); + + public override void Effect(EntityEffectBaseArgs args) + { + var addictionTime = AddictionTime; + + if (args is EntityEffectReagentArgs reagentArgs) { + addictionTime *= reagentArgs.Scale.Float(); + } + + var addictionSystem = args.EntityManager.System(); + addictionSystem.TryApplyAddiction(args.TargetEntity, addictionTime); + } +} diff --git a/Content.Shared/DeltaV/Addictions/AddictedComponent.cs b/Content.Shared/DeltaV/Addictions/AddictedComponent.cs new file mode 100644 index 00000000000..2f9169a7fb9 --- /dev/null +++ b/Content.Shared/DeltaV/Addictions/AddictedComponent.cs @@ -0,0 +1,37 @@ +using Robust.Shared.GameStates; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom; +using Robust.Shared.Timing; + +namespace Content.Shared.DeltaV.Addictions; + +[RegisterComponent, NetworkedComponent, Access(typeof(SharedAddictionSystem))] +[AutoGenerateComponentState, AutoGenerateComponentPause] +public sealed partial class AddictedComponent : Component +{ + /// + /// Whether to suppress pop-ups. + /// + [DataField, AutoNetworkedField] + public bool Suppressed; + + /// + /// The timestamp of last StatusEffect trigger. + /// + [DataField(serverOnly: true, customTypeSerializer: typeof(TimeOffsetSerializer))] + [AutoPausedField] + public TimeSpan? LastMetabolismTime; + + /// + /// The timestamp of the next popup. + /// + [DataField(serverOnly: true, customTypeSerializer: typeof(TimeOffsetSerializer))] + [AutoPausedField] + public TimeSpan? NextEffectTime; + + /// + /// The timestamp of the when the suppression ends + /// + [DataField(serverOnly: true, customTypeSerializer: typeof(TimeOffsetSerializer))] + [AutoPausedField] + public TimeSpan? SuppressionEndTime; +} diff --git a/Content.Shared/DeltaV/Addictions/SharedAddictionSystem.cs b/Content.Shared/DeltaV/Addictions/SharedAddictionSystem.cs new file mode 100644 index 00000000000..f58534592d9 --- /dev/null +++ b/Content.Shared/DeltaV/Addictions/SharedAddictionSystem.cs @@ -0,0 +1,30 @@ +using Content.Shared.StatusEffect; +using Robust.Shared.Prototypes; + +namespace Content.Shared.DeltaV.Addictions; + +public abstract class SharedAddictionSystem : EntitySystem +{ + [Dependency] private readonly StatusEffectsSystem _statusEffects = default!; + + public ProtoId StatusEffectKey = "Addicted"; + + protected abstract void UpdateTime(EntityUid uid); + + public virtual void TryApplyAddiction(EntityUid uid, float addictionTime, StatusEffectsComponent? status = null) + { + if (!Resolve(uid, ref status, false)) + return; + + UpdateTime(uid); + + if (!_statusEffects.HasStatusEffect(uid, StatusEffectKey, status)) + { + _statusEffects.TryAddStatusEffect(uid, StatusEffectKey, TimeSpan.FromSeconds(addictionTime), true, status); + } + else + { + _statusEffects.TryAddTime(uid, StatusEffectKey, TimeSpan.FromSeconds(addictionTime), status); + } + } +} diff --git a/Resources/Locale/en-US/deltav/guidebook/chemistry/effects.ftl b/Resources/Locale/en-US/deltav/guidebook/chemistry/effects.ftl new file mode 100644 index 00000000000..886e5b0c4f0 --- /dev/null +++ b/Resources/Locale/en-US/deltav/guidebook/chemistry/effects.ftl @@ -0,0 +1,5 @@ +reagent-effect-guidebook-addicted = + { $chance -> + [1] Causes + *[other] cause + } an addiction. diff --git a/Resources/Prototypes/DeltaV/Datasets/addictions.yml b/Resources/Prototypes/DeltaV/Datasets/addictions.yml new file mode 100644 index 00000000000..7f8bc2a6730 --- /dev/null +++ b/Resources/Prototypes/DeltaV/Datasets/addictions.yml @@ -0,0 +1,5 @@ +- type: localizedDataset + id: AddictionEffects + values: + prefix: reagent-effect-medaddiction- + count: 8 diff --git a/Resources/Prototypes/DeltaV/status_effects.yml b/Resources/Prototypes/DeltaV/status_effects.yml index e69de29bb2d..beb09d7addd 100644 --- a/Resources/Prototypes/DeltaV/status_effects.yml +++ b/Resources/Prototypes/DeltaV/status_effects.yml @@ -0,0 +1,2 @@ +- type: statusEffect + id: Addicted diff --git a/Resources/Prototypes/Entities/Mobs/Species/base.yml b/Resources/Prototypes/Entities/Mobs/Species/base.yml index adfd4303d00..7265c6ff737 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/base.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/base.yml @@ -138,6 +138,7 @@ - Adrenaline - PsionicsDisabled #Nyano - Summary: PCs can have psionics disabled. - PsionicallyInsulated #Nyano - Summary: PCs can be made insulated from psionic powers. + - Addicted # DeltaV - Psych med addictions system - type: Body prototype: Human requiredLegs: 2 From 869a34eadf9df201ea97b7b3caf2cf021120268a Mon Sep 17 00:00:00 2001 From: Milon Date: Mon, 4 Nov 2024 17:11:43 +0100 Subject: [PATCH 04/80] change cartridge names to be consistent with upstream (#2110) aaaaaaaaaaaaaaaaaaaaaaaaaaa --- .../DeltaV/Entities/Objects/Devices/cartridges.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Resources/Prototypes/DeltaV/Entities/Objects/Devices/cartridges.yml b/Resources/Prototypes/DeltaV/Entities/Objects/Devices/cartridges.yml index 3cf293ff3c2..ffbca20e3ac 100644 --- a/Resources/Prototypes/DeltaV/Entities/Objects/Devices/cartridges.yml +++ b/Resources/Prototypes/DeltaV/Entities/Objects/Devices/cartridges.yml @@ -1,7 +1,7 @@ - type: entity parent: BaseItem id: CrimeAssistCartridge - name: crime assist cartridge + name: CrimeAssist cartridge description: A cartridge that helps identify crimes and see appropriate punishment. components: - type: Sprite @@ -21,7 +21,7 @@ - type: entity parent: BaseItem id: SecWatchCartridge - name: sec watch cartridge + name: SecWatch cartridge description: A cartridge that tracks the status of currently wanted individuals. components: - type: Sprite @@ -42,7 +42,7 @@ - type: entity parent: BaseItem id: MailMetricsCartridge - name: mail metrics cartridge + name: MailMetrics cartridge description: A cartridge that tracks statistics related to mail deliveries. components: - type: Sprite From f79cb26c51e401d1b79537afa200cd3f305d2e26 Mon Sep 17 00:00:00 2001 From: Milon Date: Mon, 4 Nov 2024 17:56:23 +0100 Subject: [PATCH 05/80] cherry pick "fix BankClientComponent never updating" (#33123) (#2116) * oh right * fix --- Content.Server/Cargo/Systems/CargoSystem.Orders.cs | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/Content.Server/Cargo/Systems/CargoSystem.Orders.cs b/Content.Server/Cargo/Systems/CargoSystem.Orders.cs index 6c519c9fd4a..69a276302f9 100644 --- a/Content.Server/Cargo/Systems/CargoSystem.Orders.cs +++ b/Content.Server/Cargo/Systems/CargoSystem.Orders.cs @@ -85,9 +85,11 @@ private void UpdateConsole(float frameTime) { _timer -= Delay; - foreach (var account in EntityQuery()) + var stationQuery = EntityQueryEnumerator(); + while (stationQuery.MoveNext(out var uid, out var bank)) { - account.Balance += account.IncreasePerSecond * Delay; + var balanceToAdd = bank.IncreasePerSecond * Delay; + UpdateBankAccount(uid, bank, balanceToAdd); } var query = EntityQueryEnumerator(); @@ -213,7 +215,7 @@ private void OnApproveOrderMessage(EntityUid uid, CargoOrderConsoleComponent com $"{ToPrettyString(player):user} approved order [orderId:{order.OrderId}, quantity:{order.OrderQuantity}, product:{order.ProductId}, requester:{order.Requester}, reason:{order.Reason}] with balance at {bank.Balance}"); orderDatabase.Orders.Remove(order); - DeductFunds(bank, cost); + UpdateBankAccount(station.Value, bank, -cost); UpdateOrders(station.Value); } @@ -538,11 +540,6 @@ private bool FulfillOrder(CargoOrderData order, EntityCoordinates spawn, string? } - private void DeductFunds(StationBankAccountComponent component, int amount) - { - component.Balance = Math.Max(0, component.Balance - amount); - } - #region Station private bool TryGetOrderDatabase([NotNullWhen(true)] EntityUid? stationUid, [MaybeNullWhen(false)] out StationCargoOrderDatabaseComponent dbComp) From 670b9a1281b72c3d80c2ce806d74f782edc5ad23 Mon Sep 17 00:00:00 2001 From: deltanedas <39013340+deltanedas@users.noreply.github.com> Date: Mon, 4 Nov 2024 19:41:43 +0000 Subject: [PATCH 06/80] cherry pick Remove upgrading reinforced windows to shuttle windows (#33160) (#2118) we hate powergaming Co-authored-by: cohanna --- .../Recipes/Construction/Graphs/structures/window.yml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/Resources/Prototypes/Recipes/Construction/Graphs/structures/window.yml b/Resources/Prototypes/Recipes/Construction/Graphs/structures/window.yml index b9e6eae0815..1782c5924bf 100644 --- a/Resources/Prototypes/Recipes/Construction/Graphs/structures/window.yml +++ b/Resources/Prototypes/Recipes/Construction/Graphs/structures/window.yml @@ -223,11 +223,6 @@ - material: Uranium amount: 2 doAfter: 1 - - to: shuttleWindow - steps: - - material: Plasteel - amount: 2 - doAfter: 3 - node: reinforcedPlasmaWindow entity: ReinforcedPlasmaWindow From 0494e01e304d737c4ab769af5b544c354b392649 Mon Sep 17 00:00:00 2001 From: Delta-V bot <135767721+DeltaV-Bot@users.noreply.github.com> Date: Mon, 4 Nov 2024 20:42:02 +0100 Subject: [PATCH 07/80] Automatic changelog update --- Resources/Changelog/DeltaVChangelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/DeltaVChangelog.yml b/Resources/Changelog/DeltaVChangelog.yml index 05ecd6d330d..829eae22425 100644 --- a/Resources/Changelog/DeltaVChangelog.yml +++ b/Resources/Changelog/DeltaVChangelog.yml @@ -1,11 +1,4 @@ Entries: -- author: IamVelcroboy - changes: - - message: Salvage has been rebased. New but strangely familiar space debris will - be pulled in by the salvage magnet. Caution is recommended. - type: Add - id: 146 - time: '2023-11-22T16:13:12.0000000+00:00' - author: tryded changes: - message: Added double bladed energy swords to Nuclear Operative Uplinks @@ -3703,3 +3696,10 @@ id: 645 time: '2024-11-04T07:39:15.0000000+00:00' url: https://github.com/DeltaV-Station/Delta-v/pull/2083 +- author: clinux + changes: + - message: Removed the ability to upgrade reinforced windows to into shuttle windows + type: Remove + id: 646 + time: '2024-11-04T19:41:43.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/2118 From 0284e7f5a6b0f6097fa07f8308024d388ba05e90 Mon Sep 17 00:00:00 2001 From: Unkn0wn_Gh0st Date: Mon, 4 Nov 2024 13:54:28 -0600 Subject: [PATCH 08/80] Robotics Airlock (#2121) --- .../Structures/Doors/Airlocks/airlocks.yml | 8 +- .../Structures/Doors/Airlocks/assembly.yml | 19 ++ .../Structures/Doors/airlock_groups.yml | 3 + .../Glass/roboticist.rsi/assembly.png | Bin 0 -> 551 bytes .../Glass/roboticist.rsi/bolted_unlit.png | Bin 0 -> 191 bytes .../Airlocks/Glass/roboticist.rsi/closed.png | Bin 0 -> 718 bytes .../Glass/roboticist.rsi/closed_unlit.png | Bin 0 -> 184 bytes .../Airlocks/Glass/roboticist.rsi/closing.png | Bin 0 -> 2001 bytes .../Glass/roboticist.rsi/closing_unlit.png | Bin 0 -> 530 bytes .../Glass/roboticist.rsi/deny_unlit.png | Bin 0 -> 350 bytes .../Glass/roboticist.rsi/emergency_unlit.png | Bin 0 -> 588 bytes .../Airlocks/Glass/roboticist.rsi/meta.json | 195 ++++++++++++++++++ .../Airlocks/Glass/roboticist.rsi/open.png | Bin 0 -> 375 bytes .../Airlocks/Glass/roboticist.rsi/opening.png | Bin 0 -> 2060 bytes .../Glass/roboticist.rsi/opening_unlit.png | Bin 0 -> 523 bytes .../Glass/roboticist.rsi/panel_closing.png | Bin 0 -> 590 bytes .../Glass/roboticist.rsi/panel_open.png | Bin 0 -> 341 bytes .../Glass/roboticist.rsi/panel_opening.png | Bin 0 -> 603 bytes .../Airlocks/Glass/roboticist.rsi/sparks.png | Bin 0 -> 697 bytes .../Glass/roboticist.rsi/sparks_broken.png | Bin 0 -> 183 bytes .../Glass/roboticist.rsi/sparks_damaged.png | Bin 0 -> 184 bytes .../Glass/roboticist.rsi/sparks_open.png | Bin 0 -> 175 bytes .../Airlocks/Glass/roboticist.rsi/welded.png | Bin 0 -> 719 bytes .../Standard/roboticist.rsi/assembly.png | Bin 0 -> 603 bytes .../Standard/roboticist.rsi/bolted_unlit.png | Bin 0 -> 191 bytes .../Standard/roboticist.rsi/closed.png | Bin 0 -> 751 bytes .../Standard/roboticist.rsi/closed_unlit.png | Bin 0 -> 184 bytes .../Standard/roboticist.rsi/closing.png | Bin 0 -> 2134 bytes .../Standard/roboticist.rsi/closing_unlit.png | Bin 0 -> 530 bytes .../Standard/roboticist.rsi/deny_unlit.png | Bin 0 -> 350 bytes .../roboticist.rsi/emergency_unlit.png | Bin 0 -> 588 bytes .../Standard/roboticist.rsi/meta.json | 195 ++++++++++++++++++ .../Airlocks/Standard/roboticist.rsi/open.png | Bin 0 -> 366 bytes .../Standard/roboticist.rsi/opening.png | Bin 0 -> 2164 bytes .../Standard/roboticist.rsi/opening_unlit.png | Bin 0 -> 523 bytes .../Standard/roboticist.rsi/panel_closing.png | Bin 0 -> 590 bytes .../Standard/roboticist.rsi/panel_open.png | Bin 0 -> 341 bytes .../Standard/roboticist.rsi/panel_opening.png | Bin 0 -> 603 bytes .../Standard/roboticist.rsi/sparks.png | Bin 0 -> 697 bytes .../Standard/roboticist.rsi/sparks_broken.png | Bin 0 -> 183 bytes .../roboticist.rsi/sparks_damaged.png | Bin 0 -> 184 bytes .../Standard/roboticist.rsi/sparks_open.png | Bin 0 -> 175 bytes .../Standard/roboticist.rsi/welded.png | Bin 0 -> 719 bytes 43 files changed, 418 insertions(+), 2 deletions(-) create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/assembly.png create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/bolted_unlit.png create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/closed.png create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/closed_unlit.png create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/closing.png create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/closing_unlit.png create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/deny_unlit.png create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/emergency_unlit.png create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/meta.json create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/open.png create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/opening.png create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/opening_unlit.png create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/panel_closing.png create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/panel_open.png create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/panel_opening.png create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/sparks.png create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/sparks_broken.png create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/sparks_damaged.png create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/sparks_open.png create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/welded.png create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/assembly.png create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/bolted_unlit.png create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/closed.png create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/closed_unlit.png create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/closing.png create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/closing_unlit.png create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/deny_unlit.png create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/emergency_unlit.png create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/meta.json create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/open.png create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/opening.png create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/opening_unlit.png create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/panel_closing.png create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/panel_open.png create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/panel_opening.png create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/sparks.png create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/sparks_broken.png create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/sparks_damaged.png create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/sparks_open.png create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/welded.png diff --git a/Resources/Prototypes/DeltaV/Entities/Structures/Doors/Airlocks/airlocks.yml b/Resources/Prototypes/DeltaV/Entities/Structures/Doors/Airlocks/airlocks.yml index 12ec20ec951..b4d2436a0ac 100644 --- a/Resources/Prototypes/DeltaV/Entities/Structures/Doors/Airlocks/airlocks.yml +++ b/Resources/Prototypes/DeltaV/Entities/Structures/Doors/Airlocks/airlocks.yml @@ -12,7 +12,9 @@ parent: AirlockScience id: AirlockRobotics suffix: Robotics - # TODO: make a sprite for it + components: + - type: Sprite + sprite: DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi # Glass @@ -30,4 +32,6 @@ parent: AirlockScienceGlass id: AirlockRoboticsGlass suffix: Robotics - # TODO: make a sprite for it + components: + - type: Sprite + sprite: DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi diff --git a/Resources/Prototypes/DeltaV/Entities/Structures/Doors/Airlocks/assembly.yml b/Resources/Prototypes/DeltaV/Entities/Structures/Doors/Airlocks/assembly.yml index 67004211317..5d616fd7ffa 100644 --- a/Resources/Prototypes/DeltaV/Entities/Structures/Doors/Airlocks/assembly.yml +++ b/Resources/Prototypes/DeltaV/Entities/Structures/Doors/Airlocks/assembly.yml @@ -17,3 +17,22 @@ - type: Sprite sprite: DeltaV/Structures/Doors/Airlocks/Glass/chemistry.rsi #Delta V - Resprite Doors state: "assembly" + +#Roboticist - Delta-V Creation +- type: entity + parent: AirlockAssembly + id: AirlockAssemblyRoboticist + suffix: Robotics + components: + - type: Sprite + sprite: DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi + state: "assembly" + +- type: entity + parent: AirlockAssembly + id: AirlockAssemblyRoboticistGlass + suffix: Robotics, Glass + components: + - type: Sprite + sprite: DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi + state: "assembly" diff --git a/Resources/Prototypes/DeltaV/Entities/Structures/Doors/airlock_groups.yml b/Resources/Prototypes/DeltaV/Entities/Structures/Doors/airlock_groups.yml index 9c14c3046b3..dba1dcd8f38 100644 --- a/Resources/Prototypes/DeltaV/Entities/Structures/Doors/airlock_groups.yml +++ b/Resources/Prototypes/DeltaV/Entities/Structures/Doors/airlock_groups.yml @@ -16,6 +16,7 @@ security: DeltaV/Structures/Doors/Airlocks/Standard/security.rsi virology: DeltaV/Structures/Doors/Airlocks/Standard/virology.rsi justice: DeltaV/Structures/Doors/Airlocks/Standard/justice.rsi # Add Justice Dept + roboticist: DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi #Added Roboticist Role - type: AirlockGroup id: GlassDeltaV @@ -35,4 +36,6 @@ security: DeltaV/Structures/Doors/Airlocks/Glass/security.rsi virology: DeltaV/Structures/Doors/Airlocks/Glass/virology.rsi justice: DeltaV/Structures/Doors/Airlocks/Glass/justice.rsi # Add Justice Dept + roboticist: DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi #Added Roboticist Role + diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/assembly.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/assembly.png new file mode 100644 index 0000000000000000000000000000000000000000..4b087e14f6730f86bd4a800882b7d320fc538caa GIT binary patch literal 551 zcmV+?0@(eDP)Px$;Ymb6R9Hu2)YCWq|NYx{26Vv5#fc(x>Ec;N3`Il;fXqi$hHMwe4n~jy4x&H>aYim^FBO;wTM*6sUhfuyxH&+&@ZjcMOybqobp7_PXE& z5iS*!bVxzb3hECE35(-&07wGd9taHZ0V}$C^(vSKRg)kH?)`mN1{e~?N p2jJ?SQ{n(*Z(}nbBoFGI0|1ozaUcEx;|Bl$002ovPDHLkV1gq!>_7kj literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/bolted_unlit.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/bolted_unlit.png new file mode 100644 index 0000000000000000000000000000000000000000..653846c3022fe943b97fb6a5d9f2b8a86147e70c GIT binary patch literal 191 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5D46K! z;usRq`u6%l-UbH&my7i>Ox;$F%oe}iGkG#|7(|>&&1{&k;M||7lh3@{JX@)0+GW$d zdJYW?j7%&X0tyfY!{6u~=QO?A3=apWy-R++svs<4n@2qN|FYoM-~TZFI4EQ7u(DVc VXc>d2tDnm{r-Y`r$KSLd^8sfVKOO)8 literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/closed.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/closed.png new file mode 100644 index 0000000000000000000000000000000000000000..1108755279ed1087a44ca29130349b37563f2934 GIT binary patch literal 718 zcmV;<0x|uGP)Px%h)G02R9HvVmqBY9K@`VdkTz5(AgJi2Q0S!ua`7JU*w0YNN64qh zO$fAyf{+goDDd0J-c)*M6=Sp^w7iLLnH^_#XLLPeE~~RM@BQY@+c*E&%H>P{ zV9{=-H}uo<848D#W4!F}bGHy+cm5or(HNw{uRR@$1A5b+Fc=OXmWx26(ST$!3FUIx z)lRKegYkF_kGG$I1Hjn(VuA>uW5*NV`{)V|-W{K+jQzMgKgmT4>@@*&Ivt2aBCHP` zP{Tg@&%akjfSjj`g@6jcYFyntYPL_j07M`uKy36BLct)*18leX%qck^_N?C`L?V^m zF#(W8V=|dQ{8{2Y2ae)L%m*eE4nXH%RN9Qn073ZBH$MQpA)nN*f*Qs zZ5{v}$&zs606L$d9RXDmuCoPh0GO1HB&146lUB)r!w>JFTCLi3pj0YJ8S3@AT_==v z;6Vbs*?SAke%-Dm?U^Nw0DW1ZHl|~B z*>f!ba?V#lD#bDYbWV=x_sRe!&RK+J7WfXJvvS&a$^qZDKvw_7u=82xdlJe3#BZMm zP^ltRLv%J6)q#xy=#*leBUq>Y)9Q`&fS&-`dH`wZK=KoSBBj&=v&0kvFN(G-qX}Lz zOm_=B0hm}=K!`@&gs7-|cqJ^VVuv6Rlh7tiOqUkL*MGc>$fUTafMk-~RS)QdQg#>6 znMY%mE++Y1xqwg^{nq`;u45R1N~L1rn~g>B;wVITHk-E8tC#FPi2B~N{heRS0qF3^ zX0uB+TdfxBqa#)XFq!KBAWvS`YMw~Ep07IhKb#o)A5N7nC;$Ke07*qoM6N<$f@K#+ A(*OVf literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/closed_unlit.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/closed_unlit.png new file mode 100644 index 0000000000000000000000000000000000000000..cc185dfdb5a6afa911a8f78035710018819aaa1d GIT binary patch literal 184 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5C>ZPM z;usRqn*8VgfBVA@Ov@Oz)?Q&;%qLNLUK=vN11Qa0#Ha0e~oTm9{hX2w7 z(-R&DJ#Ox{v;S3j3^P6Px+i%CR5RCr$PT;FRQMHJppv`NGyRwOn)m{KB@KvJ6r1)&HcL@=Olg*^J?A0QOL zcftR`w?IL`LW=ZJ3KbC&nnExnNaKUFK~NK7nkc36?d=)Pp3KainVs2d$?nU|z1h3p zH|LvQXXcwbFf%*%_~F6BVrY1%;Md)?m4V6!3Eu#dKMwe~a&wTl#DVZRr&L^AWu@{C z;D-4#^9FnS;FsdT&V%CC_V?KYxIFpJz|3k&A)Uw?DGCfP$Zri%Wplrp^_cTlbEyhPJT~N44<&>EFv1*G2{K)kK;E$n~hE6~Tr{ zEx;;3o5AOOFkcSN!NC^@*DNeo@U2}C0+6HNd|>m{KoTGa2UqZUAW~0*eVBa}K+cD0 zM=G}f5|<}JIr0z);KBqR?TS@)#B$U=*#bHNdJ*ZH0N4kn-6#-gs|85hHd=rSlUGW! z7Sz@l&ZOTQ@)KZs1u+Qpb`ONOG&&ZZQF*dhQ9aiM7IDq6W~gqM34fM!kFL^ zfZPypWDx#|?1H#01c9G?^%YY=Q>=&iHsUGx05rCglRgNiHiiXvL9hn?c<**Ac0^1= z7Z(@H8b=#4WKGP$fd_+dsk%#i-cL8-;=|+^CK00#a~g8FMeodu2t9E|Iu4?ieh*Vor8pQjXnFsG-djn>~@ztPJB z$etbx=&a7{A2ypdS-`nHJvE0qdpIb%?CG&we3(2|D8CWF7sODndtpX z^BU;NJ;Vc9KAk(@X8>#u1op8!K#QzdvhaE0IgVV6({iBuI2SFZ4W9%E#pgV@0Gj7i z1o-FZ@8b2#S4xk*?F#kE`w|g6pJ#%2&*$NHcke`T(P9!lUa11u1PJ9J*SRR!@DK0U=;@Cn)QJ;p&2@=EZQ)V%oYOxfT?|BeV;mF{t$x z;2VTv3Qm=w$sn9l0M{Vgx&XETUQR<(3s5&5bWMX}cxd*3C7;UqfS6|QDqzTRET4wP z6x`PWd;;)Um}?LYiAjh6z|KAhyFBqcDDcOp6hMOsyp@%e64#Xn#8iY(>`ESxV-VI5 z>I7g1wL_YlW)|f0#LKQh<^eHW>TKW~lkmu=FEino7N9LJVejt#RluC=odv~u<$b}B zYw_AHsE$hrW)lHiJX`|E@~Q=B;+1y=gKxa>zw26nhD!)$tN=b9HUVtqRSBReux|z= z$>3fz_ZR^*TzvL(Ul2mNppfAE%BvP2=9GxW3Le@8$)yk!PA)^+1g9Y2)zuAz3Sf&# zEVg$Hh+Y42k>SCxwH#j;w3_H(@lMcpeB^3~M4lC?@c+BNdtl z*aT>T?ac#XTRldX&0AV z0%&<869C>x6kG-@#4E4$!~?_UilD-4xWr%*zO4dqObrj40P+j~FE7U?d~-ekfbt6Q z%GYfP+KABs3ArPsnm`IBGHjWK3{N0Tn7ng_6-F18gw601UVhjR542=is4Ud0Q}S zo_NB*^U0r&&+6{QJ#@cMfRN`97cM}^_oVnFsu~TbW02i?CnYdS;575*;e1{7V jib?mUwx?^#Ys3BzIg`uNT?-?e00000NkvXXu0mjfp9`R! literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/closing_unlit.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/closing_unlit.png new file mode 100644 index 0000000000000000000000000000000000000000..7498990a390fff5bc731e3baf307858de3ba839f GIT binary patch literal 530 zcmeAS@N?(olHy`uVBq!ia0vp^2|(DY|LVWJZ)g7gayQ33 zC84efpUW1jM3zjpl9GRBGrjV(w^{7`kH3`q%U{Rq-`5M@{OZ~IpC|ve&)L0trt>=A zPcLuPUCx)6GP(UU;|BX9pS;|%U4_qp!OP(3>gTe~DWS>x#=icOSELqHvM#qqt^fe%s?IS0 literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/deny_unlit.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/deny_unlit.png new file mode 100644 index 0000000000000000000000000000000000000000..8c381d4c61eb53553f4e9ee9184c0bb067df59d0 GIT binary patch literal 350 zcmeAS@N?(olHy`uVBq!ia0vp^2|(!}C>Tt7pBL_kH(w{qxKbdX5In2Y48a8O|_Z zGB&v0KYDjrl(~P{=aidki*4nKcB(J0-gI|+mFWZX?{!9Qla?D+eJlE(RkwX{B3_fg zW=q#LEc`$JK_gGjm-qu0usILv@}Kn#Hv4a1+`#^>bGptP{_Z|tI5Bv-`njxgN@#*J E0NvYmaR2}S literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/emergency_unlit.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/emergency_unlit.png new file mode 100644 index 0000000000000000000000000000000000000000..f210ecf123ef7c095416ebee9a638fb3f5962b80 GIT binary patch literal 588 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3HE3&8=$zQk(@Ik;M!Q+`=Ht$S`Y;1W>TY z)5S3)qw(#{g}jFocvutvhXyz%gr7*0)ta5!dZ=NM7a#X3FD|uWcPeou7pDTI=K8KzA{C zy85}Sb4qARKO}_AZSOoD*7PCC#DdqUUT4YBha-GG5};EA7)U z%Pl)B#5S^UDv5*yxNw>++VW~igvX`2Gl%UT{8BB_e4^DfF_|$nV?wO`5BWduuATDj zF`wjQxZv~ALc6wx19}1Lt|H(?D1tSL*h@TpUD=;8v2n6nFZwC< z9;nU(9BcR9o?gh?;K0CgP}woj;EO|MyztUm{(J)sp$QTODjI1|V$FW;eD^Y9y3F4> lJeRlT>fX#Yn)dshFEc1Wf#AM1V+lVW(~eWB5g;xs!~xDe=FtEE literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/meta.json b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/meta.json new file mode 100644 index 00000000000..0e560a01f74 --- /dev/null +++ b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/meta.json @@ -0,0 +1,195 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Original Science Airlock taken from https://github.com/ParadiseSS13/Paradise/, Roboticist Resprite done by Unkn0wn_Gh0st333 on github", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "assembly" + }, + { + "name": "bolted_unlit" + }, + { + "name": "closed" + }, + { + "name": "closed_unlit" + }, + { + "name": "closing", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "closing_unlit", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "deny_unlit", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "open", + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "opening", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "opening_unlit", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "panel_closing", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "panel_open", + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "panel_opening", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "sparks", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "sparks_broken", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "sparks_damaged", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 1.7 + ] + ] + }, + { + "name": "sparks_open", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "welded" + }, + { + "name": "emergency_unlit", + "delays": [ + [ + 0.4, + 0.4 + ] + ] + } + ] +} diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/open.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/open.png new file mode 100644 index 0000000000000000000000000000000000000000..77ba7ca3c62f879f42503d736101858d4eb61e14 GIT binary patch literal 375 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/panel_closing.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/panel_closing.png new file mode 100644 index 0000000000000000000000000000000000000000..4a0d28b65b41e952ff138206e67c2eab541e97bb GIT binary patch literal 590 zcmeAS@N?(olHy`uVBq!ia0vp^2|(8{u8~v8D4VHsbO6G zfVso|4c8&1BjN!kB0N|OU4!0~Gv5ndX6fx$roOr6aZ- z1}+D8Mh=mwTHm65f$YT+y$l)*tpc|q)?a62$bORjbN!B}<;)J{46?aLPQ2j5WfxWl zzy;Ha9X%(xy#KrYJX>?)=CWs%eGdyFR+UR`zZr2VN9~_N{jt6Gk2?PAnJwY{SLvDM z`@edd-mLt>(7nr7{jpQV;rKa^1@7->YujunH@iZ-boN@t%`<;2o-C68e!BhVkJrvE z3evs1yXSU|;J$sc7FDOMPPG6kvTf?}5?y%p$g^LX$F?7+(_U_op8Rn2BePiMu8SPy zx2>n0vOl+0w0Jfv$HLzJlhS?q=NND39Qr)x=xgtn_fqdn<97>xU2;dom+?U5d+-0+ z7UwOkB{pj1eP))D-aBvhl9%6~Eq>B_!zO+0ZPP-%SJ!?r7*&b8AOaumcP@u#+`hMN Wo}Z+2=^ZeEFnGH9xvX^(3p31-d+H}+6gk7a`|=pK~c0c-aIha zzO!7dxw>&|Uhi41)>Khve*oXHc-WHM{awae3#zDt9bItJzomGD@u;NA^Zfw;RC&(R z+4;}<^cRgc0Ba|_)f=v7Q{dBt)ys2B=hFkG8^@-04#0?r>Gygqk=GUg9M9*bc1{7h nNn&>QP52cDfB+Bx{yo44RP&P*c~z&500000NkvXXu0mjfWXh0Y literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/panel_opening.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/panel_opening.png new file mode 100644 index 0000000000000000000000000000000000000000..899651c30446a8998f9b1fabda944d7360df9810 GIT binary patch literal 603 zcmeAS@N?(olHy`uVBq!ia0vp^2|(1-DY*PN^juO zbNHjE%+V}hzTm-T4o;1<4LdFQi}tCdblowo`Fw9KPk9UnW0QNUY{Jcn3`Rl@ZcHaU z7$i9rlo?Z08hThJfCbZzzG}a0!s|KdkHxg-mcRb)+q_CLxowlq-njFYtJ@2|{)%I0 z`1?ol`^k52icPAbZk#+mVWG}xUygG*tPBm`bydWlTO4?D>b4A@?rGQAiE&~FHn8W^ z)joPy*mC$WPyYMq6%{fISA?uRXj~{9oWXc7E0M--(oM3v-T6o|50rvB z?(X|$_9K~q!b>Jme`5^XKVF&j%`2QtMsN-@c!MQ;uYX{&xPXV-MV4h*a7^*H)mTo% z^duKBlw8QrI7#Az6a!+!k42gRM*{jVXw(2^)BtAG0A@rO5W6r+TTo*dR0c>itn&u= ziYhf*#29dhKzXbye)sb`x`T#9jF|@skRQx^J~1)&r}u;k?=m8#VH_qLszE1c7I|*U z-vi17+kNaSpCz%9yQ#rS&sN2x0`#dRVZ$Zo3 z(YozxD(tDJ*Nd^#9ngM11*`#hZL|qqUX-aA#5S}G^!n=WLLU@GQ4~c{6dSK|xP5Tx z!-H@vnhtn%y49-Lc3NyR!WG{&^FjpmIbAy+o5nPrx)V}}E%fz`bB+BtcI@^)8^rTf zBx((Ky3EXU1aLM2IGxVm^KA+58-UdY;QHA(FXNaPN!aD?zV8}<6&DioA6qwm%&S`B zG(?rf)v;@BC^IYu=$f%ZGhhqXw5SF!qXsa;V!%*uXSl{qZh&O*G5ePMUQntINQ83i z$upoRb}H)fv5TKDu*ZP$-hvmY3!Atq6ENBh(WYFFM67|7l05p#?E1nmayZKasmvEs z4%uF#@2=U$hCc&#<3^>qaoRUjD5t(Q@!@5>eLn%YPa&y@Wk6F&Jf;Amr=S&p`TF~H zKQmyzZBbK@-3j_NfaCqFrZteLVgLD`ViBgsl+FQ!832*%0DhkaTq4i015y-4Q4~c{ f6h%=KHvsSpwHV1KmpgiI00000NkvXXu0mjf++aJ5 literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/sparks_broken.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/sparks_broken.png new file mode 100644 index 0000000000000000000000000000000000000000..fb5d774588ae44eab5608571cb6aafad7375e158 GIT binary patch literal 183 zcmeAS@N?(olHy`uVBq!ia0vp^2|(DFD66%%n7hj|c25u0=Hbzuz>&Md dbBcZ?)Aw7<0^jOhxdW|Y@O1TaS?83{1ORW&Jrn={ literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/sparks_damaged.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/sparks_damaged.png new file mode 100644 index 0000000000000000000000000000000000000000..f16a028dee5bbe41a7f4e35f686043e8a112ce4e GIT binary patch literal 184 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeK3?y%aJ*@^(YymzYu0Z<#e`9lQK{p_au_VYZ zn8D%MjWi%9!PCVtL_+fI!HvAl4m=D8Hh=XH6ZQR;XyVo{y01gP^_0k+pXD$8l*-N4 z&iUk!V5<=?maE{?*yyS)-udN6;H*Pi5*L(-Fs)pAdDY$x8SUGCM{GTG-~v& dN}IerjGt7Q1>7HnEC$-e;OXk;vd$@?2>`@EK-2&L literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/sparks_open.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/sparks_open.png new file mode 100644 index 0000000000000000000000000000000000000000..630eabb976ecf11fa59ba29f03502b02bde399aa GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^2|(1P8ZNkY>!D5Xf# z6r~g*LKudVwY)h1P1ErG{Y_O>7-LwiR)`353_Ys?Q50dVWxL(toFmV3j4>Ev9Ps-l zJRA;eHXCkkZUA_Cdcya8uCA^oYs~_vstSOYmlptvqL5)2-05^$24J__0pOg&T1%E? zSZlG?E(5S$uW`=d`##P&PNx%L7!t?vWUW~#Fvg&@CP@;4AQ;U@mSvOsz$}0yNe~gr zvZU)ew%aYf@6$BRWUX0O@bK^eKpe+o2Sh2w$H&Jq0Jpcd7-MkGk!2bD&AuCkVVOQq zRTXX9QdJel;}HO*6wbM2W`WlFXVbDQoiPRx!S|=j%`#!vby#aL#<+j-FCvo*Fs}mF z*VkBUT~QQ-VTg#xI1v{CD2f856iw4m*R_me`SbI08GyR3UElW{k4Mrp#q&J0)~wg- zWdO9+#Bq$Zmb0@nHk%D`9JAOk8XJyMilQjo>+7qG#+c^-Y=BO>H^PTRIWSFs4d+uIvimN{b#&(F_dttCm4pMS((2iWa)^nH)#d1G6q zEKBzL{W1VwUta`4Al6#<`1tq(<9X9PE&uy@{s#~QNIZEt|6~9F002ovPDHLkV1nDB BNt*xw literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/assembly.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/assembly.png new file mode 100644 index 0000000000000000000000000000000000000000..58bde1ae52822a228b5a1577524ae8f77bc55cc4 GIT binary patch literal 603 zcmV-h0;K(kP)Px%6-h)vR9Hvtm(NQAK@`WI3i%^gMGt}@>A?^L3%mqD1W|ZMs9WH%|EIqqPX&4C z&@lod0v8N~SP6v=Df9!3Ty-hq&9cL|j+QyQU7E|n>@e>$-ZAZ&z-_P{z-k4y4mP1sD9}8R$z+HKrK=k~53m4M9Kvq_tiFb; z@inMCmcj22kd@zcYxKww1$c=l8jXUd|u~N~-_>002ovPDHLkV1lRW2E+gW literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/bolted_unlit.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/bolted_unlit.png new file mode 100644 index 0000000000000000000000000000000000000000..653846c3022fe943b97fb6a5d9f2b8a86147e70c GIT binary patch literal 191 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5D46K! z;usRq`u6%l-UbH&my7i>Ox;$F%oe}iGkG#|7(|>&&1{&k;M||7lh3@{JX@)0+GW$d zdJYW?j7%&X0tyfY!{6u~=QO?A3=apWy-R++svs<4n@2qN|FYoM-~TZFI4EQ7u(DVc VXc>d2tDnm{r-Y`r$KSLd^8sfVKOO)8 literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/closed.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/closed.png new file mode 100644 index 0000000000000000000000000000000000000000..0cbcf9e6efb15abaf14f1d8b73f068dedd8f6d40 GIT binary patch literal 751 zcmVPx%sYygZR9Hu~mqBY9K@`Vd4koT8DoKOHB1tGI0l}1b3G^5OUc47P_N!G0B!_~R zet|+SN)r%*5)62Vk_4(Tu0~4B8}}`<+HPWzWL9a|Ev@ai+{ms_SmMM z+N+hYeEaCek>6cGfbHoPq*7_vO}y6zRy*8|Z=l!jLAsEHMxz1QY!=Gpa^N_%S`CK7 zA*`;w0S`dv=*|l&fXO&ofUChT?Kp+hN707>TCEl&lS%Om15m?fbT9w!n*j=LSpoBG z+h78q009rrr+5nU(Uq3L(jG^1@dMsI#8PEah2N2EuR9pPe7#IEERh zR4QR&i@s=HJcS7N=CEyd=bbnYqQ4K@UZ&4H0Bs)me12ifX0s`t(H5%$gn8EkK#_FE hYMDqqp8xN={{XptyC3TST44YH002ovPDHLkV1icFQ@sEH literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/closed_unlit.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/closed_unlit.png new file mode 100644 index 0000000000000000000000000000000000000000..cc185dfdb5a6afa911a8f78035710018819aaa1d GIT binary patch literal 184 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5C>ZPM z;usRqn*8VgfBVA@Ov@Oz)?Q&;%qLNLUK=vN11Qa0#Ha0e~oTm9{hX2w7 z(-R&DJ#Ox{v;S3j3^P6Px-5J^NqRCr$PTwQBjMHHR1r1_90p;ba7!33!k0;x1Ff*^t@c`%@FLLU7;{t5$v zf`$0d$0AfjxWN_zB|#Di(!`HyV$4T_R@S-Mhdpy==Iog>bB>aGUT*HqxwF>nHG5|E zo_+4X{OyJ3$4AF%WOPLF>(Rr`fc8PcH^Ai00UuXx4kj*fAbid#6&F`uslNlbVe#5x ziM@UFgWBEORbOx4&nCcIGjBhim>*NyKmJtUa(ukc#es0w*4EV2)Ra0o{o9Jqg{aHL z#9UfhDx3fOi@T~2;MVX>ZG1N^fQb(>IXJiku;Fuq)Zt=c@^&!*3IU#-{#ATFKmL00 zS_e=vQ<)w>__;X{?#9N38XFrcJ%HnL{weHXVxs+ngM$L*%Fqj40WM$qM;#v@w8=DgkmV!j%HFu?>A=_Dyx~>AhkkG`S50 z?!zY?H9kI}9-nM#__?;B91|FXi@(cAczSwT4eyOM76)(vC=kod0Slr{09zoIii?S9 z6=3F-mrLX0h9+`BTmYm3c!zUwkO+V%I3*XC0I%JgRU4aIz1h&FjE`yH$2FTHIzNq;|APJCzgTxT2 zlYu_WRs}G(V{{^wTL2T6N22&UhX5{2;L)j=b|RKz^qC&e7ocmA)&#&gFr7w$NK+nQ z;x^#{E=)cs%Un=XYd~KBZvO57EDz<1P%M`a%wi2_TL8)of=6tpU5eU_0X$qt2jlwigZGQq_4Re_^H?rE%(=O_ zlIoXtzv{*TRGuCS=p4@MAGR`WDgo!^>8UwXm4}0(t2{lHiw~3A3jHqy@EI|*Rz8G) z%K$DuE-q3`YS(P1E)UMvCa7t6df)SWfKLc%t-P-$-du$6-h4hl;!!3SDJHeOy1H8C zqHdhNRGbmdjJ_&?*6tx52)yXI1O5zvtwCV-!~s%dNy@@k6VGwXWSo=(-N(5|F>UxH zKqx-v!3B`CqY2=ukLL}A)XMt;5wyu8LA>Yt@JIXKSMs-Ukzx`)UTFZ>1PJ9}rXDER zJpzo3=+B60b6Q}nd{rcfws|Um1fWjGaFJq41c>3`5&(mZ`s)+`xsbuZLF>qi zsgJn&T%?#b51iP)sz!!~i**1O1PJBf6Ts#ThlhtnTv9B;w)%LkMrf_P z)EJZuBLN<-f2Jm{_-7y&7bzwQfQ8bGgt4IFis2C=K+lO7N)ul^cK|BWu2U;tWenF8 zgpS|2s-n0^F>O6z=UMLqSChwnX8yv$!asXr6R(n1G9$-#Cv9av+fZLkyy-cqwxLqY67T%^05cMf*@lK<@9+On z6epL@2l#@Y&{}z0Z6rOEVCLfa6eJ0NTwFphs|1MQ;S#{?FJX%Wh%MK48G|3Z@V_OI za21yj%sK+Nc-RE6^;axFRfl~Gut}zfE>AX9tN>M9Y{vIt#tI-cz69Ir0cQRO4NB9{ zHscc^yoOFeRa{)g_hH5e;NlV5Uy%pICg5CTxG`*=H&4IwNykZ4+te>=7OXhrympy&HwP}&vzamR=Ook%~a=Bs$Ko&>zrqO$T%y%FD8SRT0#A z36~g5v`Yu&zOonz51RnK{&H+h04#z4G_R0a`Klv98!_`ltaMEwml#Z5r9k-Rd4QCM zcxb!lJRrpnm&PoJF@;&SVl4jTr7h5NedenRs%i&3>P$ge98gsnD5;g_0+@C9 zuFm-C^IhNJTw*Y7fgsY+w{LWRL`iyq2MHkUFK-(^8dW|aBLS_d6b`A0m*DyCAug#f zAprewNC>ys=MI2@YQ$0is*mU3p|$eTns~xM`&6Hg&nQX9>*x8s_?zzc2@ui_wa*0z z`MxPY$aggXB<0i+58wh;wTXMp=L00858vSegksYDsms$P{k38L3*E-H#Ixm0n*aa+ M07*qoM6N<$f}F+L8~^|S literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/closing_unlit.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/closing_unlit.png new file mode 100644 index 0000000000000000000000000000000000000000..7498990a390fff5bc731e3baf307858de3ba839f GIT binary patch literal 530 zcmeAS@N?(olHy`uVBq!ia0vp^2|(DY|LVWJZ)g7gayQ33 zC84efpUW1jM3zjpl9GRBGrjV(w^{7`kH3`q%U{Rq-`5M@{OZ~IpC|ve&)L0trt>=A zPcLuPUCx)6GP(UU;|BX9pS;|%U4_qp!OP(3>gTe~DWS>x#=icOSELqHvM#qqt^fe%s?IS0 literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/deny_unlit.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/deny_unlit.png new file mode 100644 index 0000000000000000000000000000000000000000..8c381d4c61eb53553f4e9ee9184c0bb067df59d0 GIT binary patch literal 350 zcmeAS@N?(olHy`uVBq!ia0vp^2|(!}C>Tt7pBL_kH(w{qxKbdX5In2Y48a8O|_Z zGB&v0KYDjrl(~P{=aidki*4nKcB(J0-gI|+mFWZX?{!9Qla?D+eJlE(RkwX{B3_fg zW=q#LEc`$JK_gGjm-qu0usILv@}Kn#Hv4a1+`#^>bGptP{_Z|tI5Bv-`njxgN@#*J E0NvYmaR2}S literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/emergency_unlit.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/emergency_unlit.png new file mode 100644 index 0000000000000000000000000000000000000000..f210ecf123ef7c095416ebee9a638fb3f5962b80 GIT binary patch literal 588 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3HE3&8=$zQk(@Ik;M!Q+`=Ht$S`Y;1W>TY z)5S3)qw(#{g}jFocvutvhXyz%gr7*0)ta5!dZ=NM7a#X3FD|uWcPeou7pDTI=K8KzA{C zy85}Sb4qARKO}_AZSOoD*7PCC#DdqUUT4YBha-GG5};EA7)U z%Pl)B#5S^UDv5*yxNw>++VW~igvX`2Gl%UT{8BB_e4^DfF_|$nV?wO`5BWduuATDj zF`wjQxZv~ALc6wx19}1Lt|H(?D1tSL*h@TpUD=;8v2n6nFZwC< z9;nU(9BcR9o?gh?;K0CgP}woj;EO|MyztUm{(J)sp$QTODjI1|V$FW;eD^Y9y3F4> lJeRlT>fX#Yn)dshFEc1Wf#AM1V+lVW(~eWB5g;xs!~xDe=FtEE literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/meta.json b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/meta.json new file mode 100644 index 00000000000..0e560a01f74 --- /dev/null +++ b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/meta.json @@ -0,0 +1,195 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Original Science Airlock taken from https://github.com/ParadiseSS13/Paradise/, Roboticist Resprite done by Unkn0wn_Gh0st333 on github", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "assembly" + }, + { + "name": "bolted_unlit" + }, + { + "name": "closed" + }, + { + "name": "closed_unlit" + }, + { + "name": "closing", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "closing_unlit", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "deny_unlit", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "open", + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "opening", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "opening_unlit", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "panel_closing", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "panel_open", + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "panel_opening", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "sparks", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "sparks_broken", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "sparks_damaged", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 1.7 + ] + ] + }, + { + "name": "sparks_open", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "welded" + }, + { + "name": "emergency_unlit", + "delays": [ + [ + 0.4, + 0.4 + ] + ] + } + ] +} diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/open.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/open.png new file mode 100644 index 0000000000000000000000000000000000000000..1ec26cadcca1e0dcbc9bc81e0de76648fa20da73 GIT binary patch literal 366 zcmV-!0g?WRP)Px$C`m*?R9Hu2)YCWq|NYx{22L(c24ryQ;#o!%0V;ApcEXHf1aUlsJmAJZ_;#1! z#mg5AhaMcDnFH(;9R3UF@i9Dj_>=+c01XaR6#voP0l$8J1v@~G-vCV0-2u!@{}{f1 z|32z~(GVC7fsqvguF1{}tJiFRl!OCO4h*;hEEKI7cD&nx2mx7HSq6@mTy!gnQ5>Kk zFAcYxUUdPA1CVP&dQ?Op%P&4Z%kZ52HEMNCPs{oF1sHDpxQ%cCy)6etHQgNm%6dze zE@j~3;{zx5A3y)nHv|UU0ibr^ty{MSE(As$Fd71bHv~XkvlI7^(xp2F%7)R=(cppz z-XMYX%V^mlh4lx|ojb=MBrFc^3W8fi1MUD=_nej?fb3C_hhcUC0DTg`5QgaHVgLXD M07*qoM6N<$f)%}yd;kCd literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/opening.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/opening.png new file mode 100644 index 0000000000000000000000000000000000000000..cbe0e327c6241862483d5b68beda9426837ddfb8 GIT binary patch literal 2164 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/panel_closing.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/panel_closing.png new file mode 100644 index 0000000000000000000000000000000000000000..4a0d28b65b41e952ff138206e67c2eab541e97bb GIT binary patch literal 590 zcmeAS@N?(olHy`uVBq!ia0vp^2|(8{u8~v8D4VHsbO6G zfVso|4c8&1BjN!kB0N|OU4!0~Gv5ndX6fx$roOr6aZ- z1}+D8Mh=mwTHm65f$YT+y$l)*tpc|q)?a62$bORjbN!B}<;)J{46?aLPQ2j5WfxWl zzy;Ha9X%(xy#KrYJX>?)=CWs%eGdyFR+UR`zZr2VN9~_N{jt6Gk2?PAnJwY{SLvDM z`@edd-mLt>(7nr7{jpQV;rKa^1@7->YujunH@iZ-boN@t%`<;2o-C68e!BhVkJrvE z3evs1yXSU|;J$sc7FDOMPPG6kvTf?}5?y%p$g^LX$F?7+(_U_op8Rn2BePiMu8SPy zx2>n0vOl+0w0Jfv$HLzJlhS?q=NND39Qr)x=xgtn_fqdn<97>xU2;dom+?U5d+-0+ z7UwOkB{pj1eP))D-aBvhl9%6~Eq>B_!zO+0ZPP-%SJ!?r7*&b8AOaumcP@u#+`hMN Wo}Z+2=^ZeEFnGH9xvX^(3p31-d+H}+6gk7a`|=pK~c0c-aIha zzO!7dxw>&|Uhi41)>Khve*oXHc-WHM{awae3#zDt9bItJzomGD@u;NA^Zfw;RC&(R z+4;}<^cRgc0Ba|_)f=v7Q{dBt)ys2B=hFkG8^@-04#0?r>Gygqk=GUg9M9*bc1{7h nNn&>QP52cDfB+Bx{yo44RP&P*c~z&500000NkvXXu0mjfWXh0Y literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/panel_opening.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/panel_opening.png new file mode 100644 index 0000000000000000000000000000000000000000..899651c30446a8998f9b1fabda944d7360df9810 GIT binary patch literal 603 zcmeAS@N?(olHy`uVBq!ia0vp^2|(1-DY*PN^juO zbNHjE%+V}hzTm-T4o;1<4LdFQi}tCdblowo`Fw9KPk9UnW0QNUY{Jcn3`Rl@ZcHaU z7$i9rlo?Z08hThJfCbZzzG}a0!s|KdkHxg-mcRb)+q_CLxowlq-njFYtJ@2|{)%I0 z`1?ol`^k52icPAbZk#+mVWG}xUygG*tPBm`bydWlTO4?D>b4A@?rGQAiE&~FHn8W^ z)joPy*mC$WPyYMq6%{fISA?uRXj~{9oWXc7E0M--(oM3v-T6o|50rvB z?(X|$_9K~q!b>Jme`5^XKVF&j%`2QtMsN-@c!MQ;uYX{&xPXV-MV4h*a7^*H)mTo% z^duKBlw8QrI7#Az6a!+!k42gRM*{jVXw(2^)BtAG0A@rO5W6r+TTo*dR0c>itn&u= ziYhf*#29dhKzXbye)sb`x`T#9jF|@skRQx^J~1)&r}u;k?=m8#VH_qLszE1c7I|*U z-vi17+kNaSpCz%9yQ#rS&sN2x0`#dRVZ$Zo3 z(YozxD(tDJ*Nd^#9ngM11*`#hZL|qqUX-aA#5S}G^!n=WLLU@GQ4~c{6dSK|xP5Tx z!-H@vnhtn%y49-Lc3NyR!WG{&^FjpmIbAy+o5nPrx)V}}E%fz`bB+BtcI@^)8^rTf zBx((Ky3EXU1aLM2IGxVm^KA+58-UdY;QHA(FXNaPN!aD?zV8}<6&DioA6qwm%&S`B zG(?rf)v;@BC^IYu=$f%ZGhhqXw5SF!qXsa;V!%*uXSl{qZh&O*G5ePMUQntINQ83i z$upoRb}H)fv5TKDu*ZP$-hvmY3!Atq6ENBh(WYFFM67|7l05p#?E1nmayZKasmvEs z4%uF#@2=U$hCc&#<3^>qaoRUjD5t(Q@!@5>eLn%YPa&y@Wk6F&Jf;Amr=S&p`TF~H zKQmyzZBbK@-3j_NfaCqFrZteLVgLD`ViBgsl+FQ!832*%0DhkaTq4i015y-4Q4~c{ f6h%=KHvsSpwHV1KmpgiI00000NkvXXu0mjf++aJ5 literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/sparks_broken.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/sparks_broken.png new file mode 100644 index 0000000000000000000000000000000000000000..fb5d774588ae44eab5608571cb6aafad7375e158 GIT binary patch literal 183 zcmeAS@N?(olHy`uVBq!ia0vp^2|(DFD66%%n7hj|c25u0=Hbzuz>&Md dbBcZ?)Aw7<0^jOhxdW|Y@O1TaS?83{1ORW&Jrn={ literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/sparks_damaged.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/sparks_damaged.png new file mode 100644 index 0000000000000000000000000000000000000000..f16a028dee5bbe41a7f4e35f686043e8a112ce4e GIT binary patch literal 184 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeK3?y%aJ*@^(YymzYu0Z<#e`9lQK{p_au_VYZ zn8D%MjWi%9!PCVtL_+fI!HvAl4m=D8Hh=XH6ZQR;XyVo{y01gP^_0k+pXD$8l*-N4 z&iUk!V5<=?maE{?*yyS)-udN6;H*Pi5*L(-Fs)pAdDY$x8SUGCM{GTG-~v& dN}IerjGt7Q1>7HnEC$-e;OXk;vd$@?2>`@EK-2&L literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/sparks_open.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/sparks_open.png new file mode 100644 index 0000000000000000000000000000000000000000..630eabb976ecf11fa59ba29f03502b02bde399aa GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^2|(1P8ZNkY>!D5Xf# z6r~g*LKudVwY)h1P1ErG{Y_O>7-LwiR)`353_Ys?Q50dVWxL(toFmV3j4>Ev9Ps-l zJRA;eHXCkkZUA_Cdcya8uCA^oYs~_vstSOYmlptvqL5)2-05^$24J__0pOg&T1%E? zSZlG?E(5S$uW`=d`##P&PNx%L7!t?vWUW~#Fvg&@CP@;4AQ;U@mSvOsz$}0yNe~gr zvZU)ew%aYf@6$BRWUX0O@bK^eKpe+o2Sh2w$H&Jq0Jpcd7-MkGk!2bD&AuCkVVOQq zRTXX9QdJel;}HO*6wbM2W`WlFXVbDQoiPRx!S|=j%`#!vby#aL#<+j-FCvo*Fs}mF z*VkBUT~QQ-VTg#xI1v{CD2f856iw4m*R_me`SbI08GyR3UElW{k4Mrp#q&J0)~wg- zWdO9+#Bq$Zmb0@nHk%D`9JAOk8XJyMilQjo>+7qG#+c^-Y=BO>H^PTRIWSFs4d+uIvimN{b#&(F_dttCm4pMS((2iWa)^nH)#d1G6q zEKBzL{W1VwUta`4Al6#<`1tq(<9X9PE&uy@{s#~QNIZEt|6~9F002ovPDHLkV1nDB BNt*xw literal 0 HcmV?d00001 From ec0962abd88aa91527837fc1e5a5ff1fbdb6cd73 Mon Sep 17 00:00:00 2001 From: Delta-V bot <135767721+DeltaV-Bot@users.noreply.github.com> Date: Mon, 4 Nov 2024 20:54:47 +0100 Subject: [PATCH 09/80] Automatic changelog update --- Resources/Changelog/DeltaVChangelog.yml | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/Resources/Changelog/DeltaVChangelog.yml b/Resources/Changelog/DeltaVChangelog.yml index 829eae22425..8276d411101 100644 --- a/Resources/Changelog/DeltaVChangelog.yml +++ b/Resources/Changelog/DeltaVChangelog.yml @@ -1,10 +1,4 @@ Entries: -- author: tryded - changes: - - message: Added double bladed energy swords to Nuclear Operative Uplinks - type: Add - id: 147 - time: '2023-11-25T14:38:20.0000000+00:00' - author: TJohnson changes: - message: Seclites now robust as advertised in item description. @@ -3703,3 +3697,10 @@ id: 646 time: '2024-11-04T19:41:43.0000000+00:00' url: https://github.com/DeltaV-Station/Delta-v/pull/2118 +- author: Unkn0wnGh0st333 + changes: + - message: Added Robotics Airlocks, one step closer to the Roboticist Job. + type: Add + id: 647 + time: '2024-11-04T19:54:28.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/2121 From c5ef22c4f291f42feca517c526cb38f10ae45148 Mon Sep 17 00:00:00 2001 From: Milon Date: Mon, 4 Nov 2024 23:44:08 +0100 Subject: [PATCH 10/80] FIX THE FUCKING ENTITYWHITELIST (#2105) FUCK YOU I HATE YOU --- .../Prototypes/DeltaV/Voice/speech_emotes.yml | 22 +++++++++---------- .../Entities/Objects/Misc/mail_capsule.yml | 2 -- 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/Resources/Prototypes/DeltaV/Voice/speech_emotes.yml b/Resources/Prototypes/DeltaV/Voice/speech_emotes.yml index 0a776eab12c..be396f03cd4 100644 --- a/Resources/Prototypes/DeltaV/Voice/speech_emotes.yml +++ b/Resources/Prototypes/DeltaV/Voice/speech_emotes.yml @@ -27,7 +27,7 @@ - Vocal blacklist: components: - - BorrChassis + - BorgChassis chatMessages: [rings.] chatTriggers: - ring @@ -46,7 +46,7 @@ - Vocal blacklist: components: - - BorrChassis + - BorgChassis chatMessages: [pews.] chatTriggers: - pew @@ -63,7 +63,7 @@ - Vocal blacklist: components: - - BorrChassis + - BorgChassis chatMessages: [bangs.] chatTriggers: - bang @@ -81,7 +81,7 @@ - Vocal blacklist: components: - - BorrChassis + - BorgChassis chatMessages: [beeps.] chatTriggers: - beep @@ -99,7 +99,7 @@ - Vocal blacklist: components: - - BorrChassis + - BorgChassis chatMessages: [revs.] chatTriggers: - rev @@ -117,7 +117,7 @@ - Vocal blacklist: components: - - BorrChassis + - BorgChassis chatMessages: [caws.] chatTriggers: - caw @@ -136,7 +136,7 @@ - Vocal blacklist: components: - - BorrChassis + - BorgChassis chatMessages: [barks.] chatTriggers: - bark @@ -154,7 +154,7 @@ - Vocal blacklist: components: - - BorrChassis + - BorgChassis chatMessages: [snarls.] chatTriggers: - snarl @@ -172,7 +172,7 @@ - Vocal blacklist: components: - - BorrChassis + - BorgChassis chatMessages: [whines.] chatTriggers: - whine @@ -190,7 +190,7 @@ - Vocal blacklist: components: - - BorrChassis + - BorgChassis chatMessages: [howls.] chatTriggers: - howl @@ -208,7 +208,7 @@ - Vocal blacklist: components: - - BorrChassis + - BorgChassis chatMessages: [awoos.] chatTriggers: - awoo diff --git a/Resources/Prototypes/_NF/Entities/Objects/Misc/mail_capsule.yml b/Resources/Prototypes/_NF/Entities/Objects/Misc/mail_capsule.yml index 771d5cb8314..960c575ec8e 100644 --- a/Resources/Prototypes/_NF/Entities/Objects/Misc/mail_capsule.yml +++ b/Resources/Prototypes/_NF/Entities/Objects/Misc/mail_capsule.yml @@ -32,7 +32,6 @@ components: - Mail - Paper - - HyperlinkBook insertOnInteract: true priority: 3 food_slot: @@ -97,7 +96,6 @@ components: - Mail - Paper - - HyperlinkBook sprite: _NF/Objects/Misc/mail_capsule.rsi - type: Dumpable - type: Damageable From 1e7a83079c05b6a9172514703a20148ac1026085 Mon Sep 17 00:00:00 2001 From: Radezolid Date: Mon, 4 Nov 2024 20:49:18 -0300 Subject: [PATCH 11/80] Re-adds the fire-fighting door remote and modifies it. (#2007) * Revert "remove firefighting remote and bolting firelocks (#28330)" This reverts commit 67ad88d958505caa845de3f0b7be4d6ac68315c7. * me dumb forgot to add the remote. * Altered to only have maintenance access. * Forgot the comments + fixes the contraband tag. * Added firelock bolting + wires to it + went back to the old remote group. * Wires have to be cut to deconstruct * Fix lack of comments + moved files to DeltaV folder. * Uncomment the comment * Fixed the comments, again. --- .../Catalog/Fills/Lockers/engineer.yml | 2 ++ .../Prototypes/DeltaV/Access/engineering.yml | 5 +++++ .../Entities/Objects/Devices/door_remote.yml | 17 +++++++++++++++++ Resources/Prototypes/DeltaV/Wires/layouts.yml | 9 +++++++++ .../Structures/Doors/Firelocks/firelock.yml | 7 +++++++ .../Graphs/structures/firelock.yml | 18 ++++++++++++++++++ 6 files changed, 58 insertions(+) create mode 100644 Resources/Prototypes/DeltaV/Access/engineering.yml create mode 100644 Resources/Prototypes/DeltaV/Wires/layouts.yml diff --git a/Resources/Prototypes/Catalog/Fills/Lockers/engineer.yml b/Resources/Prototypes/Catalog/Fills/Lockers/engineer.yml index 0477d250db2..3723ccbceea 100644 --- a/Resources/Prototypes/Catalog/Fills/Lockers/engineer.yml +++ b/Resources/Prototypes/Catalog/Fills/Lockers/engineer.yml @@ -94,6 +94,7 @@ - id: GasAnalyzer - id: MedkitOxygenFilled - id: HolofanProjector + - id: DoorRemoteFirefight # DeltaV - Re-added fire-fighting remote. - id: RCD - id: RCDAmmo - id: LunchboxEngineeringFilledRandom # Delta-V Lunchboxes! @@ -112,6 +113,7 @@ - id: GasAnalyzer - id: MedkitOxygenFilled - id: HolofanProjector + - id: DoorRemoteFirefight # DeltaV - Re-added fire-fighting remote. - id: RCD - id: RCDAmmo - id: LunchboxEngineeringFilledRandom # Delta-V Lunchboxes! diff --git a/Resources/Prototypes/DeltaV/Access/engineering.yml b/Resources/Prototypes/DeltaV/Access/engineering.yml new file mode 100644 index 00000000000..7f6557fb8f5 --- /dev/null +++ b/Resources/Prototypes/DeltaV/Access/engineering.yml @@ -0,0 +1,5 @@ +- type: accessGroup + id: FireFight + tags: + - Engineering + - Atmospherics diff --git a/Resources/Prototypes/DeltaV/Entities/Objects/Devices/door_remote.yml b/Resources/Prototypes/DeltaV/Entities/Objects/Devices/door_remote.yml index 27fa0a36530..fc10d1aa032 100644 --- a/Resources/Prototypes/DeltaV/Entities/Objects/Devices/door_remote.yml +++ b/Resources/Prototypes/DeltaV/Entities/Objects/Devices/door_remote.yml @@ -13,3 +13,20 @@ - type: Access groups: - Justice + +- type: entity + parent: [DoorRemoteDefault, BaseEngineeringContraband] + id: DoorRemoteFirefight + name: fire-fighting door remote + description: A gadget which can open and bolt FireDoors remotely. + components: + - type: Sprite + layers: + - state: door_remotebase + - state: door_remotelightscolour + color: "#ff9900" + - state: door_remotescreencolour + color: "#e02020" + - type: Access + groups: + - FireFight diff --git a/Resources/Prototypes/DeltaV/Wires/layouts.yml b/Resources/Prototypes/DeltaV/Wires/layouts.yml new file mode 100644 index 00000000000..fd1e77dc898 --- /dev/null +++ b/Resources/Prototypes/DeltaV/Wires/layouts.yml @@ -0,0 +1,9 @@ +- type: wireLayout + id: FireLock + wires: + - !type:PowerWireAction + pulseTimeout: 20 + - !type:DoorBoltWireAction + - !type:DoorBoltLightWireAction + - !type:LogWireAction + - !type:AiInteractWireAction diff --git a/Resources/Prototypes/Entities/Structures/Doors/Firelocks/firelock.yml b/Resources/Prototypes/Entities/Structures/Doors/Firelocks/firelock.yml index a4cb78e67b7..19a7894471a 100644 --- a/Resources/Prototypes/Entities/Structures/Doors/Firelocks/firelock.yml +++ b/Resources/Prototypes/Entities/Structures/Doors/Firelocks/firelock.yml @@ -88,6 +88,12 @@ - type: Appearance - type: WiresVisuals - type: WiresPanel + # DeltaV modifications - Revert fire-fighting door remote removal. + - type: Wires + boardName: wires-board-name-firelock + layoutId: FireLock + alwaysRandomize: true + # DeltaV - End of modifications. - type: UserInterface interfaces: enum.WiresUiKey.Key: @@ -105,6 +111,7 @@ arc: 360 - type: StaticPrice price: 150 + - type: DoorBolt # DeltaV - Revert fire-fighting door remote removal. - type: AccessReader access: [ [ "Engineering" ] ] - type: PryUnpowered diff --git a/Resources/Prototypes/Recipes/Construction/Graphs/structures/firelock.yml b/Resources/Prototypes/Recipes/Construction/Graphs/structures/firelock.yml index 6b6d5c4895a..37b70b90285 100644 --- a/Resources/Prototypes/Recipes/Construction/Graphs/structures/firelock.yml +++ b/Resources/Prototypes/Recipes/Construction/Graphs/structures/firelock.yml @@ -135,6 +135,12 @@ conditions: - !type:DoorWelded welded: true + # DeltaV modifications - Revert fire-fighting door remote removal, added wires to hack it. + - !type:DoorBolted + value: false + - !type:WirePanel + - !type:AllWiresCut + # DeltaV end of modifications. steps: - tool: Anchoring doAfter: 0.25 @@ -168,6 +174,12 @@ conditions: - !type:EntityAnchored anchored: true + # DeltaV modifications - Revert fire-fighting door remote removal, added wires to hack it. + - !type:DoorBolted + value: false + - !type:WirePanel + - !type:AllWiresCut + # DeltaV end of modifications. steps: - tool: Anchoring doAfter: 1 @@ -182,6 +194,12 @@ conditions: - !type:DoorWelded welded: true + # DeltaV modifications - Revert fire-fighting door remote removal, added wires to hack it. + - !type:DoorBolted + value: false + - !type:WirePanel + - !type:AllWiresCut + # DeltaV end of modifications. steps: - tool: Anchoring doAfter: 0.25 From 719949124a04695080f4c72681afccd329c2fd7f Mon Sep 17 00:00:00 2001 From: Delta-V bot <135767721+DeltaV-Bot@users.noreply.github.com> Date: Tue, 5 Nov 2024 00:49:37 +0100 Subject: [PATCH 12/80] Automatic changelog update --- Resources/Changelog/DeltaVChangelog.yml | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/Resources/Changelog/DeltaVChangelog.yml b/Resources/Changelog/DeltaVChangelog.yml index 8276d411101..3719e6ef248 100644 --- a/Resources/Changelog/DeltaVChangelog.yml +++ b/Resources/Changelog/DeltaVChangelog.yml @@ -1,10 +1,4 @@ Entries: -- author: TJohnson - changes: - - message: Seclites now robust as advertised in item description. - type: Tweak - id: 148 - time: '2023-11-26T00:36:54.0000000+00:00' - author: Colin-Tel changes: - message: Asterisk Station is now protected by additional meteor netting and is @@ -3704,3 +3698,11 @@ id: 647 time: '2024-11-04T19:54:28.0000000+00:00' url: https://github.com/DeltaV-Station/Delta-v/pull/2121 +- author: Radezolid + changes: + - message: Re-added the fire-fighting door remote to atmospheric technicians lockers, + but it only has maintenance access now. + type: Add + id: 648 + time: '2024-11-04T23:49:18.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/2007 From dd5c593ea1bf2ab893da2b952709f774c5c59b67 Mon Sep 17 00:00:00 2001 From: deltanedas <39013340+deltanedas@users.noreply.github.com> Date: Tue, 5 Nov 2024 20:20:11 +0000 Subject: [PATCH 13/80] add secborg to silicons department (#2120) Co-authored-by: deltanedas <@deltanedas:kde.org> --- Resources/Prototypes/Roles/Jobs/departments.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/Resources/Prototypes/Roles/Jobs/departments.yml b/Resources/Prototypes/Roles/Jobs/departments.yml index 64d811004c5..64e9d7b6792 100644 --- a/Resources/Prototypes/Roles/Jobs/departments.yml +++ b/Resources/Prototypes/Roles/Jobs/departments.yml @@ -143,6 +143,7 @@ roles: - Borg - MedicalBorg # DeltaV - roundstart mediborg job + - SecurityBorg # Delta-V : Security Borg - StationAi primary: false # DeltaV - removed from primary dept From c10de70e082d7ba486c21da3032142d39376de78 Mon Sep 17 00:00:00 2001 From: Radezolid Date: Tue, 5 Nov 2024 17:20:13 -0300 Subject: [PATCH 14/80] Fix the fire-fight remote PR changelog. (#2124) Untroll the changelog. --- Resources/Changelog/DeltaVChangelog.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Resources/Changelog/DeltaVChangelog.yml b/Resources/Changelog/DeltaVChangelog.yml index 3719e6ef248..c025e359789 100644 --- a/Resources/Changelog/DeltaVChangelog.yml +++ b/Resources/Changelog/DeltaVChangelog.yml @@ -3700,8 +3700,7 @@ url: https://github.com/DeltaV-Station/Delta-v/pull/2121 - author: Radezolid changes: - - message: Re-added the fire-fighting door remote to atmospheric technicians lockers, - but it only has maintenance access now. + - message: Re-added the fire-fighting door remote to atmospheric technicians lockers, firelocks can now be bolted and they are hackable. type: Add id: 648 time: '2024-11-04T23:49:18.0000000+00:00' From 1e0c4f3d11ad5e220aa5ac2fe40aaf75fe63c03e Mon Sep 17 00:00:00 2001 From: Milon Date: Wed, 6 Nov 2024 10:50:48 +0100 Subject: [PATCH 15/80] the return of player character spawners (feat. mindshield bullshit) (#2072) * aaaaaaaaaaa * guh * epic fail * fuck it we ball --- .../GhostRoleCharacterSpawnerComponent.cs | 19 ++++++++---- .../Ghost/Roles/GhostRoleSystem.Character.cs | 16 +++++----- .../Entities/Markers/Spawners/ghost_roles.yml | 30 ++++++++++++++++--- 3 files changed, 47 insertions(+), 18 deletions(-) diff --git a/Content.Server/DeltaV/Ghost/Roles/Components/GhostRoleCharacterSpawnerComponent.cs b/Content.Server/DeltaV/Ghost/Roles/Components/GhostRoleCharacterSpawnerComponent.cs index e2aaa94d948..63eb96f520a 100644 --- a/Content.Server/DeltaV/Ghost/Roles/Components/GhostRoleCharacterSpawnerComponent.cs +++ b/Content.Server/DeltaV/Ghost/Roles/Components/GhostRoleCharacterSpawnerComponent.cs @@ -1,4 +1,7 @@ -namespace Content.Server.Ghost.Roles.Components +using Content.Shared.Roles; +using Robust.Shared.Prototypes; + +namespace Content.Server.Ghost.Roles.Components { /// /// Allows a ghost to take this role, spawning their selected character. @@ -7,16 +10,22 @@ [Access(typeof(GhostRoleSystem))] public sealed partial class GhostRoleCharacterSpawnerComponent : Component { - [ViewVariables(VVAccess.ReadWrite)] [DataField("deleteOnSpawn")] + [DataField] public bool DeleteOnSpawn = true; - [ViewVariables(VVAccess.ReadWrite)] [DataField("availableTakeovers")] + [DataField] public int AvailableTakeovers = 1; [ViewVariables] public int CurrentTakeovers = 0; - [ViewVariables(VVAccess.ReadWrite)] [DataField("outfitPrototype")] - public string OutfitPrototype = "PassengerGear"; + [DataField] + public ProtoId OutfitPrototype = "PassengerGear"; + + /// + /// Components to give on spawn. + /// + [DataField] + public ComponentRegistry AddedComponents = new(); } } diff --git a/Content.Server/DeltaV/Ghost/Roles/GhostRoleSystem.Character.cs b/Content.Server/DeltaV/Ghost/Roles/GhostRoleSystem.Character.cs index e13050add48..f8320f7514c 100644 --- a/Content.Server/DeltaV/Ghost/Roles/GhostRoleSystem.Character.cs +++ b/Content.Server/DeltaV/Ghost/Roles/GhostRoleSystem.Character.cs @@ -5,8 +5,6 @@ using Content.Server.Station.Systems; using Content.Shared.Mind.Components; using Content.Shared.Preferences; -using Content.Shared.Roles; -using Robust.Shared.Prototypes; namespace Content.Server.Ghost.Roles { @@ -15,9 +13,12 @@ public sealed partial class GhostRoleSystem [Dependency] private readonly IServerPreferencesManager _prefs = default!; [Dependency] private readonly IEntityManager _entityManager = default!; - private void OnSpawnerTakeCharacter( EntityUid uid, GhostRoleCharacterSpawnerComponent component, + private void OnSpawnerTakeCharacter(Entity ent, ref TakeGhostRoleEvent args) { + var uid = ent.Owner; + var component = ent.Comp; + if (!TryComp(uid, out GhostRoleComponent? ghostRole) || ghostRole.Taken) { @@ -31,10 +32,6 @@ private void OnSpawnerTakeCharacter( EntityUid uid, GhostRoleCharacterSpawnerCom .SpawnPlayerMob(Transform(uid).Coordinates, null, character, null); _transform.AttachToGridOrMap(mob); - string? outfit = null; - if (_prototype.TryIndex(component.OutfitPrototype, out var outfitProto)) - outfit = outfitProto.ID; - var spawnedEvent = new GhostRoleSpawnerUsedEvent(uid, mob); RaiseLocalEvent(mob, spawnedEvent); @@ -42,8 +39,9 @@ private void OnSpawnerTakeCharacter( EntityUid uid, GhostRoleCharacterSpawnerCom GhostRoleInternalCreateMindAndTransfer(args.Player, uid, mob, ghostRole); - if (outfit != null) - SetOutfitCommand.SetOutfit(mob, outfit, _entityManager); + SetOutfitCommand.SetOutfit(mob, component.OutfitPrototype, _entityManager); + + EntityManager.AddComponents(mob, component.AddedComponents); if (++component.CurrentTakeovers < component.AvailableTakeovers) { diff --git a/Resources/Prototypes/DeltaV/Entities/Markers/Spawners/ghost_roles.yml b/Resources/Prototypes/DeltaV/Entities/Markers/Spawners/ghost_roles.yml index a3cf33bf1f3..0b822f9a1b4 100644 --- a/Resources/Prototypes/DeltaV/Entities/Markers/Spawners/ghost_roles.yml +++ b/Resources/Prototypes/DeltaV/Entities/Markers/Spawners/ghost_roles.yml @@ -1,14 +1,14 @@ - type: entity - categories: [ HideSpawnMenu, Spawner ] + categories: [ Spawner ] parent: MarkerBase id: SpawnPointPlayerCharacter name: ghost role spawn point - suffix: player character, DO NOT MAP + suffix: player character components: - type: GhostRole name: Roleplay Ghost Role - description: Placeholder - rules: Placeholder + description: This is a custom event ghost role. + rules: ghost-role-component-default-rules - type: GhostRoleCharacterSpawner - type: Sprite sprite: Markers/jobs.rsi @@ -17,6 +17,28 @@ - sprite: Mobs/Species/Human/parts.rsi state: full +- type: entity + parent: SpawnPointPlayerCharacter + id: SpawnPointPlayerCharacterMindShield + name: ghost role spawn point + suffix: mindshielded, player character + components: + - type: GhostRoleCharacterSpawner + addedComponents: + - type: MindShield + +- type: entity + parent: SpawnPointPlayerCharacter + id: SpawnPointPlayerCharacterTargetImmune + name: ghost role spawn point + suffix: mindshielded, KillObjectiveImmune, player character + components: + - type: GhostRoleCharacterSpawner + addedComponents: + - type: MindShield + - type: AntagImmune + - type: TargetObjectiveImmune + - type: entity # Part of ListeningPost categories: [ HideSpawnMenu, Spawner ] parent: BaseAntagSpawner From e7065f0e1f4503db9d5d8d415f2e99050b3cdd24 Mon Sep 17 00:00:00 2001 From: Milon Date: Wed, 6 Nov 2024 18:30:54 +0100 Subject: [PATCH 16/80] stocks trading (#2103) * sort of works * fix * oh right * admin abuse * buy/sell events * price history, better error handling * joke * buying and selling * access handling * IT'S FINALLY REAL * fixes * AAAAAAAAAAAAAAAAA * i keep fucking forgetting things * FUCKING * move company structs out of the comp * ok im going to sleep * Revert "oh right" This reverts commit 8681e5a07b4d059fa7db718dd3ec6f25f0ad05d9. * Revert "fix" This reverts commit 3992ec99fd96dc7b2df0767e1b83d5418d86a248. * address reviews --- .../Cartridges/PriceHistoryTable.xaml | 25 ++ .../Cartridges/PriceHistoryTable.xaml.cs | 75 ++++ .../Cartridges/StockTradingUi.cs | 45 ++ .../Cartridges/StockTradingUiFragment.xaml | 44 ++ .../Cartridges/StockTradingUiFragment.xaml.cs | 269 ++++++++++++ .../Components/StationStockMarketComponent.cs | 71 ++++ Content.Server/DeltaV/Cargo/StocksCommands.cs | 135 ++++++ .../DeltaV/Cargo/Systems/StockMarketSystem.cs | 385 ++++++++++++++++++ .../StockTradingCartridgeComponent.cs | 11 + .../Cartridges/StockTradingCartridgeSystem.cs | 101 +++++ .../Cartridges/StockTradingUiMessageEvent.cs | 19 + .../Cartridges/StockTradingUiState.cs | 66 +++ .../en-US/deltav/cargo/stocks-comapnies.ftl | 6 + .../en-US/deltav/cargo/stocks-commands.ftl | 13 + .../deltav/cartridge-loader/cartridges.ftl | 39 +- .../DeltaV/Catalog/Fills/Lockers/heads.yml | 1 + .../Entities/Objects/Devices/cartridges.yml | 24 ++ .../DeltaV/Entities/Stations/base.yml | 21 + .../Entities/Objects/Devices/pda.yml | 18 +- .../Entities/Stations/nanotrasen.yml | 1 + .../DeltaV/Misc/program_icons.rsi/meta.json | 14 + .../Misc/program_icons.rsi/stock_trading.png | Bin 0 -> 1012 bytes .../Devices/cartridge.rsi/cart-stonk.png | Bin 0 -> 367 bytes .../Objects/Devices/cartridge.rsi/meta.json | 3 + 24 files changed, 1378 insertions(+), 8 deletions(-) create mode 100644 Content.Client/DeltaV/CartridgeLoader/Cartridges/PriceHistoryTable.xaml create mode 100644 Content.Client/DeltaV/CartridgeLoader/Cartridges/PriceHistoryTable.xaml.cs create mode 100644 Content.Client/DeltaV/CartridgeLoader/Cartridges/StockTradingUi.cs create mode 100644 Content.Client/DeltaV/CartridgeLoader/Cartridges/StockTradingUiFragment.xaml create mode 100644 Content.Client/DeltaV/CartridgeLoader/Cartridges/StockTradingUiFragment.xaml.cs create mode 100644 Content.Server/DeltaV/Cargo/Components/StationStockMarketComponent.cs create mode 100644 Content.Server/DeltaV/Cargo/StocksCommands.cs create mode 100644 Content.Server/DeltaV/Cargo/Systems/StockMarketSystem.cs create mode 100644 Content.Server/DeltaV/CartridgeLoader/Cartridges/StockTradingCartridgeComponent.cs create mode 100644 Content.Server/DeltaV/CartridgeLoader/Cartridges/StockTradingCartridgeSystem.cs create mode 100644 Content.Shared/DeltaV/CartridgeLoader/Cartridges/StockTradingUiMessageEvent.cs create mode 100644 Content.Shared/DeltaV/CartridgeLoader/Cartridges/StockTradingUiState.cs create mode 100644 Resources/Locale/en-US/deltav/cargo/stocks-comapnies.ftl create mode 100644 Resources/Locale/en-US/deltav/cargo/stocks-commands.ftl create mode 100644 Resources/Prototypes/DeltaV/Entities/Stations/base.yml create mode 100644 Resources/Textures/DeltaV/Misc/program_icons.rsi/meta.json create mode 100644 Resources/Textures/DeltaV/Misc/program_icons.rsi/stock_trading.png create mode 100644 Resources/Textures/DeltaV/Objects/Devices/cartridge.rsi/cart-stonk.png diff --git a/Content.Client/DeltaV/CartridgeLoader/Cartridges/PriceHistoryTable.xaml b/Content.Client/DeltaV/CartridgeLoader/Cartridges/PriceHistoryTable.xaml new file mode 100644 index 00000000000..058bde07e9c --- /dev/null +++ b/Content.Client/DeltaV/CartridgeLoader/Cartridges/PriceHistoryTable.xaml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + diff --git a/Content.Client/DeltaV/CartridgeLoader/Cartridges/PriceHistoryTable.xaml.cs b/Content.Client/DeltaV/CartridgeLoader/Cartridges/PriceHistoryTable.xaml.cs new file mode 100644 index 00000000000..f5798f44c42 --- /dev/null +++ b/Content.Client/DeltaV/CartridgeLoader/Cartridges/PriceHistoryTable.xaml.cs @@ -0,0 +1,75 @@ +using System.Linq; +using Robust.Client.AutoGenerated; +using Robust.Client.Graphics; +using Robust.Client.UserInterface.Controls; +using Robust.Client.UserInterface.XAML; + +namespace Content.Client.DeltaV.CartridgeLoader.Cartridges; + +[GenerateTypedNameReferences] +public sealed partial class PriceHistoryTable : BoxContainer +{ + public PriceHistoryTable() + { + RobustXamlLoader.Load(this); + + // Create the stylebox here so we can use the colors from StockTradingUi + var styleBox = new StyleBoxFlat + { + BackgroundColor = StockTradingUiFragment.PriceBackgroundColor, + ContentMarginLeftOverride = 6, + ContentMarginRightOverride = 6, + ContentMarginTopOverride = 4, + ContentMarginBottomOverride = 4, + BorderColor = StockTradingUiFragment.BorderColor, + BorderThickness = new Thickness(1), + }; + + HistoryPanel.PanelOverride = styleBox; + } + + public void Update(List priceHistory) + { + PriceGrid.RemoveAllChildren(); + + // Take last 5 prices + var lastFivePrices = priceHistory.TakeLast(5).ToList(); + + for (var i = 0; i < lastFivePrices.Count; i++) + { + var price = lastFivePrices[i]; + var previousPrice = i > 0 ? lastFivePrices[i - 1] : price; + var priceChange = ((price - previousPrice) / previousPrice) * 100; + + var entryContainer = new BoxContainer + { + Orientation = LayoutOrientation.Vertical, + MinWidth = 80, + HorizontalAlignment = HAlignment.Center, + }; + + var priceLabel = new Label + { + Text = $"${price:F2}", + HorizontalAlignment = HAlignment.Center, + }; + + var changeLabel = new Label + { + Text = $"{(priceChange >= 0 ? "+" : "")}{priceChange:F2}%", + HorizontalAlignment = HAlignment.Center, + StyleClasses = { "LabelSubText" }, + Modulate = priceChange switch + { + > 0 => StockTradingUiFragment.PositiveColor, + < 0 => StockTradingUiFragment.NegativeColor, + _ => StockTradingUiFragment.NeutralColor, + } + }; + + entryContainer.AddChild(priceLabel); + entryContainer.AddChild(changeLabel); + PriceGrid.AddChild(entryContainer); + } + } +} diff --git a/Content.Client/DeltaV/CartridgeLoader/Cartridges/StockTradingUi.cs b/Content.Client/DeltaV/CartridgeLoader/Cartridges/StockTradingUi.cs new file mode 100644 index 00000000000..45704ee2349 --- /dev/null +++ b/Content.Client/DeltaV/CartridgeLoader/Cartridges/StockTradingUi.cs @@ -0,0 +1,45 @@ +using Robust.Client.UserInterface; +using Content.Client.UserInterface.Fragments; +using Content.Shared.CartridgeLoader; +using Content.Shared.CartridgeLoader.Cartridges; + +namespace Content.Client.DeltaV.CartridgeLoader.Cartridges; + +public sealed partial class StockTradingUi : UIFragment +{ + private StockTradingUiFragment? _fragment; + + public override Control GetUIFragmentRoot() + { + return _fragment!; + } + + public override void Setup(BoundUserInterface userInterface, EntityUid? fragmentOwner) + { + _fragment = new StockTradingUiFragment(); + + _fragment.OnBuyButtonPressed += (company, amount) => + { + SendStockTradingUiMessage(StockTradingUiAction.Buy, company, amount, userInterface); + }; + _fragment.OnSellButtonPressed += (company, amount) => + { + SendStockTradingUiMessage(StockTradingUiAction.Sell, company, amount, userInterface); + }; + } + + public override void UpdateState(BoundUserInterfaceState state) + { + if (state is StockTradingUiState cast) + { + _fragment?.UpdateState(cast); + } + } + + private static void SendStockTradingUiMessage(StockTradingUiAction action, int company, float amount, BoundUserInterface userInterface) + { + var newsMessage = new StockTradingUiMessageEvent(action, company, amount); + var message = new CartridgeUiMessage(newsMessage); + userInterface.SendMessage(message); + } +} diff --git a/Content.Client/DeltaV/CartridgeLoader/Cartridges/StockTradingUiFragment.xaml b/Content.Client/DeltaV/CartridgeLoader/Cartridges/StockTradingUiFragment.xaml new file mode 100644 index 00000000000..00b45584cc4 --- /dev/null +++ b/Content.Client/DeltaV/CartridgeLoader/Cartridges/StockTradingUiFragment.xaml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/Content.Client/DeltaV/CartridgeLoader/Cartridges/StockTradingUiFragment.xaml.cs b/Content.Client/DeltaV/CartridgeLoader/Cartridges/StockTradingUiFragment.xaml.cs new file mode 100644 index 00000000000..b44e8f44c70 --- /dev/null +++ b/Content.Client/DeltaV/CartridgeLoader/Cartridges/StockTradingUiFragment.xaml.cs @@ -0,0 +1,269 @@ +using System.Linq; +using Content.Client.Administration.UI.CustomControls; +using Content.Shared.CartridgeLoader.Cartridges; +using Robust.Client.AutoGenerated; +using Robust.Client.Graphics; +using Robust.Client.UserInterface.Controls; +using Robust.Client.UserInterface.XAML; + +namespace Content.Client.DeltaV.CartridgeLoader.Cartridges; + +[GenerateTypedNameReferences] +public sealed partial class StockTradingUiFragment : BoxContainer +{ + private readonly Dictionary _companyEntries = new(); + + // Event handlers for the parent UI + public event Action? OnBuyButtonPressed; + public event Action? OnSellButtonPressed; + + // Define colors + public static readonly Color PositiveColor = Color.FromHex("#00ff00"); // Green + public static readonly Color NegativeColor = Color.FromHex("#ff0000"); // Red + public static readonly Color NeutralColor = Color.FromHex("#ffffff"); // White + public static readonly Color BackgroundColor = Color.FromHex("#25252a"); // Dark grey + public static readonly Color PriceBackgroundColor = Color.FromHex("#1a1a1a"); // Darker grey + public static readonly Color BorderColor = Color.FromHex("#404040"); // Light grey + + public StockTradingUiFragment() + { + RobustXamlLoader.Load(this); + } + + public void UpdateState(StockTradingUiState state) + { + NoEntries.Visible = state.Entries.Count == 0; + Balance.Text = Loc.GetString("stock-trading-balance", ("balance", state.Balance)); + + // Clear all existing entries + foreach (var entry in _companyEntries.Values) + { + entry.Container.RemoveAllChildren(); + } + _companyEntries.Clear(); + Entries.RemoveAllChildren(); + + // Add new entries + for (var i = 0; i < state.Entries.Count; i++) + { + var company = state.Entries[i]; + var entry = new CompanyEntry(i, company.LocalizedDisplayName, OnBuyButtonPressed, OnSellButtonPressed); + _companyEntries[i] = entry; + Entries.AddChild(entry.Container); + + var ownedStocks = state.OwnedStocks.GetValueOrDefault(i, 0); + entry.Update(company, ownedStocks); + } + } + + private sealed class CompanyEntry + { + public readonly BoxContainer Container; + private readonly Label _nameLabel; + private readonly Label _priceLabel; + private readonly Label _changeLabel; + private readonly Button _sellButton; + private readonly Button _buyButton; + private readonly Label _sharesLabel; + private readonly LineEdit _amountEdit; + private readonly PriceHistoryTable _priceHistory; + + public CompanyEntry(int companyIndex, + string displayName, + Action? onBuyPressed, + Action? onSellPressed) + { + Container = new BoxContainer + { + Orientation = LayoutOrientation.Vertical, + HorizontalExpand = true, + Margin = new Thickness(0, 0, 0, 2), + }; + + // Company info panel + var companyPanel = new PanelContainer(); + + var mainContent = new BoxContainer + { + Orientation = LayoutOrientation.Vertical, + HorizontalExpand = true, + Margin = new Thickness(8), + }; + + // Top row with company name and price info + var topRow = new BoxContainer + { + Orientation = LayoutOrientation.Horizontal, + HorizontalExpand = true, + }; + + _nameLabel = new Label + { + HorizontalExpand = true, + Text = displayName, + }; + + // Create a panel for price and change + var pricePanel = new PanelContainer + { + HorizontalAlignment = HAlignment.Right, + }; + + // Style the price panel + var priceStyleBox = new StyleBoxFlat + { + BackgroundColor = BackgroundColor, + ContentMarginLeftOverride = 8, + ContentMarginRightOverride = 8, + ContentMarginTopOverride = 4, + ContentMarginBottomOverride = 4, + BorderColor = BorderColor, + BorderThickness = new Thickness(1), + }; + + pricePanel.PanelOverride = priceStyleBox; + + // Container for price and change labels + var priceContainer = new BoxContainer + { + Orientation = LayoutOrientation.Horizontal, + }; + + _priceLabel = new Label(); + + _changeLabel = new Label + { + HorizontalAlignment = HAlignment.Right, + Modulate = NeutralColor, + Margin = new Thickness(15, 0, 0, 0), + }; + + priceContainer.AddChild(_priceLabel); + priceContainer.AddChild(_changeLabel); + pricePanel.AddChild(priceContainer); + + topRow.AddChild(_nameLabel); + topRow.AddChild(pricePanel); + + // Add the top row + mainContent.AddChild(topRow); + + // Add the price history table between top and bottom rows + _priceHistory = new PriceHistoryTable(); + mainContent.AddChild(_priceHistory); + + // Trading controls (bottom row) + var bottomRow = new BoxContainer + { + Orientation = LayoutOrientation.Horizontal, + HorizontalExpand = true, + Margin = new Thickness(0, 5, 0, 0), + }; + + _sharesLabel = new Label + { + Text = Loc.GetString("stock-trading-owned-shares"), + MinWidth = 100, + }; + + _amountEdit = new LineEdit + { + PlaceHolder = Loc.GetString("stock-trading-amount-placeholder"), + HorizontalExpand = true, + MinWidth = 80, + }; + + var buttonContainer = new BoxContainer + { + Orientation = LayoutOrientation.Horizontal, + HorizontalAlignment = HAlignment.Right, + MinWidth = 140, + }; + + _buyButton = new Button + { + Text = Loc.GetString("stock-trading-buy-button"), + MinWidth = 65, + Margin = new Thickness(3, 0, 3, 0), + }; + + _sellButton = new Button + { + Text = Loc.GetString("stock-trading-sell-button"), + MinWidth = 65, + }; + + buttonContainer.AddChild(_buyButton); + buttonContainer.AddChild(_sellButton); + + bottomRow.AddChild(_sharesLabel); + bottomRow.AddChild(_amountEdit); + bottomRow.AddChild(buttonContainer); + + // Add the bottom row last + mainContent.AddChild(bottomRow); + + companyPanel.AddChild(mainContent); + Container.AddChild(companyPanel); + + // Add horizontal separator after the panel + var separator = new HSeparator + { + Margin = new Thickness(5, 3, 5, 5), + }; + Container.AddChild(separator); + + // Button click events + _buyButton.OnPressed += _ => + { + if (float.TryParse(_amountEdit.Text, out var amount) && amount > 0) + onBuyPressed?.Invoke(companyIndex, amount); + }; + + _sellButton.OnPressed += _ => + { + if (float.TryParse(_amountEdit.Text, out var amount) && amount > 0) + onSellPressed?.Invoke(companyIndex, amount); + }; + + // There has to be a better way of doing this + _amountEdit.OnTextChanged += args => + { + var newText = string.Concat(args.Text.Where(char.IsDigit)); + if (newText != args.Text) + _amountEdit.Text = newText; + }; + } + + public void Update(StockCompanyStruct company, int ownedStocks) + { + _nameLabel.Text = company.LocalizedDisplayName; + _priceLabel.Text = $"${company.CurrentPrice:F2}"; + _sharesLabel.Text = Loc.GetString("stock-trading-owned-shares", ("shares", ownedStocks)); + + var priceChange = 0f; + if (company.PriceHistory is { Count: > 0 }) + { + var previousPrice = company.PriceHistory[^1]; + priceChange = (company.CurrentPrice - previousPrice) / previousPrice * 100; + } + + _changeLabel.Text = $"{(priceChange >= 0 ? "+" : "")}{priceChange:F2}%"; + + // Update color based on price change + _changeLabel.Modulate = priceChange switch + { + > 0 => PositiveColor, + < 0 => NegativeColor, + _ => NeutralColor, + }; + + // Update the price history table if not null + if (company.PriceHistory != null) + _priceHistory.Update(company.PriceHistory); + + // Disable sell button if no shares owned + _sellButton.Disabled = ownedStocks <= 0; + } + } +} diff --git a/Content.Server/DeltaV/Cargo/Components/StationStockMarketComponent.cs b/Content.Server/DeltaV/Cargo/Components/StationStockMarketComponent.cs new file mode 100644 index 00000000000..4ea9bd43133 --- /dev/null +++ b/Content.Server/DeltaV/Cargo/Components/StationStockMarketComponent.cs @@ -0,0 +1,71 @@ +using System.Numerics; +using Content.Server.DeltaV.Cargo.Systems; +using Content.Server.DeltaV.CartridgeLoader.Cartridges; +using Content.Shared.CartridgeLoader.Cartridges; +using Robust.Shared.Audio; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom; +using Robust.Shared.Timing; + +namespace Content.Server.DeltaV.Cargo.Components; + +[RegisterComponent, AutoGenerateComponentPause] +[Access(typeof(StockMarketSystem), typeof(StockTradingCartridgeSystem))] +public sealed partial class StationStockMarketComponent : Component +{ + /// + /// The list of companies you can invest in + /// + [DataField] + public List Companies = []; + + /// + /// The list of shares owned by the station + /// + [DataField] + public Dictionary StockOwnership = new(); + + /// + /// The interval at which the stock market updates + /// + [DataField] + public TimeSpan UpdateInterval = TimeSpan.FromSeconds(600); // 10 minutes + + /// + /// The timespan of next update. + /// + [DataField(customTypeSerializer: typeof(TimeOffsetSerializer))] + [AutoPausedField] + public TimeSpan NextUpdate = TimeSpan.Zero; + + /// + /// The sound to play after selling or buying stocks + /// + [DataField] + public SoundSpecifier ConfirmSound = new SoundPathSpecifier("/Audio/Effects/Cargo/ping.ogg"); + + /// + /// The sound to play if the don't have access to buy or sell stocks + /// + [DataField] + public SoundSpecifier DenySound = new SoundPathSpecifier("/Audio/Effects/Cargo/buzz_sigh.ogg"); + + // These work well as presets but can be changed in the yaml + [DataField] + public List MarketChanges = + [ + new() { Chance = 0.86f, Range = new Vector2(-0.05f, 0.05f) }, // Minor + new() { Chance = 0.10f, Range = new Vector2(-0.3f, 0.2f) }, // Moderate + new() { Chance = 0.03f, Range = new Vector2(-0.5f, 1.5f) }, // Major + new() { Chance = 0.01f, Range = new Vector2(-0.9f, 4.0f) }, // Catastrophic + ]; +} + +[DataDefinition] +public sealed partial class MarketChange +{ + [DataField(required: true)] + public float Chance; + + [DataField(required: true)] + public Vector2 Range; +} diff --git a/Content.Server/DeltaV/Cargo/StocksCommands.cs b/Content.Server/DeltaV/Cargo/StocksCommands.cs new file mode 100644 index 00000000000..dfe1776f666 --- /dev/null +++ b/Content.Server/DeltaV/Cargo/StocksCommands.cs @@ -0,0 +1,135 @@ +using Content.Server.Administration; +using Content.Server.DeltaV.Cargo.Components; +using Content.Server.DeltaV.Cargo.Systems; +using Content.Shared.Administration; +using Content.Shared.CartridgeLoader.Cartridges; +using Robust.Shared.Console; + +namespace Content.Server.DeltaV.Cargo; + +[AdminCommand(AdminFlags.Fun)] +public sealed class ChangeStocksPriceCommand : IConsoleCommand +{ + public string Command => "changestocksprice"; + public string Description => Loc.GetString("cmd-changestocksprice-desc"); + public string Help => Loc.GetString("cmd-changestocksprice-help", ("command", Command)); + + [Dependency] private readonly IEntityManager _entityManager = default!; + [Dependency] private readonly IEntitySystemManager _entitySystemManager = default!; + + public void Execute(IConsoleShell shell, string argStr, string[] args) + { + if (args.Length < 2) + { + shell.WriteLine(Loc.GetString("shell-wrong-arguments-number")); + return; + } + + if (!int.TryParse(args[0], out var companyIndex)) + { + shell.WriteError(Loc.GetString("shell-argument-must-be-number")); + return; + } + + if (!float.TryParse(args[1], out var newPrice)) + { + shell.WriteError(Loc.GetString("shell-argument-must-be-number")); + return; + } + + EntityUid? targetStation = null; + if (args.Length > 2) + { + if (!EntityUid.TryParse(args[2], out var station)) + { + shell.WriteError(Loc.GetString("shell-entity-uid-must-be-number")); + return; + } + targetStation = station; + } + + var stockMarket = _entitySystemManager.GetEntitySystem(); + var query = _entityManager.EntityQueryEnumerator(); + + while (query.MoveNext(out var uid, out var comp)) + { + // Skip if we're looking for a specific station and this isn't it + if (targetStation != null && uid != targetStation) + continue; + + if (stockMarket.TryChangeStocksPrice(uid, comp, newPrice, companyIndex)) + { + shell.WriteLine(Loc.GetString("shell-command-success")); + return; + } + + shell.WriteLine(Loc.GetString("cmd-changestocksprice-invalid-company")); + return; + } + + shell.WriteLine(targetStation != null + ? Loc.GetString("cmd-changestocksprice-invalid-station") + : Loc.GetString("cmd-changestocksprice-no-stations")); + } +} + +[AdminCommand(AdminFlags.Fun)] +public sealed class AddStocksCompanyCommand : IConsoleCommand +{ + public string Command => "addstockscompany"; + public string Description => Loc.GetString("cmd-addstockscompany-desc"); + public string Help => Loc.GetString("cmd-addstockscompany-help", ("command", Command)); + + [Dependency] private readonly IEntityManager _entityManager = default!; + [Dependency] private readonly IEntitySystemManager _entitySystemManager = default!; + + public void Execute(IConsoleShell shell, string argStr, string[] args) + { + if (args.Length < 2) + { + shell.WriteLine(Loc.GetString("shell-wrong-arguments-number")); + return; + } + + if (!float.TryParse(args[1], out var basePrice)) + { + shell.WriteError(Loc.GetString("shell-argument-must-be-number")); + return; + } + + EntityUid? targetStation = null; + if (args.Length > 2) + { + if (!EntityUid.TryParse(args[2], out var station)) + { + shell.WriteError(Loc.GetString("shell-entity-uid-must-be-number")); + return; + } + targetStation = station; + } + + var displayName = args[0]; + var stockMarket = _entitySystemManager.GetEntitySystem(); + var query = _entityManager.EntityQueryEnumerator(); + + while (query.MoveNext(out var uid, out var comp)) + { + // Skip if we're looking for a specific station and this isn't it + if (targetStation != null && uid != targetStation) + continue; + + if (stockMarket.TryAddCompany(uid, comp, basePrice, displayName)) + { + shell.WriteLine(Loc.GetString("shell-command-success")); + return; + } + + shell.WriteLine(Loc.GetString("cmd-addstockscompany-failure")); + return; + } + + shell.WriteLine(targetStation != null + ? Loc.GetString("cmd-addstockscompany-invalid-station") + : Loc.GetString("cmd-addstockscompany-no-stations")); + } +} diff --git a/Content.Server/DeltaV/Cargo/Systems/StockMarketSystem.cs b/Content.Server/DeltaV/Cargo/Systems/StockMarketSystem.cs new file mode 100644 index 00000000000..5ff5cd4ff7f --- /dev/null +++ b/Content.Server/DeltaV/Cargo/Systems/StockMarketSystem.cs @@ -0,0 +1,385 @@ +using Content.Server.Access.Systems; +using Content.Server.Administration.Logs; +using Content.Server.Cargo.Components; +using Content.Server.Cargo.Systems; +using Content.Server.DeltaV.Cargo.Components; +using Content.Server.DeltaV.CartridgeLoader.Cartridges; +using Content.Shared.Access.Components; +using Content.Shared.Access.Systems; +using Content.Shared.CartridgeLoader; +using Content.Shared.CartridgeLoader.Cartridges; +using Content.Shared.Database; +using Robust.Shared.Audio; +using Robust.Shared.Audio.Systems; +using Robust.Shared.Player; +using Robust.Shared.Random; +using Robust.Shared.Timing; + +namespace Content.Server.DeltaV.Cargo.Systems; + +/// +/// This handles the stock market updates +/// +public sealed class StockMarketSystem : EntitySystem +{ + [Dependency] private readonly AccessReaderSystem _accessSystem = default!; + [Dependency] private readonly CargoSystem _cargo = default!; + [Dependency] private readonly IAdminLogManager _adminLogger = default!; + [Dependency] private readonly IGameTiming _timing = default!; + [Dependency] private readonly ILogManager _log = default!; + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly IdCardSystem _idCardSystem = default!; + [Dependency] private readonly SharedAudioSystem _audio = default!; + [Dependency] private readonly SharedTransformSystem _transform = default!; + + private ISawmill _sawmill = default!; + private const float MaxPrice = 262144; // 1/64 of max safe integer + + public override void Initialize() + { + base.Initialize(); + + _sawmill = _log.GetSawmill("admin.stock_market"); + + SubscribeLocalEvent(OnStockTradingMessage); + } + + public override void Update(float frameTime) + { + var curTime = _timing.CurTime; + var query = EntityQueryEnumerator(); + + while (query.MoveNext(out var uid, out var component)) + { + if (curTime < component.NextUpdate) + continue; + + component.NextUpdate = curTime + component.UpdateInterval; + UpdateStockPrices(uid, component); + } + } + + private void OnStockTradingMessage(Entity ent, ref CartridgeMessageEvent args) + { + if (args is not StockTradingUiMessageEvent message) + return; + + var companyIndex = message.CompanyIndex; + var amount = (int)message.Amount; + var station = ent.Comp.Station; + var loader = GetEntity(args.LoaderUid); + var xform = Transform(loader); + + // Ensure station and stock market components are valid + if (station == null || !TryComp(station, out var stockMarket)) + return; + + // Validate company index + if (companyIndex < 0 || companyIndex >= stockMarket.Companies.Count) + return; + + if (!TryComp(ent.Owner, out var access)) + return; + + // Attempt to retrieve ID card from loader + IdCardComponent? idCard = null; + if (_idCardSystem.TryGetIdCard(loader, out var pdaId)) + idCard = pdaId; + + // Play deny sound and exit if access is not allowed + if (idCard == null || !_accessSystem.IsAllowed(pdaId.Owner, ent.Owner, access)) + { + _audio.PlayEntity( + stockMarket.DenySound, + Filter.Empty().AddInRange(_transform.GetMapCoordinates(loader, xform), 0.05f), + loader, + true, + AudioParams.Default.WithMaxDistance(0.05f) + ); + return; + } + + try + { + var company = stockMarket.Companies[companyIndex]; + + // Attempt to buy or sell stocks based on the action + bool success; + switch (message.Action) + { + case StockTradingUiAction.Buy: + _adminLogger.Add(LogType.Action, + LogImpact.Medium, + $"{ToPrettyString(loader)} attempting to buy {amount} stocks of {company.LocalizedDisplayName}"); + success = TryBuyStocks(station.Value, stockMarket, companyIndex, amount); + break; + + case StockTradingUiAction.Sell: + _adminLogger.Add(LogType.Action, + LogImpact.Medium, + $"{ToPrettyString(loader)} attempting to sell {amount} stocks of {company.LocalizedDisplayName}"); + success = TrySellStocks(station.Value, stockMarket, companyIndex, amount); + break; + + default: + throw new ArgumentOutOfRangeException(); + } + + // Play confirmation sound if the transaction was successful + if (success) + { + _audio.PlayEntity( + stockMarket.ConfirmSound, + Filter.Empty().AddInRange(_transform.GetMapCoordinates(loader, xform), 0.05f), + loader, + true, + AudioParams.Default.WithMaxDistance(0.05f) + ); + } + } + finally + { + // Raise the event to update the UI regardless of outcome + var ev = new StockMarketUpdatedEvent(station.Value); + RaiseLocalEvent(ev); + } + } + + private bool TryBuyStocks( + EntityUid station, + StationStockMarketComponent stockMarket, + int companyIndex, + int amount) + { + if (amount <= 0 || companyIndex < 0 || companyIndex >= stockMarket.Companies.Count) + return false; + + // Check if the station has a bank account + if (!TryComp(station, out var bank)) + return false; + + var company = stockMarket.Companies[companyIndex]; + var totalValue = (int)Math.Round(company.CurrentPrice * amount); + + // See if we can afford it + if (bank.Balance < totalValue) + return false; + + if (!stockMarket.StockOwnership.TryGetValue(companyIndex, out var currentOwned)) + currentOwned = 0; + + // Update the bank account + _cargo.UpdateBankAccount(station, bank, -totalValue); + stockMarket.StockOwnership[companyIndex] = currentOwned + amount; + + // Log the transaction + _adminLogger.Add(LogType.Action, + LogImpact.Medium, + $"[StockMarket] Bought {amount} stocks of {company.LocalizedDisplayName} at {company.CurrentPrice:F2} credits each (Total: {totalValue})"); + + return true; + } + + private bool TrySellStocks( + EntityUid station, + StationStockMarketComponent stockMarket, + int companyIndex, + int amount) + { + if (amount <= 0 || companyIndex < 0 || companyIndex >= stockMarket.Companies.Count) + return false; + + // Check if the station has a bank account + if (!TryComp(station, out var bank)) + return false; + + if (!stockMarket.StockOwnership.TryGetValue(companyIndex, out var currentOwned) || currentOwned < amount) + return false; + + var company = stockMarket.Companies[companyIndex]; + var totalValue = (int)Math.Round(company.CurrentPrice * amount); + + // Update stock ownership + var newAmount = currentOwned - amount; + if (newAmount > 0) + stockMarket.StockOwnership[companyIndex] = newAmount; + else + stockMarket.StockOwnership.Remove(companyIndex); + + // Update the bank account + _cargo.UpdateBankAccount(station, bank, totalValue); + + // Log the transaction + _adminLogger.Add(LogType.Action, + LogImpact.Medium, + $"[StockMarket] Sold {amount} stocks of {company.LocalizedDisplayName} at {company.CurrentPrice:F2} credits each (Total: {totalValue})"); + + return true; + } + + private void UpdateStockPrices(EntityUid station, StationStockMarketComponent stockMarket) + { + for (var i = 0; i < stockMarket.Companies.Count; i++) + { + var company = stockMarket.Companies[i]; + var changeType = DetermineMarketChange(stockMarket.MarketChanges); + var multiplier = CalculatePriceMultiplier(changeType); + + UpdatePriceHistory(company); + + // Update price with multiplier + var oldPrice = company.CurrentPrice; + company.CurrentPrice *= (1 + multiplier); + + // Ensure price doesn't go below minimum threshold + company.CurrentPrice = MathF.Max(company.CurrentPrice, company.BasePrice * 0.1f); + + // Ensure price doesn't go above maximum threshold + company.CurrentPrice = MathF.Min(company.CurrentPrice, MaxPrice); + + stockMarket.Companies[i] = company; + + // Calculate the percentage change + var percentChange = (company.CurrentPrice - oldPrice) / oldPrice * 100; + + // Raise the event + var ev = new StockMarketUpdatedEvent(station); + RaiseLocalEvent(ev); + + // Log it + _adminLogger.Add(LogType.Action, + LogImpact.Medium, + $"[StockMarket] Company '{company.LocalizedDisplayName}' price updated by {percentChange:+0.00;-0.00}% from {oldPrice:0.00} to {company.CurrentPrice:0.00}"); + } + } + + /// + /// Attempts to change the price for a specific company + /// + /// True if the operation was successful, false otherwise + public bool TryChangeStocksPrice(EntityUid station, + StationStockMarketComponent stockMarket, + float newPrice, + int companyIndex) + { + // Check if it exceeds the max price + if (newPrice > MaxPrice) + { + _sawmill.Error($"New price cannot be greater than {MaxPrice}."); + return false; + } + + if (companyIndex < 0 || companyIndex >= stockMarket.Companies.Count) + return false; + + var company = stockMarket.Companies[companyIndex]; + UpdatePriceHistory(company); + + company.CurrentPrice = MathF.Max(newPrice, company.BasePrice * 0.1f); + stockMarket.Companies[companyIndex] = company; + + var ev = new StockMarketUpdatedEvent(station); + RaiseLocalEvent(ev); + return true; + } + + /// + /// Attempts to add a new company to the station + /// + /// False if the company already exists, true otherwise + public bool TryAddCompany(EntityUid station, + StationStockMarketComponent stockMarket, + float basePrice, + string displayName) + { + // Create a new company struct with the specified parameters + var company = new StockCompanyStruct + { + LocalizedDisplayName = displayName, // Assume there's no Loc for it + BasePrice = basePrice, + CurrentPrice = basePrice, + PriceHistory = [], + }; + + stockMarket.Companies.Add(company); + UpdatePriceHistory(company); + + var ev = new StockMarketUpdatedEvent(station); + RaiseLocalEvent(ev); + + return true; + } + + /// + /// Attempts to add a new company to the station using the StockCompanyStruct + /// + /// False if the company already exists, true otherwise + public bool TryAddCompany(EntityUid station, + StationStockMarketComponent stockMarket, + StockCompanyStruct company) + { + // Add the new company to the dictionary + stockMarket.Companies.Add(company); + + // Make sure it has a price history + UpdatePriceHistory(company); + + var ev = new StockMarketUpdatedEvent(station); + RaiseLocalEvent(ev); + + return true; + } + + private static void UpdatePriceHistory(StockCompanyStruct company) + { + // Create if null + company.PriceHistory ??= []; + + // Make sure it has at least 5 entries + while (company.PriceHistory.Count < 5) + { + company.PriceHistory.Add(company.BasePrice); + } + + // Store previous price in history + company.PriceHistory.Add(company.CurrentPrice); + + if (company.PriceHistory.Count > 5) // Keep last 5 prices + company.PriceHistory.RemoveAt(1); // Always keep the base price + } + + private MarketChange DetermineMarketChange(List marketChanges) + { + var roll = _random.NextFloat(); + var cumulative = 0f; + + foreach (var change in marketChanges) + { + cumulative += change.Chance; + if (roll <= cumulative) + return change; + } + + return marketChanges[0]; // Default to first (usually minor) change if we somehow exceed 100% + } + + private float CalculatePriceMultiplier(MarketChange change) + { + // Using Box-Muller transform for normal distribution + var u1 = _random.NextFloat(); + var u2 = _random.NextFloat(); + var randStdNormal = Math.Sqrt(-2.0 * Math.Log(u1)) * Math.Sin(2.0 * Math.PI * u2); + + // Scale and shift the result to our desired range + var range = change.Range.Y - change.Range.X; + var mean = (change.Range.Y + change.Range.X) / 2; + var stdDev = range / 6.0f; // 99.7% of values within range + + var result = (float)(mean + (stdDev * randStdNormal)); + return Math.Clamp(result, change.Range.X, change.Range.Y); + } +} +public sealed class StockMarketUpdatedEvent(EntityUid station) : EntityEventArgs +{ + public EntityUid Station = station; +} diff --git a/Content.Server/DeltaV/CartridgeLoader/Cartridges/StockTradingCartridgeComponent.cs b/Content.Server/DeltaV/CartridgeLoader/Cartridges/StockTradingCartridgeComponent.cs new file mode 100644 index 00000000000..7ab11f64d4a --- /dev/null +++ b/Content.Server/DeltaV/CartridgeLoader/Cartridges/StockTradingCartridgeComponent.cs @@ -0,0 +1,11 @@ +namespace Content.Server.DeltaV.CartridgeLoader.Cartridges; + +[RegisterComponent, Access(typeof(StockTradingCartridgeSystem))] +public sealed partial class StockTradingCartridgeComponent : Component +{ + /// + /// Station entity to keep track of + /// + [DataField] + public EntityUid? Station; +} diff --git a/Content.Server/DeltaV/CartridgeLoader/Cartridges/StockTradingCartridgeSystem.cs b/Content.Server/DeltaV/CartridgeLoader/Cartridges/StockTradingCartridgeSystem.cs new file mode 100644 index 00000000000..cd68c5adb43 --- /dev/null +++ b/Content.Server/DeltaV/CartridgeLoader/Cartridges/StockTradingCartridgeSystem.cs @@ -0,0 +1,101 @@ +using System.Linq; +using Content.Server.Cargo.Components; +using Content.Server.DeltaV.Cargo.Components; +using Content.Server.DeltaV.Cargo.Systems; +using Content.Server.Station.Systems; +using Content.Server.CartridgeLoader; +using Content.Shared.Cargo.Components; +using Content.Shared.CartridgeLoader; +using Content.Shared.CartridgeLoader.Cartridges; + +namespace Content.Server.DeltaV.CartridgeLoader.Cartridges; + +public sealed class StockTradingCartridgeSystem : EntitySystem +{ + [Dependency] private readonly CartridgeLoaderSystem _cartridgeLoader = default!; + [Dependency] private readonly StationSystem _station = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnUiReady); + SubscribeLocalEvent(OnStockMarketUpdated); + SubscribeLocalEvent(OnMapInit); + SubscribeLocalEvent(OnBalanceUpdated); + } + + private void OnBalanceUpdated(Entity ent, ref BankBalanceUpdatedEvent args) + { + UpdateAllCartridges(args.Station); + } + + private void OnUiReady(Entity ent, ref CartridgeUiReadyEvent args) + { + UpdateUI(ent, args.Loader); + } + + private void OnStockMarketUpdated(StockMarketUpdatedEvent args) + { + UpdateAllCartridges(args.Station); + } + + private void OnMapInit(Entity ent, ref MapInitEvent args) + { + // Initialize price history for each company + for (var i = 0; i < ent.Comp.Companies.Count; i++) + { + var company = ent.Comp.Companies[i]; + + // Create initial price history using base price + company.PriceHistory = new List(); + for (var j = 0; j < 5; j++) + { + company.PriceHistory.Add(company.BasePrice); + } + + ent.Comp.Companies[i] = company; + } + + if (_station.GetOwningStation(ent.Owner) is { } station) + UpdateAllCartridges(station); + } + + private void UpdateAllCartridges(EntityUid station) + { + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var uid, out var comp, out var cartridge)) + { + if (cartridge.LoaderUid is not { } loader || comp.Station != station) + continue; + UpdateUI((uid, comp), loader); + } + } + + private void UpdateUI(Entity ent, EntityUid loader) + { + if (_station.GetOwningStation(loader) is { } station) + ent.Comp.Station = station; + + if (!TryComp(ent.Comp.Station, out var stockMarket) || + !TryComp(ent.Comp.Station, out var bankAccount)) + return; + + // Convert company data to UI state format + var entries = stockMarket.Companies.Select(company => new StockCompanyStruct( + displayName: company.LocalizedDisplayName, + currentPrice: company.CurrentPrice, + basePrice: company.BasePrice, + priceHistory: company.PriceHistory)) + .ToList(); + + // Send the UI state with balance and owned stocks + var state = new StockTradingUiState( + entries: entries, + ownedStocks: stockMarket.StockOwnership, + balance: bankAccount.Balance + ); + + _cartridgeLoader.UpdateCartridgeUiState(loader, state); + } +} diff --git a/Content.Shared/DeltaV/CartridgeLoader/Cartridges/StockTradingUiMessageEvent.cs b/Content.Shared/DeltaV/CartridgeLoader/Cartridges/StockTradingUiMessageEvent.cs new file mode 100644 index 00000000000..a80f8c6b8a8 --- /dev/null +++ b/Content.Shared/DeltaV/CartridgeLoader/Cartridges/StockTradingUiMessageEvent.cs @@ -0,0 +1,19 @@ +using Robust.Shared.Serialization; + +namespace Content.Shared.CartridgeLoader.Cartridges; + +[Serializable, NetSerializable] +public sealed class StockTradingUiMessageEvent(StockTradingUiAction action, int companyIndex, float amount) + : CartridgeMessageEvent +{ + public readonly StockTradingUiAction Action = action; + public readonly int CompanyIndex = companyIndex; + public readonly float Amount = amount; +} + +[Serializable, NetSerializable] +public enum StockTradingUiAction +{ + Buy, + Sell, +} diff --git a/Content.Shared/DeltaV/CartridgeLoader/Cartridges/StockTradingUiState.cs b/Content.Shared/DeltaV/CartridgeLoader/Cartridges/StockTradingUiState.cs new file mode 100644 index 00000000000..aea4ba5aa1d --- /dev/null +++ b/Content.Shared/DeltaV/CartridgeLoader/Cartridges/StockTradingUiState.cs @@ -0,0 +1,66 @@ +using Robust.Shared.Serialization; + +namespace Content.Shared.CartridgeLoader.Cartridges; + +[Serializable, NetSerializable] +public sealed class StockTradingUiState( + List entries, + Dictionary ownedStocks, + float balance) + : BoundUserInterfaceState +{ + public readonly List Entries = entries; + public readonly Dictionary OwnedStocks = ownedStocks; + public readonly float Balance = balance; +} + +// No structure, zero fucks given +[DataDefinition, Serializable] +public partial struct StockCompanyStruct +{ + /// + /// The displayed name of the company shown in the UI. + /// + [DataField(required: true)] + public LocId? DisplayName; + + // Used for runtime-added companies that don't have a localization entry + private string? _displayName; + + /// + /// Gets or sets the display name, using either the localized or direct string value + /// + [Access(Other = AccessPermissions.ReadWriteExecute)] + public string LocalizedDisplayName + { + get => _displayName ?? Loc.GetString(DisplayName ?? string.Empty); + set => _displayName = value; + } + + /// + /// The current price of the company's stock + /// + [DataField(required: true)] + public float CurrentPrice; + + /// + /// The base price of the company's stock + /// + [DataField(required: true)] + public float BasePrice; + + /// + /// The price history of the company's stock + /// + [DataField] + public List? PriceHistory; + + public StockCompanyStruct(string displayName, float currentPrice, float basePrice, List? priceHistory) + { + DisplayName = displayName; + _displayName = null; + CurrentPrice = currentPrice; + BasePrice = basePrice; + PriceHistory = priceHistory ?? []; + } +} diff --git a/Resources/Locale/en-US/deltav/cargo/stocks-comapnies.ftl b/Resources/Locale/en-US/deltav/cargo/stocks-comapnies.ftl new file mode 100644 index 00000000000..69ef7330a56 --- /dev/null +++ b/Resources/Locale/en-US/deltav/cargo/stocks-comapnies.ftl @@ -0,0 +1,6 @@ +# Company names used for stocks trading +stock-trading-company-nanotrasen = Nanotrasen [NT] +stock-trading-company-gorlex = Gorlex [GRX] +stock-trading-company-interdyne = Interdyne Pharmaceuticals [INTP] +stock-trading-company-fishinc = Fish Inc. [FIN] +stock-trading-company-donk = Donk Co. [DONK] diff --git a/Resources/Locale/en-US/deltav/cargo/stocks-commands.ftl b/Resources/Locale/en-US/deltav/cargo/stocks-commands.ftl new file mode 100644 index 00000000000..8e0fe014999 --- /dev/null +++ b/Resources/Locale/en-US/deltav/cargo/stocks-commands.ftl @@ -0,0 +1,13 @@ +# changestockprice command +cmd-changestocksprice-desc = Changes a company's stock price to the specified number. +cmd-changestocksprice-help = changestockprice [Station UID] +cmd-changestocksprice-invalid-company = Failed to execute command! Invalid company index or the new price exceeds the allowed limit. +cmd-changestocksprice-invalid-station = No stock market found for specified station +cmd-changestocksprice-no-stations = No stations with stock markets found + +# addstockscompany command +cmd-addstockscompany-desc = Adds a new company to the stocks market. +cmd-addstockscompany-help = addstockscompany [Station UID] +cmd-addstockscompany-failure = Failed to add company to the stock market. +cmd-addstockscompany-invalid-station = No stock market found for specified station +cmd-addstockscompany-no-stations = No stations with stock markets found diff --git a/Resources/Locale/en-US/deltav/cartridge-loader/cartridges.ftl b/Resources/Locale/en-US/deltav/cartridge-loader/cartridges.ftl index ede1a36b8ee..ec6fe1e11ae 100644 --- a/Resources/Locale/en-US/deltav/cartridge-loader/cartridges.ftl +++ b/Resources/Locale/en-US/deltav/cartridge-loader/cartridges.ftl @@ -1,3 +1,6 @@ +## CrimeAssist + +# General crime-assist-program-name = Crime Assist crime-assist-yes-button = Yes crime-assist-no-button = No @@ -6,6 +9,14 @@ crime-assist-crimetype-misdemeanour = Misdemeanour crime-assist-crimetype-felony = Felony crime-assist-crimetype-capital = Capital crime-assist-crime-innocent = No crime was committed +crime-assist-mainmenu = Welcome to Crime Assist! +crime-assist-sophont-explanation = A sophont is described as any entity with the capacity to display the following attributes: + • [bold]Sapience[/bold]: the entity possesses basic logic and problem-solving skills, or at a minimum some level of significant intelligence. + • [bold]Sentience[/bold]: the entity has the capacity to process an emotion or lack thereof, or at a minimum the ability to recognise its own pain. + • [bold]Self-awareness[/bold]: the entity is capable of altering its behaviour in a reasonable fashion as a result of stimuli, or at a minimum is capable of recognising its own sapience and sentience. + Any sophont is considered a legal person, regardless of origin or prior cognitive status. Much like any other intelligent organic, a sophont may press charges against crew and be tried for crimes. + +# Crimes crime-assist-crime-animalcruelty = Code 101: Animal Cruelty crime-assist-crime-theft = Code 102: Theft crime-assist-crime-trespass = Code 110: Trespass @@ -32,7 +43,8 @@ crime-assist-crime-decorporealisation = Code 305: Decorporealisation crime-assist-crime-kidnapping = Code 309: Kidnapping crime-assist-crime-sedition = Code 311: Sedition crime-assist-crime-sexualharassment = Code 314: Sexual Harassment -crime-assist-mainmenu = Welcome to Crime Assist! + +# Questions crime-assist-question-isitterrorism = Did the suspect hold hostages, cause many deaths or major destruction to force compliance from the crew? crime-assist-question-wassomeoneattacked = Was an entity attacked? crime-assist-question-wasitsophont = Was the victim in question a sophont? @@ -59,6 +71,8 @@ crime-assist-question-happenincourt = Was the suspect a nuisance in court? crime-assist-question-duringactiveinvestigation = Was the suspect a nuisance during an active investigation, and hindered the investigation as a result? crime-assist-question-tocommandstaff = Did the suspect overthrow or compromise a lawfully established Chain of Command, or attempt to do so? crime-assist-question-wasitcommanditself = Was a command staff or department head abusing authority over another sophont? + +# Crime details crime-assist-crimedetail-innocent = Crime could not be determined. Use your best judgement to resolve the situation. crime-assist-crimedetail-animalcruelty = To inflict unnecessary suffering on a sapient being with malicious intent. crime-assist-crimedetail-theft = To unlawfully take property or items without consent. @@ -86,6 +100,8 @@ crime-assist-crimedetail-decorporealisation = To unlawfully, maliciously, and pe crime-assist-crimedetail-kidnapping = To unlawfully confine or restrict the free movement of a sophont against their will. crime-assist-crimedetail-sedition = To act to overthrow a lawfully established Chain of Command or governing body without lawful or legitimate cause. crime-assist-crimedetail-sexualharassment = To sexually harass, attempt to coerce into sexual relations, or effect unwanted sexual contact with an unwilling sophont. + +# Punishments crime-assist-crimepunishment-innocent = No punishment may be necessary crime-assist-crimepunishment-animalcruelty = Punishment: 3 minutes crime-assist-crimepunishment-theft = Punishment: 2 minutes @@ -113,12 +129,10 @@ crime-assist-crimepunishment-decorporealisation = Punishment: Capital crime-assist-crimepunishment-kidnapping = Punishment: Capital crime-assist-crimepunishment-sedition = Punishment: Capital crime-assist-crimepunishment-sexualharassment = Punishment: Capital -crime-assist-sophont-explanation = A sophont is described as any entity with the capacity to display the following attributes: - • [bold]Sapience[/bold]: the entity possesses basic logic and problem-solving skills, or at a minimum some level of significant intelligence. - • [bold]Sentience[/bold]: the entity has the capacity to process an emotion or lack thereof, or at a minimum the ability to recognise its own pain. - • [bold]Self-awareness[/bold]: the entity is capable of altering its behaviour in a reasonable fashion as a result of stimuli, or at a minimum is capable of recognising its own sapience and sentience. - Any sophont is considered a legal person, regardless of origin or prior cognitive status. Much like any other intelligent organic, a sophont may press charges against crew and be tried for crimes. +## MailMetrics + +# General mail-metrics-program-name = MailMetrics mail-metrics-header = Income from Mail Deliveries mail-metrics-opened = Earnings (Opened) @@ -131,3 +145,16 @@ mail-metrics-money-header = Spesos mail-metrics-total = Total mail-metrics-progress = {$opened} out of {$total} packages opened! mail-metrics-progress-percent = Success rate: {$successRate}% + +## StockTrading + +# General +stock-trading-program-name = StockTrading +stock-trading-title = Intergalactic Stock Market +stock-trading-balance = Balance: {$balance} credits +stock-trading-no-entries = No entries +stock-trading-owned-shares = Owned: {$shares} +stock-trading-buy-button = Buy +stock-trading-sell-button = Sell +stock-trading-amount-placeholder = Amount +stock-trading-price-history = Price History diff --git a/Resources/Prototypes/DeltaV/Catalog/Fills/Lockers/heads.yml b/Resources/Prototypes/DeltaV/Catalog/Fills/Lockers/heads.yml index fd0773d3455..0579aaa5a0a 100644 --- a/Resources/Prototypes/DeltaV/Catalog/Fills/Lockers/heads.yml +++ b/Resources/Prototypes/DeltaV/Catalog/Fills/Lockers/heads.yml @@ -9,6 +9,7 @@ - id: BoxPDACargo - id: QuartermasterIDCard - id: ClothingShoesBootsWinterLogisticsOfficer + - id: StockTradingCartridge - id: LunchboxCommandFilledRandom prob: 0.3 diff --git a/Resources/Prototypes/DeltaV/Entities/Objects/Devices/cartridges.yml b/Resources/Prototypes/DeltaV/Entities/Objects/Devices/cartridges.yml index ffbca20e3ac..02167b26b7f 100644 --- a/Resources/Prototypes/DeltaV/Entities/Objects/Devices/cartridges.yml +++ b/Resources/Prototypes/DeltaV/Entities/Objects/Devices/cartridges.yml @@ -59,3 +59,27 @@ icon: sprite: Nyanotrasen/Objects/Specific/Mail/mail.rsi state: icon + +- type: entity + parent: BaseItem + id: StockTradingCartridge + name: StockTrading cartridge + description: A cartridge that tracks the intergalactic stock market. + components: + - type: Sprite + sprite: DeltaV/Objects/Devices/cartridge.rsi + state: cart-stonk + - type: Icon + sprite: DeltaV/Objects/Devices/cartridge.rsi + state: cart-mail + - type: UIFragment + ui: !type:StockTradingUi + - type: StockTradingCartridge + - type: Cartridge + programName: stock-trading-program-name + icon: + sprite: DeltaV/Misc/program_icons.rsi + state: stock_trading + - type: BankClient + - type: AccessReader # This is so that we can restrict who can buy stocks + access: [["Orders"]] diff --git a/Resources/Prototypes/DeltaV/Entities/Stations/base.yml b/Resources/Prototypes/DeltaV/Entities/Stations/base.yml new file mode 100644 index 00000000000..fe31706b262 --- /dev/null +++ b/Resources/Prototypes/DeltaV/Entities/Stations/base.yml @@ -0,0 +1,21 @@ +- type: entity + id: BaseStationStockMarket + abstract: true + components: + - type: StationStockMarket + companies: + - displayName: stock-trading-company-nanotrasen + basePrice: 100 + currentPrice: 100 + - displayName: stock-trading-company-gorlex + basePrice: 75 + currentPrice: 75 + - displayName: stock-trading-company-interdyne + basePrice: 300 + currentPrice: 300 + - displayName: stock-trading-company-fishinc + basePrice: 25 + currentPrice: 25 + - displayName: stock-trading-company-donk + basePrice: 90 + currentPrice: 90 diff --git a/Resources/Prototypes/Entities/Objects/Devices/pda.yml b/Resources/Prototypes/Entities/Objects/Devices/pda.yml index 0ecb71cf586..f065fd6faae 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/pda.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/pda.yml @@ -392,12 +392,13 @@ accentVColor: "#a23e3e" - type: Icon state: pda-qm - - type: CartridgeLoader # DeltaV - MailMetrics courier tracker + - type: CartridgeLoader # DeltaV preinstalled: - CrewManifestCartridge - NotekeeperCartridge - NewsReaderCartridge - - MailMetricsCartridge + - MailMetricsCartridge # DeltaV - MailMetrics courier tracker + - StockTradingCartridge # DeltaV - StockTrading - type: entity parent: BasePDA @@ -412,6 +413,12 @@ borderColor: "#e39751" - type: Icon state: pda-cargo + - type: CartridgeLoader # DeltaV + preinstalled: + - CrewManifestCartridge + - NotekeeperCartridge + - NewsReaderCartridge + - StockTradingCartridge # DeltaV - StockTrading - type: entity parent: BasePDA @@ -792,6 +799,7 @@ - NotekeeperCartridge - NewsReaderCartridge - LogProbeCartridge + - StockTradingCartridge # Delta-V - type: entity parent: CentcomPDA @@ -1016,6 +1024,12 @@ borderColor: "#3f3f74" - type: Icon state: pda-reporter + - type: CartridgeLoader # DeltaV + preinstalled: + - CrewManifestCartridge + - NotekeeperCartridge + - NewsReaderCartridge + - StockTradingCartridge # DeltaV - StockTrading - type: entity parent: BasePDA diff --git a/Resources/Prototypes/Entities/Stations/nanotrasen.yml b/Resources/Prototypes/Entities/Stations/nanotrasen.yml index 1619657cc28..5feeaa1b87f 100644 --- a/Resources/Prototypes/Entities/Stations/nanotrasen.yml +++ b/Resources/Prototypes/Entities/Stations/nanotrasen.yml @@ -26,6 +26,7 @@ - BaseStationAllEventsEligible - BaseStationNanotrasen - BaseStationMail # Nyano component, required for station mail to function + - BaseStationStockMarket # DeltaV categories: [ HideSpawnMenu ] components: - type: Transform diff --git a/Resources/Textures/DeltaV/Misc/program_icons.rsi/meta.json b/Resources/Textures/DeltaV/Misc/program_icons.rsi/meta.json new file mode 100644 index 00000000000..1a7d2a16194 --- /dev/null +++ b/Resources/Textures/DeltaV/Misc/program_icons.rsi/meta.json @@ -0,0 +1,14 @@ +{ + "version": 1, + "license": "CC0-1.0", + "copyright": "stock_trading made by Malice", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "stock_trading" + } + ] +} diff --git a/Resources/Textures/DeltaV/Misc/program_icons.rsi/stock_trading.png b/Resources/Textures/DeltaV/Misc/program_icons.rsi/stock_trading.png new file mode 100644 index 0000000000000000000000000000000000000000..251b46a3f83cbe27088978ca4e58413d8ed9fe19 GIT binary patch literal 1012 zcmVH=4?=* zlOrL1eF_1!1=1Y=z}*FYhD8b_UXuVOkGCsu?;U-egrrF@97tCXgBWXbLdpjlyk-W+ z02rP=nq|6j1&8{V1Aab^>G;Kv4e;#9Ga%sWR_90>t5^cp0RUhM2scW%1qQjJblceyjNd_L=3x&b zYoy>S5ATq_xm}6e%MmrVVI^9O004#tqF$75!Bxf?kRvyAzn=4(*I6FBW&A!n^ToKQ zAG(fi8-RPY#eVnv(HTHVv>`QYo*T|yhm{*~M&|nAQsZri+b-GrQhVMBgog*@Mn}6i z2xBmbPM5yZV8vhI>_Mdd!Yn~VmT6485^FFoUu`*nsjq5=9?(9JSx*g~`HVk!| z=Spt<7C-!iUy&n>Z0*R;0V|EPbp)1zTh&y@ z%DQZ*+>LiZs%_p=$8P_*k=A5eP%7<{X%EQFB=t8v&<-B@L7dxKGo6+LI$7Oo|BPAp zKnOrX<~iMJnRBx?rsMn^=miIW z1+~G<18#If2EgE3(cfaSgzq+b%Z}0TF0000q!<_+7))m{Fa|R+rOk9uV_*niFzK9WFU!E-$zV2T zrh~>z2gUW17#K_^+}OgPtgLKcU?3qe7#J@dcmhO>_ z%)r2R7=#&*=dVZs3RZc#IEGmGzrApit3g4;HSls@YUXyw|Np~{r?Bl(+PmG6C3ca9 z(^B~*b_^di^zSufJX!lJ>U^<4(AEo5$6ri&;=s?$lPvQhQlLMo-P2krmg!tl*%qCU z9Z3vlEW{gMT~gK+{C~n-Ct~}ZQ%v>m+#lXw@ayW*x(TZq1j-CLJQeGAJyQm{f-g0~ dGtJkRK?}&{0Adih6g(M3dAj Date: Wed, 6 Nov 2024 18:31:13 +0100 Subject: [PATCH 17/80] Automatic changelog update --- Resources/Changelog/DeltaVChangelog.yml | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/Resources/Changelog/DeltaVChangelog.yml b/Resources/Changelog/DeltaVChangelog.yml index c025e359789..46121850f27 100644 --- a/Resources/Changelog/DeltaVChangelog.yml +++ b/Resources/Changelog/DeltaVChangelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Colin-Tel - changes: - - message: Asterisk Station is now protected by additional meteor netting and is - also more resistant to movement. Please relay thanks to your local engineers! - type: Tweak - id: 149 - time: '2023-11-26T00:38:30.0000000+00:00' - author: Tryded changes: - message: Tweaked recipes of bluespace items to require bluespace crystals in exchange @@ -3700,8 +3693,17 @@ url: https://github.com/DeltaV-Station/Delta-v/pull/2121 - author: Radezolid changes: - - message: Re-added the fire-fighting door remote to atmospheric technicians lockers, firelocks can now be bolted and they are hackable. + - message: Re-added the fire-fighting door remote to atmospheric technicians lockers, + firelocks can now be bolted and they are hackable. type: Add id: 648 time: '2024-11-04T23:49:18.0000000+00:00' url: https://github.com/DeltaV-Station/Delta-v/pull/2007 +- author: MilonPL + changes: + - message: Added the StockTrading app to cargo PDAs, available with the Orders access. + Gamblers rejoice! + type: Add + id: 649 + time: '2024-11-06T17:30:54.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/2103 From b05b4c25e3ba4024b349219fc1fa5898fdc43074 Mon Sep 17 00:00:00 2001 From: Radezolid Date: Wed, 6 Nov 2024 14:51:05 -0300 Subject: [PATCH 18/80] Make syndicate refugees a non antag. (#2127) * Added locale. * Assign to the refugees. --- .../Locale/en-US/deltav/ghost/roles/ghost-role-component.ftl | 5 +++++ .../Entities/Mobs/Player/ShuttleRoles/settings.yml | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/Resources/Locale/en-US/deltav/ghost/roles/ghost-role-component.ftl b/Resources/Locale/en-US/deltav/ghost/roles/ghost-role-component.ftl index c59cda0a6bd..6923ae4105b 100644 --- a/Resources/Locale/en-US/deltav/ghost/roles/ghost-role-component.ftl +++ b/Resources/Locale/en-US/deltav/ghost/roles/ghost-role-component.ftl @@ -40,3 +40,8 @@ ghost-role-information-closet-skeleton-rules = You are a old member of the stati You are a [color=green][bold]Non-antagonist[/bold][/color]. You should generally not seek to harm the station and its crew. You're allowed some minor mischief. All normal rules apply unless an administrator tells you otherwise. + +ghost-role-information-syndicate-refugee-rules = You're a regular crewmember from a syndicate station that ended up in a NT sector. + You are a [color=green][bold]Non-antagonist[/bold][/color]. + You're allowed to commit crimes, don't be a threat to the station, don't assist Syndicate agents, metashield rules applies. + All normal rules apply unless an administrator tells you otherwise. diff --git a/Resources/Prototypes/Entities/Mobs/Player/ShuttleRoles/settings.yml b/Resources/Prototypes/Entities/Mobs/Player/ShuttleRoles/settings.yml index a690a230c7e..d2fb821c8fb 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/ShuttleRoles/settings.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/ShuttleRoles/settings.yml @@ -777,7 +777,7 @@ - type: GhostRole name: ghost-role-information-syndie-disaster-victim-name description: ghost-role-information-syndie-disaster-victim-description - rules: ghost-role-information-freeagent-rules + rules: ghost-role-information-syndicate-refugee-rules #DeltaV - Removed free agent mention on the rules for a custom one. Was ghost-role-information-freeagent-rules raffle: settings: short - type: Loadout From 2a1ee7aff73025539fe063452fa284321a396080 Mon Sep 17 00:00:00 2001 From: Delta-V bot <135767721+DeltaV-Bot@users.noreply.github.com> Date: Wed, 6 Nov 2024 18:51:24 +0100 Subject: [PATCH 19/80] Automatic changelog update --- Resources/Changelog/DeltaVChangelog.yml | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/DeltaVChangelog.yml b/Resources/Changelog/DeltaVChangelog.yml index 46121850f27..635c7e81e80 100644 --- a/Resources/Changelog/DeltaVChangelog.yml +++ b/Resources/Changelog/DeltaVChangelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Tryded - changes: - - message: Tweaked recipes of bluespace items to require bluespace crystals in exchange - of needing less materials - type: Tweak - id: 150 - time: '2023-11-26T00:51:27.0000000+00:00' - author: Colin-Tel changes: - message: Corpsmen start with a few autoinjectors in their packs, and gain chemistry @@ -3707,3 +3700,11 @@ id: 649 time: '2024-11-06T17:30:54.0000000+00:00' url: https://github.com/DeltaV-Station/Delta-v/pull/2103 +- author: Radezolid + changes: + - message: Changed the syndicate refugees rules to represent what is expected of + them from the administrative team. + type: Tweak + id: 650 + time: '2024-11-06T17:51:05.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/2127 From 736accdde96702216f51f1f03d86a8ce9a20603a Mon Sep 17 00:00:00 2001 From: Radezolid Date: Wed, 6 Nov 2024 17:49:11 -0300 Subject: [PATCH 20/80] Add security magboots (#2074) * Added the security magboots * Add research + recipe * Fix the YML error. * Removed whitespace. * Added extra magboot per EVA suit storage. --------- Signed-off-by: deltanedas <39013340+deltanedas@users.noreply.github.com> Co-authored-by: deltanedas <39013340+deltanedas@users.noreply.github.com> --- .../Catalog/Fills/Lockers/heads.yml | 1 + .../Catalog/Fills/Lockers/security.yml | 1 + .../Catalog/Fills/Lockers/suit_storage.yml | 3 ++ .../Entities/Clothing/Shoes/magboots.yml | 10 +++++ .../DeltaV/Recipes/Lathes/security.yml | 5 +++ .../Entities/Structures/Machines/lathe.yml | 1 + .../Prototypes/Research/experimental.yml | 1 + .../magboots-security.rsi/equipped-FEET.png | Bin 0 -> 1178 bytes .../Boots/magboots-security.rsi/icon-on.png | Bin 0 -> 479 bytes .../Boots/magboots-security.rsi/icon.png | Bin 0 -> 479 bytes .../magboots-security.rsi/inhand-left.png | Bin 0 -> 364 bytes .../magboots-security.rsi/inhand-right.png | Bin 0 -> 379 bytes .../Boots/magboots-security.rsi/meta.json | 41 ++++++++++++++++++ .../on-equipped-FEET.png | Bin 0 -> 1019 bytes .../magboots-security.rsi/on-inhand-left.png | Bin 0 -> 364 bytes .../magboots-security.rsi/on-inhand-right.png | Bin 0 -> 379 bytes 16 files changed, 63 insertions(+) create mode 100644 Resources/Prototypes/DeltaV/Entities/Clothing/Shoes/magboots.yml create mode 100644 Resources/Textures/DeltaV/Clothing/Shoes/Boots/magboots-security.rsi/equipped-FEET.png create mode 100644 Resources/Textures/DeltaV/Clothing/Shoes/Boots/magboots-security.rsi/icon-on.png create mode 100644 Resources/Textures/DeltaV/Clothing/Shoes/Boots/magboots-security.rsi/icon.png create mode 100644 Resources/Textures/DeltaV/Clothing/Shoes/Boots/magboots-security.rsi/inhand-left.png create mode 100644 Resources/Textures/DeltaV/Clothing/Shoes/Boots/magboots-security.rsi/inhand-right.png create mode 100644 Resources/Textures/DeltaV/Clothing/Shoes/Boots/magboots-security.rsi/meta.json create mode 100644 Resources/Textures/DeltaV/Clothing/Shoes/Boots/magboots-security.rsi/on-equipped-FEET.png create mode 100644 Resources/Textures/DeltaV/Clothing/Shoes/Boots/magboots-security.rsi/on-inhand-left.png create mode 100644 Resources/Textures/DeltaV/Clothing/Shoes/Boots/magboots-security.rsi/on-inhand-right.png diff --git a/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml b/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml index 5329c957b5a..9694ba828e5 100644 --- a/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml +++ b/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml @@ -353,6 +353,7 @@ - id: ClothingOuterHardsuitCombatHoS # DeltaV - ClothingOuterHardsuitSecurityRed replaced in favour of head of security's advanced combat hardsuit. - id: JetpackSecurityFilled - id: OxygenTankFilled + - id: ClothingShoesBootsSecurityMagboots # DeltaV - Added security magboots. # No hardsuit locker - type: entity diff --git a/Resources/Prototypes/Catalog/Fills/Lockers/security.yml b/Resources/Prototypes/Catalog/Fills/Lockers/security.yml index 8f7c5e8d1c9..66e0db3f7b7 100644 --- a/Resources/Prototypes/Catalog/Fills/Lockers/security.yml +++ b/Resources/Prototypes/Catalog/Fills/Lockers/security.yml @@ -32,6 +32,7 @@ amount: 2 - id: RemoteSignaller amount: 2 + - id: ClothingShoesBootsSecurityMagboots # DeltaV - Added security magboots. - type: entity id: LockerWardenFilled diff --git a/Resources/Prototypes/Catalog/Fills/Lockers/suit_storage.yml b/Resources/Prototypes/Catalog/Fills/Lockers/suit_storage.yml index 30eaed833c4..ff7d4fd4152 100644 --- a/Resources/Prototypes/Catalog/Fills/Lockers/suit_storage.yml +++ b/Resources/Prototypes/Catalog/Fills/Lockers/suit_storage.yml @@ -144,6 +144,8 @@ amount: 2 #DeltaV - Double the suits - id: ClothingMaskBreath amount: 2 #Delta-V Double the masks + - id: ClothingShoesBootsSecurityMagboots # DeltaV - Added security magboots. + amount: 2 - type: AccessReader access: [["Security"]] @@ -210,6 +212,7 @@ - id: OxygenTankFilled - id: ClothingOuterHardsuitCombatWarden # DeltaV - ClothingOuterHardsuitWarden replaced in favour of warden's riot combat hardsuit. - id: ClothingMaskBreath + - id: ClothingShoesBootsSecurityMagboots # DeltaV - Added security magboots. - type: AccessReader access: [["Armory"]] diff --git a/Resources/Prototypes/DeltaV/Entities/Clothing/Shoes/magboots.yml b/Resources/Prototypes/DeltaV/Entities/Clothing/Shoes/magboots.yml new file mode 100644 index 00000000000..3752b22a74d --- /dev/null +++ b/Resources/Prototypes/DeltaV/Entities/Clothing/Shoes/magboots.yml @@ -0,0 +1,10 @@ +- type: entity + parent: [ClothingShoesBootsMagBase, BaseRestrictedContraband] + id: ClothingShoesBootsSecurityMagboots + name: security magboots + description: Magnetic boots, often used during extravehicular activity to ensure the user remains safely attached to the vehicle. These ones bear security markings. + components: + - type: Sprite + sprite: DeltaV/Clothing/Shoes/Boots/magboots-security.rsi + - type: Clothing + sprite: DeltaV/Clothing/Shoes/Boots/magboots-security.rsi diff --git a/Resources/Prototypes/DeltaV/Recipes/Lathes/security.yml b/Resources/Prototypes/DeltaV/Recipes/Lathes/security.yml index accf075c967..8542a78de2f 100644 --- a/Resources/Prototypes/DeltaV/Recipes/Lathes/security.yml +++ b/Resources/Prototypes/DeltaV/Recipes/Lathes/security.yml @@ -209,3 +209,8 @@ Gold: 250 Silver: 100 Plasma: 500 + +- type: latheRecipe + parent: ClothingShoesBootsMagSci + id: ClothingShoesBootsSecurityMagboots + result: ClothingShoesBootsSecurityMagboots diff --git a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml index c05b18c2ed1..dda0b2a9c5e 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml @@ -937,6 +937,7 @@ - MagazineBoxSpecialMindbreaker - ClothingOuterHardsuitJuggernautReverseEngineered - ClothingOuterHardsuitSyndieReverseEngineered + - ClothingShoesBootsSecurityMagboots # End DeltaV additions - type: MaterialStorage whitelist: diff --git a/Resources/Prototypes/Research/experimental.yml b/Resources/Prototypes/Research/experimental.yml index e3890976441..729f4d44443 100644 --- a/Resources/Prototypes/Research/experimental.yml +++ b/Resources/Prototypes/Research/experimental.yml @@ -70,6 +70,7 @@ recipeUnlocks: - ClothingShoesBootsMagSci - ClothingShoesBootsMoon + - ClothingShoesBootsSecurityMagboots # DeltaV - Added security magboots. - type: technology id: AnomalyCoreHarnessing diff --git a/Resources/Textures/DeltaV/Clothing/Shoes/Boots/magboots-security.rsi/equipped-FEET.png b/Resources/Textures/DeltaV/Clothing/Shoes/Boots/magboots-security.rsi/equipped-FEET.png new file mode 100644 index 0000000000000000000000000000000000000000..fbac1cafca7dea77babf1fe0f197d0f225e9aef8 GIT binary patch literal 1178 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7T#lEV9d>Qb`Ho)PG(@xm{>Z|*86aP zNSl1N>q;?pSr-|jjKT~@kt2bx9|SE4VckDX%{NMMt)i!3p=gW@3;V^R>krm1Sp8s? z0!Np^qi64~D+!(7>ePKjI`7=!>i5+amCOsLnQYF#b~7w6tYQ z%1*yKsC<~k)1>5-PU7Rq6QU-adG(vEu4b}M_wfna4{NQn_#|>fT70WctnbQcFP7Pu zt=9U!zq0Dug@mQm(L%H2njdWCpSAsAwl;?yfAfRa98&TR_Jn-Z_x4kMzbHR+>%H2H z`1Z@)tCqb#aFea%u63mOZ)MX{e34>%<~Wq_S*=st6mas@_c@QPXT(j8FJawXEin1_ z+wS`}1k%6XS>gMgfr06Tr;B4q#hkaZY_o4WNF4vqrF-lK+kRHAbF*emX%PBwC7>W< ze^7_N9QUSV7@k!b~UfHG?U`vNzv1$+*@A`Y?*Qko4` z45mR0r3_h17%&y4J!Rd)X%%ppH@xQjlB5TH&A&cwTy!-nPi;2qd;UEeOP#}~%@I~# zo*wsixnupJe^EM5du^?3IAZKC2rqcqwtMGNr<#g-hGUit4TXI7%`j@CTqsm8de&ngWX#WtK53& z=(%^|Z{EiH?&W9LlcIfY=WCrkdMd1`P6xI$%*sp1|1Y$&M$X~+PY#oF=NG3^IlgdR;f+1HBq?Fr+rMR>pRa$ETv+Y98Hnn}shrcGi%x=h>m8UfG$cmPdbq}n&PO4AxoUv@@6;p>R z;zC|aW8?n@Wr`mt_>}mXT}Z$`|G=))2Yt-fHqTSH{*$e?l`ZXdf-U!*!i2jx82=JIbWeQ}Fx)?wHJ;VID*j@tN=F^*!S%1T*T*a9ER1jbSo=R~X*YLq^{cJ_ z8&?!2<}HqTdG4%Oi$`_yth^nI+!-3SC;yq{&%n@=-VtPfNy%cZdc)T>8r!>AUPsQj zx?W(K2h*~zEGt%VtqqILia%hoCF*QwsOV;(y+WP`*34u0C(tjV#PdhdZhO3<&VPn& X{0>#_4=Q4SWe$UPx$nMp)JR9J=WmcLE{K@f*Oh>4(QafieN2n|M!4VD%*P}=wiG#XyOg7^$tSQ(I%B%G)#k3rrC-itGfUE19-ezLY+v`mMz~NCAEgF}DYgH6QflhmI0K2D;Tv{sUL4(Tu zvE+-M+)BQ!Des&KpmKLiE*hr^fRKF6hcj|Or71?7ToAxlx6Nn$MVbMC*2kOYcg-}- z{$i0c@LH_`5K&cBP5S{b3{*{%z!XLKftUy2qEP6$>vTFz{r#PmVMsCAOoo=OW0`UX z<{rX}LZO#PCW#EHZRxsK`EMOyT~V;6sCwAOzR;*7<8;>yUGG;vFMwPx$nMp)JR9J=WmN8GlP!Pv|sEML==u;v=;-WFenBeH(0^fzOGBykj4sIs8Xo!m+ zg~ShFNE{q&qJ*M}@;Xpx84w3(r3Q+PCJy#Ly?1xL``x`88mm+){H138w0Z;(0Ym^1 z05BK!gF>OukH_OIE-V1haU2Z8KnTI8-SyeFO}Si-{Tjg5<|Z@q%idk>wlEBX?cIG} z+}fj#)pod@GUHGHr{|ab)%1>cm#+o@2ZuRCV%;D7sG}$fbXtKqL+!wEX_o7YJ&O4k zuehsX{$-*sNTDWhbkaj4?tmoVFLHL31n!Wpy)Y@m0larxyw&f0I{?spe)9aTEXx`k zesc#NbRB>dRYeuz6Tmc4h46tXit-8Z6M&MY_1$wOlc8R#(KJn8OfH+HDJ5;oKY{No zVIV+B)B5R+4OWKTHl_4B|7r(VQWVdjPPDfz z%j>@5H~`#C89z*U0yn99o literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Clothing/Shoes/Boots/magboots-security.rsi/inhand-left.png b/Resources/Textures/DeltaV/Clothing/Shoes/Boots/magboots-security.rsi/inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..65062eb19614183b18723be0fff6c47e72eaf01d GIT binary patch literal 364 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D%z)jVAsLn`LH zy|vNnu!GF;kMkc*^LraI;TMyWRhymDc0I|KM@u&UFgVxLJ$rH`XS-I1$lM|qrL0XH z%k++EHaBlEEN{K=K7E&TU3tNu?Y}*N#sh(L+UctY+mA0_s^S_hF6F;$(vt5f>t1U_ zy*#(9weEj9f6;->7k&9<5O>Q7Gmq$~dM*C(w%e3GT7X~CPX-&H&#rB+8( ze=pxvGfRK(=FEM3uZ0b`nu^K|E<8TGc9Y38dzn|iUnl4O+*Ot%C)SpD^L5$Or#oxz zhj0C6C9A47?YYH&`7n6}L$^-D{of{i*%`4ygDchh+1gAwhzo(_kJ+2+8nU~#H!D$joeEdJ;+>B|fM z(nl8D->;l3|GfTLuATK=pR(=mMQrb6naq2UQ13kH3irF!zI#<%KRv(q?82r=dHJ!E zMA+6{+E`e*aPjQSx7rIl{`rdbIr&d) XYkW@CyUU1y0+qqj)z4*}Q$iB}*@Uz9 literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Clothing/Shoes/Boots/magboots-security.rsi/meta.json b/Resources/Textures/DeltaV/Clothing/Shoes/Boots/magboots-security.rsi/meta.json new file mode 100644 index 00000000000..d115962bb96 --- /dev/null +++ b/Resources/Textures/DeltaV/Clothing/Shoes/Boots/magboots-security.rsi/meta.json @@ -0,0 +1,41 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from Engineering Magboots from tgstation at commit https://github.com/tgstation/tgstation/commit/7e4e9d432d88981fb9bb463970c5b98ce85c0abe , edited by ProphetCrow (Github)", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "equipped-FEET", + "directions": 4 + }, + { + "name": "on-equipped-FEET", + "directions": 4 + }, + { + "name": "icon" + }, + { + "name": "icon-on" + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "on-inhand-left", + "directions": 4 + }, + { + "name": "on-inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/DeltaV/Clothing/Shoes/Boots/magboots-security.rsi/on-equipped-FEET.png b/Resources/Textures/DeltaV/Clothing/Shoes/Boots/magboots-security.rsi/on-equipped-FEET.png new file mode 100644 index 0000000000000000000000000000000000000000..323b1a5fa43850c41b505017eff143459603d520 GIT binary patch literal 1019 zcmV)=wPR0Y45CQVu)tszMfaTQz~1P9T@ zufczytKh022#O%$=I+-b63?|li_{x#&cl1}dpLOmp_FYDz3?a$OTL?#NNTfl^IG#W z5yC`iC6+ZjXDppg@$dS$r9su3gzEMGy}GM4XL<%SvjvY zz}W_L-8)$~`y(~V4p|nwoIrFAI<6tIP|51|oZ~x~UXx#R1-p9?ll$$9-`Egm_uQyW z_W%F_Nl8RORCt{2+P!PrKo|z_$EL*?Ti_45P-5tmK(iVBnF=O&k^iuc>5?%J z$dEZxz+^ClPDQjO#gPfv(rNIJm_XFQm9QI2xl>(3>GNA8S?BwBIix`kKtx1DL_|bH zL_|bH^qua3+aAkwL9H-{HN*U+4%W_ z7Pmb=JCPp$l}saRZ$I38Z^YMMzkG%t1OPBQzAj<@K7eqQMQC@rVXd(N01)FL@&yfk z@I4;C{`MUJAZpX@bVJ!9*FRI zT?a5kUDsznIu7b@nyBkK#CQnt=>sg!Q=Wv3-xs&Fy#vQ_u(iFD+U_M%JD_)Yk*jJ2 z_;ZW9`Ek2&1OVUjP}K@6e+HbNo#dXTllZ#dzec}*{p=i=Js(t_0a699Z96QL%a|`h zrM|Inj22%imtos>nAlkc(fCmjTCLrM@msB30JFubjxSY!Vxv9rHc zwLE;!gFkW+2m$xbN3qgWTj2}tA9HXA0|Y_<0KVOf7Vbyafe>&91KdBZ{3S$0L_|bH zL_|bHL`3xO%k&9lU73K?IV9v2RQr+sIy`S3nSeBDc?DI{`G6#UI}?yZCa)kP(+*fy zCLm2xUO`o+9k47D;E&uaU1j2rTqNZcRAnl_vP^(s7_dxprMZA*EYl1P!$4AAK~<&# pBxM4EhhnBls0bd4sd)ueKLHFXAe@v;QO*DW002ovPDHLkV1j$!)QkWC literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Clothing/Shoes/Boots/magboots-security.rsi/on-inhand-left.png b/Resources/Textures/DeltaV/Clothing/Shoes/Boots/magboots-security.rsi/on-inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..2167a4ea553407401158cb22e28603eb1d7f74a3 GIT binary patch literal 364 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D%z)jVAsLn`LH zy|vNnu!GF;kMkc*+qK0)WQm=VRol5o7uI@jd-ROCBmc2VtPIQYXOcQpd&zGvWZa3~#5B9uNz3GBY zm)Wk(nRUUt&G=WxocVsbd9wG@e0?eZWxK5QO;q`M`TE)?uM3PA7b|E~|5f%3ns#i} zwR?y6uA48O{XS>b`oq6idYTs4$nbpmQn6g8_bGq-uYbR8MD1H=JG;F#G2+{<*wjkB z``<&??)7u;?0jl@?tkl5c8{LGq%)`DCfQB*7Ij^ib9RsES!S>cLB#&zYy1Ug!|E4I z-Jfgrn|bXVhS`4`ulY8-{nv2yec|<(FYHlY8NRRsRqFg=d^Pu2tzp}(n;?yzu6{1- HoD!MELu%as&C zpV*#YgR3IGIVu8HDYURTcMUoL&}*}I90+O2z!3Cq5p<2kA7VC~kG;Y&RJ-MK9j6?W-uuJ@!v z2STmP*6Ed2S+A~T6*>8TB~#n9sX1SN@7lR9Kw^gxJM-RsHhEe43=BV Date: Wed, 6 Nov 2024 21:49:30 +0100 Subject: [PATCH 21/80] Automatic changelog update --- Resources/Changelog/DeltaVChangelog.yml | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/DeltaVChangelog.yml b/Resources/Changelog/DeltaVChangelog.yml index 635c7e81e80..14a08116f37 100644 --- a/Resources/Changelog/DeltaVChangelog.yml +++ b/Resources/Changelog/DeltaVChangelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Colin-Tel - changes: - - message: Corpsmen start with a few autoinjectors in their packs, and gain chemistry - access on low-pop rounds. - type: Tweak - id: 151 - time: '2023-11-26T01:21:47.0000000+00:00' - author: Tryded changes: - message: Nanotrasen has recently introduced their miniature energy pistols and @@ -3708,3 +3701,11 @@ id: 650 time: '2024-11-06T17:51:05.0000000+00:00' url: https://github.com/DeltaV-Station/Delta-v/pull/2127 +- author: Crow, Radezolid + changes: + - message: Added security magboots, they should only be used for EVA or situations + that warrant no slips. + type: Add + id: 651 + time: '2024-11-06T20:49:12.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/2074 From d7667f335f5ae2000deded6d7b244204738a74e8 Mon Sep 17 00:00:00 2001 From: deltanedas <39013340+deltanedas@users.noreply.github.com> Date: Wed, 6 Nov 2024 21:08:48 +0000 Subject: [PATCH 22/80] add contributing guidelines and update github stuff (#2119) * add contributing guidelines and update github stuff * add changelog section * add more --------- Co-authored-by: deltanedas <@deltanedas:kde.org> --- .github/PULL_REQUEST_TEMPLATE.md | 13 ++-- CONTRIBUTING.md | 101 +++++++++++++++++++++++++++++++ README.md | 3 +- 3 files changed, 108 insertions(+), 9 deletions(-) create mode 100644 CONTRIBUTING.md diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 4029b093ccb..b85b383ee3a 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,4 +1,4 @@ - + ## About the PR @@ -10,23 +10,22 @@ ## Media - + ## Requirements -- [ ] I have read and am following the [Pull Request and Changelog Guidelines](https://docs.spacestation14.com/en/general-development/codebase-info/pull-request-guidelines.html). +- [ ] I have tested all added content and changes. - [ ] I have added media to this PR or it does not require an ingame showcase. ## Breaking changes - + **Changelog** +Changelogs must have a :cl: symbol, so the bot recognizes the changes and adds them to the game's changelog. --> >i)At`ec+A{4&_|si*G+BXUukI^0bSz6KMtS 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�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

S$p|Eq zk>L>b2u^=pO;#h0PU%j z4dWzSQ*jKeMpZBDV6^h&rBVW>4~N>44%@N*$0%owUn}nu8S^e@JXod{Fg@niJyB-sb((?;9S zQ{F+ZI2Z<}benz1On5FTPZC&r;%2{wOY}u7TFmtKd_0teO*=|Ti*E$`?FOv68_3shRbuYR#u2Y9!CLT)wDf50#nqT7;j6@ATf$0|lA|3_T(+3d@n89w|p= z>efwGTy&2%IsVZxOHt;7K)|&9B*_~#^5<-~#@o}G&Z$3H- zT)ebwsn-RYRWp)ZuYOkp+r_RxG8^5evX_JE9J>n(o9mF(84&xP`3jP#dBO_5XoDTY zk2#Cku3T8sjB%UbNDQG$W9g~tx^DRMhp_oyoM|V+|&q3>dr10*~>!Z%eULM8}ou|Z!-`NYAdOE&@RI4 zT`b1E;8Sl+lIo;fLIv>=@0k>AZYK5z1_I$;8q}m60nkf;p8#j*^&LxVVll{fn9h~5+B+Kw~NI_!cc^dRZW8dR&g+r;0S4s&NPm=S8;>OTt z`;wQgw9xaodZ+hqbN%C}Y=ldUaAZ#KC%gLlCI`;Mm67eWwELO+o zNHUbp*VfEUqzdO0XQugg!CY9^BO5T5*wwI)hX~(E{WZIDdyzd{xG#*X7N`!P z73ZJVF>?mlvg-4ll&>Izw8y(M>OPmM1V%c}vQeY$-P5I$fUzw&zopywC-sWwajNcQ zqId&(X#d_kF|EW3P-JE*!lztX&0}#`a zZY~~ucjus6|BGeA0)+V!9Qq)KI?T4la^rB7(u~)t*Z&0omh|1|Hx){k#WXx4`w^zN;yj{^cwzjU6m;vgRXp+>mtYhOnYYp?OBF6ewg2 zCO_o&y*ApxM`&^$;*n#>7_lH5mxtobzk0vweyVg5A2GRmCcXVFGlgTJf{j}7q@NV2 zA?vr;UXC6{rEBvX=(1kU1EVQQcVPwZG}v~ZOx3LAB6o&>f@M1KWnw50#E9urbFp>$ z)!PMqns8%bizV9p-*WD}S#nqQX^bewr%vBjw8KHPP1vK>?$H6}*vt#e8>2ywhFeX# z1jtp%bLJa(lma)e86Mq~UGU4G?>6-;5Z=k-;%jq19{m3ulhz;vtFF>DQX_2B*@^ct zt2D7SD6{pJosqeXd+>8UugFek*5F-qWE|@1v^HRCMFB)wU`}XZ@M6@f`dW9)O?e?1 z%N$T`c1A4ue26lMMJAf;+up1xdPX;_TO89C3pN@It{Dx3tyHh2{DDrN2$l%kO%77f!!2_A z4Kr&um02qb@kiry*oI*6DD2ZO!4>pQU`mL{cxCRDpk$$>4O`BJpzvIi>FffHB z@gVoR`OKw9GfN4dCwk((;g1l{Y2~#y>m(jEsI|CgN!%ICY))G`%XuAN(1$g-9!eR8LgmeQ={?AEx|@YYR9rj;)ny?K>!+!9`k13;7_E$u_c;>s*?|?GeJB1sNvdeR z4IZygJ}M<(=1YbtFZj`aSBq^O%knITofbT)*DQ{!x-K|p?K#tE9_>49{S3Y><*)s)tH z0E;6S$kf-#(7ky>#BlNk!T7YW1oF(U;wPoFqqXuMth_kZb9HiYlO8;yNt4AbZ9LxUz>o_(; zl5)~=l3W?;PL8DVI{K2c(%bKOZ-uQ(vX25r;ddC!fSBeuk?&q#F$g4An!*BraG~M* zs(Lq?k$QjLih|st@!5KO-<8J_*VmV%EYW{9AX_2H)AVa+>7*t?>hu__Leg`Yl36y% z_zAk%P9|Szd(sq@rmQEazTP5i(e`I)V+@2KbT}?$hbO{1k|bq5WbU?a)=jOM0If*+ zJs^G}NZYO1!lhtOe3pMzWl}R>hkI-H zBlNhRm->T?c~7yQRUhbMi9o~907utLjP_D?REki0-M(*YFSHvLl{2jzNtD7Qal@AJ z{+T&qX{sc2cc(Az=-jABgPJdm2VnZse-{bgU)NT(@2;~6El~LA0lK=_1f7@Is=O$4 zucOHshh8IR9;>F8%nzmOgKIm6(8mC2_8`YGShLSU8*FILvMxE&NXSQsggK!i6>sIy zlf|>=(m)`g3NK-uQqI0qHvSDo_F41)(NQPN7I=2T)vvkFYp*8gR?{+hF?4tlzxX9< zHPWuMT#QLR-?FRS4J%V#3qpK0RaOC)k{Zw?fWgq-3@6{p>P*G%;misJ9x|=F0_SS7 z7Hkb3!?ns`cY%zB-MZ^z#VlF7eb=pilI{?W@4Z?8m7T8sEX9w9jtmL;)j zuS#ODJCP1efFfYakJ%fo+vBS9Ke%WGM3#aCcS<|SiXjJUc0J)qx5Nh%O>B)lL?LY4 zpwktGkngNAtdl)M?Xo7A1Tq%p>V4?&xNZwM@vPZnOBaZuLGpt4>h&l_?@rVByBD&N zGm0e`%Yhg^HddB}^R+zN<*B$&ih!SyUj8)ki}T%uk1>U!V8LN&50-u$1#6W!*e2DK z%qJGzQd1nFID5HdhCwynhO38T_Oo<6`xrJ)OEbp<)f!V6)UM#GSTGH#8uvF^IJ+f> zi0$-wmt2CZ3_zs{cLDkUkv)hhNqvx;3@-pY^Mc57}!i1xwhj*)XSnd!3``kPB<22 zC+&?+B>j3$Z3Uv|a7ej&!JO6@acLeRS5npHU4ETMS9_Mn%Fie8R$<*3&d)ex&K++7 zBH(CWd^(no%35yR{0R%YD2gf6+6}%?uaih{DqZ4FjEI`}ESfMA3D>%fPvL7k>zD0e zFU&SXaK)yGhws@WjFivU^$<3Ob>ingKfVT+K4#`I>a^$E#X0Y|4mL=boU+mGXP$?pYj1juPMHv&0)Bk+5Lvc1C?|bwAY`l`J>#(=~Gcb z9o0(gp}>$%Tw6Y=M^)(JDLZ3mbV{Ow5PJnZX)q=DgC^u2kf**$emBC?;-L=uJ^Hoq zfyoYL@Lr=&r&JzYv0;zwqfxk=I`8Mlv`Os7V8UTdJQb0=1DN3gpQ>cx5G_JMGBg}e z4kOvS(Yz9C%_?1QhO`E)prnI}W7*kX#Zri_7m%<#9@PR{F|3X5SCIsXq<+PxSg_7z z(68~Tymf{!PVnz!PZxmgdtC?k(KP@EZsQZ_b1?_G_tbo@@IU=UmTL|p*tiePj(QGE z@H33@7wgu1EMG}!k(lF!kAkUIcc>XmZjWkL8vg{JD=)!2JzRZxhON|~2O=RB-jRDa;AnU^5ysuHb& zLt0vL#7O4G8uqL->lx+6%dP?}X*hh?()E)(LXYBZO%1K@BCxNbYzqmP%JcmB? zn*CThO3X&r2{lN}Zh@w39rqJkqawv329?6DH&7=68dZGv7NOOCVF`w+1TFSpmv=0n zXo%7S^ifq~p{bpq?In}%x0e=N6CipZ@5ied1IR?C$~8}HGheot2-_*xqhk1j9|{eU zbd$oxU5u)yD;s>U*gVMic_1i`dRLhRG>jVKueRHbkWOoYP($0DpM`f%*znnj4y~lq zy*+zW5-^}G2+`eb{hOQK@$7(bYq>5t9!T;InSC69}BHS$m5fTs5tQ zq@=L1uBJk1`+#5wWiSq1U_2(Tp+>tL_sb%!Gk`@q^<}l+5Ye#6v84KE%Vs^5Qk4>? z-T$#?V+H#TVi9cK4bV@%{S+sC5)+~npjMeuVUqJO*@bQMmt``yqNom(;uv{=(7kx6 zLvavQs4Y(_KF?y#;#;7-!%$hj!#H-V7`=38-fX~G`s9qzwN)`})4fcnM!7GJa9lPW z%-P)mnhlTt5jNOq^MSfS5SSh3!KKm=VY4jd6dAGFE~iIMyu}&VJb_zK)ON?d=Aepv zxx33I8mX30ddcNC>{2YAapr&z?;3k5OrhZ-2{nagJb2%QXS%gZosH*6^L#m&9k|!2 z-XP9jrk@P)M-@Tn5W+1O#BNi|0n-??Rr2%rrN$xYa>z_Ae z3eL|t`us|Auz4)s%qSO6=-k8r9-YlE=4M;*(x2C;(<1;@BBad4djTo|6?krZDE#%0;PgkMPP#i zV+DH+PMo6iE5O$IaoD@7cTvg-|8~H0kAn@`zjz%d*aqu79O2TtuAeR0+z&UG^$W8l z*TF3nh%DtOE8!^Xc%2o`R7&wiPNu`cSvwE8sPdCw?^lb))-QIXHPShgtUAqIgt|Ds}mUP*aB^@N`deSM`YtjQ1RU^zI^iw?tAy0biMtCJsX^!To7PW88gj zdaM=T)Kvyz_n*LJQarLk*6Qw9+zUrm_l0&I;oXSlC(ZLy0YN&((^tvLg7jj^F0-To zgLaJt?}w;4;@H`8cvtW~AA0C8`-y?Z=dg*Pr5`~IIV`Lk=gRHEK>o@>vt2%_Y%xJe z$i9!WeDsxkPc~i=yIEa?5Bod$<>&$D32vL#0QZk&Yr9;Q##I_<{tfpVB?Y%6zxgjY zwZ|P++iI8#4pLiCP0Kcb1gdI+V>9ji<(dtpbldsKGZ=iqiwB)Ll=A(!t^a9!h3j6o|wIhMfe z_wQm&>?}Xo(TD5$##6N7jIvqo$3C6}(mX-ao(2FPA7%u5^wb->`CB2oz__b^B`0LP~%9}n_E3bT!ra^H_|iLM`yMfu7= z!kF3WL~JQ~5h*F~ka49cn02ZgtjJA68y;1H`}~8l=sb=%l+DV54*@_fKL1#MzNB&q zOJg0|AW8yO?^2(7bMO)|M@VhThN;5UQpY4RbfJ+OsQ1mS(N(R%`n{G6B5s@=w4WD& z#zj;FLW-yM!cu4wQ_(^NNXq&9y<({)9Q3II?v>YtLUxU$k{2PsSY4HZ&jT^m)FP;? z4oHI}$09<*O?6L}nKUIzJXu6o=FsLt6;$>N?P7lmtNjD#&h#%<`-M*MUD#A@huqV| zE0@%UO3$wCR5I6N^a^dEL95N7F87Z0nv}xPZ4X{jtgRmx-&Q$g)(n+?kaeTT93zq2+8qh`?z?q@Uz;yI0GK(5TvJQ z`8{FDzeE$c{ffX;G{A~ZTYeCK_*p0))q`t>TJxdo6Z=K@kqJoOR+@c-Y2&$C(5U%0Y0JbYWrtl+sP2_6C0{d`tb&CB>r3_v*5|3oOaAvD0QBSDu@w~-148#WyDav=R+ zpObs8K}IQw_`9EMR2#;+5{(kb;tleFG5%`_u{3Os2YWVXb{ZhM13_oMN%-YS?WK`7 zPS1yeSzv+hK(yvLr`AVLI(qcwOEm#bUhFFSrmVgp^3ZSuUWut%>MN4@4HLGAO;fH@2B~WuuR4jo&w^KoTjl$+Q zG$lC&v^{=6cffm&vUsu*W>Ho(p+w!CuH1a2VQm+aIBkYDJSY3rEMWd$P=R&|d*4GV z9NJm#g`VaD^di_*e^prSK;OnncmXf*(gPZ;mm`fn8QG;hSjAPakxm&`dTX_%GxFHs zuQS|j6~(^e|NhDl+X5runav$D!U6|2)i#Y;)rFA9v_$#<00awF@3ror0u0?~^)#LP zq_{9kvPKm6?>p=p<6Dw+4KpNcDa+R%6x;|5d~gayXisL|5kzus+5BM z6C8c?n$uc)E_T2p_fv#R@|i^agv4jTY8^noiw3sTNd7Bu*VYXw{`za#fb9m%m z3bRfacPkMU&EDqng$zZIafrrWv&f6kx%U2Dpx}jdH;3& z!GmH0WTzK}seE(~eZkS0UFzuf_wJh*3ZAo%ai7;t`B{5tU0_9T!!tyYt=244y5$1vep04|~;5E1_Jhvc5}{%IJ8mKtk@PNdndwNy?Vr9*eJOA{(b`7QZ{?>=+-@0(c0-VZV*H{q zuk$b_o&cTnPsBKNRaR+>du?o`cQ@4GV>pefW+> z3#F?b_1{HK#JaI(ZPSp8$zwNoFo8;1IOz9w8Y?HNxo7y#?z zt><^Fy)At27J^d;yh`Rok?)eg#{JxueCs2e@T+$}9Kb2D1c9{CdjfFnM+QI?$~rdP zbb{aq@7E@Z#2G$wZej-|A7@UTjbum94zTWd7MKysQyJFo_T0UtmPq{vOa1qdN`g@LD=@ve`XJljjIAqy4j{7=AWtGGv(bS>{rRYuV?W3f+rSvQff<6wv2gU&wu6AQL{r+87h78` zFo9aVP|x>&W^-B^39l z@#gv;-jYSY%akz6dO>5Yet#-APSNwd8++b#CNBF?9qNo&b|zwgXw{uXHNHi!_rY%vHxLqNO z8r6>4-Fyn``tjvg+0D_4eGUuNU`1$tAit{}93{#Lp;7Qo9vxV42CK9_O?X0)ObFYv zD;~YAE&^{o3U9VlFk#~n&%?l6xvo=k-km0-kaJp>Brt-Nm_8jNfQ6+A@?3jk`{veB z<^7phg_Kw?&`?kpnPhyhGHxzTT|foU}E5z8W!4@^m|jFg>@(#UlS>JPCJN!y^I@(CWpG5+=`PL z=Q0!mx3QcEmmg*&SbbJud}!|VfCnm% zJl(raOd9LfI6jsKm>WK4_#}(TiC=g$qO(s?!)VAIo1Jp`#(q4nDNN^fVx2CbE#a5z zQvPFNPl`ti68gTt(Q>Z$*9vo+l!h`o({!e5RIF@gToEx={43fW1m28^hQ;%9y9T%S z^wTiox!JsJm&4DAC?|Lb+I_HT%5ufy!_sgJNmLn5Q4eQFL%XLx829lc&Ac@VK=kV* z!5!YZq&1vbs8OAPo8Uk$_X7{;ATiyn*9b2&?8CK;!qkm#Z7)tsXDep}5Q>`sI;yCg zVmzZ_`u_ra;HI5WK{^?tCxDV~$&K)ix&!RM66%y2BFjL4i5U6&(GCOLO8#!yoYv_8 zk*U2bmd)i#vf;2COrAq!Z-BvHBj9d+x>#iUGTIj1L?w4ICG)brmZ=W@!y2uw6#x-w?muNI-lTBTr-wGCwu0sq@P9^8)(J-bzfNTEfb zP;zVtF|N2?Lg~>JKH4qptV0#QR}l&KS2Y4mEncBh?Skbj(`w+Zxh9)5SDMTYAZ1n) z5t>~6h3Bt(Vr?C5YxZjZi~hb5rc3O=M_apZGKNY+WflQSUuWxvP6A36pUEt^GQ6Ql z;SLuSHOSCE$r(|nUW@J(D6OqAyovPwFP;GgS$4?<1p>!?OeKe%!RYC6_S1N;vJ!f{ z#5r0}$AThF_XTPX65)YoR*IfmhF`I6UCTI^&Tt&$xiu-s>-VF2%GmLP+Mq#CcLSpP z-W4(Ck*?r{f6LH$AEZc-UA>|c3*2^eQ3r*XDhIIPxAbNS!rXKyO;Yhl~G(8HMA8& zcOhTO>K2DEmah28-`?am5E5^3{P1CX4-m*eEC18A5!V}Yb=&%g&U6=Y}064Dl z?Ah+&ka!rkVD)ehZ*S1d<`Yc7>Ja;2$93+*&98+x+M#KMnlwcnnT@kI_@NcFjBNzr zX*n``kTe8DCPsYKu1CBPR811F@H|aV0~k*r&)CZ8kx?UN6WhP2pgH(TAf-tIQVehFZywPossPw(^Ops z_5Ja8RLMTe$zA!E=$UknNb+gU&v`JH5}ad*{#Ae{?s_%gBfdT;u?da1P1{P1J?7V^ z>l^7|uMk(__Ms*(V=`bv8_n>&Sg61ax+}y(WsYNMDL8ICoIu_7ngXR4Hu=s zEPn(v2+Q`2y>x~8_npbX4#6X02Zt56GBlyHvLdE$yl?rmz==Mv)@ZAQU5K?5-+=P4 z=r1&{jcz)YT-fr$fyFXOq>=_p#haPfTe1yLvzH(ISsLSEXPIWUo&&`l%A^^>^49A* zSWwg94S`kiHAPG=ITGZ-0pOnqXu^p8|0MegGZZC8Mi0O(!3WZU_S7QJ|z&I zrb-bcnLRr?0(fTA$?1!;*|&Kld$%FsW|49YLAI~s9)xxB#;Gjn%&-XP_;fsuI1>S* zdcXO}Edrw5+O&soH+t`CEHR(WcA`Y9~MXl%!TnCUo7WV09sygA!9-P~nfDoAaUS*r2L zG1gOda&)C(xsE59{+B4=OJwcF@rBMzH%YT027Z2Fe4nqAO10a@!GF{*efOg4x675_ znrnYwL_b1c0H#VBH5id}3ld6G5OWSIv-hb1RddTr$ z7rTvKt?7Y&967aDv;?x1igHMh!d=GT z-z}hunSW>qKe^f8g5$?8U+^}5L-_K`3;Z$c{-{(4A}Dbr*CXOzddzb=;K3;-Bhtq= ze($@s&&=BK*>UhKZkTaQdqJ%Nu2LK%!$fx)b4{GA_ZS)=$R|chTi8tk!si0i z&E&Pm-3RlNC$$_vK?$Ox2P)?)0DTS>CY#W}+WDiT zi$N`jv3_BQhtIPF0nxFD@cN3T?U~}H*6rDW4{)tAXrGt5M+hR`ptF`tJim@i@h3JZ zh;emic7ZK}!rg^snMgn*y}8veXC97B%ms;CyjVU=Zl)^xYW6)WOshW%j)bZ7dAC_`X77k_|E44*_Y#aCML-H_h2{p*1I7P-dR&bKnH; zycqkHXUv2dAiz|H0d>gbP#N(-&8out?{bIhp`35bn!BRB?j5)GRZdplWDIIHc3TI& z@`m3*27{!5uUqEBwW1@*e<{ktT?w8;-U=7qU9;wF3_{h-jnY;gv{u}F+TiMx8}3wJ0MZ}QijWLD2n<(_ zAo;(<8K16o4oNLMKy~ZTOeKNsL}U7=-Bq>AQMM(32pSvmoUs;TbBPGU2{6Y_ z3S%YT_D>u(I(f8rI3tngG@w#8;cD!@$K*ZTLXA8CBF4g9@j{Y2$?nn1I5-%@lv%1F98%w z`y0dxrg%jUKNU&#g)YpZQ-5%MB;%XTU=e-Ay7Cx}0+Cto0Tj4}xFZmd)w2%7rD2R* zEX1R!(XVg>LahsrRmG14KBEt=@hUoodjrK#Dp7Bo28UpL)t!Nw$Qtq7Oz!$qVwa}e zeNH|Af-(BZcwJn+HDowEHYBnCp%a7N0vKjCG-m$Wvccw!JQPj0@)<9HLLa~2CCHFk z@3b3y)Cr)7v2<_pTXcRw4Lp>j5>czrTbwWn5V9gKf_m6fCkb16f^1lp;F?A(*hD`v zrVSQdTEel5A4>%Kuu?&TMduw8${MdD%(-XLoyatJju00G8+`Bc-C|(oJBHBVVj8-~ zX)9@ewTKfo?&P1@Lj;jYT5sG(mjS_xR)&Z;H1vOo8@6Up|8H9G4=NPeqY;N&z7oZM z7y*o$v(WNzX+*JKi!SmdBX@B$NFXO{E3&0pRki)B5_JN@ff8xaK>uyY_foP#No5aQ z>c?O-^w>&hlC?++TcOU9)P`UDuJ1w2MQxM(-yRmYAh-?3E%Y;6SsbX z-58eEE24dr%pG(RrG~>MPVjg^|ELkV6hIT;djhOe#ulR;r#Bq)`s9&11mf>D6X54f z{=akJwQ=pV$4vAABVNPdq{E9H1YbqQG0eJiie_pdNv5$S^#}3S6o}(S=-9DCgC4Te;E}rAyy=7;E6veDOJv#AU}&2VCuY-gIP7Q#oX7t9wg}_{LE=X>Y7qZ4@4^`F zlO%)#DTF68UL!&hD`IcNCQM*@K5O=?=N?#{1fxH_(`+!`yo3xoxn}Eq=;9ox*56j; z&3#hZlQL>bJ&FNccw#LZT@BeD5Fq)7(fTo5Q57AqQNG|xJv8rwZ4Y}$N)|W_FJPf3 zX20VxYAV@t^`v z6)g~|L+%Ed6@VZ779wBUPuVrpl#ltbNwLy1esTT9ny<3eOQ zIAA4cSyiSL@DeNWd!218ur%rG12L=OecI2NYXAqIBKFm^Mif}9RVo~b!Cc8*j^d-` zACQHq>^MZWrnN+b3M=^&k4Tw%AI)9 z^k=UaScOaWe7Lk5a4HEtsNrRtJIsK40f+KtZmD@WUZ~`Zk*{wfV$o~mukuugiXK{x zW?(KNzd z=I?pwj)pI6dy%R*Zt1c$%Y{I510#T~3vK39^*}-x?mwQ0d;rp9AneMwe?#R^unPg( zn%rJ?6@c{AzH_7^=9EL@*s)eaYc|XT54W>xQD(Bt6IZnTne&rPnzpznTp)jlrwED8 zC4{A@S*zXwxVw`!npIRL5hch*t*c<2fY_K}zz5oV!);xnixNV^v8Jc8&~NGr@Z7Gv zn5_cVimBod4(fv*W>rl~Ns&c+Q5p zY*{3s|0=QjcJQcZCR1Pl000v5h_i84JT|`}T6%_RJVz+C)}j9!TLG_yy|^@D{f|Zc zT+kqMZ}L61f-fv};7{omxXu=DNa|+5t_jfrsbTA-7b0Bs>dawagMugD;>y`(N;Tt{YPJb;;7{O*(P*O(DuY!!%n2T(E3V_l) zn|JgK>II<_-4U9>1m3jNDfAa>uu}Ojfo|xZiZj6Tb3itBsgh;6f5{U9rdqCK)%UkZGb9h;0w3@W&C6E~ zXMFP^l(ySX*B8Z^$*(u%p7HiZd2_twXg8dXb^24I4AjFc0a59U69ODJub^j_E~sQElD<(D1$gpy!-Lep|ajGnSX>R4L_AbFN;0tPx9sID*sA*KP}X< zf9Rx=7FBo!{4dOs;06fLl)0Hn(n|o{ZLVvOsN3#Pm6l7A!oC+&WIrZA4xGpkzXJ|u z$W3hYnkKJFyBB2bV(vW%`METrBc26tkimi`VDPDVc5kvC?a0r5-61C^z>Wtm9MRMo zI4XO7sgeb3FY%jGfDER@2s3qC`y1+%OY|8JVr>Yl9~BEZ7Z_diIvT$Tks%ch-900LDaT16y2M-3aK2c{cAtA7IV$z}F}V5yZmD@TKwy)n42|mnA0xYsT`3 zM1>mma_u}t1~#cA2QBM426^S=;H;ZniYrK7j1y>7yE634MCw>CnIYZE-!>=4dAfVp z-Z17DuU?@(d%P4~p_{TFyo1~zC|#5{Ze}xYpk+yCcxv@9k=F%}AAhL3V&)&HcMW?< z4~EuOLsrrONM2IHhuVR@&GP5298S0$C5FsHdfOeC#_eeTrC*E_>E+ry-shvIU?_;0 zIlQ?vd74t9pHTrTsURc<&~aN}nQV}B6}nqgsNgv$A(hjIpv}bTf;ZaeaB+T+>fQ+j z9zDj}X5jWAp%v}?E2N&MYA{Lh9fFr&0#2&60qVKsJ+bUH0k-7g9!IAO6l%T(3DCCA zr$6Q9aiO>L(Sgqe78#X1GqlgnVb|WCFaUC&Rhv^5B(Vi!VYV{R1lfOR%!@n!8Rr-s ztcN`1f!&klepR*>095Vp0sr0KZ{;+o{a-gWkSWD#qV2W^w$8wuj7Vw?7TeZ zMf85tlM9^(n%pxR`CEQg=uEhvnU?7UwTkZeRQOB{az}t`r`$7y>_8O@7I=soynP-w zLY!NAl{i1S9TouBZZRi(NbSvtEF?k!?2{R;C_0cn`HXcUFfOdEbj8)hJ%s1>PoTK9 zn}uI)ts|VMN)roN)*#V-hPYMUQJ}{7BR-I~M_5{sZ z$-Cc^&rpMpH^zM=*OoWvw2oaAz*V_Szg2z}`av=p$e;{Uo<0gat53~-4ieACfUga> zKhKj)u4Y(AhbiQg?z>hqyWOmF>2#ijw!9M7l608~9yYUKpCiyA3Vk?PSJKw7ls3Ai z9Ekg#Od&4w9<85cg zg;N<*Eii?ZdnPxY6$4^)2QDTG^S7ZRQamsp!NQfWap`R9u}oL84>_k-?}h&|a%5(p zIQ3o*DB#sJB*JS1>L9_ZrVorSh;ccWJIYIQB!(lkvoIH-sWGk9joVe+Ht#bN)z-Hb zz2f?#92bl!qf5Glp{<@Vmcq%SoM6L#zUyzvbzYNiVqg8K-k1_1bQ6EPzKCqlfgIj_ z`Bfh~aaL?Z>qCpFW6Ixud$ydAkXFT&3-Z0eq#$OX?K+74fMCfL0#Sj)IqzA_^`un9 z3W*BRYOv0F)1N6L+9VEhRue{oT^A$;aX>V12Qj$LS#Cv%UPBqt_DvQ?jT`;K7u*^F zC21=0u->d)#6q9)Y*coBzCOzPAET^$j9;WH<5k0rr!ON7Xses-le@b)&~rkq41P*} zih78hyG}72%CIMtWwy#i7Q1j8ZjY-roO72tmzp-VP#xk4zw)EYxbS-7AEi zL@#R7Gp!LF%=34&P`T(o@$}9RjF^pV`ImFAoe^}6DzF|mxT{nky+50Xf&)~3$O1&iopWe+PFA$%dJ)Q@w71YXI3bJ z68vs$bUg5CQUbNc{E)9#eOW=f>ls?&3Y$v=-5p4D(76<>1PfY;k0LxuhT!S%D5rWnSGbjLV-a1ipU20h=jnHa8h%ZbK$$*ai0ot|%STnh1?cxG) zL9TL=FYm{p8-`t8{6Q+8gx2Mr$~Tg54@hLMttv>^TjlZkKaX&K6hd4^1OAfM*n42D z&QT%I5{FqiaH>1u=zHN>LTY^Ca1?q%{#M##;%j2XQ|eXporw#jVQAc}&;n}(@Fps3 ztRE;k?*;4J!jBn_VE8EmD`J15KpJv#KjbeHFD5_}EO-1)h|7hPpa1{?9n}Z6!yy^^ za8_i2>48j~!LLZa!5rmPg@y`47or0$j&+NTlighF4Ia*e`q z3XjseAsfxb?em;O@MCC`k#nPN9U^UGWCZ#aTLL^{Jy}vm;twiQtcJ31VFFV#$@?aZ zL@7}jXj4OF(aM@&lQK(7s&J{;Z95PqwtQoml6G0go*;zWC13`G0l#(eD{C+Hv5Hn%~ni=U+U^cx`)`GxFf;&=ZIAZ|b z0}ILm!(}!GmbyxE$0o|3K5I5z?(W=+rTF z^Z0(N7Z5PRreemV#ZNRbtHIVQpUCJP_2lS2DZ~SzUmNuLGdF#IZIYZyYjhApu9Opb zm>GWb-622PhNcIBG$|^zm+>_~R*eF9qP~;4LMcF5Mbn44`f-f2cr$f=t zwsx4!sbz3QZgOi~eU}1IAoQcZmr+Ws4pBWm>W}8*3U)z2GgD_(3(9$H&EI~Kqdjc! zBI{K7wom*4Ob?S4eTm-7xr%x4j?58l?@FoURpV=;5fD1deDrA6^^^FJHr0-{$GzaK zC)sU6coBZ17A#vV$M8WnZ{afei?7l}g{D8OC0*)o79JQ!*6x8E&4Dx)l z=vB}!XG8bvQgld(%NG(dRNHaa%$xay(Uo2M^88M+d~+LIUVd>WKZtb;!W>%ha{^F` zj*PW+-n(f;9YjNch|Uip4nzF0$bQvFaj-nl20f}egea)4nX%`?Ecr?)1f$(z zs$Ny5wV(usDord{mqN|0xzA?x(%B}5br9eNv--H;69RO(A5z5x37nq7FNDOFc|c(j z8e2H>PjSI1_2tV$@H`EBgD;PR|7~Lq&PQ;pa??AI6(^+*Dx+UwxNj{kZ>js1zbI-i zS6`Qz<2KI>Mh6=gD!#73}Fa-?VpZSlSf08;x|EIucyA@C zS1#GO7Gk+YyGz`lf)eXSYbvFk5cyZKpV?MPzOVtYs>pGJ{fymnKDtF#gEwz`%3>Q9 z>Z&|CiW4{(z7#J*XDr9k*LTHsWV9qkm<6-vL_bvpQ6MyCoLDiD#a@fXq^h|sj52+X z0M1?U5Q4_DB}quqc$ERS!yRq!4DiFs0SdWJc(&=I*X|GFq`rMx2tq)?{9*j>>$$tS zfcrlHI!}UyR}zG0kMeYjYeU(VlJRX0Htwj@;Z|TX`8Jx(S|i6@q84kNszaIDeG~6x zFn{C^xbp=fvqpC%30PVC6Y$f>y7(pL_ccW-V*cdK%R5?#ilF&86vMkM9hv&<0dl*LKXcM>|RdBz@GI01}5V}F06(uMB#dC)jZr=@CIox z6Ae_OlVd$2=AMdY>JC7OC3WZojDH-_74`ndGe~PqI#}&jAu#HG|}02T0?r>wCu)F#+8P>V*l*1j{0_G z;b&>?fwY#A^WzjkE4^FRc-pjd)T$2ifgA=x*>#PTUe?gcjHD_)dLFB$%l=YGH9E~o z{A|WlPD{q4W1=km=707i!V0<4uC`%GR!jA248T>XW>q{DQ`*O|Xhnv>$T?%RdJ=hc zMpODJ2(Lyekj8vV00PIqDX!4kTvr0oVA>0F!VUx_2}@ zm3CLzaQ@7Qc4O~<>uVsg*UiTVd8&|6`=ZOzGL=t4NUG&4jyErXVv(X7NT+mNjb%l0 zD_=AXhl_T}G!;)1L*7&ZYXqD8rth+b@Rx>G@DUBTvIn)T>Dl9$#AW!1JEKf{qHaQd zSbi1$as2UreYLfr2G??Qom;JnC+KQ9BIZi)=KoUxm_Q()_IXZ=F1P?o;u@GKzHUgX z0py;Pxe~xF#*96o(!eV3i9Kd@Hj?{1Y~K<&dqoWalR z96jS3aBt{6%1HpOSJgr+S?%(Xl4B0^xt zS7<#fhvhdG0J{)w;_N<+bUx zir6gflXq~0F&#)XVk6vC%`lbF>UklY7EHh#KgKex?|J%F7sM@_}Sw?6RJME|MZp4%y<%MHV3t0&Wu^EV)~9 zg0v;CZ-u;p8W{JrRRAcG`ph^kAFeD>Lx}@nOT}F_Fre}6yP!)#NcsN`ogqNjGk=>p&Y005|25uu>ckIS~{cro8Zu{E=iv7r@i|Kfw2 z42qSW2Oz*x%Bp})tDSfVWBM*>?BV#%5cc5?oZ;sH8fPCB@OfjFtduJZXNhxc86Sth zDLRQ?_{aHi&AtdbZ824nM>ts=qVNDl9sXe)UHcwQ>#ro8V_i79!b^M|Ae*c>15qQs zc3e##mwE0P#w812$|9}ssHq>mAuZ^9I8G_UQnMH{da6tMmBOJ zWLzKZzR^GTobq>J0(8grusb&-_ZU^A^SxjDhF*;%IdQEl=vwR2)}yUQDHpD}`EVv5 zn1cd8s1PUSrauHx&|@7d+OwoQWU{NIdCh%zOixXeAxstP3$sJc0(GX%F<%5eRkr2C zWp|rlO;tgcpEWj8hrx9vtxg$7FNCN(2%i9Ee(ORgd1YgUIRRXVXR^xm`c_b~02*+U zCn(L}(6$X9KwG{xl8GNMq795bSEe;1YTz7sf}jM}PT<*encZ$uYZU`v{EZH8&8q3& zv5ys3d0T(jnj??Ni3fJ}H!?h2pCAb|=2t_DC|HxOlh}22QdRfOD1VVS`Oq zFgDLo2lz6u!tmw!smo={<$>j3*N^SSKlGH{16WiMr0LxH(;RolrVtpDg{&6ret#P= z(=@F-(BfUUEb&ZcBQPCE{=IF*{e0Gy(4IeXB+6@sYV|ArD^Yk^V}3-agz1pSGMu3u zNWyXE&Dt%TpV7inb3M;La0qXaNFiYxCfmD6SCl!-n{?YKJn60!l|NH1umM24Z?&pB zhzQFgPKc*XCbiNr3WoC;_~z&SiR**`GnpJUqx#FQ4lB$v!WRU#RaHV6t=h3|m^U$B z;EMmZsGZ{t83mK8F%7))(PPvr+M;&RoP9>AE+~!{4F&bC8*Cv8IWfk4SjU!ux64KQ zV-GdKPrKd?-x&TVa}x!VpiQ2GG$SdG6%26}AT}$B<0F^+pl#xrwky*sYTeGTZD1mA zjiN`&ICrJLJE5At{xBpR{9Mmf;Uo!_y%P%OAJdQajPcyJt9345j^IT63cwI{uG$*> zDe~*gv97E>N7?csB|EvRTn`UV*3f@UA#?o>pep9w#@|HW)OU@dvSWy8FI;P?+=u!D zJru+XF;4F=3H{b+9}!ifF3V4=?E$4K;~h?ta+_2+6kif2*$zRZDAFPsM*bf8KQ!ufLt9t<=_ zDIb7f+AxH-J$=}F{y#H)&1cXcb3vD&oi{E2e`)rmUv)21F}Fx}z&T&{#e%IUZ}d~4 zRd9cWUMhvGc(25RI6!_tjxUO7;+(Lg9hej>mdaqD;k5i!{CVaPK?Y?2$VWYB!Aa9> z!dV5$ZLI9KVwH|xYYqF7_yN8=lriFU&{VOaIzpP{2@y?@Pi$1*Qu1iXH5bl~@|W z+cXn%VOh@E5iatSo44Iai4WxdG(b5QSjWcNuMUBFt!9?7%P!`c;N<((l$L9Cv5vHE zK#|WSa-f-U!>xn|VVm@d{z4wO)q$2qgK`v}V6DBesB<4HOazW8|5JQvlY)I`D30P& zV*eq(^TyU42N$dD*Bm!QmIX$m#=Pyhf%n*eefZ1K`2$W?by%Hao|Xe#Mg-PiP)su zjNB{7Fhny#8cUWIMDnwgrmc$HYdikLfrra1#Wz2D%^jC0Lt=6y@MLJ-Eq*2*lQ zZogN(SGFVmXose9UnQ4CVN2z30hI>mBn?~MHA3A$q!UL}ZB*B|RInFOM;M?x5bdXU z{+)LWfyuRtq*{Fum1Ft%1U*^*3I(woKiHDvxA_$Ly=4vfzVN;x*WOqgGYzMs1j$z# zcGKDh6ENiGIWIg3os>KKwqf9jCv~$;J%4j&0R{6_y(x$}z|U~3%1eybGVg>Xb1*AN z653X6oQ`JA3OZiGt>tEnbqW_2_8!hXBurovzwNNxENbJp*GA2!X?r;V#-1p-U(vOc z_LZ-cPrd5naK?yVSb{)EL}~HCxi0#_ePPfk|AOE^`Al3Kpb3fL;hf5L)#x6h91fgo zUzU-*b=tZ)YyMj8Z-qFV_+>9v;m0}0garn*%bt{*?N_G%&=Fm7fB*mj)`>^9-XJeI zToD9euq)Xw%%{WJP9$S#lIv6b_qW0$=&-x%$E=q^t$DGEGP!tjhNhw>GZ?(+6W~-W zcUm>!1UgTxG5d_``I21M71Z5J0_GRPhWt5|Nzc9yr@%Y8OkNO*yvZuK;a#z1aSEeO zFS|pZXbtu@TK|1{gTGB>OGJ+L@oe?r1-$&k5Mh^|-`)#y|~Z^_Fj zb8M_>U_=xXiB!^ybCt%>LZ<%p9^^ZwOE(x`+Ut+|DqMCsw$)cL7CD$HQYO%+3=QGn($&$YI5U+NF|L6E zD`$fHM@5945i71;j`MyiW6R`lTMwaWuVSIIt_aI$@M|TcnuzJ&w0`R89UkyC7B+=Q zP|FxTSa$8nIf0g{zHF!F`FmGMkc(e}xZ_~8>--}6vZ)fLYd`$&c*FY;& ztVlXQq1SL<3V?E;0^wm5Z^D9d+@I#8i(OVRC`rvr+ocOzWTRH){ZcZS`RHW&3Om8I zpxa}A0NLFL-O!KKcIl2FEt+L?N+ue_v&V@JUz8kM(Q#|ia4=@F$xT%T+B zl4vpP35E8kS01&g;^ke*U0@E-8y4!fooW~R3L*QV6Z?{CRSRUre1o|Eo@2zi=yuD) z7>FS~Jr?(1Pe|q?^tTRtkPcgxls=qD@6n=Ptsj^4M@y%59nB9gkU@{V&EMUvYc*uJYA^jC7L#b;pvqc}Mhu!%b(}*^#^w zA;c$|b`SzQcf>uAIa6+bdg4!AA0EMfcT9(^6t9IrH$i8O`@-|Q@KpGQ54v^ANpwfu~g`g%C z>XA=xj>YD{4SodMmStrSycfl^NpPN(HK&~{tIjeRcpYiWs5&5mgr^{nRo+206ZAHB zx4;@=G65k>CHLdHLgGI|?+ZG~q%p9BHO^z;8=|))RNzrX4+ASI#{xHlsJmJ|kPU?p zoN+xRwW3w0H7+oj|Iw!dr_zdoN3n^fa$8~ClkcFGIFSTSvOm3l$H`%?wf@uaG&+`E zZB@PwmUy)IYOJ&=&D<=NxDJoon>CIXfK4&wlQ~5)g2ayk#KUj?i?QCTy_URgA(nKp z08Oj(<<|B2Fo1B$7U#W!Fg0M9v?5U){KD|%4y7(~n&_YiLo*(92{|kYLX)lMqvDHR z3Vs+>v=bP~k!?&qQHP9$D@F<5dQ^6uQHxo5{@TBI=25BMmDwtGvD|*ao1nClTK;c= zR*cpl)+E%&v5LieIUMTJJhB%D19VH);v-m^`I?7igYT8FM``%gj1ec>PGG!>_xXK@ z%@j}u(S_JjTh=rnR@VJl+Na znv(%>800ggwqP{xikmqSvcpf0@nx>)MgI1&bB&~N`!-*H?bnvgsb1IUH7S!7NwB7=Yf z8r(PelK|hE=&JbKLK}HIJ0F#KLohB3kpO2mexwbGxhQf}FqC+6?*Rc9%CIkPCM=Mc zZTJ*7+pB+z{4}@&j^tx_2pEGJ+%C0dkYf3n{ey_-1slu=6W4wAk0^7Bvq8#WCA!_q zb1n;F6+TC8n1fIYZPe1|2=IdbN4b_Uk8;4y)&DU8hbWJZDJRMLaO9J@=Y9y6hOntITeShVjK2QO?0>$=Ni81VgMrhs zdeUmC_9MKZGw1TG@tJ~&yg1-X;b8mMBWGDF$cc%B?L%??#dIyRdW7#gx%sp&}SVGO{H}hFqqb?EFUev=y_< zVmx)XX>AA3IH2n~$uft<)#Gu!l^PI~Cp;062RBC^iumQl5I41NZ(gZ!FT(N)# z`#+>j{01Gd{MeF)2<@Q;b-MBgM5Cwv71&P(1TH=*%T#^b`Jf+8#jaY|qpBF+ocS?} zt=pD-guu3^Ph0VSERdb}<&|OT4)w#d`$$K_Is#_WWA0Z~XU?s)=u^M%x#jj5fzmXK+m}BX3TE`)ii{E=OQwWOe{!~Jq?|g{-amXp=n$NvO=MU*#=97|ycR*_oUJ{rI57ze zm8Y3@>CP$&&d5T|CyKO|4hhqdJ9n4vq`^9XUD0lU%gO#ZMexY!jMZkh39GWbNG>&E zSVER=3U+5?CE71bHo=)l3HC!+S;eY{R>6u;tIH=R76%9QUN+!ohhX z--S{$y-R1!BHz*7-VOJzy(g~e;w`#MLBWa=i6D)QhYb7=eK93}W!&ad?|}%4uwUd5 zAKaFy0u3@0L=jtPm>kk$RydRaZn%C3K;j6>&MDbK;+Spe2eFT5szT)ZnPqot^Cj?& z98>(F=z8$m1Ap=nmh*DWV2jr9OLU7~pT2T^KFgZZU+cXX+4=zJTkm}`pt2fFpn6Y9 zWWYkbUE%49_=pdR#RIg@IX~meVJz}vn8WJ({@I3C0XakxmKoVjA3Z(%ROAFExyda< zH2E_ouv-FpJF+98^M^*WQKk5VH^r;`p0%^L{L(LUPh>j#)1C6WMXYM1=C>UOjPtMt zj4EL*rY*BS*i_W{H#mYxX<-XEtB*JIwe~om>Apj;V?q3ul3YHU@7KxdICui;f8X%FeiZ z%g68pg(Zt(0o)LUbY# z`9z32V(##Z7|`FCt&FfRX6SN{kO#tYo^@S=DsY}7%dKC;^WWyH#qQ@J=#D%XA|ic= zM&GJ7q}tKD)z8Vcx7q?Kl3aTHH1-@~W@cKQBU366t`RzkO&~5jB;QH4T-{RAejnEk zTzV4i%|t?i`c?2)cLL?`#yVTBTE6cL)V!pWbox=9WxdRTGJsG^0pqDjZJ{3Geq0e$ zoTmYpC9um)7_N67xP9&JbsjqrjEPaL3{1;&Wyn}@{IlhE#B7o$yd#hPqIGyIJi@~o zNySmt2#=_q{Km}=7M`NbN(3BX(3A%gn$Fv~Fxn98bsNUo>he-YT_I`#CrMEp&BCiVFcrjd-%b z?w+WP>}tE<_~0=~*T}#r<_Y#}1`QRx3S071qVm(=t2P?u#W!90k!$~S&H72FTQPNs zClh(7&a7h;s7qb~KSTkL$8za>oI+gNw{m@~C(C5AT0=$Efu`g+z{VG)g8Y$E!`zui zafeKjIb(=vhmtMQjx{4PMl1t2mv05;lnl&`tB}?3243G zYC`zD(7IOI*h-pBexMTP^D5v}6jgk{(X&eoSszaP1NEqYfT|k&I(yX|SDiTV5A8%< zjLG{+MZzyA05U!>)-LBR%HO?mn0HNN<308+6u$aZako1UP7!fxge}2C)#~h%Nr}|) zx>>-*CD|syMChcvnhQ4n8d4-RpKz`@gqfXo$9zS05WvLGRFki?m2h0)kJfb ztg0}jb=(wtV$%YRqcQ2LhJ~7=v5TUS--^r~mJY?0jin(nl$%WidzcZMMy#TZbh#51 zCUZZC9xg&&eq~5d0xRe?QWIVq-dCjm`#dgo-%kFr=2y8JR%BIg=~j`4;j9hkoL$o| zvdCMT;Ey}ded)zdw2(~;mMp{qiuN-QN~*C1@$XIN2#9_PbK}9%IR*M7Vckk04Ei8U ze(lrB?MpVoXwl6ZHaM-&{_BKAJb3NZq0CAqsMyj}QUU--a>tmUw`5O!~Mej>qpVYCe>k0I`-3$Q^=jU3qxq-BNJ@0Mo5e7Zfg(OF83 zRZn$-C1N;PKvHc$5%s&dkBL#D?>-9NZRz{gS=`1$+;N<|+vbps^MfTyxq_wc**dgP z=iEPcNKoT< z{$2z=QVs^XBNC1)!5+k4?on;aKfgwizwex=_MqG%AUGpDKu_~B>TJJQAL4XL_p92Q zx|(+YScxD<1+32;7Ozx|$hQipJpRzSjo*(XQ+}=job!16iYNJ*rzA)wV-u5NUHZJi z0$>@*)@1FeR0NIdAq#4=-|PLj?FT4{1)qbAe7!Oy)BC6uugyRJ22hvsKhM>otEvR3 zVQ5dlGda`oVC|iM`RGQuB6rnrkBe^_qcy@XmnAf)E2Q7ZKi(gR!2>Udb>*dW{*^lT zqa{XaZL<>Uttp6}56YlnG5(KdWAF$x_3z9_2~_#p)<9||hSYZv-J#G0)-{DP)I)W9 z6Tf+(GJ62nCSTaOE~`vr*j9Dgy;Y*Wbe0L~% z1HbFB@aTn<;ZG=(whv)G!0Ucv(*{~*<%jQIN?;qw2FJZh0SMe!S+M0M?~`BCxq@eb&> zE{LZ0Af&XDBmJB8oMXzC zKhzFI_8yfJvJ|np7^)pMCBH!*9Ow~A1RYc*V|{O|F50@UYeaf(4dv0ki^i?lS8afK zrIR7LJTojS6!fn_KMrk12_*A|y=er-FBe7tVXQ&eXAhQJDA6ArIQ7^N2k z>_s__1vx>+lwckt-{S9&D+Q?A`)`38#S`iYC<}iFbfX(RbuWQ0;4&*rqT)krL!Wv6 zXH8IhwCCDF6Slc+ZYW+bs42)fGrZDlPFjiAtLXcl+g5T+KQa z;tdw`h42uVvJ?Rvq@zUyCLiC>+qTR>bD@$zR@RqulaD}Xbh9pWTW|aT454-UdsP=a&Q^oZk zY|!|_FE#nSD{yZQ*Z|qZT$4+(H|`w^V>MJu5!MX^z`rTckgotBnOQ;i3^A&UvB8f04<3^TZ_ojGd)3W&^UOFkJ?yV_knkpQa~HNHJ0NcVbDSj>du9MgcE8*J35Iv z!1B1DN>cu=T>)H@gidDh(k9F=+Yb<}Ji%!~@xUfQ^GZVa_XsJpBe69?%HQ&;Z8LEZ zsSr4SSoDJOl5)AYBNTA3TROMw`99s@r5^Gn?f=dzuY(SkA%g#R* zNn&xl)L=n&>m>%iia?8cxYig4Mh;*3KuK5hfr1=^=F-jJ%Kd<-uIl=trsm5g%sEo= zzDlo;&E(*1AZ--IG6VwBL80=^jWM8|xAmGc#1c4V_z?`mfSdM|5m}X=16p|6Y%}!j z^x=rm0}43uQ=WEb{*WhzLFq#j0!}CZ-FL~+oEiR9rgc=V|Gr5Uke8GNn z$y)52Eb))8w_Shswo>=J^_t%%5rA3<>rv$Xt0=QXK)zNx-QB9*PbSrU9ALi|>D$_6 z_a22`x4{+$ogPJ{%zQ{s*oYDU(U4V9A)g6BTZb=Q%QY5h@S029i&sQ}dE21-PM>$z z20O?iFjVFNQ0#y^@aEF-lnGOuzpe!~vRS0MX_qycdR|@cGs&gDCZ*!%SUl~v-wTQ@ zs9&i9kEk1zHmb5_i|h~n!N?w%!*iMk_4IFvTyx`t5Pg+*oI32f{|BH>Rr!YxBuWrnCtMgM$PSWYQAc6s*^5?_BG z%nGtRCV6MT6auvnS_lG0$bbglU0x83#sA$|X`!+s2J-A#koX{Vw!2!TlIy2X!@#V8 zh+P$@>(eAVggg9GK9!+vnRZ|}1B9x@HCV_yv=AH0U!=Nm{Su}sXc6{Z1b{g(w9n4Y zcW<5+2WDv(U?U~6+gPswr<4Ey000000005ZwU*g`!KNWNjyKHhdqH|CEEQ#GUT0q zPv5}L;iNe3>y#_1G4JU`ZWgqD$3v|7o}u4Sb2aTJFNKT!SNhbv-=E@r;=Q8KkSZiX zZ2~~@qc2IDs&(@L{U5cRS9AgZv`@7KjBo%2%(h@F!!nKkZX!-X5abhPBVH%!f`)J| zOva~nwE-M*J#p)pM%Z`i%_BjUmcLtX@&+C-s22NH##+a;(-oD{VTcb(9z(2T3%_A4ZCnMTP&DycJ9zwCfce z)EkX4ARjzu9Qkp(Dl}4{+XtRgYfs?FkYK}xJ*WiK0&Cjcs=H7DH0}bs?{&$|E|&`v z@0eKpy?57~>w zENll8pZAU=6dPm3gqRFZ))*6RL5C3F>jt8=hCBC^8MZC3i;|b%jGw-_R6y^ZO>9mj#70L$_o&5KCb<6Hs*HIS18zU#EglKy4+p^kgIc&WIJW+qWNw_ zQ#<+F^F)F6JoLis(Xfc)@ryYPXUi^#qk3T}DW?iio$0?PMKq+K%@V3#m|>e@GH8Q0 zmbzRQ%{`%B3&aV>tbuBN)!S0sc4|V?79JHe^2eUb-xXnxIWxjLPA^Uk^Vyfjb`_8`KGOa)5P!GObhYl7*khMcbCuE93_H zgry{qwlk&N03Bh?g@8zRLpX2 zGS0;esIoh?7Lof`7A%9E4hjaY3&2*Eq_w+@LVN&+PRiE73WY(;vsiQUqJNH=Z!)9u=D9D-lR+J!ww%?uTNPpIw@fQ? zXke6CsG96kEKeO+v{OgS`eI7ktkyBv!#qiWssn1qc@NgPau+5j5t zyI_b+-5Wr638f!PmwORXz^Gg}v-wz$O$eBovJkX1jrI(ufcCQnlKMQwluysCl?q9V zf;ZImt3fd~U?-11dw_IY3<#iaN1-c~bp{#P} z>rI?pu7Sj*t=O-V50dExAM2W?8P4mwYZv=36~*z63FYK9O|mfhR-M3RTzhZ*2Ys465+yDMBbQv0|~a-&+KGU72WUhMtSWBOR!=xN0P$$T2_| z#I^)`U&9l=i+npgnn+H#6wC!}XE=jjJXrwO2OMrNbp#7bt+lCyWqHaMHR1o~{4A;9 zp1xlg2ph$W>}3Kn1FV$Y-WD*Si1E1$9^pelc0xXT*aFxMqS-Z%!G$A{lOS?ns!S9_ zqma!|nNUqk-Ykqgr9rvo&I-MV{S?4Z) zirJW*e{BpBi$1^TNC#|98dEmBduBzkyqNTW61Ie$9b3FXP2MMdTL?seO#cXSasU7T z00009;PIn87|@3wR!q83e^43j07TIU)B0|2pe@7xcf4XRL#x&Y#W@tJdDboaT5&9) zpM!8O=x(KO+c`Zxg1d!Nv!bGV5)T6Lx6BosP zQlR8hl>%=SzSm)ZLy2d%EpItQ!%?2n?TzEB*itr&z$Fc=$a95$V{-LeAi}cBB>QuX zJw2)H(9BZ-(w#7 zft8japY{m)5ZLGnAUoU-6}`N+4WlU*lnVV1__y&;#fpvqEG_E& ztP7$Bg9)*QHU2(huF!@1=H$NYI8igI^+;Qd=H3z~SQmvm>j$1b-Wl%><}ms`zs@ zCkK~tYdcm*KR$qW@EN;eNB(C#0g}V*#?&6}zxV%{kG@-e`BW(L*dn?$u5T&_9Q1?R z$$8{vf)xmDymcgy*`vF(H%bPis%&%OA&DhSpAb109VoeVA;QPmkE*-|w-mawTlaNz zngfC7MC^7Q>Z~?Dlek16DWx00)L{Z`aJ~T3><#84XG^#&xuh`3IRfm8_=A0cLSd6& z_#$aCQiQ-33$B&jj0b#mH&9(s>YMyoNmFT^_XsZ4T#6Rd%9~3VN|y1n%*Ts;at+-RfE2dfnu|!DT637k^v3|-ow#UYT({@406?o+3(tno!sm-IHnvr zG{o|XE`QA!r-|VAUnWu6A;)P30`QHqXG(TUx6w+t-4Z3TDR$l@V>7Es;oR__1zn)+ znQZ4Mt)(fdAm?s=DqP4FzP=!yw~}hhehP1~>(p$)jg=l}a6tt@C;i$no~n{>2Fq>F z!fZ&3V|H(Kk8&}sYdu&yx1)eo?tMj8^k*Z-G?+udrU|S9c}0lM&Vm32)svKFr^I6g z&|llG9rBAB)7=Qyxu#{d!NL+`jkM^{=a_upK}hi?cwf53*J@eQ zpwP{A5=DT7fJG(liU4F{v_C|VeihGG-zJ{5z$Vs6251>8n_*6|#EB#iIsydOY?&iC zcN5VSZ1urX_d_vy{N6;nk-Jrwj;|4-a6S7g!=Br(vGI-NxGMy{=ispizUr52!UsaV zGGnokt1Ynr*0aQM5FVu`#F5qe$fduK-yUFZ2}D#0W17g2gIpfRN9-iNzozxj?b{kG zh~peLEtYomOVzg!r}pO{azHeSy^CvBo!WwR4TwdH=+F79OMX?en3%t-=@ZY^G}U#J zWSTrPC&tG3oKX?mI5uGS=$^1+#&o+`9)%DMJYV;@y?*)dPDCJ3Ke$an@Cy)d&!eVS zt`I}oi4(IsgA9GQijq>FgP6YQVECe01f1S48f?U}k!I41Jf* z@@!s>?~^$%I%VddNUKrG_tTA`=W4SAX28M-H%;*OC4v)p2OZMr-)-5!1Q+1oEwEOg zR~G5<7TV8F_5C(oc=nWo#%5NMagf&%Wv+tnQ=CZzadHpaeBHVZzMU>)~og zA;s)$ngQD5MEtz`NtqeGt8UIEx^+RO7{sGn+$05JdnK3M^(e)68eA#)Z;t)|-F)w) zBnA=@wL*1%01fJDpeCtT4@f~XE)e#li_S79Yc2cWe4D?Uhx|zKW1_(+P2cOjKzmcY zR4N`nEc^=T#@k4RG+pq-4hE8K;($`Ry%(`Xq%uB}+sz3)x1H~RXqMLR6AzhB`#XlI zit@e$5If>|ik!HPlXk13EOh4ZHM5t5w-LTS>(rxK!61U(`xHJ)hP^z_A6~Efe<~`k zH+rN>?IdS5QXFJCZvaXQ*Sx0<)cH48MN9f!gY#_Y(I-|wWa!qW)l}z2?$rY6LkV5+ zbiC9C_`s-10iMo>*2QfS!aC!ybgc2=fa-d8cftv~DIGH<@#+mjIu(kH8FH8^r8tPjwF^neG58KxnOr4q&PoShlB(?Wa@7 zc}exsF^vi@5gG;u*MS8}qpSUcUCdSkVg)-mlFHvcIdKAwQCVU?Qs(e4A^sjTble;e zKkXAhZjDq@0LhXV%DSfHkY`7@prJZSf3z zKh;j4syNeZTF|6?=|wTbU|1o82W27`$T&_l8{zP4`Swkr)wD2s_(T| zZ^-WvAZ=efUF^?cU5@DXd7uak{%em1(Gnv@Rt=066(q|eyaul5zo6g{SZTJ7&W&n>`XsFK`2g@WKu;wxntMXb)tn3DQY>UQZZ( zon%9ejVpd%6RAG~biYf$ct+kfJiuxZ;xJK6*FvFieai#$dANNs+?p5ddPSw66oEAwAYsN^ z7zK#EtI1bTk0E*m<23h@t8=gb$2soVIc2o0cTv{#C23V9ih^cF7XeIPDdW@-5{P4B zORg`})NWc^$nJ(IlbS@{(4DRCY>T&cH(gC>-B z+)(t6ZPh%6TNDV$v)*Dp!@A>ob-MLIel4nN%mdY{_pk_YCWsrj= zTLci`5uO^T``*p3UMtsxqiG$Hv<|&7Ro^e{%ekF0focEW!)#-*FJ?n8bH)9g=};?m zcWVO>hg-J+(g#;teA%(RZQREYL4IPD^lplU*4FhEGd`nRWZy}=cr3<6vTaV*rO@FxF72gcGU1>h=xmzV>U>|0f(o9c4V6kYF{Su{@QI zAE?A)-jWsKfd0dKxCguo@Z3;3m6Y^3 zCWS8cB?W=DYr6cHJH9Q*Kx6mh;tA*4JEcmaUMRaGaz=sOh@BDY&27+rybUbGS~lD- zf#!7eC2LETEkn~Cn`E`Exo#E&?;qLw^9bjt)cZ}92;C=uUq!*wOnB}z9hw|;l7o%$ z`FKui6c`Uxv0B5K5L<~_{8>jTe;)p|ll*$~+D`aq;EySEAqT$xM_rGYg?0iDhXhe* zpSa{4SY@=_Y}^?fr9ey|AwOQ4u0lJiVCN$fhe&R&vPYQkSxFSyEJH#MDlFo@b2_iz z&~kc5DfVyf{Mpq}`$va6F;_C7G_7ihVm{*CfM()9Ms3XZ!tmjOgMl=89(7Z0wo6>Y z;IjnOJogBnboV}`NAT=Q|0?EU0Ik5c$7oziL$w<(-{bj`uVQg~bU_u*ogdiEi~}GG zf5A4+*`nF?xeCjOOxRk314p`WBl}fLkc**)G`izUkHnzfxj7=JF~ICuNj&qcFElB}08{$DeVivGed^|M|f=h7K(8onW$U z!e3W$JD4#-*qxhdd*i1@a?e-cVFdj4U0+%9Oz%D7V`Tf`Ip_5M>}#z+4U5HdGXm&_rSPmPRdO3X}_~@|)&KlK1}z39|`A^{;t%molrhWP8*h4`@i| z#{vb$q%>B3-+4%y&>M5*q9{YSF#;!d7@}Qg!QW_OyDrL8lDC&k{lIN_td)^q0EDc4 zSTemOPxWRq%UlZE?Uts$JFAg5)H}lH179EDz zO35+8eYzqB=GQ8f>I7+(tr?^VR`Z+s_%s`1x?B z(~O8pH(hNS=S75-DR}g{A(dyp^MWlGRk^93-cuJPV>5h|0uOf6NQ`^G6XAe)B2On= zybegaNZo^+g(Je#JUq<2Y%t%zf}7x(`(#~~wZrynRNhR{Q4(*z;%TfvM&^HdhBJ-| zNTF<7qp3(Ot{M^XLJ0colF`q>usvpUtBP_x+m!gszJr&#RT3@LuO#To|VtWhQacX^a(ne!DS2HTLZ%zx)^@YO(-att0hf||>OcpCZ|rqD zjyi~(tdMRHf&MkShZD@buAIOaj(}3IH0x|hKxfMsRYZcn@gN3DbzCngMh7Wb<06gt zU1I_O*0O}~8PUTecbe;e_J=vI5k%)Jp>59XuFb=+QdBpyG{*oDI++PJFsPB&2Z($N zGY`aI^yH-cpnC(vP;n93Cmco1Zm4tNbAiy8EFXlhosYesn5OTD%5YNVr=tqd9sRL> zH5^zzO#st$(fbxHMn|4TZ@m<=cobLQI_+`Hk&Stcy+P}k_M!o;!NXV8tpEeTGh!CM zv07*b9Hca`tk`hyD5QRcNAwAn&;sqCXNf@%o48BrL10&>EfjBv^Nmx2abNPwGy#bR zRgPenZ*c;0=N-zvVIk-~vtwM#-D=`P9W7 zx3^T=XHVhGb1{k-VU=;31_Qx;s!rc}&#%s;5VYua>s+?pKV>vcItVZuRU5Ga?0Hlq zi5m0T~M2(n|en%Jumw1*Re8vSC)tvB1F)e9So{Jl<>9m%>k% zEQnMun^8vg&3FV13uRWdg-{$jOhI51c31@p!(JOH4-1uFe2yOV5x7G*<}fP;gkNgsR6{TgaJkT$*~Ib{5y0t#umAu6 z002@jaalw@I1$#R0JPs&@mo}Hbtf?5fKHgQAZ<|UD9+m^YIJO9y}~Wmf=Mc~g@til zzewrKnOTJtA#>(~h+gNf-%!dOa%|98J#B5mS>Cm}uPpjhxz$vG+(EXGA& z0nm=%<<5sJ^|Z<+OiBTWiiaw61BuRs@2Z6Yef|_uHiG)<#cdVehoIt7u5qr}yzP%) z#6&||&M^>F`3u>-<6G900TcGQd%RIv;)xC2$m)R8Wv;5m?qB|Uv zV{3sRK04Mrd5jDT>SE%c`q3D2{5V-K*PkZiP0Ik$=E{lE2VM%#mv{Z4fjQ{DjGx#TO$Au)vPAbHG1G~BRCe`0T2V@8WGpdXz`b`z+|WL zMW6ZM;LLu$7r%O~suU)Vip{7-9O8^x7Z`R~c_E_LQ~h{or&543@PhMySA>rr{bzNi z>q#+%i3g>LExw)3uWGOle>0dLjGQggS3ww8O4}T|UB5PYxtbo#($x1w$A~o1+79O{ zF;(U5?m9WQ_VWCGSDvyEuB3C*T_R28+7BfnElQ=UKse1d#q-{<7=`O&OnzbJ#=B}y zP;%YkYI2bKg`28Mjv}zxJ-s7?(`R-KX2KDg4-_SEnWOKug(BAUR;L<}%=hcFxcFjA z-9m0CiBx0^d4o4g&fg@$PCL#`<9$}JTX1@E4E&VSvP3#?JJF5#9b+)>N=?WU*y1ix zY7MDb+I=C3x{Te+V!VY5(-UgD(UfvK8B(iIeiWO#a&9YH0 zs#>f}W3a-WkN`f4N&qCJ)xxd8Mxc3EgAnB@`uYpFx`n0EsQ9U3|L4+8vahaHu!Nc? zy*STKrx;ON)vQ(@)?nK$A#2UL&uz6I6iPg{E5Oa(N-nchfCUaF z!SFG5w!7ZtWrZ(Nj`OHjuqkw2eA0fzUf9GcLQ0j)CZAAuQX~87caAC=yFsNpa`kfC z0}#$G0@7T9Nx$BD2Za%yQtjMh!!Jr#GKNDLTkxALfhkpSskf-0>*$!_4g z6a78eh!HNCLgbTON>`vM?}g8o!-Pk9X*M_@n((1HAn^<(KyxMb;>+62M7RLTL{arG zNl|=`ei->&Nwjr7)?GGjv(cCmo@|k8oYz`;2y&P`&@@=fa2cL&?`J8AG}W-O_h6r_ z90#3{5wyik5@njg6oQP~mko1Eb^lnHufEjDiyJZXg$;aLJnM1_swpYGEO_l=r?bY` zzIaXUvklqbG#O;CQoxQGm3pw6eH#JevdlAS*|FO`TkO}u?HNh{FiqYnSkGt6gM|Og z7lK-~K0;RzTs)T4#U4`7i#?0AqR$V$d!(1&X(c8S;~)IauwZ!Io}_4lpd^6_J5@a9 zbR5qMlEQygEqt7Bn$n^G)N95?|^uTlt5)@xYuzY6LdhS|?EANurD zj=?l$f!`zkVbf<9oA@AA(1jE4`t~`Nx3@8I+;$|Pq3Y{BH_A@{JcEEFHTJ-PzK=oF zMGMs9!|@_@31Q&Q-lN#MOz?Fx2o|6B+SUk1+iArD;P0$(50QegaVie%B^sjz1n1!1 z_nSy5V(@4{2g>_TLW5ob#ZxRSBQ&0o^f&)r7CZ_mQIiw~fLfCb8Ts{tp6tkhZDJre z$arsCLDb2}7aZZxCaslJE7HlUIfJnY>oqCoLV&%IpRjp77X$!}ujhY_2pTM&GE%BU zMg5CE9HxAx`SaXb9$2AX?a9mDamMkJS+qiy;FGd^uDjvwFNPIgE%f*LGN%uy_Z^X$ z&Vvd{N-RFqMmOT{Gc=RNVh&D0@%sHdQ$kaa(;qb2F^vuwx9xE>!CPzpwhSq=VwG7sviCrN})r#Qc`O(`8K9I zmRu;%`6B9I?7>ZU1N4aH0h#GtCaA}cUsC$@wSv_HoKfIzcPomK16w&I%X+7&nnKMWU%?K% z6+sb_=shWqnIyC6iUhoofSdwMZIz_mRuK49^y3dXv1*2j2ppvq@X|{njWbxTZ1DA5 zaH;rxxIG7TfnfGOq@pS z!Re;)eT%*IniT-zGMTrrkFJp=5nw)Y{kS0xU9tSNr4U1c7`?hd%mG%J`CP}l9XJZB z;k!$WPYx$DRfyISSDhz2o*+o2jh)vg@eyf1T}_+ zwF;>LaBn^_fcW#}vPfe_vflQbAs2Cxz3O__6t@523BMz`;TEHaf`z|;F2th8NOjd9 zj-AWHuOi@&pT-8z7(tgTtxkc*kwf3qOAVRIUfsc(?aH~R6uIaTM1A3)0000006_Y* zJiK&)birMySy)2cL<68n@V$0y8M3oraV3t(1JB3?=wRnVjm_BjVtlOz zfk#K2oj%Y?%N(5*oUsmQJH|*nuHqxhx$h}h1)H9hnT=_$by}F1#)}$+z65Cg;l5Q2 zYN&n)gPVM2Zo7WL3^G?*S2o&dCC)AhjWba$3^No!rR^2P2OVo{E0#K;J3rblDH#tU zBowI|e~lpeNFMR_qIaKMP>f08X}5rWbl&LZ1i`>P)kz(fj4jmEt+z`I78}1c&(z-M z1pC$qJfkqzaw}RBS#JF7M_P7}Y*stpvs{_sok;i_K(4Yt`|TrBsq~<0mFiEkH|MiQ ztbog{nRikrbR7L+VFjXlZARhljlctCLSl5>kLfng#v6!b{2zmp7sR{2hBzh)Yju8}+weKzUWq(F*1}HlVldv|w%m+BXxIc&4YR;1s zV!}5YD)lK89&`M@DuVlZcrGnG1&B=Gs>w-IwHF9q2TosA4?LM*e!GO7;_gw}pmZ}u zsplo&^_0;A1sG1(Ir}RarqjHg61#u>`r(Dg zOI0be9~ABM4@8`1EHqBiF&}%} zC*x##o~Vl&WV!NZL?tW@4|4Ed{YStyGPSg?42?@`kB>$TxrU-uYoomX5}Jv>MW6F> zUti$;pDD2q?$2+;=h@;Yqt@Ga?7GZv^gB-IDa2t+@Ms!A#Nl5~@ky#W@#Y&m3aMc@ z>zHRrc@Ukb04Gyd#PbbU(D=hY4ex!pI1&hIsRBx zv!PkLc2o?fLzE4*g*;w=L3wgDPstlQ!3)ui*Qt(pgY*9mX2R41_U$FpkgkEi<+CFG zCXPV=<%spp!7&0_`7x!-(}}RhAOD1OL^wHSCC}eDmwUH3URkkg!x1GOM1>sZDXq8F zyBEE>7l_*`&O{!=WaqGeuAc(w{8JI>@N9hkUS;c3R>!ST^}rEwdRz|;-M(wMog^4D zZZ_J!AzJj*@1+f8{N3HD<(9}opPry^GpE0W|MY0(^z6;-cVwE;Uub%V{Vdc}%h z$oFcC8t(bC-!hUltj`iUOMw>Z7*uFOqH+bmfO{Hc9~`Qq;;wYtIp9 zH6sQP4WPWsU_LkF2)Vl2SZeWX!5zd7Fht_2I5td5duLCTZ8WT-ICG)?;M(N7QZ0pI5&>|wn1O@OZPTU^2L_+g zqP=QavOg%S>vKq>=%sUwUOO}4{t5AiC_I>V3M|55R?ma}Q{rBvNz83!)T)1v>g6S? z(ZTsRhIw`d*uGn>cnWd7&v2=Kx!ukM6?X{$Ye1C0gqAte;F<8J7_qTeHoz*=3Y7|& zD*v#nJ_piWJ>TT8NBbbLpa`1h)5`)MURH4JT#PRQZU^vUw+?kT@oDgy$66y7aD~~;lTd|7GnHdgR)oD zWK9z!#8<@pgW|)i>!9coz2)NLgmO}u%e)3~1`-6`c+RpDibUX{$TsXof1wzV?aoVv zkM~>fo0=_LGe2-YUEMl#Mn33eQ@ayC`mB=f2UJR?(#3r>Vw6jp-QN44Y+3w*sCqN4 zZAk2o#m7m&l65Rzpe9~#By1AgD`!Hj$sX*E{!2zn`|s*=v62hx)#?+ORo1eQGl~fw zfGR;MCgSRtr~~k z7Z%p3hqfV9A|1^KwoHdmj~x9N0c(NkoZAf3RfeOTt$o4gfpz_XySj-e)ltvcO^LzC z!ns5fY`)SKP}D?t#$rI%%-udmju`eqEhzs};-PR9dfujqi5^>DhQ^>5V~dS}nln+4 z7DLj}tJ3?OZx5C-#{Uo-w~*1_A!}&`D@^nv`xqD8id~QB2Z2c5NBaYcN6wr?^oAtP zIUcI@*yBf_G7ieVbWgIcZX)pefbJAK)Yh zDOWwn_IL3irdi@6-B8UW!3yWAb#_^mVEyf>v<&qHS_VmQ5B&mpUlwR zi?=#`n$e;q{=ZgDUwhjh#|7jZ!Q;5)Td(X2Aw&TCCtcJu_|~E+@~Wt2g$aANM}r}j zk~~`EDXQ*tBczUh+xJs}PlJlN?eYW>8dn1}viLo%Y%iw-cjc1sZ=uv*Q}e%x8TtWZ zqw+T32H+$;Jgc@WkvfEOz&r!R>JCm3A(xi=po#x|cyO8h(K<3JPhp`S8khRgsD2n{ zn~vN>lmRAzg9Z&Rx_u+xWO#pv?dBa7@B#>qK&8%*~PR~@W zroZC`Q$_?)6gecLm)W`mkX3~t3Ol}er{d8uvP=~?2d)pCY|E~sXNx+`Hi+;qxKJi; z_}9&B?ScOxIkSk3SKfG_vQ3TN<=vzvq2j8yoD*e`?|o#!>2G)p9eBhT>!(y7+}rn> z`Pt()@ff7nbUw~D_iL=2e*2GxoHuc#iTOvNSic3)BxzYZ*SB*j+`yl3je zHS>BscA^)3bhg^C9}sg`0000001f5IT7!mwZOtw}KHlZjh3-ip#tLBUm5JgEdZg>i zd&VFL;b4Iagn+wOT_jNf_g}QC*yH3vbnT%L)i4D-Hwr`PJvg%g21N6I)zFSlGB@LHUglTh@4T_4~WQIR?ewG40}QlDRdupDy*%MTPxR zkNB3e$jiR{-IPC&>cWa~$)(#gg|Q}JeeoyaQRB^hEVMSU;@vee?F9q#<1s}S#m*_} z$S3h@mAxPpT>4UDiO5W|x))?Ao;-ggXwG)=x+zT1N?+$uR}}G)C(9@A4}3F{*xb0@myx+W$<4e%S#{w!J{7FI%Hf*0mt_DeV%B}`o~tX zlsgQ;)Gv2w`p>qv|5IIX+-B3`?ga9?=!n)r392N-MDx z1`!L2Ql5a<%k_g?!tF8evP?1HA+JsrRci56?DTONoYY-&wj&GZ-E14v6;K zUaGQex0JSw_mZu$vEEUh*~`!Tm9ssYGVcv;Wh#v4`;_MlKTt=V+eN3x3a!FO%hk9X zo+`3UsvY^6jeg?ThID~*H_%m1WPO&Zl~T+%ciq(Yd}+Ly`t&(n^X5W$m3w~G0^~?| zz^tyGz07<0D;j)J&k3O%hw(aDterm$li!oyFe0iYqwB&{D?rTIKu>J_KN?L1BE6uXRm_huQ{bQde{l&3|8tF|iyjaV~YwP>QoNbd0j|<(W>Yw9?O^-0j!(`W- z(L?tEfo+@Cr}Vw*f=?Z(BY*$^AwZE~Rk6<~@w*}%08a#vsGAT#r8@LPXm*9kxaA}w zb*D?i8o7u!yZmT?E#m`GrwiFl`D4UmWjWMzdLSe_4C;z1P=TCNhNSL1fsR@~ifkri zh1}m)kF=7IPbknQzP`Qver&FA4>YT zM@X1Q#bl}%4V#{t!RO=%KvyWh)T%-jsuUWm1*#y=6%9KcLSP%7q$d=av(%Tp-%&6P z!Xgmt@+;pHh||xOqa0EuQ?g=mzRaZ~ITn%fT3~Vc=7Rn@;T2?cqb5(BdJq-4tit1V zsz(C$>x}p0MM)yEyzq|nZ zZ-!62x3D9LqwxQufNv@y$Wt6T7}ky}5-hutuiJ_`1)B>dCv`ehX#qon?Z?(yvYl5Z zx)jwrD0K3|YCEaJl_*=sbwtr~q_oWj^5aQx{3+%cPO5o@bLT|LpQ%Wy zE5MqjHPwmzF@Zlr&mHy`Ur5()!L0-H@_x^nOZ+s?#P5i?lEl2x_0EPch{*2aW%5bO zeSBv*7h?5$@vSotFhAh?6@=)mwW_YKo)Xe$Op01XVoRFAVW_|DGX?8cMa7%W?*~Gg z2RHSE4U8?dOTaOM%$BQ+M8a^|Xh1 zpo;EoUE3yeowr+eXS&-Nwwmv}-R~8chF%k_wFwk^tI-f*hnH@UpO8H6v4Pza^_8pd z@`y{_^GznqOFo=F$J1yB-P|d!0Z!H9bEGjkQDWUjx*1UGG6)M_Ur92Rtud9Rkgy9l z)MhDn!Il=c8KD$OQ@Q^rQizmux-e%j$iFvz64SXA5z@ITn=Z^`x;t92XB+{`YqBU6Sl2}?rv%h! zHF{968&+?#YBs}k`#X@DO0~74Gi&y-$MVihRLFPuHuq%5?=hnoE0^8~ZB);Hf-zg) zNy95uYKmE*Hb4^8YBeaMv>i*zG1(6Fa7f;E&bDboIHkL4%vFT_8D4jafE46Fy?mxz z^GL0nuZ&M*8a3(a(w>`KCqC(Z6fa7`a`<}U>v01)SoJ= zj)@dO`E_`I3eVS{GTv~G^W1E~LK)&Atr=BFM{2XjVyj2-R=;KSq0O6Rim(v!R!#|% zN~*cqUQIyzW^t$}gBBoT$?62U_bI>jgQOu0I|?+)PH-#3**@zJ36DOJ+~GQ{yTA@r zcl{QDW_`rt7v%G@{}QO3iJE&jHWyV(tBcSFJo0q8$>Gi>izj{r@AUCJ%p)`bY6M2v z7K2vbI$aHnK$3`7GzeB8vPiY2WS6^a)o^tC0-*=c_Oiu;_-0e7H5i;c_vGB(jBCd!DpjdZr?V z?{{xO>g()M5`B`# zhB`VZ)elZ)1W7>T}>Fp>zXfocBjCel$rR6?);VY!1J|}frVcMzx_mg zh(5q2y@vIKCP;rne+9OALa)@d&Kma9yumZ{XO5ip4v1nzVoFKGzyJUM0008fjQW+1 zR~#2c<+PW=Fr`w*NmwK(9r2hCm=(<+nr=P+D9pMY*MjfSOmqP`Vv zNkUxd1MlP=`l*Ra6rK%oy_5)c7FFzoxVF7#FD0>}>b^92T(kJ>g-H=WXn#fhM{JK) za8mWca`L@(Bl*N=Q_4f8@ho|bsEK8-aDK61N2)2>IK`8#hlw_GiD4#qrs=9lbdyKj z#jP(q;UoET z|EG2G)GtZ}oU$M$rvVF%S>sbq>~>Uu89EW*4MWV?lYG*l;b3Hq8O~Yhc#cL!8U{ci z&m05y8ZwpsH3dK-i=)6uS0#osMk6yF{T8&Cck?iS+bLtCM3ybXFhwX0;yF!gLmwr^ z(=M#O^SI0zS8BJ2(&sGx79x;5yUrOeWZj`RD>uC^Ss!Y-Ssqy92n3v*tuXfGr4NPS z>@h=ni-i``Zy0n%tyQyR+2$0|9<$+gNlQ@MTtU*cqVgE>m7ZnJoLGL~b8Ry+Wcwu+ z%AjimfGZ>xlSFbtUL7VEN?$2I3u2P?)}#A53JA8I#VSs-@%l%%aZT?CQ9UF{L^m!# zizu`5kM_sK`xt(Tyocw3BI2 zzmF7s$v=3VsZY5{jC{hGRoT_q;RJz1V4ikPj(uYejjFAe=fgD950# zyM!JL7-0A>AGj1C$1s4n)d0g6JiTE4k=*`vCFH>4bv(B$skTSKb3?_uQ-^4}S~oxd zwqM*DyyKnO6=FS6teG{`&}Ad4d;%hg!375QEJV_jz^JePnIyC{HA)#WcRc3jZ%imD zRUSJ8;LanBPq8IS^^e?sNbJc$KJ+4larIY~hbx)UwFymWW~W00lv3zAx!8svlIvE& zl;qCh-w>f-8 z+W6IE9&E$wHQ8K5khC;S%Y2!6on4Rq3N$XzD~)QI(sjBKvT zIs01%oiWs?B9Gq4=HWXSgJlUFlGCtiI)nX>sGWeUf*BVK4!MQbCRVt4$n9_wLXSIo zuwqze6M%@N3p)Bh@AkKV{p=KFkkQz!se|8*+$=cIC8;>07N^Sh-75O%WbOSc-6q`Z*MtqaO{4YjRc;Zxy^a2T1{ zCdDYOrJ&ii5f6W3$rP<@@rA1n@Er32~;wIZ#CCMJSq*+TfcY;#P&$b>?b(>&g;J=Mz~hOIQ&E#7zc{=1)> zZHJ1d)GE2g1*Jv;&dD*{+CXB)c8~fYJHIJpF_a(92jc2UckL2mw=Vt68 zZBL<;MV*yOtGa`s-zd5;trI#sN7YquU{{YhG?ni*gRB%~bF1ZoqS$SI@(3c3gc=hF zBIUzv1$JP)O@1zD*-QrS{--$$Ph06G7~SO70K$U0hC}2EF`mbB9zKy6B_p{vLW70L z`3y+HB&~@9JdO9qX@ws?R9Dk}XP@dI=t`iX#rmM(Z{9hy7g%P-Mei(gn5~_l?5Eens9$$M3E+q!d%5(e9M9VV znqjo*Etzkmto*_@%p@0Y3{Uy#29JXp+smzzp|tGzK^@ttL2nR^oL(81QG27ltaeXs z^Z~B{Dvd*)`}F_erH_Y>9Pm;V+{4`0T6w?-m`~(%SzW8acYackKg8qagxyEwja`P< znLAktQu(Ac7Pd8YS|2?K_&|pB-NTK?MeMriN!rofRC^X9L1vM&0KX`;K?u@Uw*LVPGZ9 zOt=j>hji<5I9`gd`A!7LotQD~r%{$rY76};_I#}XQ4caCWojboOqiczDS zj_9%aqw$;GH=iF*+Fv`Z$O^q*n&*+HRgtS{l$b6(8p*?x2|Xmn7_VOGnl$I!+rI?B zz6Nv*SpRQ)qKzPh?i+#CBUoy>q^0EdcoHB3Q)z4jfpf=v^EBWLQ(+rOu=I>==v|D- zXI_r67Ox4fCLV(%cylf27N$f5EGZzH9a5E{Nqp2S0n&H8!D$u$Q!c|yiM%H-o$RiC z0y1hta#5}m08ArU4FT81(J^qdSdA^y1@lvXfbnf}PkQW5-8gvO^IpNZ+Bh;O;TvmtZj zT2fR{-Of@>0000000Vipk!;%v{3m^kBPU3=tWQh&N6=g+TMH}1es9wf@tCOM@6u>LtkkY>{H41e9Wc0E_b0+6+eAZD}G?JtC39{BhHjmw_R!38EQI}hn z(S@kX$H%Ayk5klXNoBI5HGK_ zGSswGC=T*C$W;$GIpS@QB5Iov#7bn*V%&az2SlkH2j%`3i z>rrhp5!n~D*Ot-?vbOWHoOj}hBfmcmLn)A);fN(qK0F^c{T(*U+iBllN%ZTG#x3G?Sx>$*JRY(%0003;qm6+l8_LO54>gQ9fpE8rll+;b6{eCuDa0rh zPP=?YYoA5;YimgJCe&CAJ!GNeRY;sN4X1Xv5jd1%_5k~OEYaXy;(GC!b=tqnn&@_H zGQt50IM{(?Aq;vh0_%VIGA}10@}frBc`U6fPp%d$w_4_K)<^=|r8+09BPbmiJXyDi zn-WIq-~e}#zQK?Vh-hY%ser+R0S7+~i$O{DXbia7rf#fDa@I$=5+_N(u89kKg5jyQt#g&Gt52ICWD|IcB z5}V4#h**XMpqg2sN2PwaPI(bXoAu51btzql3IomQn9dGpI%=q2(^xg>x#0q9np7nK zI1h}2Y^esp1Iz-{K|0Z(g<+gX;L|H!_?GdHs9oniytkf;By6#4FJ%r2Kp809aHACmIE3SwfS@zYAi;L1YjeoFF*CIdSZXD(A^S*+H&O81bQY&gIi^39e(qN#d6af zfAeXmc9Y8zojEPgj(mMwWX;7=J1XmNlWGukt?<(i_OJm!T$LwcBO{KMmv{=XKnpLo z%Pv|sdUM-*e(n*Fx|IJNMQPxz!1V|P31{&G2<#y-Hz7v{G||e_0(sDuPV&@p#P4{^ zzGNUcGQFb5E2$!BQPx&N(-cywv5{Krky_5wubvh13a^D{bc54aC5x;EkHn={NP)<2 zG#@0{3?8x_C1d90T=hyPZOXssavUe; z9B^6??WUs(eQ_%FaQl=ct)-M~pw3>%Q74EHF=!x+=Z}xqbpa;571w$k!%~fvS%)w@ z39#qn9xObCS>wohF|~@L_STK?h+ca4)+e!u z@&61 z^B;kgV3J%dUef+vJCPMh7H`^d+G?7NTI13RH>}bc&PwuUz*<7{p%k!(VZzu6r_b49Lhgq1~*;st0#1N}RFh546r~qYAX4W_3)osX(VMsmPQd*N1*3vKv z{mW}4XZyR(bJf_<%r!J29Q-BDj3BM?Lfl11U8-PmtHZ9`R*h_Tb=4k_9Ek$pwq{_^ zSSU@&HrnzugM?>NEzseJCZI2ieODf+xCbWKqh_Y~{y^HMr1KwVN@hRr9FzJ6H*h#T zl+j#^n9V={000006KChnFV3SR*Af`7A#iZ4jS)pxm|?+X5aaa1 zhd}|%I8#$4m@IBt6U#bo@V|sdz2pNCrQiLY_wy4{t44SAFeq)c?wr438AkuP8{#m| zWf8MgPJZ;Rk^#Majiz;Y#(WQcytWS-#>k+h6~PW{gb_boA80J_RH4O!Vs<&KcC0KLl!CvPIO@$ENfcBf<%YJ1i?Z+-qiw4ZSy`0*LJzYO;7heip>gvie-dzM+Df6a z958W7cONIeN4~tl*uBd&ZW$yocVkV+oBXF%R5@Pz^m4G>(3}jOtZR82r!d2L9_uOG=({#<+TuSV_;ZOmB4Z3&)~& z6UzcpUUHZHH4_Hxw4@UDi-b7JUcS}8n&N3KE3{}bBRN}eIv#uUb%1v*g`(xrS0ypL zd=QcZ?t9O-2*HM~@w5@#KtS>$g)b4)b95+Q-X=d^^LyDd6Ih7^bTf4f4P@6tXQ*)M z3t%PAG62qHkXOMOWYomLwPBsCt}I@COrV6Vnj1Qn=HsYKw_j0{3%v5%fsue0p%LQ* zKKr`%cH3wu2gQ4(pe_Btw-QY~&jVU@aTd7ou1e|0qJh3fDvm08%R`+66rxe2Oou;e z7Nodb;IF#ru9lWSPt<|uk)mI#BM{ElcRtQ)iUfQGLXw4UHNPUjWQ&Gs3^+GDr#IGwNTc=Oo-$AviIA?b@q1{ztndDhbnd--2&tcv6@CwWeo zZwfMYCKc{l*jGvzRF)CmZ&#(=$+L4z`e7737&5>&G_w+c{GfdN0G zSHG=dGV5ty3QC+}?N5_~v#cK;lBPZsr_(^azUUW|9oV)>e$pp8MEHANB%4hk@uP`| zb%!6nXdcWdPThW=b#?O%M-ycicE*JCo7H4fYDm+6{Dr2_8p_Ju&gy8NiO{7;!2)-7 zdzpV@K5s7z=So)0zrXfL-#24Pwgaj1xh5XwLkuWk_n5MTHJuX}0=%@r@t*q7Rb8i2 z)Qz<$`K7Z%`Xe|Ug$k*gUK>7NauAi#R~SiQQ%<+)0?h*4jE7_$Fpu0ZpUXifoKtg+ zWT3r;t3j7ez{s{o z_p}Z=0iwIY_|Fw@a1b>oxcLRzv1<4-H43kHiI#jcqUS1!GlENB8RkkFFq4i2u5%zPAk6OFtpnOf}5Xu!0m-tY5y!fW~uS zC^gG$X{Inr@xm=^(M*woRbkfW|l@6LTj|(Xg1hISXW!h>w8bkh>)Nqx%6dZyevk|djm23!p#I$h$6=VWQ1Ti z*FLzsHDr;_!V}|tI#5pr{h!wo^1a zUZu`qn!mjLx3BOvq#xbfEJQPvO^Xj)bukbnFdF1!}X`gg^_$ zx8$C--9jQk^YmTqmdP26|7;{*QGF2EuaP*0vny?C$U_4G6{5mIN&W0trn z@*DQEpKp$1*H+^N#qYmLokdZ&2qTo82Hy0s>?f= zRxhI-y!KhNFD1M~yRtP$u~D0K5Z4PI9T_qurJJ zmR9K%Tb+@@q_MOYyomsfqf70k&YZoUR_0Nb-#QO|+Aw(_1vxK=|-A z6j1HjUSZqDiTH7mo9ZrHP~#&V6!0@)SN8@G=0et1Sz7DExGaVa33@oDMu~)Vh;5H0000000000002Gdw`z~R?EhMrycCn`!G zI1-@XhK!%qlOBD@*E}Jpetem4LI0ba2cM>DP35wwV%f*=$x}yCDR;jy+fVYph?4@1 zyn*w@q6n{RMw}oXf2bA7oRZX0Coy0uW1qUkg^-lhe2qRw8!`(}!L+Z=56T|>O>c|j z*@>wkke8$m)T3?Jtaoj6aQG2$J6GcK-XK|kRuO6WjcV@QyIFnm!oAjgiCLJ+GD3kI zjUPW4S|TU~#4nOmlnFH2malHLVZD3RhKhBE=o)J+Lb< zKYXlmid6xG1-%Aw&XUgFVZ=Zg6`q@K5dq8C(dsZB=cfm6W-8?p!~D9Om#-L*2KR-n zwVk?wSmFt%d_S9^_bNEhZA+xWRY8PKQAiJ-4pk}>*SsnKer7ns1-#K7_ji24Jiy%t zOY0-(h;b>F0(go>hy=S$&;DcwOP^isYj$s3pH(f-2~W)k?_=9x4&KGS2fsFw3Cu@?0EN5aryoJZ%|@5IM-?*S zY}}v)B(KjIM*a$cKm_YND?lK_GzP!qW1na_{;$S{Kp?)``L+29)SnDc|7;$tU*euN zZ}WwVOQ{rna#H+S>apjrRI4Yk;m2IA^WsC|ii)%J^5MU6YS&bJYgNKPJ!db2m9!o= zLA(mHwc0J79Y?3?98pQ`+RFi%brjKJ>9vV^12yB+B+(%VwukWLvr>c|rx&>M0n0H- zX^ER$o{D4X+lV+#AJMVN?OAt1j@_Wq-Br5sH+&$YpZ6aHT7^sc6M3sJF0RY-XyA-b zvE(n;s>#?11X*DqU*`5cs_JyE;Te|7`AuJCP=CioJ?}c--|%kuaW3q1gI5 zFWQUz9Vu=67D>%cd@@txls8y!|3K#XC>~`AO;yDyin425)s}_Ilz&f%aa_VfDg)`} zSPDyEE!T`)?80L%P&_|}`J2@%a`v(F!0W~{gX-Iidv{OoW`}s#%zBt_W5zgqUB%Xw zCw|&s{=~`$_4g${t$7HhAelEtfK4oYGdc(PwhKKclsCW~URe~`52LvgtNb@aAAPxR z>VbqIn1TWo{Z^}VO_5)}5nQFx+V3vl<6Ca4xFQ7wo)#cA7<3tVCCQwGS(Y|VIg`FO zu0xg|-n`pShPQT~QMxM`LzzVmYV{gg^P7NU5(|m>we&>q5B#YPLr8wcJay8ir@M7T zMVB@wD`sC~OFcd+>3^IBLLYC;Xg^RV^{o)haHY zih*m&JSp2j>S!C;KAWF!=jsH=rH(s^X(AeRhY{M8a=-7fA?BLX#TA2cQb8SF;Fs8Z z%%WbfF}2C@Kb-x?X9vdlo`l4MO~%9b>gz$SZ)qDE8o0mO z5^k4|+%s1v%xbKocp0g$G6_33;9#H(e`_`e zXO51%IxMUfAF#~juBm>+ej(m=O{B5(@~9ZZHz>of67m2tz(&UYcYI3h8d-O4_)-*s z6mw3KFour- zDDpk$gGl*$VSj+`PU+A900000ER`1bzpo{R0{utq-k!!UN80-VPXEtn{%zuBbF9*x z{PP3qw?Lq-VZO2QuEC#6o7wu2^t}QJF3rf!H7_9#B`dc(nsaA5`X)gaWjN)O9q=od zk#E5_xYz(*;eubv7&3PyrYJK+&#gbOnq4y2E!UWKTRb^fC~}pWNgw7#o3ze$xxZy^8u?bFDihUQ|9O9H2Q~L;Z2y&t^9gtV??L&3)ZLx%|6i_ z5_VzW{(&;GV0P*F=TeVdXd7W?vw!;&rknA1p1>VctK%vF{_M1 zFgVEvc?T4qfwR_IJ9gvTk})v(>ZZ_0DCx8>CjgIy=^ZDdA~eQuoK%iRDeIdM43QEuihv% zkqCZt4rI^qV_k3!!&$J4d^@%uqaloSw!NWB77`34=;FGjs&j&HVQaT{9q!$bjt)ki zt|~Gtqa+)GG0)+ViYJl6KGeA6>11CVVlZPN3;$ryx1;oIe)+#f-ta5*A>YgKV{pVd zl%$O`q#SWwBE=3;=)^iZ?GCX*-j6;7AH=dl>3|pwMV2`za$DAW*(*2QxR7#xOndHT zd3mN|ej4oa_!JZBeg{3)Kr;5v;^xH|VZA9#=R{!@%`5;AkP53UzaSJF6A_N96ZUFU z8=b!K_H>=zamgeza7>Fuqi>rS6=u&{2`&ZZcHhlBqk&0)YREtdFtUB-*DNx{PXn5Ibo9SwVN9KV) zFXBc_w;^+iq#;D=a8IN#fzenr+GRWg^-EH z^Sw)0^vpa_GrCX@0O;i@+nEVjnH~@QC$37c@7yjiz<|r~NpSVO2-gh=A8@fF+6MI5 z{&eXr)Ipomtunz1R7FuFy@v`H^?7LilOPPU@n%G|^?VUv&yD(4zgjxjnpRL{Pb(xD5J25Jr?H~0$ z;8MuhbH+yB?8SYEvhK;#qDXuozeF4fV#0%b1&9MtQbyW=xC(NA2r;Km22wH&u4lcu zk;nd{3c0vV`G?Y6hn48HZeKZO#npTo`3D9i-@J?XV+HM0*b{7@HR)EqjBhfXvV%gb zKKA4kWZp4S+@W;?s$xZ!ai8T7Y^wze9&y+eN*gNd$^|dN3bZ^i3261L92x*Uu!xRW`M?{&(+32o3cjHh*|3R6y$G%Gv>tR~GAgC=o z`YhA#TfI-h8{vN|g(KCat^<{JrE6D+qKKh!Hq^cm?vM{sjjtMq-;i91M|&n_3&o4l z%xPSKj=!|@vZ!Os2lveAP8(NZCq3B&N?>icAKQUw5icWzVOsQ)yo7swZWxXTM#3|q z{4SQHMRcT6FkjFHgBlB-cl|MWy_U#KcQa5=T4YqFy}uf`D=FXT~Ew!H$07 z8Kp2KEmC89I!9~)$$$2Z-Z&s~lmQkoy_2ltQV2Lceos*L`R?BzakC@nd4$oG`$CrkV%n8dBwOwabBsgKpWBOqM11#M?l9X zih?G%33#~f;`_&jjQjxIWxeh_+A2&$LK1VyQJM`JI0L@Z%Qmb8)K3p!@MV2OANK>F zcaX0_pM9mOS zd3PfLI~T!rRMUXmB_?DOeeo_wA+zy)S-VR2jKZsT$-qY5AWY%p|D3_g?}|XG_R_x-Lc5{LC%p8K~@Zs#y^mYBp>6zLa_W60ogvK)!sVDMT*mX(69cu58v(d4mIoM$KJPIyv10gp(>WJ z^v^m31~o7-hbtXF6ySX@Vb(n@o&O}_J?8{j-bnG!nB4fmkY|{mr>OVO9|o?q?6 z@@7%@;%T4Mc0NO`3(YK0D+Nde9^GQL7pAf^;(@RS;BY5Pbztmmt@wOJ=2v5m-wa#g z1(woum{;tHauF1Ba173-;gZtC`m;wPplDk6r+Bo1LaiN%G`&*zskBYALT^pfguw?J zNW4;%bqNjD^zOt!louKp8vhdt8%*H`Y%f86GPNSj=e#dewI?$D2RiRRede``Ll6dB zqsCWVR?OZsV4(E)7*tmP3-7qX_rH6^8fOac4imoW;XyTxcq(*s=(%A29D5* z{at3zveigyM;4yxV*S0-q$g@!wl1lCBY=LYS(+4^Wkxd3DAY<)b2P&2tMIW+3PgzD zJ?ZE(2uc{oU2X}b_`Z#ZWXmX4{k2(CyT{yxtVvQJ4bAovf}zz#H(p<^rDF!16g1jsRE15T1~cWieiy z7rVRE`qYnqnk&Lg>}HQr!fg=;H$PJN!eLY!k%4KCHiA z&s7Ti`Tu;e<(iYE^$`4L^L*9kq}~pN>7&uEPwO31ul0f5FHYDRT3+goQ7u6z747}~ zS@o9f@bSdZMP9Gi8XfF>r`mnt^5+SI9d}_}Tn@GSr4LJgT?t113KFzU{L8%NrhU&3$#4OS;B}IRrXweH15WZ8J|aH@ zz9+^?bDpqZL}e*r7BvQ8+T(27Y#%@3rD{Et+Zxdis7SRt)s5+=tQKes+LQ^`EiWK> zQD^e%ICDJF= z;B6afc>VKf9X!{%6W>0ngPD(Fa+P)}0GQAzM-F{2|BY3z6l?ovHTR0+cVmA)2G(zG zdp0W+yJ^>?=G1u{i7DQO+fD})`Gh3(RmZUprgzE3tFD_oRix*07gD{q6GZXo?gsey zO4cJWy*gkq5d8A2&M|UQp=V?9vtpj=W`-`{2Ly|KoZ^D_Hdr|YN;}rRldl7bL%{w( zE`AjEhPMbSjjfZde1omHmSEL1+VHM!xE4>vu?f(9+lqQ>c!5T$%e z%mmwc+55QtZXt){t%9y}|8UFPNcV>W)o3LKFPrZU?QJ5c_8ZixpWByveb@##64sYi zNp>rixbn-`gNI7waneAwB{6Uy$Q!w4;(XtKu*2mL&S)IpGr!l|fpf&tg zbCNWh{>$c$&J1KR@K3X^>ZS=5b@D`G2)coQYz#viL_Y@4a1ZvY8*=a83#>ie+O+~c zQ78(9ic9{|d_m0PUzm{PhElTJ|JI4gBWDcr6)HzhtvkbXJi&kB#EdTy!p^ds{VRE+@_#Nc2&{46O+4UIRPSfWQak#G;<)Gs zCtg^Ta*&iUt%3+|-^Zli;pGdBgu>TwpvPQf#KW8#%hu{pv34T6_x?OSOTT2EWlhoh z5la<8QLm?@PSnYmIiAhqzi{@-o=fVN3%`=F`XAn7DCI)E@67Q&z!vRhOp0?$gnUgM zY{c}B-8ACxALJiUjof@EeHt|$STQs{V;TYUTSp1FBINP^c~2?;R6wi0mo{@nW)IGJ zy0VbnniZ1TGIu>p`2O0nIM_!|;m2x|)b4NTt%rbcT<}39oI_rCsL~_?NlO(;nHan> zs8!&YxVhF%$2Y*beg9*9H#X|qoqHTHX`|E)VsyE?-^q^iR2&zi38p@18yfRA*0mXN z1dC2tZQEZfN0&r;XNK6z>ZQ3e3Euax(BjSIjMn!`dE@fC+DA~_OOpVCcV{v~lr~SH z5w=MnH#%~XC~j>%Q`X>^>oQEPqE1dbVgR%j_=9$;H3Z;hX*aD$q(Cwj`J|;g%M*tK zkp6CYCzd6~j5`=EtEGaLLq-=Tkdhk$cJp?GURC)-7>$WXGx7SHMmej-E)@^B{kI!! zj*P182OFLnz4^xt;V=`fu;qVy61o4(|C!*)1o8UxJxKy1WrLvMQf_ z0)+A8UdL^3$(d+CdrMly5m(BZ*7l#mu3jBnzLw*r&BBLrZ=Ou!D=QaHEox%ozYcH% zxu~)(CQTDDPT4i8bofUP9+%?hP zfq1gemdg%6R2k@X^E0z_;7%zG9`evYNFKF(tawNiNZE6zSLx>5LQy6->ryM(9EA_X zOf!m~n*h@vf z{!4z&jO*sN$($veJzY>x1c~cNU1XEHprjur#q9zc@a44pIQQ?kcc7 z(aw(=Ps}p6iQIHDq?fvET1q}YN%*aI>#FE)!t+RyLJ-P?CApr6(^T4^9PQpkyZ&~a zU+5|f8DiQ6VO1d}IB6@Bjy8`ExCc)R%7zZ;DxZ^_+R_f%u9zA{KKCV`+!9J(BX zM6!j1_9v~-gV%f)-H&Mw-RX#xCy8NU6+{mxCJvdg>nJ#{gUpv_S0;RWi6=<;e{E`c$TM!QYf`j@B7I9br7%Gn)vGr_?1SgLI2bd3e$gR`6W|4L zQo$7^-c`7zBD*XYvKy9H^FS(rL4~+Su|Zei94o|ZoBV3(ON4#KnAQ_HIk$6+K&J+z zBMG}#onMd-tRD6LG}H5wD#tLs&%@9Mw<(`L4x;Mf-rV^?ANX#5mVAtCe5hII^B%n% z3(j+`W~?>Gx+-^*PH*;9h2(9Y%ODzp2@S)$vpJc7T9W#u)(1qJy&VUT(*ZM3$tn@k zqI~HU?%KBt^uQvoYRm$}!5sf>fhmxNMOQ#|?mlD8_;3~K)y?Gk>Xl!)a-{flUp0k6 zflTe4g^+8bpU(;!s~^N1E6p3p0}RHhs)aN;&)y%V9}n^%neP~Q(8gB}$n9HoB^U~# z+g{1eJRw~swg;I0xd*@Ik-Xs0diyK1n?>N^<+jwM6+Ho6&b#boMG1X~U1NP-Z{22* z-Rr`49#^LW!S`bFZat2off{wWe;wjhs?EI@YLS0l5<*kE&@OVuD8TMJupKr!`mX}< ztkgm%5Cs>3FxcAr@DD*FTucG1mp$zPr$T2aq{n8`MJyW5{r7RCUSSu90*6W)aT82{ z000000I-&T*PZ51lt33y*?ctz!^~MYS}(sxLFnljGUp>Wjt|(}_LlOd%C@}OUM2fe zFCBp+k|0n=WP#$G1ZAQkf&*|F}1W1CPu=I z%wO5z^CN2FXS@u1kQw}aZn9k%4n~}$>hM5ayfm$L(aCc@s~1)0AH!qfdfToq zk0WYLU!lu#<=3pgsRUV>OTML(ZU3Xbhr2sQqj;3<^|Y zh)9)Z9GtBw_i64|f(r@-Igf;5c8Pzz)V);F+FNmy`IIyf9w*iZV{<^md+Rb}?Z$IM zOVWCK(HEPU(Xj(Q`H!~QJ|UoVBW{)#6JQc|K-Ix3<1!?UXTnm=j)o?~W4tn(v%@&8U5 z0uP4kB7jQrYbY4kFq;j3NVc_)oz)@mh12}+V3@1nvq;xFV#FCy_7!%xY2Rjt4V=ng z+f5+wQeL&-t_%$PJ#sY1U6^%32rXwdJ*<=5zKS<#x8D7SQy?FWBL1OP4tY(^?4}&yO9qctc?^kHBHoT6!mN@_AHB<5S^$jt zs#Av^v2?r|Jx#WaFx0wqxxUXu4AXY@DR(k##7T6JL7 z=v4+pMrnZ&hpWja(?@qmc@b^KOVmCXF2`1Mg3~zdcu#WySx(pZJqMZR@1offox&$M zBiAx)7NX||+FpfdqS)p1xB=oaD!2;b?>G1Djq&Y`SLwOXZQ7aYO%+=kidk^-Yy0po zUx%jMLSDP5U2dH|iYfIZ_MP&;Hd)-qwn*qbA5oEj2%OOYAG*HMH%3(x>S=#42=r*6 zDXazyEXm>Hy@T>3kDP5})GgeXs++K`%tMHR?CkLa5vs(f^xjJiiT#hT%>+BQ>9XNv zm|Lsf%cWtJ2$?ROuvy~cKUjT0xogGB!fpiDDrSNJeRmg^h{$Vuy3YHVfhq*YroB3^ zTI1&IhOb-rT?UVkH$X!0-(C4}kZ@T!ecc6G|6H`WAoP(_dQvGcTsM}_tKsY4Z=+bb zW^$;OY8@zO&HWgx!FVG+R{@{!}=1J zt!}HZq$U8>?%uVTuM~r0L;dW%1oxQX2+|HMhon+=u;As;oM4e1 zOy>cQSW5$ZD4RR^FtuWNPHpwyK*J^67&By8!*`LFo$O`Px0DlI8N0!jnjHmOuM_h= z?cXFG(Of|K)I7|h4xKM5FwVeO3q=d9S8&fGg=FNjXIC@;wM4n4a?i?>ED_!_tLV8h> z%*^RcsrHrTW$^=O@R+X`&erigg1y7VXtpYd?;S>wa}luHh%FoGc>oUaY5@{q9_A9e zE?DUXR%8nkon!9D-MS8XJbHp^#cCB|@uZ~xbcVJ(;s8_Yv`ubRo$-uiM!C1 ztr0?hU;>R{pQs6{$$zB(I z!S?>WtzCiIOQxK4u$cVmxVGi6DTxD8UMR2&EN|XfRfd4+A0a%_3$2Yj{`$I{7Y_UL zJD7~SPKufV+$eIp;NS8`S8G{tZrN+5zHMpe$0Ot8gCdTkR>S<$SM{%tzmu!smbnH^ z)q_-Z8orN}T}WH=ch{y`s4JZL$3qkvj^#BC#Zx2R=C0KGoBwshvL6dn$}NTl8)Vb0 z`yMD~kIHH{8K1KHfRp(uvF0VFBa)4{3Icd;yB@LWx!If7({GP%mm@-DwQ;hI zwQlbBag2qp6;fmfGXr%!$gj&Orq9o(JxvO^&#nlh73P%>-~K{iKg9C8wFG3p-K#wh zBmf2#W1-49$^6HzxzlR_6{0r9G5t8Gh|X4NkQ#$~!iW#qgB9P~2aQbcQ!WnSOWTL1 zSV}>AIX43THv|Q<8>o1;r({HjDf?IwowI>h!;kPBhBo->jmE&#o$2cY=25v4e zi(nxPiIC1AK$W#U;d5h=kVE|>r8e3Wq>Wj$h!Y(fEAHsHZz9 zQ3=Yh6#tElCTT5jIm_NPz}Uqe?}z&b3;Q8JW)=?b6h%iM8vfZ`LKOOhKP>m`XNM4m zR6y+ys|a6ir>+fKN>?51E)gn1BkR{(80?IZ@VUoqGqmC??(%_7Vyy+L+q3GS{JBix z7DR46XS_XAKwra%A~}MVkzLQ_r#G};Ww32xSlMsUj4oj#Z$02M^7j$6&PaWY^g*sl4|V&5fY>5_`P-h!QiGSS zvM~NvbABYspc9{x1biL&%KT(eh!>x3Gm*}a|32sXZ#R}o(Tse+nwL`S-W%kWVS zt%^KoLRP4-J#!;wGO6f?L$xSwG6k>QCn?6SQ4p9=HHsh{cX$qJndP`yeK-~6+}k?9 zlz0^6o;haSL#p3sjVQSka;e}aEain178%+IJsam4OJB_2FZ}y>YDyry$`3<=_)@Te z4|geRXsCaxeND->mBQ$f3ZKYHnp;77xWjy15H1#YLfcWfIAKsxmoTjop?z84RO2eoRos zad}2>8n4gLiU1;paVxXVV=34&(Dl zyd<1#&!5$x5k+qYb(Z^u)-)*1`6j!Yx3iQdX;mhiD*=6^QQDZ|;p&a0p7Cj;p*KZ- zyziuizfI!n_HR^6Ule?fWs62?Fe}Mx4pFA-%V)}q1+VU!L3~;yC@oUl4}+sMKfa=# zDjd^M3qvGW>@aU1#y572MKqgTk~&vM{2o`@G8ecWWZ3PWtuH;Y{pUXySoG}$^X6U6 zMd68y?OXWTP>W+gc8~5q_VfR?mL|~6Orbi^HbHH|O=G#lJ^1ZqK6w6vZD+47gx3UL zP;Cz$TO+>!S60I1IJCe*fPl9Qp>HusMqapbWlMi_syN_Dmgt%DjqT3Sl^x(@6s!Pc zz6fa^Aa?4T7nqsF5}-pn?3kzWTa#qi=*7zA(NRJF}l4VA+OrYrcIDo%~8t zZ^5>I2b;6vpDho`U?57BX*SEI%E+2{9d)AnFd80Rblu$)X;20?@EyUym-xn4Nft%*;5z=zEtMn?(6T%YQo#R)*G)vtSv?OOd_9hY=QeyUtkuO~m&0I^DI4 zqwL2yaEF7GoG}e*46Mh3#%I#bH4za{61ZZUK-j?0SIvEmC{(|Yyzd~HtXdZRARIcW z;Rph!A^n-a&WV{tszpdg0)~!?SqQZW3d}cIqpXuc%+>PA$t*#u`s(%2jrz30AyCEm z=)yBTLu*rh$|g+>>Elob4|8DSl}DXgq)S9A7r#q%@8BeD%hcKj-Ax`sL-U{m_;PDo zPyT)N$Vb8QBp8hME}LL)7>kt@ZkOYlSQ)yR;vb4g7g`@rG`=vFoq;RI%?XQh_EaX4>-7OaapU^@?8I~d(4p`zhlQNI@Gp#P zTn>9Hy{`Lfbw(Kly`lr$3_>;b=;w$BTBj{X6>Z8I?_f&4QpSxMFL)mcxZO1%2T!pM zcD`u*KP4_t3R=(;!B0x1T9w?ns|2LzWY zaxv6Li^|%>rU5nE|1XdKn86e|Myuf%JAOAHp2D-GetVY7$z|JyT#yKdFrKKe5#Zz< z4SdwSfQ_nL*Xu*77v<^^JcD*b#BE*+J8F*AsUg45WCg32GQn2*_gKo#o3;uqCR8!QTQJf9#e@;gHj-~9JOcYTm8+|5b_|>Qq#a0Dd*|d6vElUVYdu?e)p%Z zkGG57cQO1oTkWk^&(Rbq%u2{2vGM2U^u`8>&x(LzDTGB|gKJ$dI%hhoOmfwcrkZqj z(gd|5`+v;%T)y3JVMNeQlRw!R`z4spEridPYhec7h!=Ze1-o!aV-DS_wGd+|dF1!PU;l-~l+)pP6LvBynXi|hf+6j~W&J6BuJ4>s+N*XsNL@ktqi2-)e0 zeuq#NQo<^&VZ%LO4Q19b^Ci&tR;Su58U9}ko=C(|TKbKda%2>>dy}0#*vN}2osHvL z)s6hILs|mB7hkze>s2G0Vj0JJgj-u{kr0l9#cM&jnuT&W)8|1-@&xPSyMuC*zrlTFpzNKg}+@AXov((T>q!9}kTWrH_MnOCh0CK)2Hdxo52 z+aIamD(O^5it76#k_x66{zh+Q=i$cW^{eFw4~Qx08UiF{oRHuN#Jj$jd29{^J?Y9y zzIDj1;F|Y6ZJ=%P6C;#MxzwN~Ox~jr#e-J6J-YW%I#J9$$Aare%GNiCJKVPBnwJ7k zD)Ki(_Ce(TkfmQtxK_VJBEuv5U!w41<5ZLP=l19sVS@t1W#B)_zcgX{r2PIBKjy{{ z`c7?UoV^C9oj$AH0|(R-MsKP8z-eEEU31=P(!QLWXx}_s!gn*qsS4NQ(=G z7f#oLfTQD&0!VNPwl=)MNth8x$xF-GdyQ;#L%GpGRKrq0MndVo=`OGrgn);B4ntXQ z%#FGs+kyqMAm<#V`Wg94|78ZfT z?2nR=TxTb2bOpNCIHiu3=7MfszHK92-7755LbB45TeObyt%DT=P zbC%pEK$wXQAz5Kf{dV)L>=+r2R^syq)PopAz|>s9v&210HREnwAg?NZYJ$n%rQe@t zkmXK(DLAboqy`&A&W5RThzBy8#o=KRHC_p;74X~KbA|I3g#2>2ZYf{z;?JN)}KPCsYGy8YO}}2!}fIngbEk@2&2^H6r!GI+S@Ow78*O z9Vawu-*EH7*wX)MY_JUDO{6hxh(7Pc0af#8AhyaIw3oaR15i{xR?Z8TloK(TWM`VfK_77deGJijp#sy0NNl0ca3ClKf-2?g2O3Qp>KK1tCYopiuJs*#wV8;p88LMS9o=3;q|2RjRb@BZcROM z7fD^YkpvAWKPK!?!=Qkne#qInDbH>&n_l7y9jG~hpry>WQH@B_gllxbLY%P+f4#?iGy1d z%iHAfDkLu8jh)U?%>k+%R@{ycxbc zXockwp1$CrCEIWJ~@PFUg{k9pMpj&UQDt z@550Pqusp(;DV()@@(_KDw|p%4Aq6P z&Nt^$KekH4aeq-Jbft$kYCtl9AKmbj{yR@2ZmofYVk3mYa(E2)I5FzM^tC!2ZLzrf zc$@=<77%ZtQW2L&`+1P%SHbL`)KOK-N0W`|UU}VlFb#={GOo3SRz>s#Kb=Yn|7)y0 zy|xN0aB#X4P)uL-T<&>Vi)$&H6ta6&o*a+qJ%Gjj>4}3-0>1c7wKqlk=qPi3Hs%bi z=y2k!?a_(}7iUzCO1tzqBQLo}9nSC5>bs9RV9`4l%Nf>w`%Cyb-e*hI8Et37zid-0*08wX)z)LhqEME`dpO(Xchl>Sfa{Q= zh99sVQb%zUTqJ!#by**_SmC~9WOn>qi{yK^Ndww8s;zI``vPtiaU_1X zL!O4IrH$Z(e&#YR5dRY9qcTXe6Vw_~duTl#-#5YBj$EKNp>Q%=Q{h;9Iy#|^D+Xy} zUZznaw7@U(6Gk%CPVN{I7p6X1hV?U1_ zgSz1V43Q69ux&Yh!sn{*B`=L$95&xL_qJ3d3nZzKVqjM-QGV{GKuC@{mYg<}(0Iud zZ(rG$hc=|Dm|dJ1(Epf94Qu3dF@`h;GbUS9ug*yrP`w%0qwYiyf5}WezQ#)62)e@@ zLf;hVe;xoo#INiOIY=_MM0_=NP3m&vIHO%1|v3n8Ti1jB5>T?2j8aF)vWISi16x=tuV$2Cmk=4 zndMB);5;?!L_^beYQ>5Uj`mObX|bD~5%u@^y#P}ag{si#sO`B)Sr)=LxV=j@A|da2 zZD3&we>QMU$drKVralezJV+tN7Lb@{!2TiQ)Yc;eVmuh!-WcGDp;>F4RA<$1yZc^;#NwTnjy^M?7)2oVnBbH_gR7kXdT_qLs;zUrYbBqdmI<|q_RCqR9V zEur7d{o1VD?@#XeMpgPIk)2F|R9T3mak9othiMMP;*r4?ak9n;PHfTXrN|YwQ@qHY^pe7z0U^p~c!jU|aiBTg!W1<)>X7gi!9W zSh-!?B=r7Y332mCi)aQj2G;tom~<}0(io<}nZPcbZJF0-4r=Wsrj5*~TVYS{^pPHB zvd`Mqu`Q%=?%|i-d9e2BTihgwj8nv+M^s#?SPQDbBlkIoRz<#nVW5>$>T@A+k>1 zQ;N{q%_s7R!BVs9J9<2-YvKa{WS@(SSo9b)Vl(xJ)XvqiArK%xN`G#^u=;cDK6zcM zR5b^ueGBS->iogXSv_R`AjHNW&sChr4T0HvAj&|R2H(vw_Gu?Tyn;n`vxc7q2(>i|@#m0DC2Lc!qd zRZ=0d4d5Q#n!S1~UwJnOw#jDxSn`tb-d^*qrHJ!9u#-)H^Ii%pn1*BWf117zn;~Z3 z3`(Ui_s{u!cFx35#t7k$n$`nQc!rR7%m0C61VToDMXwCqho}p1y^{^fO9V#GedkjP z5n%<@=G@?%LudZ@0o%59rZ0J*v8R&d{I-}hHZ#E(D{Ji>%@yBmq>@&hIjZq|Rlsp> z$&tw;C~-OI(>h!79_q`goBg7kQo+E1bdF_}XTqXCK3P-u&`&o;*#F77>j^Qavba42 zO-fzGK#3u%vbCD?H89!8ss$2vYa-WZ7l&~d53*GTFYSgIi382jb46Goh;)Ai^I3Wv zIcRcBc~Y-hBU#0iru#?YU9IVKnEz`9f0xLgdpBnsl_V|$%=$A#i|L?&)9QOF0dEjK&0Ok#RHSkrw#~%Zab0v$n(vk80~Z3XZ+}XE9}r#-QEkKE(J3E zYPY)=$vfi-{!z7dXo?McOR&eX`CIKrg!Kmh6CZDuS7eax1Yry_08XDu$c^zkhCQ~Z zytdZ=g94Q}NNq)z@689zh2zi{#&0hmY`t-m>?pCmKma3d(g?l<*9bqxVq73JEq-O5 zX#*u!=`#$FcyGt+g%>wG`uRO~^26OJhV#FL7Kr>{5)DwkF63}OW$vRROd8l8lV417 zXSW>_ z|1LDP9uSo{@G5kh`C0Kwj2p1r-cBN#qTBFsc*-X6nB9fuG=!Z6g9os=UJ=h|7y3j_ z%a~Rm=`_XxAd`zM(ZU~0(MCzm{EH8zXf0n}dWwphBq}o@{mddM>K_WrMy~CBQNivD zXFn4^7d2m3T$!9CfgB*fgRnYcKybsuTd{pYVfN~rl?IA8Ba;`(GRs!ij1V*25T}oR z(LN_zLUmap%I`d3Zo-H+@g5{_Y=?}WaLU*?o)=eGp9L!q0^=bDrfzY`($~Tv!^L%* zuT^$)!DF|2wq!9}pNBt~10&uU?L-R+;^Do7Jp;YRn- z{PEK1CtZ+UI#}O{cnwHWj^`OO24G|pbO_h2op=AWL}g?gZaa0{@yLn|sTqC*jw)** z*EmP^U0S~cMhsbc^Vy0o=t)sb<5TsyKf5@>aO@7C>D6U4iOWKJZ1xbV!z^!1y_i~1$i}U0 z9%&&yB|IbGe!2IIrdngyseTd6qnZE5kWdDe0C{|_Yjs|1v~EN-Hy(J&X7NJf`Ui+- zV4#c-XMjHZI-ROp*!f)bg(jWghguI^NG59~yjJfHzkuM%QxUl!H&uqq7Mkf(J^r2u zgFh9oxS!9aM@kxK5O$72X74XUK;r@4i1k0!t5m|?MPEXlVM@|1@+tu*+ALlO+G=OS zJ?tH+o64oW*>b^lI{26u$JgWWsRN|&pv;kB$82?LN5nT~#=jD2^FD4L9!xkS>X(Dn zCsu5)J_bUi;Y6z|H{om)no9t^S5#&;U>uoMXv*OUno$tsb%=&U_61Fs09x#d{>>|_ zrb&uUZY`}HMOjRf_NDe{>|xAC&ZuRjDPH@3p*jv>-VJ}$Pi#kxXl52B#D*PfXEWqr zMfR)xNj;$++Q60AFfDn07W*2>nMSByZN?3xZ}CgxCe6U15Pp8ym$38@gsJeNwc(fV zV-M1Sgv`YhV3gD38Ij8X#&0HxnAkyg0T*B(jB{Dd;XA@}_S6xYa8r-9Jz)?#O6<9h z!P%ODw}8~gPWy(C#}8t&Ad#bopfZ^pIUp4r>k8}6B0g1ayB%ysLgLB$wp`jsuR8c$*H;#aJW;?Z$1l4AY63SS{M;V7g8-<2) z7`PleBTrAitKy<+A)s!_%jcYTUgD*hblj`eDyO`2c`KH+n6ADD!-)77-&WM->Dvl{ z!SxX&c{(kJ(N1!hP8CeQ)H3?{`IL8lR`DQ;OsIb(&*%HhvI9`%EiG+eARXK7gh?evzSGzZWXt$yI`Uc#w6#3m1UF5n5_3q?HenaIhrtXS(PEhiPCqVjx@Q2lcSJ}>Dvbd|Bt4makT49mq zUp^O9IuC~Zw>LRxe+?*Yy+1V;i6;DtUsHfrA{vF-*1t4-^DSUJ&^^P=v>N{k79J8s zEJZ}1#7uGEu`f1me8<(^!`j*%<`Yx86|C=PKN4TNQZFPjz3@wY9Er7Qm z%-ZXxzuFpGx`~)LNcT;e%NRoRlbazO#b&fV)$RO9y5$#R>Vy!|61bcp@L>`cj{_Rf z78nG~m(}chO3|Gw%qzfM z^h{%A;kX#|$r)Nj*%1CR9QC^B@x`Vz!(ROfm^{6vd}N zZ2ev-53w9Dn*)4p!F%)-4YMIu6YhhH^zDnThUUuNG&5|wxZX6XLMW`&ZOHvhdy4-H z593YFkKf15BwF68AiB}`E}FO}%J|5BI0!=}U=&VKHe3cZjtpx1zD#Ipdlg;vAeJxA zHzW@(*uaXo70y8KFZ$r^+)5MPKaNbboSyv6xT%~fcoCO|_CHYswE++>VFarrD z$a_590B}|@r9m;J9~2v-MLGv-fF>R6U;g1H#T?}j10uSqEeUn0;1IenN-Xys#3?4l zy1k<}di72f?xCEO9_E-e!B|O-q80qa%fX)X!iR%4uH zlihnM4KIBOA}u$12m_$vWm4`(7iq{OZMny9&vH<2{) zA}3y#Q^ds;f=r^H*pK`lEM5@_24!XCYn(XNry**k;%D=xg>X&%yJIR2%jbUR?Y^1O zr(QSNuy91#sDX_+SUIr|2r9CIo<4t1G1Q?5gBB1&^6N3iJ58XA3*Qcd-_$ae|3mfx zp5m7X0?tgGExq4y==U^uy0VK0h}waF38t1jm_+>>Q4l-D4ts!jc0)DxQ4#%Sds2^s z3Zh~x`OCHUp}uxnAXQR}!_on(Yd!Xi9tiNo+<&@Se1{BJ+3MK(PG*IO3@;;0+pBIM zS%#S*_GM*3n~)8AV%%;ezZzz4@inNga>FTy1%kZj_m#{DzDYZB6;Q)Jh*izqKrJnq z|E*A6A>Q{$^xpg+a0ZYSEt)nA%nmc2G^Uv&OJTnv^gjCITExFu8JbA7wzm`d?6DHUy4?ajKig;~q<_jGYb7-QASp^@dYk60}Q;Au+~ z9k$|wT2GR-IueAaw$n&Syxkkz=i1tG|+Sdx!+a3mZedUye-rOg1_ zQtZVz>%>$@7gYe}$}IQ^{hzsxP7l}fKP3@5VMZ*bi0cCD0@je@_&WlnIR18ekJ-Nw>#`h~(sr@xG2BJfJAF_$S z%@woVks>8a!0Q64G(CS!!vx$ni7dj)k!QahKJ5wS?<>MTPjnv&p8u1^j@I)mB&aaz zm^ATYmZnR8=9)F9x%SU}Fh+9b4QRG_B^*1HOgFZ>#5%JD-eLf8@rdxJJ3jyb3w0?&amHh_*(&ZZg-coolO zPfUU1SfiCkyzYmZ>-x23jy46z%Nt)xt>2g8ijiZNM2~q9_6S? z{~)Cm$p>&zGN#5Tk2JatI8#Ns#mp`zkdC4-l2`AQUF`{P%W>qir0El>_2$>fZ!7^V zBhuH?gHUjuhp2mg8;%{L;(mU9L%YY`SwJ3_HH&%TR=5RkEqw&L2e*o_0Uh}&!D;0B zhY7iOY=s}e#Mb9dVJ-D3Va=|4j7aC>7St-S%5%_r;080XVrmtUW*p@h>uPr``}Vfp znJUYjbiZw|6p0wIJ#*GKtvb8-qgY!7P3xc!Mq>@FsbI2X^@<516s&@MuQ?Kk00000 z00zEe9cd&zAuiEZy8r+HQxuv7b@ z>sGVc8}g?(1HNUv$*ZK80X<1v4ccy-6)PQ)53jgXm;jY8aMX-e9I5P_B>LAhuD+vn zJ;`9(##Y7RsSF>MB*ro^WB$wj;|or5on~$-YN^R)!U!wuCGoi87=5udqeqhYUai+- z>3j!8@ZKI0%{#>;gx-7hxGY3-W5G~^kUrk1Z43`8<_?wQe;$kGQp>xs+h*iR1{I^A zDvE+m4e9d-aa?aj*zyo{U%&w4YkBc}4}B$JF9MG4t049YgVeS@jxLTaWSUR~-R{%W zN}y7EUj4ft?HN;%Y|9UWodIso6$?M#(Pt=y7j@Vl1|!Y*yy=w>TDHT-OXyA*Xnw}0 z2Nz{|m_I1vHyV;w8v+c8XUXe`O}U)v4r1f3F8H5mDl-Ip%bdNW1f>n0pQbiP*wu)%h?a9H7#?D+=W^3PJud%@(e{; zG9KYO&MOXu(joknstfBw_pbTcQg3oWdNnPWoN`OpysW_rXu?SrlsDzgs|JA(x}A6e z6G!o!W%&!&8=^wR!-MKrMZYeU5=Ajv3jbbP#K9?16r=3>dXR6%FqjaHLB@}MXfa`z z;J(Pe$+mh$lgs~By!@U|S+l_?3L-0kD@VQ1!RG*Oy`1K<3U}#liZ#}&?H!c{dxmrR zr>zB_ILP8)i#&j3Xzw+3bXwbQX5KXoqZCU1a{gSLgB7UDA2a0&$%q?O}zE4t>1*dV1$`Ea^eg`f5 zrs`qxZWQ_|<{`dx?tm$Ms017#3dYx3OFSuj=Qb}v0!(M+oL#ic-BS8ZF&@`3OV*i6y+juaL z*JoZV*lr0i;b4RT65p?IrZ)-DMTaR=Ry4j%(AGt z|NHBDJX(SgjM5!3TVeZdHNH_xZA$%K+fE(>E^%R!cx%%hocHqgqdsHJ>z>FV45;y-}1-%qJJ3?`cT+aDF zjzR^prL9Ld@D8*40x>0kBZ+LR2KBXgMYV< zxz8pGcUi;A(;ujNCcmJsY-s58BUWx&%poPSrys9*-`>x-XlX5MR{_KMgMMEjxVlbs zdkcKd=rlYqY4X&e--jOsT$K=jD*lP&Cv-WAgKxG+l|iOoH93e#uyl2VnjEdeAYpZ} zCN$-m4VS(&K$G_ASvM zVtMt9Ivlpv=#b`lRR|-XVn?_)3(y|^m;p83*uzuyfX}64VYyZKSh`GE@CY>p(9E#S#9J z1CIQ2hPYq7Yz$>uZr1uc+tjP!UDjme%cS3E%MpuoTvwnM`c|p*zm9>@-={hOq3ZNQ z2QQA$?*mYBHLc_buZF0r?%OYvF5pw>0V3u%$MHD3meRkV^ zG?Ne!1*f%{;Gm}~Bx=dI!#P%kqf&N%s2mAlOf)KR;wSW&m3&N zbEYEPn=7&xE>W#4_+%#D$gAtwt=83^>BAWMt*_Mr*i2fpa5oMkmqC^CcCo2Pi4|1I zWAru23~mgq=+j=Tw^2c7uc9^s(CxAu z!BD^KU8O1GCpTcXm=?3)4xaI~FYjTT&gc!p=LEB!&J^zcC7VqS0*y%93)LtGf+ANn z@~KLzGQbOgb*Oz6kztIE1=sm)IcXFV?_BFM&7I{_6yDp$DQOlKmJWr5rMtV4M%^W( zLs7bv?pnGVB&0*>ZdkgzyIVp)^5^6CpLpKfXXd;(bHBLGHD~7joVi%4uj^)SVltDc z=Q^RyQ&_N8lW4Sb;^9ZXhVt#kBic%(+fKxOEav$0_XvkS#dTvwiDV+r-&dV9l0>i; zzaw`=V+^D@7@csYztX2!$P|+rfksNNfi1A0BmBNtfDlm*3Lgl9gB^Pc^pHcNM3L-H zcS3CRgBx8$%d1V)M-7{qEl4!Y7qb3}j>+rd*m2MqL_(xH+eGssOYR3P(_?3JeWu1h zA(x`dnkOc3l)W=ixbcbE@+nR40WxM|EHb@2j7py?PEAI8b^>o!F6D4kAYOUA+}ZBx zI`7SO+L`lL*o@Y3dX>-Eyy;tGRU5eDtOQD^8%M0Q@@df`W_`0A@9tBDeZ*PXZs`X~ zaucgA(?&U6RWMx)KI7z2D`_Tt^G5>P;dlSpDu@B_Z?_J~B!OZ+-Y57vdu|&n6(4$~ zbRkttXPD$dsJuKKMw20mM|PBgrPCP5-BsO$iX23K1+0N(3bb=bskPbv%+V^ZQ`gpg z&SfV4jih1-yP(fUO&G-Mvm>s-{(t8AuVMpIG|sqH`Ie*J=qQDd5X}$l{DiSk0J3O7 z_V{e>Uza$H+S(^SN>3EPP*4yPSnNVY!@QABuv=7=5`R;>K_zV_TGm^GAsHII>$~HGbdN~)+8A}tQafc5Vk_nu0vNL`i$U?4|qZa4%S zh8P8wTl7`T^DM~H;6#KWpkiEKRbuGr$K~E3`cTO6c)9`ZmM0QZPlh7?nv%oJb&>R| z)rlM}zVCEMiEG;nmV3->F5cRhh3|DqVWQo7iUu}~tDY9LkS_(C>$$`v_s=D;r?0es z>-ZTDRP6OlQ2T+>EBnjwOC_)H4Seo(UktPAzKMNy4WmiI53^QcrU#u5zRFnsT1OHj zcM2iFm`qTIvC2`!lO+$#_Qg{<%R2R5ZAY;2*W@J-^nGkh;>u?OE5V79fS3a7)Dxgj% zKW2JrZ7%^4%1ff(Pm(ln^b)DQ*4h_hQHf2aloOc3$tU>JrHDC;HY%$4g+ZjDI+;}6={F0Zb#1nliHK*U2ia5$^PNj4+5u{l`2YAbPz4rx8 zsby9A_P+}d1=~v?(VRKRKau;t4ct$ap~K!5(#TaN{cAbLRw34ED9XGkHj(uSznPoT z!1_TOJ5J@>OyuvJaJ{g`SW*BWxJF`kt@(B5^5JV<0Jw-a!Nr5SF^wB2hgZZ zz3hj`JX;suh}|w=Dv(kIexfbwkoGFX$PYVHjDbrY5VCsfF7YK;^3+RD9?#05;`F+> z#1wO%M1&}`#MZIVPvn^hM3}W#o-s6J&XK22;z>A6ou5_fFX8D?W<6W6WR9WO7!=l< zMBUH}s(Z;bbIy82M3rH8h{>c6JvmMH`k3C;Z0KPW*x$ZW=Aq@6UNL3dywZKs5t+8h z&-I*{daV#WNCUH-xzaMVw3%vR z({9Mz`66k2enKzQawy9icoM>VT_>Z3C1^#~@!mG;$&fR6nxm!sr+d;cRA6)OOlVMT8`EI@NRNUIF!ueQ+^0mVQ}2QA)3k@xKU;;)lA>xKV* z=&daupN)RsTa2|Z)^x}VfykljnD3tVJaU_w zdlau%jvb?eZ!1&PS%QBZs;@YUljy8$8YOxy+PDJ zC4p1r4-oaz?-dh`3ZqR?_v%&HgDU4FyuKhLB(%36qng)}NgV0h<@8hyiV`!o)>DV1-_m?l!NMJbAedCO2^FF$~KX zsoZ>i+z8Vm*hBF9kLu@Ki;`G6?h>RpA`V>E7>0}r&295)Y)eocA0*)qts3TMaq&Ue z>a5RIS;iZdP5CPVJL)?t==+&29JJrYOr$Rzf?XA*O_bxWfkIFr;wlf_z|~Y1WDDc3I32h0o(w#SIoid8)9{XH{!b-Ntewx3YY!>`J41+nZ*Z zGI;c-nkUp`M4Ck@_n=TQr@LHhDxXKN$@%FKv6* z`jMN)(t|>ux1WNb?S2a4elxIgRa$x)n3+#s5QR1k0LUgmI)H&hQaW3L0dKL~*?IOJ zvwnT^RF*lkoW#6DimJwIv=?0O8MXd9FIT@`C)S$cETyFTz&&6rRfUEjzp#LrsaSIG z?%Q`TiR;3RnUYw|iL!Wsj7FILuURtsip#wshvM<0-Nh6cGy`vXZ`jrx*cPO#a~v}4 zN)oyEonnLm-#WID=t||o&`k$}^JE2h=Lo!379^Uj@gqAmI?5)BZfnTw_6#WkUeV++ z9jC9JUcz8U?OjMHIMoveq{^1lV;t;r({pk&>B^P+RDZQfJYyKXz(#6J6Og%u)oGLR zw*2PcY(smP$*2%$Hm-hUt{gl%6mL2c&f7@qE1oyWwKjb#Co{=vU+LP4WWb_{qO^#y z>7f6ZH83RF>gk6Sgr`W?vx_a5>Ul>b5-}SRwZqV!Ix7>3(&0IJ6;uPlw9vJ3H|AIA(UIuUW>A-Bu1LRj%`|8J^Tr8KxoHBFf<$MxSeDGp)9^ScnIE%$Xae}y zBfZ@`EPl{27Akg`nBqvB-Fb6$v_{51ek{V-sLpc=r9+w|-u)5M65kF>YQc%5`gm|x z?MOT1}Z3~y$d9hLn|IMqL8(H+E4BM+D#*OEhH9m}yCMDODw>7?AkCBQ?GJ*yb5 zpE7myyN?z4hA^&253T#Hp#~}N{>gJ< zoZYU)ys*5gje<^*%IAZ$ygRZF*0i;#HVWZ{>y#A{<1!FQOw5He1F~D{=MJ3WvBUg= zlFzuyJI@Z34K8XS5u?`d!iXKIOjttq>dLZx`p3`e1g}LSWSTe9H%*CSDv{HGQtb4z zfR{!oXCaIJd3V34B;w8vE^A;vQZUqp+xLwIf1!TvR0UV8wJxRvi^wZ(%kEQ)- zwj=*7jcL3|t8r&i=q?qPLf&G)%Cjj)`W@C=n8rX@4TalM{p=X*GzkD%j5!>2HbK~p zE3Y(=^c5WGZ^K_0cXH{Et5(sfDBW7gjzj~bgil(VWxzH-7MgEFXJ`~&Cu8d_ z7bb_iL*W{aSxVODkV8t60yB&i@un*)`Fb|&sp-xTf8xU1;R?q%Z}(I#_6yZ+9xGvg zYCpBsn&wR1{BlWQ4KJUC!ZdaOjJ`DChaIr{PUl*-0uLmhL^4Frf(18JRGf zZG4D1%NTccHHM$-&_xSk7I@#ysGN!Z z`HX5U>LgKd*$=Mo>*gcs7i^^YLos4apZIuXI2N%WKtb&7OE7rXP}^y54UOrp#X}@T zPCygCui(8Ue&34l7Y}m@dBY_i$hvglswbf0kN*S^IXoKhg>iMgreDj2eBCg<2AAOF z!u4tr`pX~tM>km01F5e(T*EPtw;Co@&HO8b@INWl86_cXj5$s)vXqDeV)p=p3V*Yt zy9}{C8={${``Xy;YKeb6-F2O0W2RBMB8imS$(chd(ARDbO}P9@-u!#DA^|#&QDdR0 z1;%?G8}S7t)GxZWM+~&Jux(^ORDvqENE6xD+uK$wcnL>nkCjWK6W9B^fGYp2Sb(^15I{rr4njkYo4A-KNBblSFF=hQcb)5^!COIdtZk>vTM=;}xYZ&q~ zIgG1ZB4D|CKIz-J_RcR7AtsKXwLQ{;-S6fBrGY?WG>Lbr9^O4Phq=1#G!SZjbO`$0 zq9s{cPDNy#KiP$DWK2r1Qukzi`y0@#B)gJi_i`lVO$lCxg3uSi$~~i++2}6+F(}4C zvCe~Wn)zD#>dzGWg&-Vt1Bj}^mdnQoz8coYB^6)kFY&PT;JZ4W7hd;%M{jc1{)n_L zytar}dEoM4)ZM2Cxsda&Q61vng)hH#gxeJJ&DPt{O$U8M`;fCQ6FVOFBTN;eSPs5&pYe-xLsLUC>r+k^c*#gV24^(i~*-HB-Yb1O)cly8o=W>KR@Vpf|VZSWJ{L7e}1ZFW>J*_ zeYEK^WV@znV*eo2_6M4?@QjT~Pac-X{+!2S|8X&iV~SfYC)|Vu&|%&8ms8umt~MN6 zQga?V7&eL3#$Ze!%hiR?N}_q3u|SxPvwY;vs4sm)&|K=Wd~gCVn(w%V6KN|%Kb~eZ zY3}6E2iQA8g`;0jRXU2l`hcq=K^QHI6$zNq^!qKD4$_h;Viusoq(SR@FF8RkK?=+y zQ#ok#`yr Date: Tue, 12 Nov 2024 23:04:58 -0600 Subject: [PATCH 71/80] Shoukou: Freezer and Camera Layout Fix (#2054) * Shoukou: Freezer and Camera Layout Fix * Shoukou: Freezer and Camera Layout Fix * Shoukou: Freezer and Camera Layout Fix --- Resources/Maps/shoukou.yml | 2717 ++++++++++++++++++++++++++---------- 1 file changed, 1962 insertions(+), 755 deletions(-) diff --git a/Resources/Maps/shoukou.yml b/Resources/Maps/shoukou.yml index cde0ce95903..4709d61ba44 100644 --- a/Resources/Maps/shoukou.yml +++ b/Resources/Maps/shoukou.yml @@ -120,7 +120,7 @@ entities: version: 6 0,-2: ind: 0,-2 - tiles: egAAAAABfwAAAAAAegAAAAAAegAAAAADegAAAAAAegAAAAACegAAAAAAegAAAAACUAAAAAAAegAAAAADegAAAAAAcQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAbQAAAAAAUAAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAQQAAAAAAQQAAAAAAQQAAAAAAegAAAAABegAAAAAAegAAAAAAegAAAAAAfwAAAAAAegAAAAAAcgAAAAAAegAAAAAAfwAAAAAAegAAAAADegAAAAACcQAAAAAAfwAAAAAAQQAAAAAAQQAAAAAAQQAAAAAAegAAAAAAMAAAAAAAegAAAAAAMAAAAAAAbQAAAAAAcgAAAAAAcgAAAAAAcgAAAAAAbQAAAAAAegAAAAABegAAAAACcQAAAAAAfwAAAAAAQQAAAAAAQQAAAAAAQQAAAAAAegAAAAADMAAAAAADegAAAAAAMAAAAAAAegAAAAAAegAAAAAAcgAAAAAAegAAAAAAfwAAAAAAegAAAAAAegAAAAABcQAAAAAAfwAAAAAAQQAAAAAAQQAAAAAAQQAAAAAAegAAAAABegAAAAACegAAAAAAegAAAAAAegAAAAAAegAAAAAAcgAAAAAAegAAAAAAfwAAAAAAegAAAAAAegAAAAACcQAAAAAAfwAAAAAAQQAAAAAAQQAAAAAAQQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAbQAAAAAAawAAAAADawAAAAAAawAAAAADawAAAAABawAAAAAAawAAAAADawAAAAACawAAAAABawAAAAABXgAAAAABUAAAAAAAawAAAAAAawAAAAABawAAAAABZgAAAAAAYwAAAAACYwAAAAADYwAAAAACYwAAAAABYwAAAAAAYwAAAAAAYwAAAAADYwAAAAAAYwAAAAAAYwAAAAACXgAAAAACbQAAAAAAYwAAAAACYwAAAAAAYwAAAAAAYwAAAAADYwAAAAADawAAAAAAawAAAAAAawAAAAABawAAAAABawAAAAAAawAAAAABawAAAAABawAAAAACawAAAAABXgAAAAABUAAAAAAAawAAAAABZgAAAAAAYwAAAAAAZgAAAAAAawAAAAACbQAAAAAAfwAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAXgAAAAABbAAAAAABYwAAAAAAbAAAAAABXgAAAAABTwAAAAADRAAAAAAARAAAAAAAfwAAAAAAbwAAAAADXgAAAAABXgAAAAAAfwAAAAAAbgAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAbQAAAAAAUAAAAAAAfwAAAAAATwAAAAAARAAAAAAARAAAAAAAfwAAAAAAbwAAAAAAXgAAAAABXgAAAAADfwAAAAAAbgAAAAAAfwAAAAAAbwAAAAADfwAAAAAAbAAAAAAAYwAAAAAAbAAAAAADfwAAAAAATwAAAAACRAAAAAAARAAAAAAAfwAAAAAAbwAAAAACXgAAAAAAXgAAAAADfwAAAAAAbgAAAAAAfwAAAAAAbwAAAAACfwAAAAAAbAAAAAACYwAAAAABbAAAAAAAfwAAAAAATwAAAAABRAAAAAAARAAAAAAAfwAAAAAAbwAAAAABXgAAAAAAXgAAAAACfwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAbAAAAAACYwAAAAACbAAAAAABfwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAbgAAAAAAfwAAAAAAfwAAAAAABQAAAAAAbAAAAAAAYwAAAAACbAAAAAADfwAAAAAA + tiles: egAAAAABfwAAAAAAegAAAAAAegAAAAADegAAAAAAegAAAAACegAAAAAAegAAAAACUAAAAAAAegAAAAADegAAAAAAcQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAbQAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAQQAAAAAAQQAAAAAAQQAAAAAAegAAAAABegAAAAAAegAAAAAAegAAAAAAfwAAAAAAegAAAAAAcgAAAAAAegAAAAAAfwAAAAAAegAAAAADegAAAAACcQAAAAAAfwAAAAAAQQAAAAAAQQAAAAAAQQAAAAAAegAAAAAAMAAAAAAAegAAAAAAMAAAAAAAbQAAAAAAcgAAAAAAcgAAAAAAcgAAAAAAbQAAAAAAegAAAAABegAAAAACcQAAAAAAfwAAAAAAQQAAAAAAQQAAAAAAQQAAAAAAegAAAAADMAAAAAADegAAAAAAMAAAAAAAegAAAAAAegAAAAAAcgAAAAAAegAAAAAAfwAAAAAAegAAAAAAegAAAAABcQAAAAAAfwAAAAAAQQAAAAAAQQAAAAAAQQAAAAAAegAAAAABegAAAAACegAAAAAAegAAAAAAegAAAAAAegAAAAAAcgAAAAAAegAAAAAAfwAAAAAAegAAAAAAegAAAAACcQAAAAAAfwAAAAAAQQAAAAAAQQAAAAAAQQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAbQAAAAAAawAAAAADawAAAAAAawAAAAADawAAAAABawAAAAAAawAAAAADawAAAAACawAAAAABawAAAAABXgAAAAABUAAAAAAAawAAAAAAawAAAAABawAAAAABZgAAAAAAYwAAAAACYwAAAAADYwAAAAACYwAAAAABYwAAAAAAYwAAAAAAYwAAAAADYwAAAAAAYwAAAAAAYwAAAAACXgAAAAACbQAAAAAAYwAAAAACYwAAAAAAYwAAAAAAYwAAAAADYwAAAAADawAAAAAAawAAAAAAawAAAAABawAAAAABawAAAAAAawAAAAABawAAAAABawAAAAACawAAAAABXgAAAAABUAAAAAAAawAAAAABZgAAAAAAYwAAAAAAZgAAAAAAawAAAAACbQAAAAAAfwAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAXgAAAAABbAAAAAABYwAAAAAAbAAAAAABXgAAAAABTwAAAAADRAAAAAAARAAAAAAAfwAAAAAAbwAAAAADXgAAAAABXgAAAAAAfwAAAAAAbgAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAbQAAAAAAUAAAAAAAfwAAAAAATwAAAAAARAAAAAAARAAAAAAAfwAAAAAAbwAAAAAAXgAAAAABXgAAAAADfwAAAAAAbgAAAAAAfwAAAAAAbwAAAAADfwAAAAAAbAAAAAAAYwAAAAAAbAAAAAADfwAAAAAATwAAAAACRAAAAAAARAAAAAAAfwAAAAAAbwAAAAACXgAAAAAAXgAAAAADfwAAAAAAbgAAAAAAfwAAAAAAbwAAAAACfwAAAAAAbAAAAAACYwAAAAABbAAAAAAAfwAAAAAATwAAAAABRAAAAAAARAAAAAAAfwAAAAAAbwAAAAABXgAAAAAAXgAAAAACfwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAbAAAAAACYwAAAAACbAAAAAABfwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAbgAAAAAAfwAAAAAAfwAAAAAABQAAAAAAbAAAAAAAYwAAAAACbAAAAAADfwAAAAAA version: 6 -1,-2: ind: -1,-2 @@ -144,7 +144,7 @@ entities: version: 6 -1,-3: ind: -1,-3 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAUAAAAAAATwAAAAAAewAAAAAATwAAAAABewAAAAACTwAAAAADewAAAAABTwAAAAAAXgAAAAAAYwAAAAACYwAAAAAAYwAAAAACAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAUAAAAAAAewAAAAADTwAAAAACewAAAAAATwAAAAAAewAAAAAATwAAAAABewAAAAABXgAAAAAAYwAAAAABYwAAAAAAYwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAUAAAAAAAewAAAAADewAAAAADewAAAAABewAAAAADewAAAAADewAAAAAATgAAAAACXgAAAAACYwAAAAACYwAAAAACYwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfwAAAAAAfwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAfwAAAAAAXgAAAAADXgAAAAADXgAAAAADfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAADgAAAAADDgAAAAACTgAAAAABXgAAAAAAXgAAAAABfwAAAAAAcQAAAAAAcQAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAfwAAAAAAPwAAAAAAPwAAAAAADgAAAAABDgAAAAAAUAAAAAAATgAAAAAAXgAAAAACXgAAAAAAfwAAAAAAegAAAAACegAAAAACQwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAfwAAAAAAPwAAAAAADgAAAAADDgAAAAABDgAAAAACDgAAAAACTgAAAAAAXgAAAAABXgAAAAAAfwAAAAAAegAAAAACegAAAAABQwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAfwAAAAAADgAAAAABDgAAAAACDgAAAAADDgAAAAACfwAAAAAATgAAAAAAXgAAAAACXgAAAAACfwAAAAAAegAAAAACegAAAAADUAAAAAAAfwAAAAAAQwAAAAAAQwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAbQAAAAAAUAAAAAAAfwAAAAAAegAAAAABegAAAAADQQAAAAAAUAAAAAAAIAAAAAABIAAAAAAAIAAAAAACIAAAAAACIAAAAAACIAAAAAADIAAAAAABfwAAAAAAbAAAAAAAMAAAAAAAbAAAAAADfwAAAAAAfwAAAAAAfwAAAAAAQQAAAAAAbQAAAAAAIAAAAAACIAAAAAADIAAAAAACIAAAAAADIAAAAAADIAAAAAADIAAAAAACbQAAAAAAbAAAAAABYwAAAAAAbAAAAAADfwAAAAAAegAAAAACegAAAAABfwAAAAAAfwAAAAAAfwAAAAAAIAAAAAAAIAAAAAADIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAUAAAAAAAbAAAAAACMAAAAAAAbAAAAAABfwAAAAAAegAAAAADegAAAAAAfQAAAAABfQAAAAAAfwAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAUAAAAAAAbAAAAAADYwAAAAADbAAAAAACfwAAAAAAegAAAAAAegAAAAABewAAAAABfQAAAAABbQAAAAAAIAAAAAAAIAAAAAADIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAUAAAAAAAbAAAAAACMAAAAAAAbAAAAAADfwAAAAAAUAAAAAAAUAAAAAAAewAAAAAAfQAAAAACbQAAAAAAIAAAAAAAIAAAAAAAIAAAAAADIAAAAAAAIAAAAAAAIAAAAAAAUAAAAAAAbAAAAAADYwAAAAACbAAAAAAAbQAAAAAAegAAAAABMAAAAAABfQAAAAAAfQAAAAAAfwAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAUAAAAAAAbAAAAAADMAAAAAAAbAAAAAADbQAAAAAAMAAAAAACegAAAAAD + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAATwAAAAAAewAAAAAATwAAAAABewAAAAACTwAAAAADewAAAAABTwAAAAAAXgAAAAAAYwAAAAACYwAAAAAAYwAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAewAAAAADTwAAAAACewAAAAAATwAAAAAAewAAAAAATwAAAAABewAAAAABXgAAAAAAYwAAAAABYwAAAAAAYwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAewAAAAADewAAAAADewAAAAABewAAAAADewAAAAADewAAAAAATgAAAAACXgAAAAACYwAAAAACYwAAAAACYwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAfwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAfwAAAAAAXgAAAAADXgAAAAADXgAAAAADfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAADgAAAAADDgAAAAACTgAAAAABXgAAAAAAXgAAAAABfwAAAAAAcQAAAAAAcQAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAfwAAAAAAPwAAAAAAPwAAAAAADgAAAAABDgAAAAAAUAAAAAAATgAAAAAAXgAAAAACXgAAAAAAfwAAAAAAegAAAAACegAAAAACQwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAfwAAAAAAPwAAAAAADgAAAAADDgAAAAABDgAAAAACDgAAAAACTgAAAAAAXgAAAAABXgAAAAAAfwAAAAAAegAAAAACegAAAAABQwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAfwAAAAAADgAAAAABDgAAAAACDgAAAAADDgAAAAACfwAAAAAATgAAAAAAXgAAAAACXgAAAAACfwAAAAAAegAAAAACegAAAAADUAAAAAAAfwAAAAAAQwAAAAAAQwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAbQAAAAAAUAAAAAAAfwAAAAAAegAAAAABegAAAAADQQAAAAAAUAAAAAAAIAAAAAABIAAAAAAAIAAAAAACIAAAAAACIAAAAAACIAAAAAADIAAAAAABfwAAAAAAbAAAAAAAMAAAAAAAbAAAAAADfwAAAAAAfwAAAAAAfwAAAAAAQQAAAAAAbQAAAAAAIAAAAAACIAAAAAADIAAAAAACIAAAAAADIAAAAAADIAAAAAADIAAAAAACbQAAAAAAbAAAAAABYwAAAAAAbAAAAAADfwAAAAAAegAAAAACegAAAAABfwAAAAAAfwAAAAAAfwAAAAAAIAAAAAAAIAAAAAADIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAUAAAAAAAbAAAAAACMAAAAAAAbAAAAAABfwAAAAAAegAAAAADegAAAAAAfQAAAAABfQAAAAAAfwAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAUAAAAAAAbAAAAAADYwAAAAADbAAAAAACfwAAAAAAegAAAAAAegAAAAABewAAAAABfQAAAAABbQAAAAAAIAAAAAAAIAAAAAADIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAUAAAAAAAbAAAAAACMAAAAAAAbAAAAAADfwAAAAAAUAAAAAAAUAAAAAAAewAAAAAAfQAAAAACbQAAAAAAIAAAAAAAIAAAAAAAIAAAAAADIAAAAAAAIAAAAAAAIAAAAAAAUAAAAAAAbAAAAAADYwAAAAACbAAAAAAAbQAAAAAAegAAAAABMAAAAAABfQAAAAAAfQAAAAAAfwAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAUAAAAAAAbAAAAAADMAAAAAAAbAAAAAADbQAAAAAAMAAAAAACegAAAAAD version: 6 -2,-3: ind: -2,-3 @@ -156,7 +156,7 @@ entities: version: 6 0,-3: ind: 0,-3 - tiles: XgAAAAACXgAAAAACXgAAAAACXgAAAAAAXgAAAAACXgAAAAABXgAAAAAAfwAAAAAATgAAAAADTgAAAAAATgAAAAACTgAAAAADTgAAAAADfwAAAAAAfwAAAAAAfgAAAAAAXgAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAXgAAAAABbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAbQAAAAAAfwAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAcQAAAAAAcQAAAAABfwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAegAAAAABegAAAAADfwAAAAAAegAAAAABcQAAAAADfwAAAAAAegAAAAABegAAAAABcQAAAAAATgAAAAADXgAAAAADXgAAAAADfwAAAAAAfwAAAAAAbQAAAAAAbQAAAAAAegAAAAADegAAAAABUAAAAAAAegAAAAADcQAAAAABUAAAAAAAcQAAAAADegAAAAACcQAAAAABXgAAAAADZQAAAAAAXgAAAAACfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAegAAAAADegAAAAADegAAAAABcQAAAAACcQAAAAAAcQAAAAADcQAAAAACegAAAAAAcQAAAAACXgAAAAACXgAAAAABXgAAAAACfwAAAAAAbQAAAAAAbQAAAAAAfwAAAAAAegAAAAAAegAAAAAAUAAAAAAAcQAAAAABcQAAAAAAUAAAAAAAegAAAAAAegAAAAABcQAAAAADfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAegAAAAACcQAAAAACfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAegAAAAADegAAAAABcQAAAAABcQAAAAABegAAAAAAegAAAAAAegAAAAAAegAAAAAAcQAAAAABcQAAAAADcQAAAAADegAAAAABegAAAAABegAAAAACbQAAAAAAcgAAAAABcgAAAAACcgAAAAAAcgAAAAABcgAAAAADegAAAAAAegAAAAAAegAAAAAAegAAAAAAegAAAAADcgAAAAACcgAAAAACcgAAAAABcgAAAAABegAAAAACUAAAAAAAegAAAAADegAAAAADegAAAAACcQAAAAACcQAAAAACegAAAAAAegAAAAAAegAAAAAAfwAAAAAAegAAAAAAcgAAAAACegAAAAADegAAAAABcgAAAAADegAAAAACfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAegAAAAADcgAAAAADegAAAAADegAAAAABcgAAAAACegAAAAABfwAAAAAAegAAAAABegAAAAABcQAAAAAAfwAAAAAAewAAAAAAewAAAAAAewAAAAAAegAAAAADbQAAAAAAcgAAAAADcgAAAAACcgAAAAADcgAAAAAAcgAAAAAAcgAAAAACbQAAAAAAegAAAAACMAAAAAAAcQAAAAAAbQAAAAAAewAAAAAAewAAAAAAewAAAAAAMAAAAAABUAAAAAAAegAAAAACcgAAAAABcgAAAAADcgAAAAABcgAAAAACegAAAAABUAAAAAAAegAAAAADMAAAAAAAcQAAAAAAfwAAAAAAewAAAAAAewAAAAAAewAAAAAA + tiles: XgAAAAACXgAAAAACXgAAAAACXgAAAAAAXgAAAAACXgAAAAABXgAAAAAAfwAAAAAATgAAAAADTgAAAAAATgAAAAACTgAAAAADTgAAAAADfwAAAAAAfwAAAAAAfgAAAAAAXgAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAXgAAAAABbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAbQAAAAAAfwAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAcQAAAAAAcQAAAAABfwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAegAAAAABegAAAAADfwAAAAAAegAAAAABcQAAAAADfwAAAAAAegAAAAABegAAAAABcQAAAAAATgAAAAADXgAAAAADXgAAAAADfwAAAAAAfwAAAAAAbQAAAAAAbQAAAAAAegAAAAADegAAAAABUAAAAAAAegAAAAADcQAAAAABUAAAAAAAcQAAAAADegAAAAACcQAAAAABXgAAAAADZQAAAAAAXgAAAAACfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAegAAAAADegAAAAADegAAAAABcQAAAAACcQAAAAAAcQAAAAADcQAAAAACegAAAAAAcQAAAAACXgAAAAACXgAAAAABXgAAAAACfwAAAAAAbQAAAAAAbQAAAAAAfwAAAAAAegAAAAAAegAAAAAAUAAAAAAAcQAAAAABcQAAAAAAUAAAAAAAegAAAAAAegAAAAABcQAAAAADfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAegAAAAACcQAAAAACfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAegAAAAADegAAAAABcQAAAAABcQAAAAABegAAAAAAegAAAAAAegAAAAAAfwAAAAAAcQAAAAABcQAAAAADcQAAAAADegAAAAABegAAAAABegAAAAACbQAAAAAAcgAAAAABcgAAAAACcgAAAAAAcgAAAAABcgAAAAADegAAAAAAegAAAAAAegAAAAAAegAAAAAAegAAAAADcgAAAAACcgAAAAACcgAAAAABcgAAAAABegAAAAACUAAAAAAAegAAAAADegAAAAADegAAAAACcQAAAAACcQAAAAACegAAAAAAegAAAAAAegAAAAAAfwAAAAAAegAAAAAAcgAAAAACegAAAAADegAAAAABcgAAAAADegAAAAACfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAegAAAAADcgAAAAADegAAAAADegAAAAABcgAAAAACegAAAAABfwAAAAAAegAAAAABegAAAAABcQAAAAAAfwAAAAAAewAAAAAAewAAAAAAewAAAAAAegAAAAADbQAAAAAAcgAAAAADcgAAAAACcgAAAAADcgAAAAAAcgAAAAAAcgAAAAACbQAAAAAAegAAAAACMAAAAAAAcQAAAAAAbQAAAAAAewAAAAAAewAAAAAAewAAAAAAMAAAAAABUAAAAAAAegAAAAACcgAAAAABcgAAAAADcgAAAAABcgAAAAACegAAAAABUAAAAAAAegAAAAADMAAAAAAAcQAAAAAAfwAAAAAAewAAAAAAewAAAAAAewAAAAAA version: 6 -3,-4: ind: -3,-4 @@ -188,7 +188,7 @@ entities: version: 6 1,-2: ind: 1,-2 - tiles: fwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbAAAAAAAYwAAAAAAbAAAAAAAUAAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAfwAAAAAAewAAAAAAewAAAAAAewAAAAAAfwAAAAAAbAAAAAAAYwAAAAAAbAAAAAAAUAAAAAAAQQAAAAAAQQAAAAAAQQAAAAAAewAAAAAAQQAAAAAAQQAAAAAAQQAAAAAAfwAAAAAAewAAAAAAewAAAAAAewAAAAAAfwAAAAAAbAAAAAAAYwAAAAAAbAAAAAAAUAAAAAAAQQAAAAAAQQAAAAAAQQAAAAAAewAAAAAAQQAAAAAAQQAAAAAAQQAAAAAAbQAAAAAAewAAAAAAewAAAAAAewAAAAAAfwAAAAAAbAAAAAAAYwAAAAAAbAAAAAAAUAAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAbQAAAAAAewAAAAAAewAAAAAAewAAAAAAfwAAAAAAbAAAAAAAYwAAAAAAbAAAAAAAfwAAAAAAQQAAAAAAQQAAAAAAQQAAAAAAewAAAAAAQQAAAAAAQQAAAAAAQQAAAAAAfwAAAAAAewAAAAAAewAAAAAAewAAAAAAfwAAAAAAbAAAAAAAYwAAAAAAbAAAAAAAfwAAAAAAQQAAAAAAQQAAAAAAQQAAAAAAewAAAAAAQQAAAAAAQQAAAAAAQQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbAAAAAAAYwAAAAAAbAAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAZgAAAAAAawAAAAAAawAAAAACawAAAAABawAAAAAAZgAAAAAAYwAAAAAAZgAAAAAAawAAAAADawAAAAAAawAAAAADZgAAAAAAYwAAAAAAZgAAAAAAawAAAAABawAAAAACYwAAAAADYwAAAAAAYwAAAAACYwAAAAAAYwAAAAADYwAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAYwAAAAACYwAAAAADYwAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAYwAAAAADawAAAAACawAAAAACawAAAAACawAAAAABawAAAAADawAAAAABZgAAAAABawAAAAAAawAAAAAAawAAAAABawAAAAAAawAAAAAAawAAAAABawAAAAADawAAAAAAawAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAJwAAAAAAJwAAAAAAJwAAAAAAfwAAAAAAJwAAAAAAJwAAAAAAJwAAAAAAJwAAAAAAJwAAAAAAJwAAAAAAIwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbgAAAAAAIQAAAAAAIgAAAAAAIgAAAAAAIQAAAAAAUAAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAKAAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAIQAAAAAAIgAAAAAAIgAAAAAAIQAAAAAATwAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAKAAAAAAAfwAAAAAAIQAAAAAAIQAAAAAAIQAAAAAAIQAAAAAAIgAAAAAAIgAAAAAAIQAAAAAAUAAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAKAAAAAAAfwAAAAAAIQAAAAAAJgAAAAAAJgAAAAAAIQAAAAAAIQAAAAAAIQAAAAAAIQAAAAAAfwAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAKAAAAAAAfwAAAAAAIQAAAAAAJgAAAAAAIQAAAAAA + tiles: fwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbAAAAAAAYwAAAAAAbAAAAAAAUAAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAfwAAAAAAewAAAAAAewAAAAAAewAAAAAAfwAAAAAAbAAAAAAAYwAAAAAAbAAAAAAAUAAAAAAAQQAAAAAAQQAAAAAAQQAAAAAAewAAAAAAQQAAAAAAQQAAAAAAQQAAAAAAfwAAAAAAewAAAAAAewAAAAAAewAAAAAAfwAAAAAAbAAAAAAAYwAAAAAAbAAAAAAAUAAAAAAAQQAAAAAAQQAAAAAAQQAAAAAAewAAAAAAQQAAAAAAQQAAAAAAQQAAAAAAbQAAAAAAewAAAAAAewAAAAAAewAAAAAAfwAAAAAAbAAAAAAAYwAAAAAAbAAAAAAAUAAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAfwAAAAAAewAAAAAAewAAAAAAewAAAAAAfwAAAAAAbAAAAAAAYwAAAAAAbAAAAAAAfwAAAAAAQQAAAAAAQQAAAAAAQQAAAAAAewAAAAAAQQAAAAAAQQAAAAAAQQAAAAAAfwAAAAAAewAAAAAAewAAAAAAewAAAAAAfwAAAAAAbAAAAAAAYwAAAAAAbAAAAAAAfwAAAAAAQQAAAAAAQQAAAAAAQQAAAAAAewAAAAAAQQAAAAAAQQAAAAAAQQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbAAAAAAAYwAAAAAAbAAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAZgAAAAAAawAAAAAAawAAAAACawAAAAABawAAAAAAZgAAAAAAYwAAAAAAZgAAAAAAawAAAAADawAAAAAAawAAAAADZgAAAAAAYwAAAAAAZgAAAAAAawAAAAABawAAAAACYwAAAAADYwAAAAAAYwAAAAACYwAAAAAAYwAAAAADYwAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAYwAAAAACYwAAAAADYwAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAYwAAAAADawAAAAACawAAAAACawAAAAACawAAAAABawAAAAADawAAAAABZgAAAAABawAAAAAAawAAAAAAawAAAAABawAAAAAAawAAAAAAawAAAAABawAAAAADawAAAAAAawAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAJwAAAAAAJwAAAAAAJwAAAAAAfwAAAAAAJwAAAAAAJwAAAAAAJwAAAAAAJwAAAAAAJwAAAAAAJwAAAAAAIwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbgAAAAAAIQAAAAAAIgAAAAAAIgAAAAAAIQAAAAAAUAAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAKAAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAIQAAAAAAIgAAAAAAIgAAAAAAIQAAAAAATwAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAKAAAAAAAfwAAAAAAIQAAAAAAIQAAAAAAIQAAAAAAIQAAAAAAIgAAAAAAIgAAAAAAIQAAAAAAUAAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAKAAAAAAAfwAAAAAAIQAAAAAAJgAAAAAAJgAAAAAAIQAAAAAAIQAAAAAAIQAAAAAAIQAAAAAAfwAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAKAAAAAAAfwAAAAAAIQAAAAAAJgAAAAAAIQAAAAAA version: 6 -2,-4: ind: -2,-4 @@ -200,7 +200,7 @@ entities: version: 6 1,0: ind: 1,0 - tiles: KQAAAAAAKQAAAAAAKQAAAAAAKQAAAAAAfwAAAAAAJwAAAAAAJwAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAKQAAAAAAKQAAAAAAKQAAAAAAKQAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAbgAAAAAAbgAAAAAAfwAAAAAAUAAAAAAAJQAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbgAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAIQAAAAAAIQAAAAAAIQAAAAAAKAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAewAAAAADfwAAAAAAfwAAAAAAbgAAAAAAfwAAAAAAJwAAAAAAJwAAAAAAfwAAAAAAIQAAAAAAIQAAAAAAIQAAAAAAKAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAewAAAAADfwAAAAAAfwAAAAAAbgAAAAAAfwAAAAAAewAAAAAAewAAAAAAfQAAAAAAIQAAAAAAIQAAAAAAIQAAAAAAKAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAewAAAAADfwAAAAAAfwAAAAAAbgAAAAAAfwAAAAAAJwAAAAAAJwAAAAAAfwAAAAAAIQAAAAAAIQAAAAAAIQAAAAAAKAAAAAAAewAAAAACewAAAAADewAAAAADewAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAcQAAAAAATwAAAAAAcQAAAAAATwAAAAAAcQAAAAAAfwAAAAAAfwAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAATwAAAAAAcQAAAAAATwAAAAAAcQAAAAAATwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAfwAAAAAAcQAAAAAATwAAAAAAcQAAAAAATwAAAAAAcQAAAAAAfwAAAAAAfwAAAAAAawAAAAAAawAAAAAAawAAAAAAawAAAAAAawAAAAAAawAAAAAAawAAAAAAawAAAAAAbQAAAAAATwAAAAAAcQAAAAAATwAAAAAAcQAAAAAATwAAAAAAfwAAAAAAfwAAAAAATwAAAAAAYwAAAAAATwAAAAAAYwAAAAAATwAAAAAAYwAAAAAATwAAAAAAYwAAAAAAfwAAAAAAcQAAAAAATwAAAAAAcQAAAAAATwAAAAAAcQAAAAAAfwAAAAAAQQAAAAAA + tiles: KQAAAAAAKQAAAAAAKQAAAAAAKQAAAAAAfwAAAAAAJwAAAAAAJwAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAKQAAAAAAKQAAAAAAKQAAAAAAKQAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAbgAAAAAAbgAAAAAAfwAAAAAAUAAAAAAAJQAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbgAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAIQAAAAAAIQAAAAAAIQAAAAAAKAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAewAAAAADfwAAAAAAfwAAAAAAbgAAAAAAfwAAAAAAJwAAAAAAJwAAAAAAfwAAAAAAIQAAAAAAIQAAAAAAIQAAAAAAKAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAewAAAAADfwAAAAAAfwAAAAAAbgAAAAAAfwAAAAAAewAAAAAAewAAAAAAfQAAAAAAIQAAAAAAIQAAAAAAIQAAAAAAKAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAewAAAAADfwAAAAAAfwAAAAAAbgAAAAAAfwAAAAAAJwAAAAAAJwAAAAAAfwAAAAAAIQAAAAAAIQAAAAAAIQAAAAAAKAAAAAAAewAAAAACewAAAAADewAAAAADewAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAcQAAAAAATwAAAAAAcQAAAAAATwAAAAAAcQAAAAAAfwAAAAAAfwAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAATwAAAAAAcQAAAAAATwAAAAAAcQAAAAAATwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAfwAAAAAAcQAAAAAATwAAAAAAcQAAAAAATwAAAAAAcQAAAAAAfwAAAAAAfwAAAAAAawAAAAAAawAAAAAAawAAAAAAawAAAAAAawAAAAAAawAAAAAAawAAAAAAawAAAAAAbQAAAAAATwAAAAAAcQAAAAAATwAAAAAAcQAAAAAATwAAAAAAfwAAAAAAfwAAAAAATwAAAAAAYwAAAAAATwAAAAAAYwAAAAAATwAAAAAAYwAAAAAATwAAAAAAYwAAAAAAfwAAAAAAcQAAAAAATwAAAAAAcQAAAAAATwAAAAAAcQAAAAAAfwAAAAAAewAAAAAB version: 6 2,-2: ind: 2,-2 @@ -212,7 +212,7 @@ entities: version: 6 2,0: ind: 2,0 - tiles: fwAAAAAAKQAAAAAAIQAAAAAAKQAAAAAAfwAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAfwAAAAAAXgAAAAAAXgAAAAADXgAAAAAAXgAAAAACXgAAAAADbQAAAAAAewAAAAAAfwAAAAAAKQAAAAAAIQAAAAAAKQAAAAAAfwAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAfwAAAAAAXgAAAAACTwAAAAACXgAAAAACTwAAAAAAXgAAAAAAfwAAAAAAXgAAAAADfwAAAAAAKQAAAAAAKQAAAAAAKQAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAbQAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAPQAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAXgAAAAADXgAAAAADXgAAAAAAXgAAAAAAfwAAAAAAfgAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAPQAAAAAAPQAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAATwAAAAABTwAAAAAAXgAAAAACXgAAAAAAUAAAAAAAfgAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAPQAAAAAAPQAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAXgAAAAACXgAAAAAATwAAAAACTwAAAAADUAAAAAAAfgAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAPQAAAAAAPQAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAXwAAAAAAXgAAAAADXgAAAAACXgAAAAABfwAAAAAAfgAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfgAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQQAAAAAAQQAAAAAAfwAAAAAAfwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: fwAAAAAAKQAAAAAAIQAAAAAAKQAAAAAAfwAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAfwAAAAAAXgAAAAAAXgAAAAADXgAAAAAAXgAAAAACXgAAAAADbQAAAAAAewAAAAAAfwAAAAAAKQAAAAAAIQAAAAAAKQAAAAAAfwAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAfwAAAAAAXgAAAAACTwAAAAACXgAAAAACTwAAAAAAXgAAAAAAfwAAAAAAXgAAAAADfwAAAAAAKQAAAAAAKQAAAAAAKQAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAbQAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAPQAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAXgAAAAADXgAAAAADXgAAAAAAXgAAAAAAfwAAAAAAfgAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAPQAAAAAAPQAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAATwAAAAABTwAAAAAAXgAAAAACXgAAAAAAUAAAAAAAfgAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAPQAAAAAAPQAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAXgAAAAACXgAAAAAATwAAAAACTwAAAAADUAAAAAAAfgAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAPQAAAAAAPQAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAXwAAAAAAXgAAAAADXgAAAAACXgAAAAABfwAAAAAAfgAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfgAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAACewAAAAADewAAAAAAfwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 2,-3: ind: 2,-3 @@ -220,7 +220,7 @@ entities: version: 6 -1,-4: ind: -1,-4 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAUAAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAUAAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAUAAAAAAAfwAAAAAAUAAAAAAAbQAAAAAAUAAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfwAAAAAAXgAAAAACXgAAAAABXgAAAAAAXgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAXgAAAAACYwAAAAAAYwAAAAADYwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAUAAAAAAAewAAAAAAewAAAAADewAAAAAAewAAAAACLAAAAAAALAAAAAAALAAAAAAAXgAAAAACYwAAAAACYwAAAAACYwAAAAAA + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAUAAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAUAAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAUAAAAAAAfwAAAAAAUAAAAAAAbQAAAAAAUAAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfwAAAAAAXgAAAAACXgAAAAABXgAAAAAAXgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAXgAAAAACYwAAAAAAYwAAAAADYwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAewAAAAAAewAAAAADewAAAAAAewAAAAACLAAAAAAALAAAAAAALAAAAAAAXgAAAAACYwAAAAACYwAAAAACYwAAAAAA version: 6 0,-4: ind: 0,-4 @@ -268,11 +268,11 @@ entities: version: 6 1,1: ind: 1,1 - tiles: awAAAAAAawAAAAAAawAAAAAAawAAAAAAawAAAAAAawAAAAAAawAAAAAAawAAAAAAbQAAAAAATwAAAAAAcQAAAAAATwAAAAAAcQAAAAAAbQAAAAAAfwAAAAAAQQAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAQQAAAAAAewAAAAAAewAAAAAAewAAAAAAfwAAAAAAewAAAAAAewAAAAAAewAAAAAAfwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfwAAAAAAQQAAAAAAewAAAAAAewAAAAAAewAAAAAAfwAAAAAAewAAAAAAewAAAAAAewAAAAAAfwAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfwAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: awAAAAAAawAAAAAAawAAAAAAawAAAAAAawAAAAAAawAAAAAAawAAAAAAawAAAAAAbQAAAAAATwAAAAAAcQAAAAAATwAAAAAAcQAAAAAAbQAAAAAAfwAAAAAAewAAAAABfwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAfwAAAAAAewAAAAAAewAAAAAAewAAAAAAfwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfwAAAAAAewAAAAADewAAAAAAewAAAAAAewAAAAAAfwAAAAAAewAAAAAAewAAAAAAewAAAAAAfwAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfwAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 2,1: ind: 2,1 - tiles: QQAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: ewAAAAAAewAAAAABewAAAAACUAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAABewAAAAABewAAAAAAUAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAABewAAAAACewAAAAACUAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 4,-2: ind: 4,-2 @@ -326,6 +326,12 @@ entities: chunkCollection: version: 2 nodes: + - node: + color: '#FFFFFFFF' + id: Arrows + decals: + 1401: 58,-50 + 1402: 60,-50 - node: angle: 1.5707963267948966 rad color: '#FFFFFFFF' @@ -1120,6 +1126,28 @@ entities: id: Bushg3 decals: 539: 40,-22 + - node: + cleanable: True + color: '#79000060' + id: Bushi1 + decals: + 1407: -33.22659,1.0215869 + 1408: -32.768257,1.0840871 + 1409: -32.747425,0.8653369 + 1410: -33.237007,0.6674204 + - node: + cleanable: True + color: '#790000B7' + id: Bushi1 + decals: + 1411: -33.16409,0.8340869 + 1412: -32.955757,1.0111704 + - node: + cleanable: True + color: '#790000FF' + id: Bushi1 + decals: + 1406: -33.00784,0.8861704 - node: color: '#FFFFFFFF' id: Bushj3 @@ -1638,7 +1666,6 @@ entities: 401: 5,-36 402: 4,-35 403: 5,-35 - 437: 1,-38 438: 1,-37 - node: color: '#FFFFFFFF' @@ -2244,11 +2271,17 @@ entities: id: WarnCornerSmallNW decals: 1399: 69,-23 + - node: + color: '#FFFFFFFF' + id: WarnCornerSmallSE + decals: + 1405: 58,-48 - node: color: '#FFFFFFFF' id: WarnCornerSmallSW decals: 1400: 69,-25 + 1404: 60,-48 - node: color: '#FFFFFFFF' id: WarnEndS @@ -2292,6 +2325,7 @@ entities: 1385: 70,-26 1394: 71,-26 1395: 72,-26 + 1403: 59,-48 - node: color: '#FFFFFFFF' id: WarnLineS @@ -4278,8 +4312,6 @@ entities: - type: DeviceList devices: - 9034 - - 8953 - - 6247 - 6255 - 6347 - 336 @@ -4322,7 +4354,6 @@ entities: devices: - 6360 - 6359 - - 6365 - 8854 - 8996 - 339 @@ -5221,11 +5252,6 @@ entities: - type: Transform pos: -25.5,-32.5 parent: 2 - - uid: 96 - components: - - type: Transform - pos: -35.5,-49.5 - parent: 2 - proto: AirlockChiefJusticeLocked entities: - uid: 97 @@ -5473,13 +5499,6 @@ entities: - type: Transform pos: 49.5,-26.5 parent: 2 -- proto: AirlockExternalCommandLocked - entities: - - uid: 15108 - components: - - type: Transform - pos: 59.5,-48.5 - parent: 2 - proto: AirlockExternalGlass entities: - uid: 138 @@ -5494,17 +5513,6 @@ entities: parent: 2 - proto: AirlockExternalGlassAtmosphericsLocked entities: - - uid: 140 - components: - - type: Transform - pos: -52.5,-44.5 - parent: 2 - - type: DeviceLinkSink - invokeCounter: 1 - - type: DeviceLinkSource - linkedPorts: - 143: - - DoorStatus: DoorBolt - uid: 141 components: - type: Transform @@ -5534,10 +5542,6 @@ entities: parent: 2 - type: DeviceLinkSink invokeCounter: 1 - - type: DeviceLinkSource - linkedPorts: - 140: - - DoorStatus: DoorBolt - uid: 144 components: - type: Transform @@ -5588,6 +5592,11 @@ entities: linkedPorts: 147: - DoorStatus: DoorBolt + - uid: 5154 + components: + - type: Transform + pos: -52.5,-44.5 + parent: 2 - proto: AirlockExternalGlassCargoLocked entities: - uid: 149 @@ -5634,6 +5643,13 @@ entities: linkedPorts: 10095: - DoorStatus: InputB +- proto: AirlockExternalGlassCommandLocked + entities: + - uid: 140 + components: + - type: Transform + pos: 59.5,-48.5 + parent: 2 - proto: AirlockExternalGlassLocked entities: - uid: 153 @@ -5791,15 +5807,15 @@ entities: parent: 2 - proto: AirlockExternalGlassShuttleShipyard entities: - - uid: 172 + - uid: 173 components: - type: Transform - pos: 58.5,-50.5 + pos: 60.5,-50.5 parent: 2 - - uid: 173 + - uid: 196 components: - type: Transform - pos: 60.5,-50.5 + pos: 58.5,-50.5 parent: 2 - proto: AirlockFreezerHydroponicsLocked entities: @@ -5817,9 +5833,10 @@ entities: parent: 2 - proto: AirlockFreezerLocked entities: - - uid: 211 + - uid: 12219 components: - type: Transform + rot: -1.5707963267948966 rad pos: -11.5,-5.5 parent: 2 - proto: AirlockGlass @@ -5956,12 +5973,6 @@ entities: - type: Transform pos: -38.5,-14.5 parent: 2 - - uid: 196 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -27.5,-20.5 - parent: 2 - uid: 197 components: - type: MetaData @@ -6034,6 +6045,13 @@ entities: - type: Transform pos: 5.5,-21.5 parent: 2 +- proto: AirlockJustice + entities: + - uid: 270 + components: + - type: Transform + pos: 32.5,14.5 + parent: 2 - proto: AirlockJusticeGlassLocked entities: - uid: 208 @@ -6326,11 +6344,6 @@ entities: - type: Transform pos: 33.5,11.5 parent: 2 - - uid: 260 - components: - - type: Transform - pos: 32.5,14.5 - parent: 2 - proto: AirlockMaintMedLocked entities: - uid: 261 @@ -6395,13 +6408,6 @@ entities: parent: 2 - proto: AirlockMaintSecLocked entities: - - uid: 270 - components: - - type: MetaData - name: Security North Engineering Entrance - - type: Transform - pos: 22.5,1.5 - parent: 2 - uid: 271 components: - type: MetaData @@ -6497,11 +6503,6 @@ entities: parent: 2 - proto: AirlockPsychologistLocked entities: - - uid: 286 - components: - - type: Transform - pos: 16.5,-27.5 - parent: 2 - uid: 287 components: - type: Transform @@ -6733,7 +6734,7 @@ entities: pos: 18.5,-7.5 parent: 2 - type: Door - secondsUntilStateChange: -167812.6 + secondsUntilStateChange: -184824.52 state: Opening - type: DeviceLinkSource lastSignals: @@ -6813,22 +6814,24 @@ entities: - type: Transform pos: 36.5,-18.5 parent: 2 -- proto: AirlockServiceGlassLocked - entities: - - uid: 332 + - uid: 14682 components: - - type: MetaData - name: service storage - type: Transform - pos: -14.5,1.5 + rot: 1.5707963267948966 rad + pos: 22.5,1.5 parent: 2 +- proto: AirlockServiceLocked + entities: - uid: 333 components: - - type: MetaData - name: service storage - type: Transform pos: -17.5,1.5 parent: 2 + - uid: 649 + components: + - type: Transform + pos: -14.5,1.5 + parent: 2 - proto: AirlockTheatreLocked entities: - uid: 334 @@ -6838,6 +6841,14 @@ entities: - type: Transform pos: 0.5,-21.5 parent: 2 +- proto: AirlockVirologyLocked + entities: + - uid: 10338 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,-36.5 + parent: 2 - proto: AirSensor entities: - uid: 336 @@ -7103,11 +7114,6 @@ entities: - type: Transform pos: -27.5,-13.5 parent: 2 - - uid: 346 - components: - - type: Transform - pos: -53.5,-22.5 - parent: 2 - proto: AlwaysPoweredWallLight entities: - uid: 347 @@ -7365,8 +7371,6 @@ entities: rot: 3.141592653589793 rad pos: -2.5,-2.5 parent: 2 - - type: Apc - hasAccess: True - uid: 381 components: - type: MetaData @@ -8047,6 +8051,12 @@ entities: - type: Transform pos: 32.5,14.5 parent: 2 + - uid: 15675 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,-28.5 + parent: 2 - proto: BarricadeDirectional entities: - uid: 493 @@ -8129,6 +8139,14 @@ entities: rot: -1.5707963267948966 rad pos: -28.5,-7.5 parent: 2 + - uid: 15597 + components: + - type: MetaData + desc: A coding program is open on it... seems the project was left unfinished. + name: gaming computer + - type: Transform + pos: -27.5,-36.5 + parent: 2 - proto: BaseGasCondenser entities: - uid: 505 @@ -8175,6 +8193,12 @@ entities: - type: Transform pos: 0.8789468,-43.4626 parent: 2 + - uid: 10339 + components: + - type: Transform + parent: 10022 + - type: Physics + canCollide: False - proto: Bed entities: - uid: 511 @@ -8641,6 +8665,13 @@ entities: rot: -1.5707963267948966 rad pos: 14.5,17.5 parent: 2 +- proto: Bible + entities: + - uid: 15603 + components: + - type: Transform + pos: 28.403822,-32.943554 + parent: 2 - proto: BiomassReclaimer entities: - uid: 596 @@ -8808,11 +8839,10 @@ entities: - type: Transform pos: -35.702923,-7.408367 parent: 2 - - uid: 14836 + - uid: 819 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 62.550274,-18.277761 + pos: 33.04251,18.560333 parent: 2 - proto: BookScientistsGuidebook entities: @@ -8910,12 +8940,10 @@ entities: - type: Transform pos: 52.256832,-31.434801 parent: 2 -- proto: BookWatched - entities: - - uid: 10281 + - uid: 15604 components: - type: Transform - pos: 33.08821,18.584204 + pos: 28.622572,-33.131054 parent: 2 - proto: BookWorld entities: @@ -9014,13 +9042,6 @@ entities: - type: Transform pos: -35.65426,-15.4819355 parent: 2 -- proto: BoxCandleSmall - entities: - - uid: 649 - components: - - type: Transform - pos: -35.27926,-15.4663105 - parent: 2 - proto: BoxCardboard entities: - uid: 650 @@ -9138,6 +9159,11 @@ entities: rot: -1.5707963267948966 rad pos: 35.44456,-14.501591 parent: 2 + - uid: 15601 + components: + - type: Transform + pos: 26.893406,-32.46439 + parent: 2 - proto: BoxFolderWhite entities: - uid: 668 @@ -9145,6 +9171,13 @@ entities: - type: Transform pos: 14.567186,-30.254734 parent: 2 +- proto: BoxHolyWater + entities: + - uid: 820 + components: + - type: Transform + pos: -35.23163,-15.463562 + parent: 2 - proto: BoxInflatable entities: - uid: 669 @@ -9348,6 +9381,11 @@ entities: - type: Transform pos: -51.5,-2.5 parent: 2 + - uid: 11986 + components: + - type: Transform + pos: 9.5,-30.5 + parent: 2 - uid: 15058 components: - type: MetaData @@ -9357,6 +9395,12 @@ entities: rot: -1.5707963267948966 rad pos: -15.5,-18.5 parent: 2 + - uid: 15657 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -23.5,-31.5 + parent: 2 - proto: ButtonFrameExit entities: - uid: 698 @@ -9399,6 +9443,11 @@ entities: parent: 2 - proto: CableApcExtension entities: + - uid: 172 + components: + - type: Transform + pos: -53.5,-45.5 + parent: 2 - uid: 530 components: - type: Transform @@ -9979,30 +10028,15 @@ entities: - type: Transform pos: -52.5,-43.5 parent: 2 - - uid: 817 - components: - - type: Transform - pos: -52.5,-44.5 - parent: 2 - uid: 818 components: - type: Transform pos: -52.5,-45.5 parent: 2 - - uid: 819 - components: - - type: Transform - pos: -52.5,-46.5 - parent: 2 - - uid: 820 - components: - - type: Transform - pos: -52.5,-47.5 - parent: 2 - uid: 821 components: - type: Transform - pos: -52.5,-48.5 + pos: -53.5,-44.5 parent: 2 - uid: 822 components: @@ -19666,6 +19700,16 @@ entities: - type: Transform pos: -57.5,-44.5 parent: 2 + - uid: 4769 + components: + - type: Transform + pos: -52.5,-47.5 + parent: 2 + - uid: 4789 + components: + - type: Transform + pos: -51.5,-47.5 + parent: 2 - uid: 14929 components: - type: Transform @@ -20116,6 +20160,91 @@ entities: - type: Transform pos: -39.5,7.5 parent: 2 + - uid: 15636 + components: + - type: Transform + pos: -33.5,-11.5 + parent: 2 + - uid: 15637 + components: + - type: Transform + pos: -34.5,-14.5 + parent: 2 + - uid: 15638 + components: + - type: Transform + pos: -33.5,-15.5 + parent: 2 + - uid: 15639 + components: + - type: Transform + pos: -33.5,-13.5 + parent: 2 + - uid: 15649 + components: + - type: Transform + pos: -53.5,-46.5 + parent: 2 + - uid: 15650 + components: + - type: Transform + pos: -53.5,-47.5 + parent: 2 + - uid: 15651 + components: + - type: Transform + pos: -53.5,-48.5 + parent: 2 + - uid: 15652 + components: + - type: Transform + pos: -53.5,-49.5 + parent: 2 + - uid: 15660 + components: + - type: Transform + pos: -31.5,-66.5 + parent: 2 + - uid: 15661 + components: + - type: Transform + pos: -30.5,-66.5 + parent: 2 + - uid: 15662 + components: + - type: Transform + pos: -29.5,-66.5 + parent: 2 + - uid: 15663 + components: + - type: Transform + pos: -28.5,-66.5 + parent: 2 + - uid: 15664 + components: + - type: Transform + pos: -28.5,-68.5 + parent: 2 + - uid: 15665 + components: + - type: Transform + pos: -29.5,-68.5 + parent: 2 + - uid: 15666 + components: + - type: Transform + pos: -30.5,-68.5 + parent: 2 + - uid: 15667 + components: + - type: Transform + pos: -31.5,-68.5 + parent: 2 + - uid: 15668 + components: + - type: Transform + pos: -28.5,-67.5 + parent: 2 - proto: CableApcStack1 entities: - uid: 2760 @@ -23333,6 +23462,11 @@ entities: parent: 2 - proto: CableMV entities: + - uid: 332 + components: + - type: Transform + pos: 20.5,-11.5 + parent: 2 - uid: 3387 components: - type: Transform @@ -27683,6 +27817,116 @@ entities: - type: Transform pos: 50.5,-28.5 parent: 2 + - uid: 15647 + components: + - type: Transform + pos: -35.5,-48.5 + parent: 2 + - uid: 15648 + components: + - type: Transform + pos: -35.5,-50.5 + parent: 2 + - uid: 15687 + components: + - type: Transform + pos: 19.5,-11.5 + parent: 2 + - uid: 15688 + components: + - type: Transform + pos: 19.5,-12.5 + parent: 2 + - uid: 15689 + components: + - type: Transform + pos: 19.5,-13.5 + parent: 2 + - uid: 15690 + components: + - type: Transform + pos: 19.5,-14.5 + parent: 2 + - uid: 15691 + components: + - type: Transform + pos: 19.5,-15.5 + parent: 2 + - uid: 15692 + components: + - type: Transform + pos: 18.5,-15.5 + parent: 2 + - uid: 15693 + components: + - type: Transform + pos: 17.5,-15.5 + parent: 2 + - uid: 15694 + components: + - type: Transform + pos: 16.5,-15.5 + parent: 2 + - uid: 15695 + components: + - type: Transform + pos: 20.5,-15.5 + parent: 2 + - uid: 15696 + components: + - type: Transform + pos: 21.5,-15.5 + parent: 2 + - uid: 15697 + components: + - type: Transform + pos: 22.5,-15.5 + parent: 2 + - uid: 15698 + components: + - type: Transform + pos: 23.5,-15.5 + parent: 2 + - uid: 15699 + components: + - type: Transform + pos: 24.5,-15.5 + parent: 2 + - uid: 15700 + components: + - type: Transform + pos: 25.5,-15.5 + parent: 2 + - uid: 15701 + components: + - type: Transform + pos: 26.5,-15.5 + parent: 2 + - uid: 15702 + components: + - type: Transform + pos: 25.5,-14.5 + parent: 2 + - uid: 15703 + components: + - type: Transform + pos: 60.5,-25.5 + parent: 2 + - uid: 15704 + components: + - type: Transform + pos: 60.5,-26.5 + parent: 2 + - uid: 15705 + components: + - type: Transform + pos: 60.5,-27.5 + parent: 2 + - uid: 15706 + components: + - type: Transform + pos: 60.5,-28.5 + parent: 2 - proto: CableMVStack1 entities: - uid: 4057 @@ -28202,6 +28446,31 @@ entities: rot: -1.5707963267948966 rad pos: 19.5,-39.5 parent: 2 + - uid: 15630 + components: + - type: Transform + pos: 32.5,18.5 + parent: 2 + - uid: 15631 + components: + - type: Transform + pos: 33.5,18.5 + parent: 2 + - uid: 15632 + components: + - type: Transform + pos: 34.5,18.5 + parent: 2 + - uid: 15633 + components: + - type: Transform + pos: 34.5,17.5 + parent: 2 + - uid: 15634 + components: + - type: Transform + pos: 34.5,16.5 + parent: 2 - proto: CarpetBlue entities: - uid: 4143 @@ -31483,6 +31752,12 @@ entities: rot: -1.5707963267948966 rad pos: -28.5,-68.5 parent: 2 + - uid: 15635 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -33.5,-11.5 + parent: 2 - proto: Chair entities: - uid: 4758 @@ -32799,6 +33074,11 @@ entities: rot: 1.5707963267948966 rad pos: -55.25351,0.80345345 parent: 2 + - uid: 15646 + components: + - type: Transform + pos: 39.10322,-0.8546152 + parent: 2 - proto: CheapRollerBed entities: - uid: 4986 @@ -33703,6 +33983,11 @@ entities: - type: Transform pos: -52.57864,-18.460405 parent: 2 + - uid: 14927 + components: + - type: Transform + pos: 16.397684,-1.2194644 + parent: 2 - proto: ClothingBeltChampion entities: - uid: 5133 @@ -33734,6 +34019,13 @@ entities: - type: Transform pos: -3.3652787,4.4398217 parent: 2 +- proto: ClothingEyesBlindfold + entities: + - uid: 15610 + components: + - type: Transform + pos: -32.41409,1.7195036 + parent: 2 - proto: ClothingEyesGlasses entities: - uid: 5138 @@ -33828,15 +34120,25 @@ entities: - type: Transform pos: -23.539022,-27.306688 parent: 2 - - uid: 5154 + - uid: 15671 components: - type: Transform - pos: 35.55076,-35.157898 + pos: 35.32179,-32.214817 parent: 2 - - uid: 5155 + - uid: 15672 components: - type: Transform - pos: 35.45701,-33.970398 + pos: 35.44679,-36.844364 + parent: 2 + - uid: 15673 + components: + - type: Transform + pos: 34.86522,-35.35999 + parent: 2 + - uid: 15674 + components: + - type: Transform + pos: 34.80272,-33.48499 parent: 2 - proto: ClothingHeadHatGreensoftFlipped entities: @@ -34055,6 +34357,13 @@ entities: - type: Transform pos: 50.279686,-27.395357 parent: 2 +- proto: ClothingMaskMuzzle + entities: + - uid: 15611 + components: + - type: Transform + pos: -32.424507,1.6049204 + parent: 2 - proto: ClothingMaskSterile entities: - uid: 5187 @@ -34295,7 +34604,7 @@ entities: desc: These socks seem to have a weird tag on them and belong to an "Adrian." They don't seem to have gravity defying properties and are normal. Disappointing. name: adrian's gravity-defying coder socks - type: Transform - pos: -27.712547,-36.253307 + pos: -27.071718,-36.974934 parent: 2 - proto: ClothingUniformJumpskirtDetective entities: @@ -34927,7 +35236,6 @@ entities: rot: 1.5707963267948966 rad pos: 42.5,-32.5 parent: 2 - - type: DeviceNetwork - uid: 14686 components: - type: Transform @@ -35288,10 +35596,10 @@ entities: - type: Transform pos: -7.5,-35.5 parent: 2 - - uid: 5350 + - uid: 15620 components: - type: Transform - pos: -7.5,-36.5 + pos: -28.5,-41.5 parent: 2 - proto: CrateEngineeringAMEJar entities: @@ -35635,13 +35943,6 @@ entities: - type: Transform pos: 9.5,-26.5 parent: 2 -- proto: CrateTrainingBombs - entities: - - uid: 5375 - components: - - type: Transform - pos: 33.5,-9.5 - parent: 2 - proto: CrateTrashCart entities: - uid: 5376 @@ -35701,6 +36002,8 @@ entities: entities: - uid: 5381 components: + - type: MetaData + desc: Ashes to Ashes.... - type: Transform rot: -1.5707963267948966 rad pos: -32.5,-15.5 @@ -35715,13 +36018,6 @@ entities: - type: SingletonDeviceNetServer active: False available: False -- proto: Crowbar - entities: - - uid: 5383 - components: - - type: Transform - pos: 35.428898,-33.767273 - parent: 2 - proto: CrowbarRed entities: - uid: 5384 @@ -35811,6 +36107,13 @@ entities: - type: Transform pos: 1.0656376,-43.150978 parent: 2 +- proto: CultAltarSpawner + entities: + - uid: 346 + components: + - type: Transform + pos: -53.5,-22.5 + parent: 2 - proto: CurtainsBlackOpen entities: - uid: 5298 @@ -35885,6 +36188,12 @@ entities: rot: 1.5707963267948966 rad pos: 34.5,2.5 parent: 2 + - uid: 15627 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-20.5 + parent: 2 - proto: CurtainsPinkOpen entities: - uid: 5405 @@ -35919,7 +36228,7 @@ entities: pos: 31.5,-36.5 parent: 2 - type: Door - secondsUntilStateChange: -2004.0092 + secondsUntilStateChange: -19015.95 state: Closing - uid: 5409 components: @@ -35944,6 +36253,43 @@ entities: rot: -1.5707963267948966 rad pos: -29.5,4.5 parent: 2 +- proto: CurtainsRedOpen + entities: + - uid: 15612 + components: + - type: Transform + pos: 31.5,19.5 + parent: 2 + - uid: 15613 + components: + - type: Transform + pos: 32.5,19.5 + parent: 2 + - uid: 15614 + components: + - type: Transform + pos: 33.5,19.5 + parent: 2 + - uid: 15615 + components: + - type: Transform + pos: 34.5,19.5 + parent: 2 + - uid: 15616 + components: + - type: Transform + pos: 35.5,18.5 + parent: 2 + - uid: 15617 + components: + - type: Transform + pos: 35.5,17.5 + parent: 2 + - uid: 15618 + components: + - type: Transform + pos: 35.5,16.5 + parent: 2 - proto: CyborgEndoskeleton entities: - uid: 5410 @@ -35963,6 +36309,13 @@ entities: - type: Transform pos: 17.480783,3.5951743 parent: 2 +- proto: DawInstrument + entities: + - uid: 15619 + components: + - type: Transform + pos: 9.5,-7.5 + parent: 2 - proto: DefaultStationBeaconAICore entities: - uid: 15337 @@ -39443,13 +39796,6 @@ entities: - type: Transform pos: 53.475582,-33.22486 parent: 2 -- proto: DrinkHotCoffee - entities: - - uid: 14705 - components: - - type: Transform - pos: 64.32559,-18.597485 - parent: 2 - proto: DrinkIcedTeaCan entities: - uid: 5990 @@ -39508,6 +39854,13 @@ entities: - type: Transform pos: 41.612156,6.0072923 parent: 2 +- proto: DrinkMugMoebius + entities: + - uid: 6247 + components: + - type: Transform + pos: 64.398544,-18.490255 + parent: 2 - proto: DrinkMugOne entities: - uid: 5306 @@ -39531,6 +39884,13 @@ entities: rot: -1.5707963267948966 rad pos: -44.63733,7.439961 parent: 2 +- proto: DrinkNukieCan + entities: + - uid: 15589 + components: + - type: Transform + pos: 33.959892,18.684513 + parent: 2 - proto: DrinkRootBeerCan entities: - uid: 5999 @@ -39633,6 +39993,21 @@ entities: - type: Transform pos: 2.346056,-3.492303 parent: 2 + - uid: 15606 + components: + - type: Transform + pos: -24.23363,-13.141207 + parent: 2 + - uid: 15607 + components: + - type: Transform + pos: -24.400297,-13.287039 + parent: 2 + - uid: 15608 + components: + - type: Transform + pos: -24.181547,-13.464123 + parent: 2 - proto: DrinkSojuBottleFull entities: - uid: 6011 @@ -39756,7 +40131,7 @@ entities: - uid: 6031 components: - type: Transform - pos: -46.793983,-15.293119 + pos: -46.295242,-15.386068 parent: 2 - uid: 6032 components: @@ -41330,14 +41705,6 @@ entities: - type: Transform pos: -49.5,-26.5 parent: 2 - - uid: 6247 - components: - - type: Transform - pos: 16.5,-27.5 - parent: 2 - - type: DeviceNetwork - deviceLists: - - 23 - uid: 6248 components: - type: Transform @@ -42137,15 +42504,6 @@ entities: - type: DeviceNetwork deviceLists: - 6232 - - uid: 6365 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 35.5,-32.5 - parent: 2 - - type: DeviceNetwork - deviceLists: - - 26 - uid: 6366 components: - type: Transform @@ -42987,13 +43345,6 @@ entities: parent: 2 - type: Fixtures fixtures: {} - - uid: 6480 - components: - - type: Transform - pos: -13.5,-3.5 - parent: 2 - - type: Fixtures - fixtures: {} - uid: 6481 components: - type: Transform @@ -43016,6 +43367,14 @@ entities: parent: 2 - type: Fixtures fixtures: {} + - uid: 6809 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -12.5,-3.5 + parent: 2 + - type: Fixtures + fixtures: {} - proto: FloorTileItemHydro entities: - uid: 6484 @@ -43118,7 +43477,7 @@ entities: - uid: 6502 components: - type: Transform - pos: -24.541357,-13.293709 + pos: -21.412867,-10.301056 parent: 2 - proto: FoodBreadPlain entities: @@ -43146,6 +43505,35 @@ entities: - type: Transform pos: 33.450184,-29.531673 parent: 2 +- proto: FoodButter + entities: + - uid: 15573 + components: + - type: MetaData + desc: A stick of exotically delicious, golden, fatty goodness. + name: stick of exotic butter + - type: Transform + parent: 15572 + - type: Physics + canCollide: False + - uid: 15574 + components: + - type: MetaData + desc: A stick of exotically delicious, golden, fatty goodness. + name: stick of exotic butter + - type: Transform + parent: 15572 + - type: Physics + canCollide: False + - uid: 15575 + components: + - type: MetaData + desc: A stick of exotically delicious, golden, fatty goodness. + name: stick of exotic butter + - type: Transform + parent: 15572 + - type: Physics + canCollide: False - proto: FoodCakeSuppermatterSlice entities: - uid: 6515 @@ -43153,6 +43541,16 @@ entities: - type: Transform pos: 56.537678,-42.531055 parent: 2 +- proto: FoodCannabisButter + entities: + - uid: 15576 + components: + - type: MetaData + name: stick of exotic cannabis butter + - type: Transform + parent: 15572 + - type: Physics + canCollide: False - proto: FoodChiliPepper entities: - uid: 6516 @@ -43239,10 +43637,10 @@ entities: parent: 2 - proto: FoodOnion entities: - - uid: 6528 + - uid: 10818 components: - type: Transform - pos: -12.218711,-4.6579046 + pos: -12.2599325,-4.625452 parent: 2 - proto: FoodPieBananaCream entities: @@ -43549,13 +43947,6 @@ entities: parent: 2 - proto: GasPassiveGate entities: - - uid: 4789 - components: - - type: Transform - pos: -10.5,-6.5 - parent: 2 - - type: AtmosPipeColor - color: '#0335FCFF' - uid: 6570 components: - type: Transform @@ -43563,14 +43954,6 @@ entities: parent: 2 - type: AtmosPipeColor color: '#FF1212FF' - - uid: 15308 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 67.5,-30.5 - parent: 2 - - type: AtmosPipeColor - color: '#FF1212FF' - proto: GasPassiveVent entities: - uid: 6572 @@ -43619,18 +44002,22 @@ entities: rot: 3.141592653589793 rad pos: -42.5,-51.5 parent: 2 - - uid: 9067 + - uid: 9484 components: - type: Transform rot: 1.5707963267948966 rad - pos: -12.5,-5.5 + pos: -13.5,-4.5 parent: 2 + - type: AtmosPipeColor + color: '#257CA3FF' - uid: 15307 components: - type: Transform rot: -1.5707963267948966 rad pos: 68.5,-30.5 parent: 2 + - type: AtmosPipeColor + color: '#FF1212FF' - proto: GasPipeBend entities: - uid: 6580 @@ -44940,6 +45327,21 @@ entities: rot: 3.141592653589793 rad pos: -47.5,-55.5 parent: 2 + - uid: 9342 + components: + - type: Transform + pos: -10.5,-5.5 + parent: 2 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 9353 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -10.5,-4.5 + parent: 2 + - type: AtmosPipeColor + color: '#257CA3FF' - uid: 15273 components: - type: Transform @@ -45483,18 +45885,11 @@ entities: parent: 2 - type: AtmosPipeColor color: '#FF1212FF' - - uid: 6809 - components: - - type: Transform - pos: -13.5,-3.5 - parent: 2 - - type: AtmosPipeColor - color: '#FF1212FF' - uid: 6810 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -11.5,-5.5 + rot: 3.141592653589793 rad + pos: -10.5,-6.5 parent: 2 - type: AtmosPipeColor color: '#0335FCFF' @@ -58321,6 +58716,14 @@ entities: rot: 3.141592653589793 rad pos: -42.5,-50.5 parent: 2 + - uid: 8953 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,-4.5 + parent: 2 + - type: AtmosPipeColor + color: '#257CA3FF' - uid: 9348 components: - type: Transform @@ -58361,6 +58764,14 @@ entities: parent: 2 - type: AtmosPipeColor color: '#FF1212FF' + - uid: 10344 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,-5.5 + parent: 2 + - type: AtmosPipeColor + color: '#0335FCFF' - uid: 11945 components: - type: Transform @@ -58533,14 +58944,6 @@ entities: color: '#FF1212FF' - proto: GasPipeTJunction entities: - - uid: 4769 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -10.5,-5.5 - parent: 2 - - type: AtmosPipeColor - color: '#0335FCFF' - uid: 5267 components: - type: Transform @@ -60922,15 +61325,6 @@ entities: color: '#0335FCFF' - proto: GasPressurePump entities: - - uid: 5286 - components: - - type: Transform - pos: -10.5,-4.5 - parent: 2 - - type: GasPressurePump - targetPressure: 4500 - - type: AtmosPipeColor - color: '#0335FCFF' - uid: 8790 components: - type: Transform @@ -61186,6 +61580,16 @@ entities: - type: Transform pos: -42.5,-49.5 parent: 2 + - uid: 12047 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 67.5,-30.5 + parent: 2 + - type: GasPressurePump + targetPressure: 4500 + - type: AtmosPipeColor + color: '#FF1212FF' - proto: GasRecycler entities: - uid: 8821 @@ -61216,6 +61620,8 @@ entities: parent: 2 - type: GasThermoMachine targetTemperature: 73.15 + - type: AtmosPipeColor + color: '#257CA3FF' - uid: 8825 components: - type: Transform @@ -61241,6 +61647,16 @@ entities: parent: 2 - type: GasThermoMachine targetTemperature: 290.15 +- proto: GasValve + entities: + - uid: 6528 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,-4.5 + parent: 2 + - type: GasValve + open: False - proto: GasVentPump entities: - uid: 525 @@ -62347,17 +62763,6 @@ entities: parent: 2 - type: AtmosPipeColor color: '#0335FCFF' - - uid: 8953 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 13.5,-29.5 - parent: 2 - - type: DeviceNetwork - deviceLists: - - 23 - - type: AtmosPipeColor - color: '#0335FCFF' - uid: 8954 components: - type: Transform @@ -62507,6 +62912,20 @@ entities: parent: 2 - type: AtmosPipeColor color: '#0335FCFF' + - uid: 9067 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,-5.5 + parent: 2 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 9388 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 13.5,-29.5 + parent: 2 - uid: 15269 components: - type: Transform @@ -62613,7 +63032,7 @@ entities: components: - type: Transform rot: 3.141592653589793 rad - pos: -13.5,-4.5 + pos: -13.5,-3.5 parent: 2 - type: AtmosPipeColor color: '#FF1212FF' @@ -65178,11 +65597,6 @@ entities: - type: Transform pos: 30.5,-25.5 parent: 2 - - uid: 9342 - components: - - type: Transform - pos: 9.5,-30.5 - parent: 2 - uid: 9343 components: - type: Transform @@ -65228,11 +65642,6 @@ entities: - type: Transform pos: 24.5,-29.5 parent: 2 - - uid: 9353 - components: - - type: Transform - pos: 10.5,-30.5 - parent: 2 - uid: 9354 components: - type: Transform @@ -65403,11 +65812,6 @@ entities: - type: Transform pos: 45.5,-46.5 parent: 2 - - uid: 9388 - components: - - type: Transform - pos: 11.5,-30.5 - parent: 2 - uid: 9389 components: - type: Transform @@ -65875,11 +66279,6 @@ entities: - type: Transform pos: 51.5,-0.5 parent: 2 - - uid: 9484 - components: - - type: Transform - pos: -18.5,-36.5 - parent: 2 - uid: 9485 components: - type: Transform @@ -67055,11 +67454,6 @@ entities: rot: 3.141592653589793 rad pos: 20.5,-37.5 parent: 2 - - uid: 9718 - components: - - type: Transform - pos: -17.5,-36.5 - parent: 2 - uid: 9719 components: - type: Transform @@ -67746,6 +68140,12 @@ entities: - type: Transform pos: 54.5,-15.5 parent: 2 + - uid: 10281 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,-37.5 + parent: 2 - uid: 11119 components: - type: Transform @@ -68429,6 +68829,13 @@ entities: - type: Transform pos: 35.5,-6.5 parent: 2 +- proto: Handcuffs + entities: + - uid: 12251 + components: + - type: Transform + pos: -32.466175,1.3132536 + parent: 2 - proto: HandheldGPSBasic entities: - uid: 9908 @@ -68458,6 +68865,13 @@ entities: - type: Transform pos: 27.30236,16.462711 parent: 2 +- proto: HandLabeler + entities: + - uid: 15577 + components: + - type: Transform + pos: -35.379524,-15.121122 + parent: 2 - proto: HatSpawner entities: - uid: 9913 @@ -68619,6 +69033,11 @@ entities: parent: 2 - proto: HighSecCommandLocked entities: + - uid: 96 + components: + - type: Transform + pos: -35.5,-49.5 + parent: 2 - uid: 9937 components: - type: Transform @@ -68685,16 +69104,36 @@ entities: parent: 2 - proto: HospitalCurtainsOpen entities: - - uid: 9946 + - uid: 15626 components: - type: Transform - pos: 1.5,-36.5 + rot: 1.5707963267948966 rad + pos: 2.5,-20.5 parent: 2 - - uid: 9947 + - uid: 15679 components: - type: Transform + rot: 1.5707963267948966 rad pos: 1.5,-37.5 parent: 2 + - uid: 15680 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,-35.5 + parent: 2 + - uid: 15681 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,-34.5 + parent: 2 + - uid: 15682 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,-31.5 + parent: 2 - proto: hydroponicsSoil entities: - uid: 9948 @@ -69135,6 +69574,20 @@ entities: - type: Transform pos: -19.227024,-40.49888 parent: 2 +- proto: Joint + entities: + - uid: 15644 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 39.651836,-0.87544847 + parent: 2 + - uid: 15645 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 39.53378,-1.0212818 + parent: 2 - proto: Jukebox entities: - uid: 10010 @@ -69221,6 +69674,24 @@ entities: - type: Transform pos: 38.5,6.5 parent: 2 + - type: ContainerContainer + containers: + beakerSlot: !type:ContainerSlot + showEnts: False + occludes: True + ent: 10339 + inputContainer: !type:Container + showEnts: False + occludes: True + ents: [] + machine_board: !type:Container + showEnts: False + occludes: True + ents: [] + machine_parts: !type:Container + showEnts: False + occludes: True + ents: [] - uid: 10023 components: - type: Transform @@ -69238,6 +69709,13 @@ entities: - type: Transform pos: -12.5,-3.5 parent: 2 +- proto: KnifePlastic + entities: + - uid: 12216 + components: + - type: Transform + pos: 40.735992,3.4702044 + parent: 2 - proto: KoboldCubeBox entities: - uid: 10027 @@ -69281,6 +69759,12 @@ entities: rot: -1.5707963267948966 rad pos: 19.570953,-37.08211 parent: 2 + - uid: 817 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 64.711044,-17.97463 + parent: 2 - uid: 10029 components: - type: Transform @@ -69312,6 +69796,26 @@ entities: - type: Transform pos: 35.425385,12.4203 parent: 2 +- proto: LeavesCannabis + entities: + - uid: 15641 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 39.575447,-0.32683742 + parent: 2 + - uid: 15642 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 39.39489,-0.38239288 + parent: 2 + - uid: 15643 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 39.58239,-0.49350405 + parent: 2 - proto: LGBTQFlag entities: - uid: 10034 @@ -69365,6 +69869,37 @@ entities: linkedPorts: 9969: - Pressed: Trigger +- proto: LockableButtonChiefEngineer + entities: + - uid: 15658 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -23.5,-31.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 15656: + - Pressed: Toggle + 15655: + - Pressed: Toggle + 12218: + - Pressed: Toggle + 12217: + - Pressed: Toggle +- proto: LockableButtonChiefMedicalOfficer + entities: + - uid: 12224 + components: + - type: Transform + pos: 9.5,-30.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 11662: + - Pressed: Toggle + 9718: + - Pressed: Toggle - proto: LockableButtonHeadOfPersonnel entities: - uid: 15059 @@ -69572,35 +70107,15 @@ entities: parent: 2 - proto: LockerFreezer entities: - - uid: 10065 + - uid: 10066 components: - - type: MetaData - name: standing freezer - type: Transform - pos: -10.5,-4.5 + pos: -10.5,-41.5 parent: 2 - - type: EntityStorage - air: - volume: 200 - immutable: False - temperature: 293.14957 - moles: - - 4.4356327 - - 16.686428 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - uid: 10066 + - uid: 15571 components: - type: Transform - pos: -10.5,-41.5 + pos: -10.5,-4.5 parent: 2 - proto: LockerFreezerVaultFilled entities: @@ -69830,6 +70345,20 @@ entities: - type: Transform pos: 75.5,-24.5 parent: 2 +- proto: LootSpawnerRandomCrateEngineering + entities: + - uid: 5350 + components: + - type: Transform + pos: -7.5,-36.5 + parent: 2 +- proto: LootSpawnerRandomCrateSecurity + entities: + - uid: 5375 + components: + - type: Transform + pos: 33.5,-9.5 + parent: 2 - proto: LunchboxEpistemics entities: - uid: 10097 @@ -69837,6 +70366,49 @@ entities: - type: Transform pos: -49.343746,2.8232799 parent: 2 +- proto: LunchboxService + entities: + - uid: 15572 + components: + - type: MetaData + desc: A box of exotic butters from Nanotrasen. + name: box of exotic butters + - type: Transform + pos: -8.288313,-3.33188 + parent: 2 + - type: Storage + storedItems: + 15573: + position: 0,0 + _rotation: South + 15574: + position: 1,0 + _rotation: South + 15575: + position: 2,0 + _rotation: South + 15576: + position: 4,0 + _rotation: South + - type: ContainerContainer + containers: + storagebase: !type:Container + showEnts: False + occludes: True + ents: + - 15573 + - 15574 + - 15575 + - 15576 +- proto: LunchboxSyndicateFilledRandom + entities: + - uid: 15629 + components: + - type: MetaData + name: suspicious pre-packed lunchbox + - type: Transform + pos: 34.521645,18.026209 + parent: 2 - proto: LuxuryPen entities: - uid: 4919 @@ -69872,6 +70444,16 @@ entities: - type: Transform pos: 44.47961,-33.659584 parent: 2 + - uid: 15308 + components: + - type: Transform + pos: 32.4183,18.552713 + parent: 2 + - uid: 15602 + components: + - type: Transform + pos: 27.35174,-32.506054 + parent: 2 - proto: MachineAnomalyGenerator entities: - uid: 10102 @@ -69960,6 +70542,14 @@ entities: - type: Transform pos: 34.5,15.5 parent: 2 +- proto: MagazineMagnum + entities: + - uid: 15717 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 40.54459,-11.15263 + parent: 2 - proto: MailTeleporter entities: - uid: 10115 @@ -70295,6 +70885,13 @@ entities: - type: Transform pos: 52.5,-15.5 parent: 2 +- proto: Matchbox + entities: + - uid: 15716 + components: + - type: Transform + pos: -35.302242,-15.30172 + parent: 2 - proto: MaterialBiomass entities: - uid: 10175 @@ -70835,9 +71432,10 @@ entities: parent: 2 - proto: Oracle entities: - - uid: 10252 + - uid: 10649 components: - type: Transform + rot: 3.141592653589793 rad pos: -26.5,-13.5 parent: 2 - proto: OreBox @@ -70932,6 +71530,14 @@ entities: - type: Transform pos: 35.5,14.5 parent: 2 +- proto: PaintingPrayerHands + entities: + - uid: 15640 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -27.5,-12.5 + parent: 2 - proto: PaintingSkeletonCigarette entities: - uid: 10266 @@ -71173,6 +71779,7 @@ entities: After that you will be able to use bridge controls for a short period of time. It is advisable to use it wisely as fuel will burn up in a matter of minutes, check the fuel timer on the left side of the generator to see how much time you have left. + editingDisabled: True - proto: PaperBin entities: - uid: 10310 @@ -71231,6 +71838,12 @@ entities: - type: Transform pos: 44.5,-33.5 parent: 2 + - uid: 11065 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 28.5,-34.5 + parent: 2 - proto: PaperBin5 entities: - uid: 10316 @@ -71480,16 +72093,6 @@ entities: rot: -1.5707963267948966 rad pos: -28.968546,-6.533367 parent: 2 - - uid: 10338 - components: - - type: Transform - pos: 29.457983,-32.516068 - parent: 2 - - uid: 10339 - components: - - type: Transform - pos: 27.395483,-32.484818 - parent: 2 - uid: 10340 components: - type: Transform @@ -71544,6 +72147,12 @@ entities: + editingDisabled: True + - uid: 11174 + components: + - type: Transform + pos: 27.424656,-32.45397 + parent: 2 - uid: 15330 components: - type: Transform @@ -71560,6 +72169,36 @@ entities: Rock and Stone, brother. Salvie heading out. + editingDisabled: True + - uid: 15580 + components: + - type: MetaData + name: note from centcomm + - type: Transform + pos: -8.8863,-3.421107 + parent: 2 + - type: Paper + stampState: paper_stamp-centcom + stampedBy: + - stampedColor: '#006600FF' + stampedName: stamp-component-stamped-name-centcom + content: >2- + + Hey there Chef! + + + We apologies greatly for the inconvenience we have caused with the freezer piping design. Due to a lack of competence from our worker in the "Station Repairs and Maintanence" department the area was piped wrong and would cause a low pressure environment . We have since fixed the issue. + + + Due to such issues having been present we gift you with this: A box of exotic butters from a far off planet! We hope they aid you in wonderful meals. + + + Watching over you, + - uid: 15605 + components: + - type: Transform + pos: 29.403822,-32.447712 + parent: 2 - proto: PaperScrap entities: - uid: 10343 @@ -71569,13 +72208,6 @@ entities: parent: 2 - proto: PartRodMetal entities: - - uid: 10344 - components: - - type: Transform - pos: 45.9584,-48.06076 - parent: 2 - - type: Stack - count: 20 - uid: 10345 components: - type: Transform @@ -71590,13 +72222,6 @@ entities: parent: 2 - type: Stack count: 6 - - uid: 15541 - components: - - type: Transform - pos: -12.171196,-45.919193 - parent: 2 - - type: Stack - count: 23 - proto: Pen entities: - uid: 9203 @@ -71642,11 +72267,6 @@ entities: parent: 2 - proto: PersonalAI entities: - - uid: 14748 - components: - - type: Transform - pos: 64.591995,-18.484604 - parent: 2 - uid: 15489 components: - type: Transform @@ -71660,6 +72280,14 @@ entities: - type: Transform pos: 44.49003,-34.409584 parent: 2 + - uid: 11275 + components: + - type: MetaData + desc: A backup red phone for the worst of emergencies... + name: backup red phone + - type: Transform + pos: 62.46104,-18.302755 + parent: 2 - proto: PianoInstrument entities: - uid: 10351 @@ -71836,7 +72464,7 @@ entities: desc: Knows exactly what you did. name: Officer Hank - type: Transform - pos: 38.4511,-19.464378 + pos: 38.426617,-19.35165 parent: 2 - uid: 10366 components: @@ -71900,6 +72528,12 @@ entities: - type: Transform pos: -54.695198,11.486654 parent: 2 + - uid: 15596 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -58.357563,-15.695623 + parent: 2 - proto: PlushieSharkBlue entities: - uid: 10374 @@ -71912,6 +72546,11 @@ entities: - type: Transform pos: -54.507698,12.612436 parent: 2 + - uid: 15598 + components: + - type: Transform + pos: -26.516163,-36.384655 + parent: 2 - proto: PlushieSharkPink entities: - uid: 10376 @@ -73666,12 +74305,6 @@ entities: rot: -1.5707963267948966 rad pos: 35.5,-28.5 parent: 2 - - uid: 10649 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 35.5,-35.5 - parent: 2 - uid: 10650 components: - type: Transform @@ -73947,6 +74580,12 @@ entities: rot: 1.5707963267948966 rad pos: -30.5,-15.5 parent: 2 + - uid: 11277 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,-34.5 + parent: 2 - uid: 14988 components: - type: Transform @@ -74769,6 +75408,12 @@ entities: parent: 2 - proto: Rack entities: + - uid: 211 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,-4.5 + parent: 2 - uid: 10814 components: - type: Transform @@ -74789,11 +75434,6 @@ entities: - type: Transform pos: 35.5,-9.5 parent: 2 - - uid: 10818 - components: - - type: Transform - pos: -12.5,-4.5 - parent: 2 - uid: 10819 components: - type: Transform @@ -75840,6 +76480,11 @@ entities: - type: Transform pos: 42.5,-30.5 parent: 2 + - uid: 12125 + components: + - type: Transform + pos: -17.5,-36.5 + parent: 2 - proto: RandomPosterAny entities: - uid: 10996 @@ -76211,12 +76856,6 @@ entities: - type: Transform pos: 34.5,12.5 parent: 2 - - uid: 11065 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -48.5,0.5 - parent: 2 - uid: 11066 components: - type: Transform @@ -76788,12 +77427,6 @@ entities: - type: Transform pos: 63.5,-32.5 parent: 2 - - uid: 15559 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -28.5,-67.5 - parent: 2 - proto: ReinforcedPlasmaWindow entities: - uid: 10713 @@ -76927,6 +77560,18 @@ entities: - type: Transform pos: -59.5,-36.5 parent: 2 + - uid: 11661 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -35.5,-48.5 + parent: 2 + - uid: 12254 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -35.5,-50.5 + parent: 2 - uid: 12740 components: - type: Transform @@ -77354,11 +77999,6 @@ entities: rot: 3.141592653589793 rad pos: 34.5,-1.5 parent: 2 - - uid: 11271 - components: - - type: Transform - pos: 11.5,-30.5 - parent: 2 - uid: 11272 components: - type: Transform @@ -77369,26 +78009,11 @@ entities: - type: Transform pos: 46.5,-13.5 parent: 2 - - uid: 11274 - components: - - type: Transform - pos: -35.5,-50.5 - parent: 2 - - uid: 11275 - components: - - type: Transform - pos: -35.5,-48.5 - parent: 2 - uid: 11276 components: - type: Transform pos: -26.5,-32.5 parent: 2 - - uid: 11277 - components: - - type: Transform - pos: 10.5,-30.5 - parent: 2 - uid: 11278 components: - type: Transform @@ -77599,11 +78224,6 @@ entities: - type: Transform pos: -11.5,-47.5 parent: 2 - - uid: 11321 - components: - - type: Transform - pos: 9.5,-30.5 - parent: 2 - uid: 11322 components: - type: Transform @@ -78347,11 +78967,6 @@ entities: - type: Transform pos: -58.5,-24.5 parent: 2 - - uid: 11472 - components: - - type: Transform - pos: -18.5,-36.5 - parent: 2 - uid: 11473 components: - type: Transform @@ -78417,11 +79032,6 @@ entities: - type: Transform pos: -16.5,-39.5 parent: 2 - - uid: 11486 - components: - - type: Transform - pos: -17.5,-36.5 - parent: 2 - uid: 11487 components: - type: Transform @@ -78631,6 +79241,12 @@ entities: - type: Transform pos: 49.5,-20.5 parent: 2 + - uid: 15659 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,-37.5 + parent: 2 - proto: ResearchAndDevelopmentServer entities: - uid: 11530 @@ -78733,6 +79349,13 @@ entities: - type: Transform pos: 30.075026,3.459302 parent: 2 +- proto: RubberStampGreytide + entities: + - uid: 14922 + components: + - type: Transform + pos: 33.496426,18.818338 + parent: 2 - proto: SalvageCanisterSpawner entities: - uid: 11544 @@ -78740,15 +79363,15 @@ entities: - type: Transform pos: -7.5,-33.5 parent: 2 - - uid: 11545 + - uid: 11546 components: - type: Transform - pos: -40.5,-31.5 + pos: -40.5,-32.5 parent: 2 - - uid: 11546 + - uid: 12215 components: - type: Transform - pos: -40.5,-32.5 + pos: -40.5,-31.5 parent: 2 - proto: SalvageMagnet entities: @@ -78757,14 +79380,6 @@ entities: - type: Transform pos: -32.5,-70.5 parent: 2 -- proto: ScalpelShiv - entities: - - uid: 11174 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 40.785152,3.511335 - parent: 2 - proto: SchoolgirlUniformSpawner entities: - uid: 11549 @@ -79345,6 +79960,11 @@ entities: - type: Transform pos: -19.5,-20.5 parent: 2 + - uid: 9718 + components: + - type: Transform + pos: 8.5,-32.5 + parent: 2 - uid: 11625 components: - type: Transform @@ -79550,17 +80170,10 @@ entities: - type: Transform pos: -18.5,-39.5 parent: 2 - - uid: 11661 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -18.5,-36.5 - parent: 2 - uid: 11662 components: - type: Transform - rot: 3.141592653589793 rad - pos: -17.5,-36.5 + pos: 8.5,-31.5 parent: 2 - uid: 11663 components: @@ -79581,11 +80194,31 @@ entities: - type: Transform pos: 34.5,-15.5 parent: 2 + - uid: 12217 + components: + - type: Transform + pos: -27.5,-30.5 + parent: 2 + - uid: 12218 + components: + - type: Transform + pos: -27.5,-31.5 + parent: 2 - uid: 14815 components: - type: Transform pos: 73.5,-23.5 parent: 2 + - uid: 15655 + components: + - type: Transform + pos: -26.5,-32.5 + parent: 2 + - uid: 15656 + components: + - type: Transform + pos: -24.5,-32.5 + parent: 2 - proto: ShuttersWindowOpen entities: - uid: 5865 @@ -79765,14 +80398,6 @@ entities: parent: 2 - type: DeviceLinkSource linkedPorts: - 11662: - - Pressed: Close - - Pressed: Open - - Pressed: Toggle - 11661: - - Pressed: Close - - Pressed: Open - - Pressed: Toggle 11646: - Pressed: Open - Pressed: Close @@ -82083,15 +82708,15 @@ entities: - type: Transform pos: -9.5,-9.5 parent: 2 - - uid: 11986 + - uid: 11987 components: - type: Transform - pos: -13.5,-4.5 + pos: -1.5,-11.5 parent: 2 - - uid: 11987 + - uid: 15579 components: - type: Transform - pos: -1.5,-11.5 + pos: -13.5,-5.5 parent: 2 - proto: SpawnPointChemist entities: @@ -82300,6 +82925,11 @@ entities: - type: Transform pos: -46.5,8.5 parent: 2 + - uid: 15588 + components: + - type: Transform + pos: 39.5,0.5 + parent: 2 - proto: SpawnPointMartialArtist entities: - uid: 12019 @@ -82329,11 +82959,6 @@ entities: - type: Transform pos: -0.5,-40.5 parent: 2 - - uid: 12025 - components: - - type: Transform - pos: 0.5,-31.5 - parent: 2 - uid: 12026 components: - type: Transform @@ -82359,6 +82984,11 @@ entities: - type: Transform pos: 10.5,-36.5 parent: 2 + - uid: 12220 + components: + - type: Transform + pos: 0.5,-31.5 + parent: 2 - proto: SpawnPointMedicalIntern entities: - uid: 12031 @@ -82456,11 +83086,6 @@ entities: - type: Transform pos: -7.5,-22.5 parent: 2 - - uid: 12047 - components: - - type: Transform - pos: -9.5,-22.5 - parent: 2 - uid: 12048 components: - type: Transform @@ -82561,6 +83186,11 @@ entities: - type: Transform pos: 8.5,15.5 parent: 2 + - uid: 12248 + components: + - type: Transform + pos: -9.5,-22.5 + parent: 2 - proto: SpawnPointPrisoner entities: - uid: 12069 @@ -82568,7 +83198,7 @@ entities: - type: Transform pos: 37.5,0.5 parent: 2 - - uid: 15486 + - uid: 12221 components: - type: Transform pos: 47.5,-7.5 @@ -82896,15 +83526,15 @@ entities: - type: Transform pos: -29.5,-30.5 parent: 2 - - uid: 12125 + - uid: 12126 components: - type: Transform - pos: -38.5,-27.5 + pos: -39.5,-30.5 parent: 2 - - uid: 12126 + - uid: 12252 components: - type: Transform - pos: -39.5,-30.5 + pos: -38.5,-27.5 parent: 2 - proto: SpawnPointWarden entities: @@ -83469,70 +84099,103 @@ entities: parent: 2 - proto: SurveillanceCameraCommand entities: - - uid: 12215 + - uid: 11271 components: - type: Transform - pos: 13.5,-34.5 + rot: -1.5707963267948966 rad + pos: 37.5,-34.5 parent: 2 - type: SurveillanceCamera setupAvailableNetworks: - SurveillanceCameraCommand nameSet: True - id: Chief medical's quarters - - uid: 12216 + id: Vault + - uid: 11274 + components: + - type: Transform + pos: 45.5,-37.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: Control Room + - uid: 11545 components: - type: Transform rot: -1.5707963267948966 rad - pos: 25.5,-38.5 + pos: -38.5,-49.5 parent: 2 - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand nameSet: True - id: Chief Justice's quarters - - uid: 12217 + id: Telecommunications Servers + - uid: 12222 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 50.5,-28.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: Bridge Substation + - uid: 12225 components: - type: Transform rot: 3.141592653589793 rad - pos: 51.5,-38.5 + pos: 28.5,-36.5 parent: 2 - type: SurveillanceCamera setupAvailableNetworks: - SurveillanceCameraCommand nameSet: True - id: Command Bar - - uid: 12218 + id: Chief Justice's Office + - uid: 12226 components: - type: Transform - pos: 51.5,-36.5 + pos: 53.5,-36.5 parent: 2 - type: SurveillanceCamera setupAvailableNetworks: - SurveillanceCameraCommand nameSet: True - id: Conference Room - - uid: 12219 + id: Meeting Room + - uid: 12227 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 42.5,-36.5 + pos: 43.5,-29.5 parent: 2 - - type: DeviceNetwork - type: SurveillanceCamera setupAvailableNetworks: - SurveillanceCameraCommand nameSet: True - id: Bridge - - uid: 12220 + id: Bridge Entrance + - uid: 12228 components: - type: Transform rot: 3.141592653589793 rad - pos: 40.5,-33.5 + pos: 51.5,-38.5 parent: 2 - type: SurveillanceCamera setupAvailableNetworks: - SurveillanceCameraCommand nameSet: True - id: Vault - - uid: 12221 + id: Bridge Bar + - uid: 12229 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 58.5,-44.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: Command EVA + - uid: 12230 components: - type: Transform pos: 37.5,-31.5 @@ -83541,108 +84204,159 @@ entities: setupAvailableNetworks: - SurveillanceCameraCommand nameSet: True - id: captain's quarters - - uid: 12222 + id: Captain's Room + - uid: 12234 components: - type: Transform rot: 1.5707963267948966 rad - pos: 50.5,-28.5 + pos: 72.5,-23.5 parent: 2 - type: SurveillanceCamera setupAvailableNetworks: - SurveillanceCameraCommand nameSet: True - id: Substation - - uid: 12223 + id: AI Chamber + - uid: 12236 components: - type: Transform - rot: 3.141592653589793 rad - pos: -24.5,-29.5 + pos: 62.5,-29.5 parent: 2 - type: SurveillanceCamera setupAvailableNetworks: - SurveillanceCameraCommand nameSet: True - id: CE's quarters - - uid: 12224 + id: AI Upload + - uid: 12238 components: - type: Transform - pos: -27.5,-39.5 + pos: 64.5,-20.5 parent: 2 - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand nameSet: True - id: Gravity Generator - - uid: 12225 + id: Camera Routers + - uid: 12239 components: - type: Transform rot: 1.5707963267948966 rad - pos: -55.5,-44.5 + pos: 65.5,-22.5 parent: 2 - - uid: 14921 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: AI Satellite Entrance + - uid: 12240 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 72.5,-22.5 + rot: 3.141592653589793 rad + pos: 70.5,-19.5 parent: 2 - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand nameSet: True - id: AI Core - - uid: 14922 + id: AI Room North + - uid: 14925 components: - type: Transform rot: 1.5707963267948966 rad - pos: 69.5,-23.5 + pos: 59.5,-24.5 parent: 2 - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand nameSet: True - id: AI Core Secondary Camera - - uid: 14923 + id: AI Satellite Outside + - uid: 15590 components: - type: Transform - pos: 62.5,-29.5 + pos: 70.5,-27.5 parent: 2 - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand nameSet: True - id: AI Upload Room - - uid: 14924 + id: AI Room South + - uid: 15591 components: - type: Transform rot: 3.141592653589793 rad - pos: 64.5,-17.5 + pos: -19.5,-16.5 parent: 2 - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand nameSet: True - id: Camera Servers Room - - uid: 14925 + id: Head of Personnel's Office +- proto: SurveillanceCameraEngineering + entities: + - uid: 12223 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 59.5,-24.5 + rot: 3.141592653589793 rad + pos: -28.5,-25.5 parent: 2 - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering nameSet: True - id: AI Satellite Outer Camera - - uid: 14926 + id: Locker Room + - uid: 12231 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -24.5,-29.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Chief Engineer's Office + - uid: 12232 + components: + - type: Transform + pos: -25.5,-39.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Gravity Generator + - uid: 12233 components: - type: Transform rot: 1.5707963267948966 rad - pos: 65.5,-22.5 + pos: -55.5,-44.5 parent: 2 - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering nameSet: True - id: AI Satellite Lobby - - uid: 14927 + id: Station Anchor + - uid: 12235 components: - type: Transform rot: 3.141592653589793 rad - pos: 74.5,-21.5 + pos: 27.5,-47.5 parent: 2 - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering nameSet: True - id: AI Core Tertiary Camera -- proto: SurveillanceCameraEngineering - entities: - - uid: 12226 + id: South Solars Outside + - uid: 12237 + components: + - type: Transform + pos: -19.5,7.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: North Solars Outside + - uid: 12241 components: - type: Transform rot: -1.5707963267948966 rad @@ -83652,30 +84366,30 @@ entities: setupAvailableNetworks: - SurveillanceCameraEngineering nameSet: True - id: TEG - - uid: 12227 + id: TEG West + - uid: 12242 components: - type: Transform rot: 3.141592653589793 rad - pos: -43.5,-29.5 + pos: -45.5,-29.5 parent: 2 - type: SurveillanceCamera setupAvailableNetworks: - SurveillanceCameraEngineering nameSet: True - id: Atmosian's office - - uid: 12228 + id: Atmosian Locker Room + - uid: 12243 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -35.5,-34.5 + rot: 3.141592653589793 rad + pos: -32.5,-29.5 parent: 2 - type: SurveillanceCamera setupAvailableNetworks: - SurveillanceCameraEngineering nameSet: True - id: AME - - uid: 12229 + id: Main Power + - uid: 12244 components: - type: Transform pos: -23.5,-27.5 @@ -83684,30 +84398,30 @@ entities: setupAvailableNetworks: - SurveillanceCameraEngineering nameSet: True - id: front desk - - uid: 12230 + id: Front Desk + - uid: 12245 components: - type: Transform - rot: 3.141592653589793 rad - pos: -41.5,-35.5 + rot: 1.5707963267948966 rad + pos: -40.5,-46.5 parent: 2 - type: SurveillanceCamera setupAvailableNetworks: - SurveillanceCameraEngineering nameSet: True - id: atmospherics north - - uid: 12231 + id: Atmos South + - uid: 12246 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -40.5,-46.5 + rot: 3.141592653589793 rad + pos: -41.5,-35.5 parent: 2 - type: SurveillanceCamera setupAvailableNetworks: - SurveillanceCameraEngineering nameSet: True - id: atmospherics south - - uid: 12232 + id: Atmos North + - uid: 12247 components: - type: Transform rot: 3.141592653589793 rad @@ -83717,8 +84431,8 @@ entities: setupAvailableNetworks: - SurveillanceCameraEngineering nameSet: True - id: atmospherics mix - - uid: 12233 + id: Atmos West + - uid: 12249 components: - type: Transform rot: -1.5707963267948966 rad @@ -83728,8 +84442,8 @@ entities: setupAvailableNetworks: - SurveillanceCameraEngineering nameSet: True - id: canisters - - uid: 12234 + id: Canister Storage + - uid: 12250 components: - type: Transform rot: 3.141592653589793 rad @@ -83739,92 +84453,116 @@ entities: setupAvailableNetworks: - SurveillanceCameraEngineering nameSet: True - id: south solar in - - uid: 12235 + id: South Solars + - uid: 12253 components: - type: Transform - rot: 3.141592653589793 rad - pos: 27.5,-47.5 + rot: 1.5707963267948966 rad + pos: -50.5,-31.5 parent: 2 - type: SurveillanceCamera setupAvailableNetworks: - SurveillanceCameraEngineering nameSet: True - id: south solar out - - uid: 12236 + id: TEG East + - uid: 15592 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -20.5,3.5 + rot: 3.141592653589793 rad + pos: -44.5,-24.5 parent: 2 - type: SurveillanceCamera setupAvailableNetworks: - SurveillanceCameraEngineering nameSet: True - id: north solar in - - uid: 12237 + id: Break Room + - uid: 15593 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -23.5,9.5 + rot: 3.141592653589793 rad + pos: -39.5,-25.5 parent: 2 - type: SurveillanceCamera setupAvailableNetworks: - SurveillanceCameraEngineering nameSet: True - id: north solar out - - uid: 12238 + id: Main Entrance + - uid: 15594 components: - type: Transform - pos: -38.5,-27.5 + pos: -31.5,-40.5 parent: 2 - type: SurveillanceCamera setupAvailableNetworks: - SurveillanceCameraEngineering nameSet: True - id: Front of engineering - - uid: 12239 + id: AME + - uid: 15595 components: - type: Transform rot: -1.5707963267948966 rad - pos: -38.5,-49.5 + pos: -34.5,-46.5 parent: 2 - type: SurveillanceCamera setupAvailableNetworks: - SurveillanceCameraEngineering nameSet: True - id: Telecomms + id: Telecom Hallway + - uid: 15609 + components: + - type: Transform + pos: -23.5,2.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: North Solars - proto: SurveillanceCameraGeneral entities: - - uid: 12240 + - uid: 12255 components: - type: Transform pos: -25.5,-1.5 parent: 2 - - uid: 12241 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Library/North Solars Hallway + - uid: 12256 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -5.5,-40.5 + rot: 1.5707963267948966 rad + pos: -3.5,-34.5 parent: 2 - - uid: 12242 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Medical/Logistics Hallway + - uid: 12257 components: - type: Transform - rot: 3.141592653589793 rad - pos: 42.5,-21.5 + pos: 44.5,-25.5 parent: 2 - type: SurveillanceCamera setupAvailableNetworks: - SurveillanceCameraGeneral nameSet: True - id: Bridge's front - - uid: 12243 + id: Bridge Hallway + - uid: 12258 components: - type: Transform rot: 3.141592653589793 rad pos: 31.5,-22.5 parent: 2 - - uid: 12244 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Security/Court Hallway + - uid: 12259 components: - type: Transform rot: 3.141592653589793 rad @@ -83834,18 +84572,19 @@ entities: setupAvailableNetworks: - SurveillanceCameraGeneral nameSet: True - id: arrivals west - - uid: 12245 + id: Main/Prosecuter/Dojo T-Section + - uid: 12260 components: - type: Transform - pos: -40.5,-1.5 + rot: 3.141592653589793 rad + pos: -38.5,-0.5 parent: 2 - type: SurveillanceCamera setupAvailableNetworks: - SurveillanceCameraGeneral nameSet: True - id: dorms north - - uid: 12246 + id: Epistemics Hallway + - uid: 12261 components: - type: Transform pos: -29.5,-23.5 @@ -83854,8 +84593,8 @@ entities: setupAvailableNetworks: - SurveillanceCameraGeneral nameSet: True - id: chapel - - uid: 12247 + id: Engineering Hallway + - uid: 12262 components: - type: Transform rot: 1.5707963267948966 rad @@ -83865,144 +84604,193 @@ entities: setupAvailableNetworks: - SurveillanceCameraGeneral nameSet: True - id: HoP - - uid: 12248 + id: Cargo/Engineering Hallway + - uid: 12263 components: - type: Transform - pos: -9.5,-22.5 + rot: 3.141592653589793 rad + pos: -7.5,-11.5 parent: 2 - type: SurveillanceCamera setupAvailableNetworks: - SurveillanceCameraGeneral nameSet: True - id: center south - - uid: 12249 + id: Main Area North + - uid: 12264 components: - type: Transform rot: 3.141592653589793 rad - pos: -7.5,-11.5 + pos: 18.5,-22.5 parent: 2 - type: SurveillanceCamera setupAvailableNetworks: - SurveillanceCameraGeneral nameSet: True - id: center north - - uid: 12250 + id: Security/Psychologist T-Section + - uid: 12265 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 14.5,-11.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Security Hallway + - uid: 12266 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 14.5,2.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Security/Arrivals T-Section + - uid: 12267 components: - type: Transform rot: 3.141592653589793 rad - pos: 18.5,-22.5 + pos: 3.5,-22.5 parent: 2 - type: SurveillanceCamera setupAvailableNetworks: - SurveillanceCameraGeneral nameSet: True - id: courtroom front - - uid: 12251 + id: Medical/Service Hallway + - uid: 12269 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 11.5,-13.5 + pos: 9.5,13.5 parent: 2 - type: SurveillanceCamera setupAvailableNetworks: - SurveillanceCameraGeneral nameSet: True - id: security - - uid: 12252 + id: Arrivals + - uid: 12270 components: - type: Transform - pos: 11.5,-1.5 + rot: 3.141592653589793 rad + pos: 1.5,-47.5 parent: 2 - type: SurveillanceCamera setupAvailableNetworks: - SurveillanceCameraGeneral nameSet: True - id: arrivals east - - uid: 12253 + id: Evac + - uid: 12271 components: - type: Transform - pos: 7.5,13.5 + rot: 1.5707963267948966 rad + pos: 35.5,-30.5 parent: 2 - type: SurveillanceCamera setupAvailableNetworks: - SurveillanceCameraGeneral nameSet: True - id: dock north - - uid: 12254 + id: Court East Hallway + - uid: 12272 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 29.5,14.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Cryogenics + - uid: 12273 components: - type: Transform rot: 3.141592653589793 rad - pos: 1.5,-22.5 + pos: 19.5,16.5 parent: 2 - type: SurveillanceCamera setupAvailableNetworks: - SurveillanceCameraGeneral nameSet: True - id: medical - - uid: 12255 + id: Dorms + - uid: 15707 components: - type: Transform - pos: 19.5,3.5 + rot: 3.141592653589793 rad + pos: 10.5,-47.5 parent: 2 - type: SurveillanceCamera setupAvailableNetworks: - SurveillanceCameraGeneral nameSet: True - id: arcade - - uid: 12256 + id: South Pods + - uid: 15708 components: - type: Transform - pos: 10.5,13.5 + pos: -0.5,13.5 parent: 2 - type: SurveillanceCamera setupAvailableNetworks: - SurveillanceCameraGeneral nameSet: True - id: Arrivals - - uid: 12257 + id: North Pods + - uid: 15709 + components: + - type: Transform + pos: -6.5,-48.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Evac Dining + - uid: 15710 components: - type: Transform rot: -1.5707963267948966 rad - pos: -3.5,-49.5 + pos: -39.5,-20.5 parent: 2 - type: SurveillanceCamera setupAvailableNetworks: - SurveillanceCameraGeneral nameSet: True - id: Evacuation - - uid: 12258 + id: Epistemics/Engineering Hallway + - uid: 15711 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 35.5,-30.5 + pos: -6.5,-22.5 parent: 2 - type: SurveillanceCamera setupAvailableNetworks: - SurveillanceCameraGeneral nameSet: True - id: Court/Vault's hallway - - uid: 12259 + id: Main Area South + - uid: 15712 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 29.5,14.5 + rot: -1.5707963267948966 rad + pos: 21.5,-34.5 parent: 2 - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral nameSet: True - id: Cryo - - uid: 12260 + id: Court West Hallway + - uid: 15713 components: - type: Transform rot: 3.141592653589793 rad - pos: 20.5,16.5 + pos: 27.5,-26.5 parent: 2 - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral nameSet: True - id: Dorms Hall + id: Court - proto: SurveillanceCameraMedical entities: - - uid: 12261 + - uid: 12274 components: - type: Transform rot: -1.5707963267948966 rad @@ -84012,8 +84800,8 @@ entities: setupAvailableNetworks: - SurveillanceCameraMedical nameSet: True - id: Cryo room - - uid: 12262 + id: Cryogenics + - uid: 12275 components: - type: Transform rot: -1.5707963267948966 rad @@ -84023,8 +84811,8 @@ entities: setupAvailableNetworks: - SurveillanceCameraMedical nameSet: True - id: Psychologist's front - - uid: 12263 + id: Psychologist Office + - uid: 12276 components: - type: Transform rot: 3.141592653589793 rad @@ -84034,19 +84822,19 @@ entities: setupAvailableNetworks: - SurveillanceCameraMedical nameSet: True - id: Surgery room - - uid: 12264 + id: Surgery + - uid: 12277 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 2.5,-35.5 + rot: 3.141592653589793 rad + pos: 4.5,-31.5 parent: 2 - type: SurveillanceCamera setupAvailableNetworks: - SurveillanceCameraMedical nameSet: True - id: Treatment - - uid: 12265 + id: Medbay + - uid: 12278 components: - type: Transform rot: 3.141592653589793 rad @@ -84057,84 +84845,163 @@ entities: - SurveillanceCameraMedical nameSet: True id: Chemistry + - uid: 15676 + components: + - type: Transform + pos: 11.5,-34.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: Chief Medical Officer's Office + - uid: 15677 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,-37.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: Locker Room + - uid: 15678 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,-31.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: Front Desk West + - uid: 15683 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,-35.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: Virology + - uid: 15684 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,-27.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: Front Desk North + - uid: 15685 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,-39.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: Cloning + - uid: 15686 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 10.5,-40.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: Morgue - proto: SurveillanceCameraRouterCommand entities: - - uid: 14683 + - uid: 12279 components: - type: Transform pos: 65.5,-18.5 parent: 2 - - type: DeviceNetwork - proto: SurveillanceCameraRouterEngineering entities: - - uid: 14680 + - uid: 12284 components: - type: Transform pos: 61.5,-18.5 parent: 2 - - type: DeviceNetwork - proto: SurveillanceCameraRouterGeneral entities: - - uid: 14681 + - uid: 12280 components: - type: Transform - pos: 62.5,-17.5 + pos: 64.5,-17.5 parent: 2 - - type: DeviceNetwork - proto: SurveillanceCameraRouterMedical entities: - - uid: 14684 + - uid: 12282 components: - type: Transform pos: 65.5,-19.5 parent: 2 - - type: DeviceNetwork - proto: SurveillanceCameraRouterScience entities: - - uid: 14685 + - uid: 12286 components: - type: Transform pos: 65.5,-20.5 parent: 2 - - type: DeviceNetwork - proto: SurveillanceCameraRouterSecurity entities: - - uid: 14679 + - uid: 12283 components: - type: Transform pos: 61.5,-20.5 parent: 2 - - type: DeviceNetwork - proto: SurveillanceCameraRouterService entities: - - uid: 14682 + - uid: 12281 components: - type: Transform - pos: 64.5,-17.5 + pos: 62.5,-17.5 parent: 2 - - type: DeviceNetwork - proto: SurveillanceCameraRouterSupply entities: - - uid: 14678 + - uid: 12285 components: - type: Transform pos: 61.5,-19.5 parent: 2 - - type: DeviceNetwork - proto: SurveillanceCameraScience entities: - - uid: 12266 + - uid: 11321 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -50.5,-16.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraScience + nameSet: True + id: Roboticist Surgery + - uid: 12287 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -42.5,-16.5 + rot: -1.5707963267948966 rad + pos: -46.5,-15.5 parent: 2 - type: SurveillanceCamera setupAvailableNetworks: - SurveillanceCameraScience nameSet: True - id: Robotics - - uid: 12267 + id: Roboticist + - uid: 12288 components: - type: Transform rot: 1.5707963267948966 rad @@ -84144,81 +85011,119 @@ entities: setupAvailableNetworks: - SurveillanceCameraScience nameSet: True - id: forensic mantis - - uid: 12268 + id: Psionic Mantis' Office + - uid: 12289 components: - type: Transform pos: -51.5,-14.5 parent: 2 - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraScience nameSet: True id: Mystagogue's Office - - uid: 12269 + - uid: 12290 components: - type: Transform rot: 1.5707963267948966 rad pos: -48.5,0.5 parent: 2 - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraScience nameSet: True - id: Epistemics Arti-Lab - - uid: 12270 + id: Artifact Research + - uid: 12291 components: - type: Transform rot: -1.5707963267948966 rad - pos: -43.5,-3.5 + pos: -43.5,-6.5 parent: 2 - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraScience nameSet: True - id: Epistemics Front - - uid: 12271 + id: Front Desk + - uid: 12292 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -45.5,-8.5 + rot: -1.5707963267948966 rad + pos: -46.5,-8.5 parent: 2 - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraScience nameSet: True - id: Epistemics Hall - - uid: 12272 + id: Hallway + - uid: 12293 components: - type: Transform rot: 3.141592653589793 rad - pos: -24.5,-13.5 + pos: -25.5,-13.5 parent: 2 - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraScience nameSet: True id: Chapel - - uid: 12273 + - uid: 12295 components: - type: Transform rot: -1.5707963267948966 rad pos: -38.5,4.5 parent: 2 - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraScience nameSet: True - id: Anomaly Lab - - uid: 12274 + id: Anomaly Research + - uid: 12296 components: - type: Transform rot: 3.141592653589793 rad pos: -44.5,2.5 parent: 2 - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraScience nameSet: True - id: Gas Can Closet - - uid: 12275 + id: Canister Storage + - uid: 12297 components: - type: Transform rot: 3.141592653589793 rad pos: -49.5,-6.5 parent: 2 - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraScience nameSet: True - id: Prober + id: Lockers & Prober - proto: SurveillanceCameraSecurity entities: - - uid: 12276 + - uid: 286 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 31.5,3.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Head of Security's Office + - uid: 12294 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,-7.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Prison EVA + - uid: 12298 components: - type: Transform rot: 3.141592653589793 rad @@ -84228,52 +85133,51 @@ entities: setupAvailableNetworks: - SurveillanceCameraSecurity nameSet: True - id: Warden - - uid: 12277 + id: Warden's Office + - uid: 12299 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 29.5,-7.5 + rot: 3.141592653589793 rad + pos: 32.5,-6.5 parent: 2 - type: SurveillanceCamera setupAvailableNetworks: - SurveillanceCameraSecurity nameSet: True - id: Armoury - - uid: 12278 + id: Armory + - uid: 12300 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 42.5,-8.5 + pos: 47.5,-7.5 parent: 2 - type: SurveillanceCamera setupAvailableNetworks: - SurveillanceCameraSecurity nameSet: True - id: Prison bedroom 2 - - uid: 12279 + id: Perma Cell 3 + - uid: 12301 components: - type: Transform rot: -1.5707963267948966 rad - pos: 42.5,-11.5 + pos: 42.5,-10.5 parent: 2 - type: SurveillanceCamera setupAvailableNetworks: - SurveillanceCameraSecurity nameSet: True - id: Prison bedroom 1 - - uid: 12280 + id: Perma Cells + - uid: 12302 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 19.5,-0.5 + rot: -1.5707963267948966 rad + pos: 16.5,-1.5 parent: 2 - type: SurveillanceCamera setupAvailableNetworks: - SurveillanceCameraSecurity nameSet: True - id: Corpsman's office - - uid: 12281 + id: Corpsman's Medbay + - uid: 12303 components: - type: Transform pos: 31.5,-34.5 @@ -84282,19 +85186,19 @@ entities: setupAvailableNetworks: - SurveillanceCameraSecurity nameSet: True - id: Court - - uid: 12282 + id: Courtroom + - uid: 12304 components: - type: Transform rot: 3.141592653589793 rad - pos: -10.5,5.5 + pos: -9.5,5.5 parent: 2 - type: SurveillanceCamera setupAvailableNetworks: - SurveillanceCameraSecurity nameSet: True - id: Detective's office - - uid: 12283 + id: Prosecuter's Office + - uid: 12305 components: - type: Transform pos: 40.5,3.5 @@ -84303,127 +85207,203 @@ entities: setupAvailableNetworks: - SurveillanceCameraSecurity nameSet: True - id: perma chow - - uid: 12284 + id: Perma Kitchen/Dining + - uid: 12742 components: - type: Transform rot: -1.5707963267948966 rad - pos: 17.5,-39.5 + pos: 41.5,-1.5 parent: 2 - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity nameSet: True - id: Clerk's Office - - uid: 12285 + id: Perma Main + - uid: 14053 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 47.5,-4.5 + pos: 18.5,-20.5 parent: 2 - type: SurveillanceCamera setupAvailableNetworks: - SurveillanceCameraSecurity nameSet: True - id: Breakroom prison - - uid: 12286 + id: Front Desk + - uid: 14072 components: - type: Transform - pos: 41.5,-4.5 + rot: -1.5707963267948966 rad + pos: 29.5,-16.5 parent: 2 - type: SurveillanceCamera setupAvailableNetworks: - SurveillanceCameraSecurity nameSet: True - id: Main hall prison - - uid: 12287 + id: Second Entrance + - uid: 14678 components: - type: Transform rot: -1.5707963267948966 rad - pos: 16.5,-17.5 + pos: 37.5,-19.5 parent: 2 - type: SurveillanceCamera setupAvailableNetworks: - SurveillanceCameraSecurity nameSet: True - id: Front - - uid: 12288 + id: Interrogation + - uid: 14679 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 27.5,-11.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Main Area + - uid: 14680 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 21.5,-6.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Holding Cells + - uid: 14681 components: - type: Transform rot: 3.141592653589793 rad - pos: 32.5,-16.5 + pos: 27.5,0.5 parent: 2 - type: SurveillanceCamera setupAvailableNetworks: - SurveillanceCameraSecurity nameSet: True - id: Second Entrance - - uid: 12289 + id: Courtyard + - uid: 15578 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 37.5,-19.5 + rot: 3.141592653589793 rad + pos: 23.5,-16.5 parent: 2 - type: SurveillanceCamera setupAvailableNetworks: - SurveillanceCameraSecurity nameSet: True - id: Interogation - - uid: 12290 + id: Locker Room + - uid: 15581 components: - type: Transform - pos: 23.5,-14.5 + rot: 3.141592653589793 rad + pos: 16.5,-3.5 parent: 2 - type: SurveillanceCamera setupAvailableNetworks: - SurveillanceCameraSecurity nameSet: True - id: Main hall - - uid: 12291 + id: Holding Cell 3 + - uid: 15582 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 21.5,-6.5 + rot: 3.141592653589793 rad + pos: 16.5,-6.5 parent: 2 - type: SurveillanceCamera setupAvailableNetworks: - SurveillanceCameraSecurity nameSet: True - id: Temporary prison - - uid: 12292 + id: Holding Cell 2 + - uid: 15583 components: - type: Transform rot: 3.141592653589793 rad - pos: 27.5,0.5 + pos: 16.5,-9.5 parent: 2 - type: SurveillanceCamera setupAvailableNetworks: - SurveillanceCameraSecurity nameSet: True - id: Second inner hall - - uid: 12293 + id: Holding Cell 1 + - uid: 15584 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 35.5,0.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Detective's Office + - uid: 15585 components: - type: Transform rot: 3.141592653589793 rad - pos: 31.5,5.5 + pos: 18.5,-12.5 parent: 2 - type: SurveillanceCamera setupAvailableNetworks: - SurveillanceCameraSecurity nameSet: True - id: HoS's Office - - uid: 12294 + id: Waiting Lounge + - uid: 15586 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 37.5,-7.5 + pos: 47.5,-10.5 parent: 2 - type: SurveillanceCamera setupAvailableNetworks: - SurveillanceCameraSecurity nameSet: True - id: Prison EVA + id: Perma Cell 2 + - uid: 15587 + components: + - type: Transform + pos: 47.5,-13.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Perma Cell 1 - proto: SurveillanceCameraService entities: - - uid: 12295 + - uid: 12268 + components: + - type: Transform + pos: 19.5,3.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraService + nameSet: True + id: Arcade + - uid: 12306 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 17.5,-37.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraService + nameSet: True + id: Clerk's Office + - uid: 12313 + components: + - type: Transform + pos: 50.5,-4.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraService + nameSet: True + id: Perma Common Room + - uid: 14683 components: - type: Transform rot: 1.5707963267948966 rad @@ -84433,8 +85413,8 @@ entities: setupAvailableNetworks: - SurveillanceCameraService nameSet: True - id: kitchen - - uid: 12296 + id: Kitchen + - uid: 14684 components: - type: Transform rot: 1.5707963267948966 rad @@ -84444,75 +85424,138 @@ entities: setupAvailableNetworks: - SurveillanceCameraService nameSet: True - id: storage - - uid: 12297 + id: Service Tools + - uid: 14685 components: - type: Transform rot: -1.5707963267948966 rad pos: 7.5,6.5 parent: 2 - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraService nameSet: True - id: Lawyer Office - - uid: 12298 + id: Attorney's Office + - uid: 14701 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -31.5,-6.5 + rot: 3.141592653589793 rad + pos: -29.5,-3.5 parent: 2 - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraService nameSet: True id: Library - - uid: 12299 + - uid: 14702 components: - type: Transform rot: 3.141592653589793 rad - pos: 5.5,8.5 + pos: 1.5,8.5 parent: 2 - type: SurveillanceCamera setupAvailableNetworks: - SurveillanceCameraService nameSet: True id: Dojo - - uid: 12300 + - uid: 14705 components: - type: Transform - pos: -21.5,-8.5 + pos: -16.5,-8.5 parent: 2 - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraService nameSet: True - id: Botany - - uid: 12301 + id: Hydroponics + - uid: 14748 components: - type: Transform rot: 3.141592653589793 rad pos: -32.5,-17.5 parent: 2 - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraService nameSet: True id: Reporter's Office - - uid: 12302 + - uid: 14836 components: - type: Transform rot: 1.5707963267948966 rad pos: 5.5,-9.5 parent: 2 - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraService + nameSet: True + id: Bar + - uid: 15621 + components: + - type: Transform + pos: -13.5,-5.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraService + nameSet: True + id: Freezer + - uid: 15624 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,-40.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraService + nameSet: True + id: South Bar/Kitchen + - uid: 15625 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,-18.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraService + nameSet: True + id: Clown/Mime + - uid: 15628 + components: + - type: Transform + pos: -40.5,7.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraService nameSet: True - id: bar + id: Disposals - proto: SurveillanceCameraSupply entities: - - uid: 12303 + - uid: 12025 components: - type: Transform - pos: -9.5,-27.5 + rot: 3.141592653589793 rad + pos: -16.5,-37.5 parent: 2 - type: SurveillanceCamera setupAvailableNetworks: - SurveillanceCameraSupply nameSet: True - id: Logistic's Reception - - uid: 12304 + id: Logistic Officer's Office + - uid: 14921 + components: + - type: Transform + pos: -13.5,-27.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSupply + nameSet: True + id: Front Desk + - uid: 14923 components: - type: Transform rot: 1.5707963267948966 rad @@ -84522,19 +85565,19 @@ entities: setupAvailableNetworks: - SurveillanceCameraSupply nameSet: True - id: Main room - - uid: 12305 + id: Cargo Bay + - uid: 14924 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -18.5,-33.5 + rot: 3.141592653589793 rad + pos: -15.5,-32.5 parent: 2 - type: SurveillanceCamera setupAvailableNetworks: - SurveillanceCameraSupply nameSet: True - id: Salvage - - uid: 12306 + id: Salvage's Room + - uid: 14926 components: - type: Transform rot: 1.5707963267948966 rad @@ -84544,7 +85587,39 @@ entities: setupAvailableNetworks: - SurveillanceCameraSupply nameSet: True - id: Loading bay + id: Loading Bay + - uid: 15570 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -29.5,-42.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSupply + nameSet: True + id: Salvage Deck North + - uid: 15654 + components: + - type: Transform + pos: -8.5,-27.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSupply + nameSet: True + id: Mailing + - uid: 15669 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -29.5,-67.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSupply + nameSet: True + id: Salvage Deck South - proto: SurveillanceCameraWirelessRouterEntertainment entities: - uid: 12307 @@ -84552,6 +85627,16 @@ entities: - type: Transform pos: -34.5,-17.5 parent: 2 +- proto: SurveillanceWirelessCameraAnchoredConstructed + entities: + - uid: 15600 + components: + - type: Transform + pos: 29.5,-28.5 + parent: 2 + - type: SurveillanceCamera + nameSet: True + id: Courtroom - proto: SurveillanceWirelessCameraMovableEntertainment entities: - uid: 12308 @@ -84560,6 +85645,9 @@ entities: rot: 3.141592653589793 rad pos: -33.5,-19.5 parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEntertainment - uid: 12309 components: - type: Transform @@ -84586,13 +85674,6 @@ entities: rot: 3.141592653589793 rad pos: -49.412476,7.484777 parent: 2 -- proto: SyringeInaprovaline - entities: - - uid: 12313 - components: - - type: Transform - pos: 16.439304,-1.2342451 - parent: 2 - proto: SyringeSaline entities: - uid: 12314 @@ -84874,6 +85955,13 @@ entities: - type: Transform pos: 72.5,-27.5 parent: 2 +- proto: TableBrass + entities: + - uid: 15599 + components: + - type: Transform + pos: 29.5,-28.5 + parent: 2 - proto: TableCarpet entities: - uid: 12362 @@ -85244,6 +86332,14 @@ entities: rot: -1.5707963267948966 rad pos: 51.5,-42.5 parent: 2 +- proto: TableFancyBlack + entities: + - uid: 15108 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 62.5,-18.5 + parent: 2 - proto: TableFancyBlue entities: - uid: 12482 @@ -85781,16 +86877,6 @@ entities: rot: 3.141592653589793 rad pos: -50.5,-14.5 parent: 2 - - uid: 14701 - components: - - type: Transform - pos: 62.5,-18.5 - parent: 2 - - uid: 14702 - components: - - type: Transform - pos: 64.5,-18.5 - parent: 2 - uid: 14719 components: - type: Transform @@ -85917,6 +87003,22 @@ entities: rot: 3.141592653589793 rad pos: -12.5,-11.5 parent: 2 + - uid: 15486 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 64.5,-18.5 + parent: 2 + - uid: 15622 + components: + - type: Transform + pos: 25.5,12.5 + parent: 2 + - uid: 15623 + components: + - type: Transform + pos: 29.5,12.5 + parent: 2 - proto: TableStone entities: - uid: 12549 @@ -87242,6 +88344,11 @@ entities: - type: Transform pos: 64.484375,-29.133057 parent: 2 + - uid: 15653 + components: + - type: Transform + pos: -19.633802,-16.123617 + parent: 2 - proto: ToyAi entities: - uid: 14758 @@ -87452,10 +88559,11 @@ entities: parent: 2 - proto: TrialTimer entities: - - uid: 12742 + - uid: 15541 components: - type: Transform - pos: 28.5,-34.5 + rot: -1.5707963267948966 rad + pos: 28.5,-32.5 parent: 2 - proto: TwoWayLever entities: @@ -87670,11 +88778,6 @@ entities: parent: 2 - proto: VendingMachineBooze entities: - - uid: 4131 - components: - - type: Transform - pos: 51.5,-45.5 - parent: 2 - uid: 12755 components: - type: Transform @@ -87685,6 +88788,13 @@ entities: - type: Transform pos: -7.5,7.5 parent: 2 +- proto: VendingMachineBoozeUnlocked + entities: + - uid: 4131 + components: + - type: Transform + pos: 51.5,-45.5 + parent: 2 - proto: VendingMachineBoxingDrobe entities: - uid: 12757 @@ -88220,6 +89330,24 @@ entities: parent: 2 - proto: WallReinforced entities: + - uid: 5155 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 35.5,-34.5 + parent: 2 + - uid: 5383 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 35.5,-35.5 + parent: 2 + - uid: 6480 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 35.5,-33.5 + parent: 2 - uid: 6513 components: - type: Transform @@ -88286,6 +89414,28 @@ entities: rot: -1.5707963267948966 rad pos: 73.5,-29.5 parent: 2 + - uid: 9946 + components: + - type: Transform + pos: 11.5,-30.5 + parent: 2 + - uid: 9947 + components: + - type: Transform + pos: 9.5,-30.5 + parent: 2 + - uid: 10065 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -17.5,-36.5 + parent: 2 + - uid: 10252 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -18.5,-36.5 + parent: 2 - uid: 10804 components: - type: Transform @@ -88301,6 +89451,17 @@ entities: - type: Transform pos: 61.5,-48.5 parent: 2 + - uid: 11472 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -28.5,-67.5 + parent: 2 + - uid: 11486 + components: + - type: Transform + pos: 10.5,-30.5 + parent: 2 - uid: 12841 components: - type: Transform @@ -94400,6 +95561,19 @@ entities: - type: Transform pos: 40.5,-5.5 parent: 2 +- proto: WallReinforcedDiagonal + entities: + - uid: 5286 + components: + - type: Transform + pos: 35.5,-32.5 + parent: 2 + - uid: 15670 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 35.5,-36.5 + parent: 2 - proto: WallReinforcedRust entities: - uid: 13955 @@ -94420,6 +95594,12 @@ entities: rot: -1.5707963267948966 rad pos: 18.5,-40.5 parent: 2 + - uid: 6365 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 16.5,-27.5 + parent: 2 - uid: 13957 components: - type: Transform @@ -94906,12 +96086,6 @@ entities: rot: 3.141592653589793 rad pos: -25.5,-12.5 parent: 2 - - uid: 14053 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -31.5,-13.5 - parent: 2 - uid: 14054 components: - type: Transform @@ -95006,12 +96180,6 @@ entities: rot: 3.141592653589793 rad pos: -26.5,-12.5 parent: 2 - - uid: 14072 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -31.5,-15.5 - parent: 2 - uid: 14073 components: - type: Transform @@ -96571,6 +97739,18 @@ entities: rot: 3.141592653589793 rad pos: 16.5,13.5 parent: 2 + - uid: 15550 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -31.5,-15.5 + parent: 2 + - uid: 15559 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -31.5,-13.5 + parent: 2 - proto: WallSolidRust entities: - uid: 14384 @@ -97112,6 +98292,17 @@ entities: - type: Transform pos: 47.48172,-31.463963 parent: 2 +- proto: WeaponPistolN1984 + entities: + - uid: 15718 + components: + - type: MetaData + desc: A special sidearm of the Warden. Comes in .45 magnum, the lord's caliber. + - type: Transform + pos: 40.586254,-11.319298 + parent: 2 + - type: ChamberMagazineAmmoProvider + boltClosed: True - proto: WeaponRevolverSnub entities: - uid: 9901 @@ -98288,6 +99479,16 @@ entities: rot: -1.5707963267948966 rad pos: -29.5,-46.5 parent: 2 + - uid: 15714 + components: + - type: Transform + pos: 13.5,-24.5 + parent: 2 + - uid: 15715 + components: + - type: Transform + pos: 14.5,-24.5 + parent: 2 - proto: WindowTintedDirectional entities: - uid: 14641 @@ -98321,6 +99522,12 @@ entities: parent: 2 - proto: WoodDoor entities: + - uid: 260 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -27.5,-20.5 + parent: 2 - uid: 14645 components: - type: Transform From c025f80e6a6162c16ba21e4eb141cade1ad569ba Mon Sep 17 00:00:00 2001 From: Delta-V bot <135767721+DeltaV-Bot@users.noreply.github.com> Date: Wed, 13 Nov 2024 06:05:17 +0100 Subject: [PATCH 72/80] Automatic changelog update --- Resources/Changelog/DeltaVChangelog.yml | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/Resources/Changelog/DeltaVChangelog.yml b/Resources/Changelog/DeltaVChangelog.yml index 3c9d32e561f..b496e98d729 100644 --- a/Resources/Changelog/DeltaVChangelog.yml +++ b/Resources/Changelog/DeltaVChangelog.yml @@ -1,10 +1,4 @@ Entries: -- author: Adrian16199 - changes: - - message: Fixed non-wizden species not having markings. - type: Fix - id: 171 - time: '2023-12-17T21:59:15.0000000+00:00' - author: Adrian16199 changes: - message: Vulpkanins can sigh now. @@ -3729,3 +3723,10 @@ id: 670 time: '2024-11-12T06:21:28.0000000+00:00' url: https://github.com/DeltaV-Station/Delta-v/pull/2175 +- author: Unkn0wnGh0st333 + changes: + - message: Fixed Shoukou Freezer and Cameras + type: Tweak + id: 671 + time: '2024-11-13T05:04:58.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/2054 From 7510bc67c3dec74c27ba29a3c1fca743ca654d58 Mon Sep 17 00:00:00 2001 From: Colin-Tel <113523727+Colin-Tel@users.noreply.github.com> Date: Tue, 12 Nov 2024 23:19:51 -0600 Subject: [PATCH 73/80] Update chibi.yml (#2185) --- Resources/Maps/chibi.yml | 238 ++++++++++++++++++++++++--------------- 1 file changed, 150 insertions(+), 88 deletions(-) diff --git a/Resources/Maps/chibi.yml b/Resources/Maps/chibi.yml index 14209b5445a..154a03caf37 100644 --- a/Resources/Maps/chibi.yml +++ b/Resources/Maps/chibi.yml @@ -1210,7 +1210,8 @@ entities: 4,-2: 0: 58623 4,-1: - 0: 63231 + 0: 59135 + 3: 4096 -4,-2: 1: 35008 -3,-2: @@ -1227,9 +1228,9 @@ entities: -2,-3: 0: 4095 -2,-2: - 3: 17 + 4: 17 0: 61440 - 4: 68 + 5: 68 -2,-5: 1: 63740 -1,-4: @@ -1345,14 +1346,14 @@ entities: 1: 61440 0,-7: 1: 4383 - 5: 52224 + 6: 52224 -1,-8: 1: 32768 -1,-7: 1: 34952 0,-6: 1: 61713 - 5: 204 + 6: 204 -1,-6: 1: 65528 0,-5: @@ -1361,9 +1362,9 @@ entities: 1: 36864 1,-7: 1: 15 - 5: 30464 + 6: 30464 1,-6: - 5: 119 + 6: 119 1: 28672 1,-5: 1: 823 @@ -1496,6 +1497,21 @@ entities: - 0 - 0 - 0 + - volume: 2500 + temperature: 293.15 + moles: + - 21.6852 + - 81.57766 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 - volume: 2500 temperature: 293.15 moles: @@ -2089,11 +2105,6 @@ entities: - 2606 - proto: AirCanister entities: - - uid: 476 - components: - - type: Transform - pos: -6.5,-14.5 - parent: 2 - uid: 494 components: - type: Transform @@ -2904,7 +2915,7 @@ entities: - uid: 4130 components: - type: Transform - pos: 6.9053955,-13.725324 + pos: 6.9110007,-13.601992 parent: 2 - proto: AntiPsychicKnife entities: @@ -3327,14 +3338,6 @@ entities: - type: Transform pos: 0.09203553,9.5710945 parent: 2 -- proto: BaseGasCondenser - entities: - - uid: 3836 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -7.5,-12.5 - parent: 2 - proto: Beaker entities: - uid: 590 @@ -3440,6 +3443,13 @@ entities: - type: Transform pos: -0.7364657,15.77805 parent: 2 +- proto: Biogenerator + entities: + - uid: 1323 + components: + - type: Transform + pos: 4.5,1.5 + parent: 2 - proto: BiomassReclaimer entities: - uid: 369 @@ -3534,10 +3544,10 @@ entities: parent: 2 - proto: BookLeafLoversSecret entities: - - uid: 324 + - uid: 2645 components: - type: Transform - pos: 3.5369291,1.5679168 + pos: 6.515614,1.7625364 parent: 2 - proto: BookMedicalReferenceBook entities: @@ -9762,10 +9772,10 @@ entities: parent: 2 - proto: ClosetRadiationSuitFilled entities: - - uid: 2716 + - uid: 749 components: - type: Transform - pos: 7.5,-15.5 + pos: 7.5,-14.5 parent: 2 - proto: ClosetToolFilled entities: @@ -10122,6 +10132,18 @@ entities: rot: 3.141592653589793 rad pos: 16.5,11.5 parent: 2 +- proto: CondenserMachineCircuitBoard + entities: + - uid: 476 + components: + - type: Transform + pos: 18.350609,-1.3538277 + parent: 2 + - uid: 744 + components: + - type: Transform + pos: -5.5044107,-12.838328 + parent: 2 - proto: ConveyorBelt entities: - uid: 596 @@ -10411,14 +10433,11 @@ entities: parent: 2 - proto: CrewMonitoringServer entities: - - uid: 370 + - uid: 4105 components: - type: Transform - pos: 19.5,-4.5 + pos: 20.5,16.5 parent: 2 - - type: SingletonDeviceNetServer - active: False - available: False - proto: CryogenicSleepUnitSpawnerLateJoin entities: - uid: 133 @@ -11693,6 +11712,11 @@ entities: - type: Transform pos: 13.5,-25.5 parent: 2 + - uid: 742 + components: + - type: Transform + pos: 19.5,-4.5 + parent: 2 - uid: 1197 components: - type: Transform @@ -11708,11 +11732,6 @@ entities: - type: Transform pos: 12.5,13.5 parent: 2 - - uid: 4105 - components: - - type: Transform - pos: 16.5,0.5 - parent: 2 - proto: DonkpocketBoxSpawner entities: - uid: 1516 @@ -13600,6 +13619,13 @@ entities: - type: Transform pos: 30.484352,12.71384 parent: 2 +- proto: FrezonCanister + entities: + - uid: 4313 + components: + - type: Transform + pos: -7.5,-14.5 + parent: 2 - proto: GasAnalyzer entities: - uid: 367 @@ -13665,7 +13691,7 @@ entities: components: - type: Transform rot: -1.5707963267948966 rad - pos: 9.5,-23.5 + pos: 8.5,-23.5 parent: 2 - proto: GasMixerFlipped entities: @@ -14575,12 +14601,6 @@ entities: parent: 2 - type: AtmosPipeColor color: '#0000FFFF' - - uid: 744 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 8.5,-23.5 - parent: 2 - uid: 746 components: - type: Transform @@ -18430,17 +18450,6 @@ entities: parent: 2 - type: AtmosPipeColor color: '#FF0000FF' - - uid: 742 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 10.5,-23.5 - parent: 2 - - uid: 749 - components: - - type: Transform - pos: 9.5,-22.5 - parent: 2 - uid: 768 components: - type: Transform @@ -18459,6 +18468,12 @@ entities: rot: 1.5707963267948966 rad pos: 0.5,-23.5 parent: 2 + - uid: 4104 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,-23.5 + parent: 2 - uid: 4208 components: - type: Transform @@ -18467,6 +18482,11 @@ entities: parent: 2 - type: AtmosPipeColor color: '#FFAA00FF' + - uid: 4316 + components: + - type: Transform + pos: 8.5,-22.5 + parent: 2 - proto: GasPressurePump entities: - uid: 436 @@ -21302,6 +21322,33 @@ entities: - type: Transform pos: 22.403679,10.117976 parent: 2 +- proto: LauncherSyringe + entities: + - uid: 1423 + components: + - type: Transform + pos: 19.418198,1.2312825 + parent: 2 + - type: Storage + storedItems: + 2716: + position: 0,0 + _rotation: South + 3375: + position: 1,0 + _rotation: South + 3836: + position: 2,0 + _rotation: South + - type: ContainerContainer + containers: + storagebase: !type:Container + showEnts: False + occludes: True + ents: + - 2716 + - 3375 + - 3836 - proto: LockableButtonEngineering entities: - uid: 686 @@ -21416,8 +21463,8 @@ entities: immutable: False temperature: 293.14673 moles: - - 1.7459903 - - 6.568249 + - 1.8856695 + - 7.0937095 - 0 - 0 - 0 @@ -21434,9 +21481,9 @@ entities: showEnts: False occludes: True ents: - - 1507 - - 1206 - 1512 + - 1206 + - 1507 paper_label: !type:ContainerSlot showEnts: False occludes: True @@ -21496,13 +21543,6 @@ entities: - type: Transform pos: 28.5,6.5 parent: 2 -- proto: LockerFreezerVaultFilled - entities: - - uid: 1423 - components: - - type: Transform - pos: 20.5,16.5 - parent: 2 - proto: LockerHeadOfSecurityFilledHardsuit entities: - uid: 1482 @@ -21880,6 +21920,26 @@ entities: - type: Transform pos: 11.340396,-4.510086 parent: 2 +- proto: MiniSyringe + entities: + - uid: 2716 + components: + - type: Transform + parent: 1423 + - type: Physics + canCollide: False + - uid: 3375 + components: + - type: Transform + parent: 1423 + - type: Physics + canCollide: False + - uid: 3836 + components: + - type: Transform + parent: 1423 + - type: Physics + canCollide: False - proto: MopItem entities: - uid: 199 @@ -21945,6 +22005,16 @@ entities: parent: 2 - proto: OxygenCanister entities: + - uid: 110 + components: + - type: Transform + pos: 10.5,-25.5 + parent: 2 + - uid: 370 + components: + - type: Transform + pos: -6.5,-14.5 + parent: 2 - uid: 484 components: - type: Transform @@ -21960,11 +22030,6 @@ entities: - type: Transform pos: 32.5,-17.5 parent: 2 - - uid: 1323 - components: - - type: Transform - pos: 10.5,-25.5 - parent: 2 - uid: 1456 components: - type: Transform @@ -22847,11 +22912,6 @@ entities: - type: Transform pos: 22.5,16.5 parent: 2 - - uid: 2645 - components: - - type: Transform - pos: 3.5,1.5 - parent: 2 - uid: 4136 components: - type: Transform @@ -23652,6 +23712,13 @@ entities: - type: Transform pos: 7.5,-6.5 parent: 2 +- proto: ReverseEngineeringMachine + entities: + - uid: 576 + components: + - type: Transform + pos: 7.5,-15.5 + parent: 2 - proto: Roboisseur entities: - uid: 188 @@ -24043,10 +24110,10 @@ entities: parent: 2 - proto: SignChem entities: - - uid: 3375 + - uid: 4314 components: - type: Transform - pos: 19.5,-1.5 + pos: 20.5,-1.5 parent: 2 - proto: SignCryogenicsMed entities: @@ -24779,10 +24846,10 @@ entities: parent: 2 - proto: SpawnMobWalter entities: - - uid: 4104 + - uid: 4315 components: - type: Transform - pos: 16.5,0.5 + pos: 19.5,-4.5 parent: 2 - proto: SpawnPointAtmos entities: @@ -25163,11 +25230,6 @@ entities: parent: 2 - proto: StorageCanister entities: - - uid: 576 - components: - - type: Transform - pos: -7.5,-14.5 - parent: 2 - uid: 630 components: - type: Transform @@ -25275,7 +25337,7 @@ entities: - type: Transform pos: 26.5,-15.5 parent: 2 -- proto: SuitStorageSec +- proto: SuitStorageSecDeltaV entities: - uid: 1480 components: @@ -26010,7 +26072,7 @@ entities: - uid: 4102 components: - type: Transform - pos: 6.8071203,-14.810205 + pos: 6.5985007,-14.748621 parent: 2 - proto: TrashBag entities: @@ -26297,10 +26359,10 @@ entities: parent: 2 - proto: VendingMachineSeedsUnlocked entities: - - uid: 110 + - uid: 324 components: - type: Transform - pos: 4.5,1.5 + pos: 3.5,1.5 parent: 2 - proto: VendingMachineTankDispenserEVA entities: @@ -28966,7 +29028,7 @@ entities: - uid: 85 components: - type: Transform - pos: 3.4305947,1.6056892 + pos: 5.86946,-0.30139673 parent: 2 - uid: 366 components: From acb6bb8cb81f3a49d7b43e91b25cd88b052f3ef2 Mon Sep 17 00:00:00 2001 From: HawkeyeBlade Date: Wed, 13 Nov 2024 18:50:14 +0800 Subject: [PATCH 74/80] Buff Silvia Omnizine Regen (#2189) Update pets.yml Signed-off-by: HawkeyeBlade --- Resources/Prototypes/DeltaV/Entities/Mobs/NPCs/pets.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Prototypes/DeltaV/Entities/Mobs/NPCs/pets.yml b/Resources/Prototypes/DeltaV/Entities/Mobs/NPCs/pets.yml index fc796a9ae80..0cf1653737e 100644 --- a/Resources/Prototypes/DeltaV/Entities/Mobs/NPCs/pets.yml +++ b/Resources/Prototypes/DeltaV/Entities/Mobs/NPCs/pets.yml @@ -174,7 +174,7 @@ transferAmount: 6 #heals 24 burn/brute/air/toxin in 12seconds/minus 6 brute per bite - type: SolutionRegeneration solution: melee - duration: 30 #regen 1u every 30 seconds. 15 mins to full + duration: 15 #regen 1u every 15 seconds. 7.5 mins to full generated: reagents: - ReagentId: Omnizine From 3b954d13e3f203a542058bb5668d71396a1cf3fc Mon Sep 17 00:00:00 2001 From: Delta-V bot <135767721+DeltaV-Bot@users.noreply.github.com> Date: Wed, 13 Nov 2024 11:50:33 +0100 Subject: [PATCH 75/80] Automatic changelog update --- Resources/Changelog/DeltaVChangelog.yml | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/Resources/Changelog/DeltaVChangelog.yml b/Resources/Changelog/DeltaVChangelog.yml index b496e98d729..6c1af739691 100644 --- a/Resources/Changelog/DeltaVChangelog.yml +++ b/Resources/Changelog/DeltaVChangelog.yml @@ -1,10 +1,4 @@ Entries: -- author: Adrian16199 - changes: - - message: Vulpkanins can sigh now. - type: Add - id: 172 - time: '2023-12-17T22:00:12.0000000+00:00' - author: luringens changes: - message: Chaplain now gets a glimmer monitor app on their PDA like the rest of @@ -3730,3 +3724,10 @@ id: 671 time: '2024-11-13T05:04:58.0000000+00:00' url: https://github.com/DeltaV-Station/Delta-v/pull/2054 +- author: HawkeyeBlade + changes: + - message: Regeneration duraton 30 seconds > 15 seconds + type: Tweak + id: 672 + time: '2024-11-13T10:50:15.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/2189 From f580084e61c0248c23d0dfec5f26370700686987 Mon Sep 17 00:00:00 2001 From: Milon Date: Thu, 14 Nov 2024 15:28:08 +0100 Subject: [PATCH 76/80] stamina damage resist (#2190) * someone had to be brave enough to kill this * it's finally real * god himself couldn't fix this shit * :trollface: --- .../Weapons/Ranged/Systems/GunSystem.cs | 2 +- Content.Shared/Armor/ArmorComponent.cs | 31 ++++++ Content.Shared/Armor/SharedArmorSystem.cs | 29 +++++- .../Damage/Systems/StaminaSystem.cs | 6 +- .../DeltaV/Damage/StaminaSystem.Resist.cs | 99 +++++++++++++++++++ .../en-US/deltav/armor/armor-examine.ftl | 2 + .../Entities/Clothing/OuterClothing/armor.yml | 3 + .../Clothing/OuterClothing/hardsuits.yml | 4 + .../Entities/Clothing/OuterClothing/vests.yml | 1 + .../Entities/Clothing/OuterClothing/armor.yml | 4 + .../Clothing/OuterClothing/hardsuits.yml | 10 ++ .../Entities/Clothing/OuterClothing/vests.yml | 1 + 12 files changed, 185 insertions(+), 7 deletions(-) create mode 100644 Content.Shared/DeltaV/Damage/StaminaSystem.Resist.cs create mode 100644 Resources/Locale/en-US/deltav/armor/armor-examine.ftl diff --git a/Content.Server/Weapons/Ranged/Systems/GunSystem.cs b/Content.Server/Weapons/Ranged/Systems/GunSystem.cs index 701753a8ce2..fb111e11fe7 100644 --- a/Content.Server/Weapons/Ranged/Systems/GunSystem.cs +++ b/Content.Server/Weapons/Ranged/Systems/GunSystem.cs @@ -224,7 +224,7 @@ public override void Shoot(EntityUid gunUid, GunComponent gun, List<(EntityUid? { var hitEntity = lastHit.Value; if (hitscan.StaminaDamage > 0f) - _stamina.TakeStaminaDamage(hitEntity, hitscan.StaminaDamage, source: user); + _stamina.TakeProjectileStaminaDamage(hitEntity, hitscan.StaminaDamage, source: user); // DeltaV - Cope with hitscan not being an entity var dmg = hitscan.Damage; diff --git a/Content.Shared/Armor/ArmorComponent.cs b/Content.Shared/Armor/ArmorComponent.cs index fd04c5d29c8..510297a7c8b 100644 --- a/Content.Shared/Armor/ArmorComponent.cs +++ b/Content.Shared/Armor/ArmorComponent.cs @@ -22,6 +22,37 @@ public sealed partial class ArmorComponent : Component ///

[DataField] public float PriceMultiplier = 1; + + /// + /// DeltaV: The incoming stamina projectile damage will get multiplied by this value. + /// + [DataField] + public float StaminaDamageCoefficient = 1; + + /// + /// DeltaV: The configured stamina melee damage coefficient. The actual value used + /// will be this or the blunt damage coefficient, whichever provides better protection. + /// + [DataField] + private float _staminaMeleeDamageCoefficient = 1; + + /// + /// DeltaV: Gets or sets the effective stamina melee damage coefficient, using either the configured + /// value or the blunt damage coefficient, whichever provides better protection (lower value). + /// + [Access(typeof(SharedArmorSystem))] + public float StaminaMeleeDamageCoefficient + { + get + { + // Try to get the blunt damage coefficient from modifiers + var bluntCoefficient = Modifiers.Coefficients.GetValueOrDefault("Blunt", 1.0f); + + // Return whichever provides better protection (lower coefficient) + return Math.Min(bluntCoefficient, _staminaMeleeDamageCoefficient); + } + set => _staminaMeleeDamageCoefficient = value; + } } /// diff --git a/Content.Shared/Armor/SharedArmorSystem.cs b/Content.Shared/Armor/SharedArmorSystem.cs index 010ee5e65b0..4f17df0bcf9 100644 --- a/Content.Shared/Armor/SharedArmorSystem.cs +++ b/Content.Shared/Armor/SharedArmorSystem.cs @@ -40,7 +40,7 @@ private void OnArmorVerbExamine(EntityUid uid, ArmorComponent component, GetVerb if (!args.CanInteract || !args.CanAccess) return; - var examineMarkup = GetArmorExamine(component.Modifiers); + var examineMarkup = GetArmorExamine(component); // DeltaV - Changed argument type to ArmorComponent var ev = new ArmorExamineEvent(examineMarkup); RaiseLocalEvent(uid, ref ev); @@ -50,12 +50,13 @@ private void OnArmorVerbExamine(EntityUid uid, ArmorComponent component, GetVerb Loc.GetString("armor-examinable-verb-message")); } - private FormattedMessage GetArmorExamine(DamageModifierSet armorModifiers) + // DeltaV - Changed to take ArmorComponent instead of DamageModifierSet + private FormattedMessage GetArmorExamine(ArmorComponent component) { var msg = new FormattedMessage(); msg.AddMarkupOrThrow(Loc.GetString("armor-examine")); - foreach (var coefficientArmor in armorModifiers.Coefficients) + foreach (var coefficientArmor in component.Modifiers.Coefficients) // DeltaV { msg.PushNewline(); @@ -66,7 +67,7 @@ private FormattedMessage GetArmorExamine(DamageModifierSet armorModifiers) )); } - foreach (var flatArmor in armorModifiers.FlatReduction) + foreach (var flatArmor in component.Modifiers.FlatReduction) // DeltaV { msg.PushNewline(); @@ -77,6 +78,26 @@ private FormattedMessage GetArmorExamine(DamageModifierSet armorModifiers) )); } + // DeltaV - Add stamina resistance information if it differs from default + if (!MathHelper.CloseTo(component.StaminaDamageCoefficient, 1.0f)) + { + msg.PushNewline(); + var reduction = (1 - component.StaminaDamageCoefficient) * 100; + msg.AddMarkupOrThrow(Loc.GetString("armor-stamina-projectile-coefficient-value", + ("value", MathF.Round(reduction, 1)) + )); + } + + if (!MathHelper.CloseTo(component.StaminaMeleeDamageCoefficient, 1.0f)) + { + msg.PushNewline(); + var reduction = (1 - component.StaminaMeleeDamageCoefficient) * 100; + msg.AddMarkupOrThrow(Loc.GetString("armor-stamina-melee-coefficient-value", + ("value", MathF.Round(reduction, 1)) + )); + } + // End DeltaV + return msg; } } diff --git a/Content.Shared/Damage/Systems/StaminaSystem.cs b/Content.Shared/Damage/Systems/StaminaSystem.cs index a5c8a4b38de..eaeb6212d69 100644 --- a/Content.Shared/Damage/Systems/StaminaSystem.cs +++ b/Content.Shared/Damage/Systems/StaminaSystem.cs @@ -168,7 +168,8 @@ private void OnMeleeHit(EntityUid uid, StaminaDamageOnHitComponent component, Me foreach (var (ent, comp) in toHit) { - TakeStaminaDamage(ent, damage / toHit.Count, comp, source: args.User, with: args.Weapon, sound: component.Sound); + // DeltaV - Stamina damage coefficient + TakeMeleeStaminaDamage(ent, damage, comp, source: args.User, with: args.Weapon, sound: component.Sound); } } @@ -202,7 +203,8 @@ private void OnCollide(EntityUid uid, StaminaDamageOnCollideComponent component, if (ev.Cancelled) return; - TakeStaminaDamage(target, component.Damage, source: uid, sound: component.Sound); + // DeltaV - Stamina damage coefficient + TakeProjectileStaminaDamage(target, component.Damage, source: uid, sound: component.Sound); } private void SetStaminaAlert(EntityUid uid, StaminaComponent? component = null) diff --git a/Content.Shared/DeltaV/Damage/StaminaSystem.Resist.cs b/Content.Shared/DeltaV/Damage/StaminaSystem.Resist.cs new file mode 100644 index 00000000000..1b495665664 --- /dev/null +++ b/Content.Shared/DeltaV/Damage/StaminaSystem.Resist.cs @@ -0,0 +1,99 @@ +using Content.Shared.Armor; +using Content.Shared.Damage.Components; +using Content.Shared.Inventory; +using Robust.Shared.Audio; + +namespace Content.Shared.Damage.Systems; + +public sealed partial class StaminaSystem +{ + [Dependency] private readonly InventorySystem _inventory = default!; + + /// + /// Gets the combined stamina protection coefficients from all armor worn by an entity + /// + private float GetMeleeCoefficient(EntityUid target) + { + var coefficient = 1.0f; + + if (!_inventory.TryGetSlots(target, out var slots)) + return coefficient; + + foreach (var slot in slots) + { + if (!_inventory.TryGetSlotEntity(target, slot.Name, out var equipped)) + continue; + + if (TryComp(equipped, out var armor)) + { + coefficient *= armor.StaminaMeleeDamageCoefficient; + } + } + + return coefficient; + } + + /// + /// Gets the combined stamina protection coefficients from all armor worn by an entity + /// + private float GetProjectileCoefficient(EntityUid target) + { + var coefficient = 1.0f; + + if (!_inventory.TryGetSlots(target, out var slots)) + return coefficient; + + foreach (var slot in slots) + { + if (!_inventory.TryGetSlotEntity(target, slot.Name, out var equipped)) + continue; + + if (TryComp(equipped, out var armor)) + { + coefficient *= armor.StaminaDamageCoefficient; + } + } + + return coefficient; + } + + /// + /// Applies stamina damage from melee attacks with armor resistance calculations + /// + public void TakeMeleeStaminaDamage(EntityUid target, + float damage, + StaminaComponent? stamina = null, + EntityUid? source = null, + EntityUid? with = null, + bool visual = true, + SoundSpecifier? sound = null) + { + if (!Resolve(target, ref stamina)) + return; + + var coefficient = GetMeleeCoefficient(target); + var finalDamage = damage * coefficient; + + TakeStaminaDamage(target, finalDamage, stamina, source, with, visual, sound); + } + + /// + /// Applies stamina damage from projectiles with armor resistance calculations + /// + public void TakeProjectileStaminaDamage(EntityUid target, + float damage, + StaminaComponent? stamina = null, + EntityUid? source = null, + EntityUid? with = null, + bool visual = true, + SoundSpecifier? sound = null) + { + if (!Resolve(target, ref stamina)) + return; + + var coefficient = GetProjectileCoefficient(target); + var finalDamage = damage * coefficient; + + TakeStaminaDamage(target, finalDamage, stamina, source, with, visual, sound); + } +} diff --git a/Resources/Locale/en-US/deltav/armor/armor-examine.ftl b/Resources/Locale/en-US/deltav/armor/armor-examine.ftl new file mode 100644 index 00000000000..9d1d309aa90 --- /dev/null +++ b/Resources/Locale/en-US/deltav/armor/armor-examine.ftl @@ -0,0 +1,2 @@ +armor-stamina-projectile-coefficient-value = - [color=yellow]Stamina projectile[/color] damage reduced by [color=lightblue]{$value}%[/color]. +armor-stamina-melee-coefficient-value = - [color=yellow]Stamina melee[/color] damage reduced by [color=lightblue]{$value}%[/color]. diff --git a/Resources/Prototypes/DeltaV/Entities/Clothing/OuterClothing/armor.yml b/Resources/Prototypes/DeltaV/Entities/Clothing/OuterClothing/armor.yml index c1f6d01ea4d..e5c7a351450 100644 --- a/Resources/Prototypes/DeltaV/Entities/Clothing/OuterClothing/armor.yml +++ b/Resources/Prototypes/DeltaV/Entities/Clothing/OuterClothing/armor.yml @@ -16,6 +16,7 @@ Slash: 0.80 Piercing: 0.50 Heat: 0.80 + staminaDamageCoefficient: 0.6 # Decent at stopping disablers - type: ClothingSpeedModifier walkModifier: 0.90 sprintModifier: 0.90 @@ -44,6 +45,7 @@ Slash: 0.60 Piercing: 0.90 Heat: 0.90 + staminaDamageCoefficient: 0.9 - type: ExplosionResistance # Better than nothing against a blast or shockwave. damageCoefficient: 0.90 - type: AllowSuitStorage @@ -68,6 +70,7 @@ Slash: 0.40 Piercing: 0.70 Heat: 0.70 + staminaDamageCoefficient: 0.5 - type: ClothingSpeedModifier walkModifier: 0.75 sprintModifier: 0.75 diff --git a/Resources/Prototypes/DeltaV/Entities/Clothing/OuterClothing/hardsuits.yml b/Resources/Prototypes/DeltaV/Entities/Clothing/OuterClothing/hardsuits.yml index 408b741838d..26893e2fb83 100644 --- a/Resources/Prototypes/DeltaV/Entities/Clothing/OuterClothing/hardsuits.yml +++ b/Resources/Prototypes/DeltaV/Entities/Clothing/OuterClothing/hardsuits.yml @@ -23,6 +23,7 @@ Radiation: 0.75 Caustic: 0.75 Heat: 0.75 + staminaDamageCoefficient: 0.3 # It's a hardsuit, duh - type: ClothingSpeedModifier walkModifier: 0.75 sprintModifier: 0.75 @@ -68,6 +69,7 @@ Radiation: 0.80 Caustic: 0.80 Heat: 0.80 + staminaDamageCoefficient: 0.3 # still a hardsuit - type: ClothingSpeedModifier walkModifier: 0.85 sprintModifier: 0.85 @@ -113,6 +115,7 @@ Radiation: 0.70 Caustic: 0.70 Heat: 0.70 + staminaDamageCoefficient: 0.2 - type: ClothingSpeedModifier walkModifier: 0.65 sprintModifier: 0.65 @@ -158,6 +161,7 @@ Radiation: 0.75 Caustic: 0.75 Heat: 0.75 + staminaDamageCoefficient: 0.2 - type: ClothingSpeedModifier walkModifier: 0.80 sprintModifier: 0.80 diff --git a/Resources/Prototypes/DeltaV/Entities/Clothing/OuterClothing/vests.yml b/Resources/Prototypes/DeltaV/Entities/Clothing/OuterClothing/vests.yml index d5182c44bcd..705d24d81f5 100644 --- a/Resources/Prototypes/DeltaV/Entities/Clothing/OuterClothing/vests.yml +++ b/Resources/Prototypes/DeltaV/Entities/Clothing/OuterClothing/vests.yml @@ -67,6 +67,7 @@ Piercing: 0.5 Shock: 0.8 Heat: 0.7 + staminaDamageCoefficient: 0.6 - type: ClothingSpeedModifier walkModifier: 1.0 sprintModifier: 0.85 diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/armor.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/armor.yml index 2412dd9d5c3..4fb583ef437 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/armor.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/armor.yml @@ -19,6 +19,7 @@ Slash: 0.70 Piercing: 0.70 #Can save you, but bullets will still hurt. Will take about 10 shots from a Viper before critting, as opposed to 7 while unarmored and 16~ with a bulletproof vest. Heat: 0.80 + staminaDamageCoefficient: 0.75 # DeltaV - Decent at stopping disablers - type: ExplosionResistance damageCoefficient: 0.90 @@ -122,6 +123,7 @@ Piercing: 0.35 Heat: 0.35 Caustic: 0.5 + staminaDamageCoefficient: 0.35 # DeltaV - type: ExplosionResistance damageCoefficient: 0.35 - type: ClothingSpeedModifier @@ -209,6 +211,7 @@ Heat: 0.5 Radiation: 0 Caustic: 0.75 + staminaDamageCoefficient: 0.1 # DeltaV - type: GroupExamine - type: ProtectedFromStepTriggers slots: WITHOUT_POCKET @@ -275,6 +278,7 @@ Piercing: 0.6 Heat: 0.5 Caustic: 0.9 + staminaDamageCoefficient: 0.7 # DeltaV - Some protection against disablers, but you're better off with a vest - type: ClothingSpeedModifier walkModifier: 1.0 sprintModifier: 1.0 diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/hardsuits.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/hardsuits.yml index 6f4cdbd0df0..04265c665dd 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/hardsuits.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/hardsuits.yml @@ -21,6 +21,7 @@ Slash: 0.9 Piercing: 0.9 Caustic: 0.9 + staminaDamageCoefficient: 0.9 # DeltaV - type: ClothingSpeedModifier walkModifier: 0.80 sprintModifier: 0.80 @@ -211,6 +212,7 @@ Slash: 0.6 Piercing: 0.6 Caustic: 0.7 + staminaDamageCoefficient: 0.3 # DeltaV - type: ClothingSpeedModifier walkModifier: 0.75 sprintModifier: 0.75 @@ -238,6 +240,7 @@ Blunt: 0.8 Slash: 0.8 Piercing: 0.7 + staminaDamageCoefficient: 0.3 # DeltaV - type: ClothingSpeedModifier walkModifier: 0.65 sprintModifier: 0.65 @@ -268,6 +271,7 @@ Slash: 0.6 Piercing: 0.6 Caustic: 0.7 + staminaDamageCoefficient: 0.3 # DeltaV - type: ClothingSpeedModifier walkModifier: 0.7 sprintModifier: 0.7 @@ -300,6 +304,7 @@ Heat: 0.5 Radiation: 0.5 Caustic: 0.6 + staminaDamageCoefficient: 0.3 # DeltaV - type: ClothingSpeedModifier walkModifier: 0.8 sprintModifier: 0.8 @@ -435,6 +440,7 @@ Piercing: 0.5 Radiation: 0.5 Caustic: 0.6 + staminaDamageCoefficient: 0.3 # DeltaV - type: ClothingSpeedModifier walkModifier: 0.8 sprintModifier: 0.8 @@ -501,6 +507,7 @@ Heat: 0.5 Radiation: 0.5 Caustic: 0.5 + staminaDamageCoefficient: 0.2 # DeltaV - type: ClothingSpeedModifier walkModifier: 0.9 sprintModifier: 0.9 @@ -568,6 +575,7 @@ Heat: 0.2 Radiation: 0.01 Caustic: 0.5 + staminaDamageCoefficient: 0.3 # DeltaV - type: Item size: Huge - type: ClothingSpeedModifier @@ -602,6 +610,7 @@ Heat: 0.5 Radiation: 0.25 Caustic: 0.4 + staminaDamageCoefficient: 0.2 # DeltaV - type: ClothingSpeedModifier walkModifier: 1.0 sprintModifier: 1.0 @@ -634,6 +643,7 @@ Heat: 0.2 Radiation: 0.2 Caustic: 0.2 + staminaDamageCoefficient: 0.1 # DeltaV - type: ClothingSpeedModifier walkModifier: 0.9 sprintModifier: 0.65 diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/vests.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/vests.yml index 545f46cc8cb..711ec5176a0 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/vests.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/vests.yml @@ -16,6 +16,7 @@ Slash: 0.6 Piercing: 0.3 Heat: 0.9 + staminaDamageCoefficient: 0.8 # DeltaV - type: ExplosionResistance damageCoefficient: 0.9 From 74d7a6cc2a10aa6ab1c180e07f94a47007f5be1e Mon Sep 17 00:00:00 2001 From: Delta-V bot <135767721+DeltaV-Bot@users.noreply.github.com> Date: Thu, 14 Nov 2024 15:28:27 +0100 Subject: [PATCH 77/80] Automatic changelog update --- Resources/Changelog/DeltaVChangelog.yml | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/DeltaVChangelog.yml b/Resources/Changelog/DeltaVChangelog.yml index 6c1af739691..8258e458fb8 100644 --- a/Resources/Changelog/DeltaVChangelog.yml +++ b/Resources/Changelog/DeltaVChangelog.yml @@ -1,11 +1,4 @@ Entries: -- author: luringens - changes: - - message: Chaplain now gets a glimmer monitor app on their PDA like the rest of - epistemics. - type: Tweak - id: 173 - time: '2023-12-19T16:19:34.0000000+00:00' - author: leonardo-dabepis changes: - message: the clown has received medical treatment for his chronic snoring. No @@ -3731,3 +3724,11 @@ id: 672 time: '2024-11-13T10:50:15.0000000+00:00' url: https://github.com/DeltaV-Station/Delta-v/pull/2189 +- author: MilonPL + changes: + - message: Hardsuits and armor vests now provide protection against incoming stamina + damage. + type: Tweak + id: 673 + time: '2024-11-14T14:28:08.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/2190 From 61b60cd97c77a8fc7ec154b6ce99925fae54482a Mon Sep 17 00:00:00 2001 From: therealDLondon <162949166+therealDLondon@users.noreply.github.com> Date: Thu, 14 Nov 2024 18:08:36 +0000 Subject: [PATCH 78/80] Make Thief and Sleeper Agent need 24hrs Playtime (#2193) * Update thief.yml * Update traitor.yml * oops --- Resources/Prototypes/Roles/Antags/thief.yml | 3 +++ Resources/Prototypes/Roles/Antags/traitor.yml | 3 +++ 2 files changed, 6 insertions(+) diff --git a/Resources/Prototypes/Roles/Antags/thief.yml b/Resources/Prototypes/Roles/Antags/thief.yml index 993b866023b..94ccac1a19a 100644 --- a/Resources/Prototypes/Roles/Antags/thief.yml +++ b/Resources/Prototypes/Roles/Antags/thief.yml @@ -5,6 +5,9 @@ setPreference: true objective: roles-antag-thief-objective guides: [ Thieves ] + requirements: # DeltaV - Playtime requirement + - !type:OverallPlaytimeRequirement + time: 86400 # DeltaV - 24 hours - type: startingGear id: ThiefGear diff --git a/Resources/Prototypes/Roles/Antags/traitor.yml b/Resources/Prototypes/Roles/Antags/traitor.yml index c5c2b128acb..955eab8d62d 100644 --- a/Resources/Prototypes/Roles/Antags/traitor.yml +++ b/Resources/Prototypes/Roles/Antags/traitor.yml @@ -16,6 +16,9 @@ setPreference: true objective: roles-antag-syndicate-agent-sleeper-objective guides: [ Traitors ] + requirements: #DeltaV - Playtime requirement + - !type:OverallPlaytimeRequirement + time: 86400 # DeltaV - 24 hours # Syndicate Operative Outfit - Monkey - type: startingGear From 3873e560b3e3bf8d3eadab666bd9f88721450f68 Mon Sep 17 00:00:00 2001 From: Delta-V bot <135767721+DeltaV-Bot@users.noreply.github.com> Date: Thu, 14 Nov 2024 19:08:55 +0100 Subject: [PATCH 79/80] Automatic changelog update --- Resources/Changelog/DeltaVChangelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/DeltaVChangelog.yml b/Resources/Changelog/DeltaVChangelog.yml index 8258e458fb8..6439b444791 100644 --- a/Resources/Changelog/DeltaVChangelog.yml +++ b/Resources/Changelog/DeltaVChangelog.yml @@ -1,11 +1,4 @@ Entries: -- author: leonardo-dabepis - changes: - - message: the clown has received medical treatment for his chronic snoring. No - more HONK mimimimimi - type: Remove - id: 174 - time: '2023-12-20T03:01:27.0000000+00:00' - author: deltanedas changes: - message: The fishops advanced user manual is now available in all finer bookstores @@ -3732,3 +3725,10 @@ id: 673 time: '2024-11-14T14:28:08.0000000+00:00' url: https://github.com/DeltaV-Station/Delta-v/pull/2190 +- author: Fox + changes: + - message: Thieves and Sleeper Agents now need 24hrs playtime + type: Tweak + id: 674 + time: '2024-11-14T18:08:37.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/2193 From dad219a116fde697840c9bb89d1ece1e0ed23c5b Mon Sep 17 00:00:00 2001 From: Milon Date: Fri, 15 Nov 2024 00:45:22 +0100 Subject: [PATCH 80/80] ENTITY WHITELIST TYPO OPS TAKE 9 (#2195) CONGRATULATIONS WE'VE HIT ROCK BOTTOM --- .../DeltaV/Entities/Objects/Misc/subdermal_implants.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Prototypes/DeltaV/Entities/Objects/Misc/subdermal_implants.yml b/Resources/Prototypes/DeltaV/Entities/Objects/Misc/subdermal_implants.yml index 65e29a4a75e..279dc25cbed 100644 --- a/Resources/Prototypes/DeltaV/Entities/Objects/Misc/subdermal_implants.yml +++ b/Resources/Prototypes/DeltaV/Entities/Objects/Misc/subdermal_implants.yml @@ -30,7 +30,7 @@ - Hands # the user needs to have hands to actually insert or remove a key, much like the storage implant blacklist: components: - - BorgChassisComponent # borgs have "hands", but can't pick stuff up so the implant would be useless for them + - BorgChassis # borgs have "hands", but can't pick stuff up so the implant would be useless for them - type: Storage grid: - 0,0,0,1