From 54ac894e0e9a9524216a211c6891097a6aca078d Mon Sep 17 00:00:00 2001 From: Blu <79374236+BlueHNT@users.noreply.github.com> Date: Mon, 13 Jan 2025 00:08:27 +0100 Subject: [PATCH 01/39] Adds SuitStorageComponent to DeltaV Armor (#1520) # Description It was missing for some reason and made using them absolutely horrible. --- # Changelog :cl: - tweak: Tweaked DeltaV armors --- .../DeltaV/Entities/Clothing/OuterClothing/armor.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Resources/Prototypes/DeltaV/Entities/Clothing/OuterClothing/armor.yml b/Resources/Prototypes/DeltaV/Entities/Clothing/OuterClothing/armor.yml index 80a06dfb39..99c4657a2a 100644 --- a/Resources/Prototypes/DeltaV/Entities/Clothing/OuterClothing/armor.yml +++ b/Resources/Prototypes/DeltaV/Entities/Clothing/OuterClothing/armor.yml @@ -1,6 +1,6 @@ #Basic armor vest replacement - type: entity - parent: ClothingOuterBaseMedium + parent: [ClothingOuterBaseMedium, AllowSuitStorageClothing] id: ClothingOuterArmorPlateCarrier name: plate carrier description: A large and bulky carrier featuring steel plates that offer decent protection against gunfire. @@ -24,7 +24,7 @@ #Alternate / slim basic armor vest replacement - type: entity - parent: ClothingOuterBaseMedium + parent: [ClothingOuterBaseMedium, AllowSuitStorageClothing] id: ClothingOuterArmorDuraVest name: durathread vest description: A tight-fitting and sturdy armor vest, reinforced with durathread weave to protect against sharp objects and blunt force trauma. @@ -44,7 +44,7 @@ damageCoefficient: 0.90 - type: entity - parent: ClothingOuterBaseLarge + parent: [ClothingOuterBaseLarge, AllowSuitStorageClothing] id: ClothingOuterArmorARC name: ARCS description: The Advanced Riot Control Suit, or ARCS for short, is generally regarded as far too bulky and overly hot for any practical use - but when the riots are raging, most officers invariably take great comfort from the thick and claustrophobic padding. From 4d384c93419f4f0815b6ed03187220f1dc79963e Mon Sep 17 00:00:00 2001 From: Lonofera <108367450+LonoferaRS@users.noreply.github.com> Date: Mon, 13 Jan 2025 02:08:42 +0300 Subject: [PATCH 02/39] [Add] More Winter Coats in Loadout (#1510) # Description i may be stupid.... Closes https://github.com/Simple-Station/Einstein-Engines/issues/1473 --- # Changelog :cl: - add: A bunch of winter coats that are already in the game were added as a loadouts. --- .../Jobs/Engineering/atmosphericTechnician.yml | 2 ++ .../Jobs/Engineering/engineeringUncategorized.yml | 2 ++ .../Jobs/Epistemics/golemancer.yml | 10 ++++++---- .../Jobs/Logistics/logisticsOfficer.yml | 12 +++++++----- .../CharacterItemGroups/Jobs/Medical/chemist.yml | 2 ++ .../Jobs/Medical/uncategorized.yml | 2 ++ .../Jobs/Security/headOfSecurity.yml | 2 ++ .../Jobs/Security/uncategorized.yml | 2 ++ .../CharacterItemGroups/Jobs/Security/warden.yml | 2 ++ .../CharacterItemGroups/Jobs/Service/bartender.yml | 2 ++ .../CharacterItemGroups/Jobs/Service/botanist.yml | 10 ++++++---- .../CharacterItemGroups/Jobs/Service/janitor.yml | 10 ++++++---- .../CharacterItemGroups/Jobs/Service/musician.yml | 10 ++++++---- .../Jobs/Engineering/atmosphericTechnician.yml | 13 +++++++++++++ .../Loadouts/Jobs/Engineering/uncategorized.yml | 14 ++++++++++++++ .../Loadouts/Jobs/Epistemics/golemancer.yml | 13 ++++++++++++- .../Loadouts/Jobs/Logistics/logisticsOfficer.yml | 12 ++++++++++++ .../Prototypes/Loadouts/Jobs/Medical/chemist.yml | 13 +++++++++++++ .../Loadouts/Jobs/Medical/uncategorized.yml | 13 +++++++++++++ .../Loadouts/Jobs/Security/headOfSecurity.yml | 13 +++++++++++++ .../Loadouts/Jobs/Security/uncategorized.yml | 14 ++++++++++++++ .../Prototypes/Loadouts/Jobs/Security/warden.yml | 13 +++++++++++++ .../Prototypes/Loadouts/Jobs/Service/bartender.yml | 13 +++++++++++++ .../Prototypes/Loadouts/Jobs/Service/botanist.yml | 13 ++++++++++++- .../Prototypes/Loadouts/Jobs/Service/clown.yml | 1 + .../Prototypes/Loadouts/Jobs/Service/janitor.yml | 13 ++++++++++++- .../Prototypes/Loadouts/Jobs/Service/musician.yml | 12 ++++++++++++ 27 files changed, 214 insertions(+), 24 deletions(-) diff --git a/Resources/Prototypes/CharacterItemGroups/Jobs/Engineering/atmosphericTechnician.yml b/Resources/Prototypes/CharacterItemGroups/Jobs/Engineering/atmosphericTechnician.yml index 1a81612043..9338a800bf 100644 --- a/Resources/Prototypes/CharacterItemGroups/Jobs/Engineering/atmosphericTechnician.yml +++ b/Resources/Prototypes/CharacterItemGroups/Jobs/Engineering/atmosphericTechnician.yml @@ -97,6 +97,8 @@ items: - type: loadout id: LoadoutAtmosphericTechnicianChickenSuit + - type: loadout + id: LoadoutAtmosphericTechnicianWinterCoat - type: characterItemGroup id: LoadoutAtmosphericTechnicianShoes diff --git a/Resources/Prototypes/CharacterItemGroups/Jobs/Engineering/engineeringUncategorized.yml b/Resources/Prototypes/CharacterItemGroups/Jobs/Engineering/engineeringUncategorized.yml index efc045928e..a7d607f33c 100644 --- a/Resources/Prototypes/CharacterItemGroups/Jobs/Engineering/engineeringUncategorized.yml +++ b/Resources/Prototypes/CharacterItemGroups/Jobs/Engineering/engineeringUncategorized.yml @@ -78,6 +78,8 @@ items: - type: loadout id: LoadoutEngineeringOuterHazard + - type: loadout + id: LoadoutEngineeringWinterCoat #- type: characterItemGroup # id: LoadoutEngineeringShoes diff --git a/Resources/Prototypes/CharacterItemGroups/Jobs/Epistemics/golemancer.yml b/Resources/Prototypes/CharacterItemGroups/Jobs/Epistemics/golemancer.yml index 2556250f51..39f49975ff 100644 --- a/Resources/Prototypes/CharacterItemGroups/Jobs/Epistemics/golemancer.yml +++ b/Resources/Prototypes/CharacterItemGroups/Jobs/Epistemics/golemancer.yml @@ -61,10 +61,12 @@ # maxItems: 1 # items: # -#- type: characterItemGroup -# id: LoadoutGolemancerOuter -# maxItems: 1 -# items: +- type: characterItemGroup + id: LoadoutGolemancerOuter + maxItems: 1 + items: + - type: loadout + id: LoadoutScienceUniformWinterCoatRoboticist # #- type: characterItemGroup # id: LoadoutGolemancerShoes diff --git a/Resources/Prototypes/CharacterItemGroups/Jobs/Logistics/logisticsOfficer.yml b/Resources/Prototypes/CharacterItemGroups/Jobs/Logistics/logisticsOfficer.yml index 230fd83036..92f3101b2b 100644 --- a/Resources/Prototypes/CharacterItemGroups/Jobs/Logistics/logisticsOfficer.yml +++ b/Resources/Prototypes/CharacterItemGroups/Jobs/Logistics/logisticsOfficer.yml @@ -55,11 +55,13 @@ # maxItems: 1 # items: # -#- type: characterItemGroup -# id: LoadoutLogisticsOfficerOuter -# maxItems: 1 -# items: -# +- type: characterItemGroup + id: LoadoutLogisticsOfficerOuter + maxItems: 1 + items: + - type: loadout + id: LoadoutLogisticsOfficeOuter + - type: characterItemGroup id: LoadoutLogisticsOfficerShoes maxItems: 1 diff --git a/Resources/Prototypes/CharacterItemGroups/Jobs/Medical/chemist.yml b/Resources/Prototypes/CharacterItemGroups/Jobs/Medical/chemist.yml index 016507e065..3340b0733f 100644 --- a/Resources/Prototypes/CharacterItemGroups/Jobs/Medical/chemist.yml +++ b/Resources/Prototypes/CharacterItemGroups/Jobs/Medical/chemist.yml @@ -93,6 +93,8 @@ id: LoadoutMedicalOuterLabcoatChem - type: loadout id: LoadoutMedicalOuterApronChemist + - type: loadout + id: LoadoutChemistWinterCoat - type: characterItemGroup id: LoadoutChemistShoes diff --git a/Resources/Prototypes/CharacterItemGroups/Jobs/Medical/uncategorized.yml b/Resources/Prototypes/CharacterItemGroups/Jobs/Medical/uncategorized.yml index 3157acb062..2b095687dc 100644 --- a/Resources/Prototypes/CharacterItemGroups/Jobs/Medical/uncategorized.yml +++ b/Resources/Prototypes/CharacterItemGroups/Jobs/Medical/uncategorized.yml @@ -103,6 +103,8 @@ id: LoadoutMedicalOuter maxItems: 1 items: + - type: loadout + id: LoadoutMedicalOuterWinterCoat - type: loadout id: LoadoutMedicalOuterLabcoat - type: loadout diff --git a/Resources/Prototypes/CharacterItemGroups/Jobs/Security/headOfSecurity.yml b/Resources/Prototypes/CharacterItemGroups/Jobs/Security/headOfSecurity.yml index 9ccc5232e4..6525da6df4 100644 --- a/Resources/Prototypes/CharacterItemGroups/Jobs/Security/headOfSecurity.yml +++ b/Resources/Prototypes/CharacterItemGroups/Jobs/Security/headOfSecurity.yml @@ -86,6 +86,8 @@ id: LoadoutCommandHOSOuterWinter - type: loadout id: LoadoutCommandHOSOuterTrench + - type: loadout + id: LoadoutCommandHOSOuterWinterUnarmored - type: characterItemGroup id: LoadoutHeadOfSecurityShoes diff --git a/Resources/Prototypes/CharacterItemGroups/Jobs/Security/uncategorized.yml b/Resources/Prototypes/CharacterItemGroups/Jobs/Security/uncategorized.yml index 1339950470..166d548e12 100644 --- a/Resources/Prototypes/CharacterItemGroups/Jobs/Security/uncategorized.yml +++ b/Resources/Prototypes/CharacterItemGroups/Jobs/Security/uncategorized.yml @@ -182,6 +182,8 @@ items: - type: loadout id: LoadoutClothingOuterArmorPlateCarrier + - type: loadout + id: LoadoutClothingOuterWinterCoatSec - type: loadout id: LoadoutClothingOuterArmorDuraVest - type: loadout diff --git a/Resources/Prototypes/CharacterItemGroups/Jobs/Security/warden.yml b/Resources/Prototypes/CharacterItemGroups/Jobs/Security/warden.yml index 1b978323bf..785f5aa45d 100644 --- a/Resources/Prototypes/CharacterItemGroups/Jobs/Security/warden.yml +++ b/Resources/Prototypes/CharacterItemGroups/Jobs/Security/warden.yml @@ -55,6 +55,8 @@ id: LoadoutWardenOuter maxItems: 1 items: + - type: loadout + id: LoadoutClothingOuterWinterCoatWarden - type: loadout id: LoadoutClothingOuterCoatWarden diff --git a/Resources/Prototypes/CharacterItemGroups/Jobs/Service/bartender.yml b/Resources/Prototypes/CharacterItemGroups/Jobs/Service/bartender.yml index 74fc945b3f..a6d0e7a21e 100644 --- a/Resources/Prototypes/CharacterItemGroups/Jobs/Service/bartender.yml +++ b/Resources/Prototypes/CharacterItemGroups/Jobs/Service/bartender.yml @@ -69,6 +69,8 @@ - type: characterItemGroup id: LoadoutBartenderOuter items: + - type: loadout + id: LoadoutServiceBartenderWinterCoat - type: loadout id: LoadoutServiceBartenderArmorDuraVest - type: loadout diff --git a/Resources/Prototypes/CharacterItemGroups/Jobs/Service/botanist.yml b/Resources/Prototypes/CharacterItemGroups/Jobs/Service/botanist.yml index 334ad0c4fd..ab522feb17 100644 --- a/Resources/Prototypes/CharacterItemGroups/Jobs/Service/botanist.yml +++ b/Resources/Prototypes/CharacterItemGroups/Jobs/Service/botanist.yml @@ -48,10 +48,12 @@ # maxItems: 1 # items: # -#- type: characterItemGroup -# id: LoadoutBotanistOuter -# maxItems: 1 -# items: +- type: characterItemGroup + id: LoadoutBotanistOuter + maxItems: 1 + items: + - type: loadout + id: LoadoutServiceBotanistWinterCoat # #- type: characterItemGroup # id: LoadoutBotanistShoes diff --git a/Resources/Prototypes/CharacterItemGroups/Jobs/Service/janitor.yml b/Resources/Prototypes/CharacterItemGroups/Jobs/Service/janitor.yml index cc5b0e16a3..d5fffbd2f7 100644 --- a/Resources/Prototypes/CharacterItemGroups/Jobs/Service/janitor.yml +++ b/Resources/Prototypes/CharacterItemGroups/Jobs/Service/janitor.yml @@ -49,10 +49,12 @@ # maxItems: 1 # items: # -#- type: characterItemGroup -# id: LoadoutJanitorOuter -# maxItems: 1 -# items: +- type: characterItemGroup + id: LoadoutJanitorOuter + maxItems: 1 + items: + - type: loadout + id: LoadoutServiceWinterCoatJanitor # #- type: characterItemGroup # id: LoadoutJanitorShoes diff --git a/Resources/Prototypes/CharacterItemGroups/Jobs/Service/musician.yml b/Resources/Prototypes/CharacterItemGroups/Jobs/Service/musician.yml index 90943d4795..37af9e888b 100644 --- a/Resources/Prototypes/CharacterItemGroups/Jobs/Service/musician.yml +++ b/Resources/Prototypes/CharacterItemGroups/Jobs/Service/musician.yml @@ -139,10 +139,12 @@ # maxItems: 1 # items: # -#- type: characterItemGroup -# id: LoadoutMusicianOuter -# maxItems: 1 -# items: +- type: characterItemGroup + id: LoadoutMusicianOuter + maxItems: 1 + items: + - type: loadout + id: LoadoutServiceWinterCoatMusician # #- type: characterItemGroup # id: LoadoutMusicianShoes diff --git a/Resources/Prototypes/Loadouts/Jobs/Engineering/atmosphericTechnician.yml b/Resources/Prototypes/Loadouts/Jobs/Engineering/atmosphericTechnician.yml index 67fe8a6c1d..db427ec73b 100644 --- a/Resources/Prototypes/Loadouts/Jobs/Engineering/atmosphericTechnician.yml +++ b/Resources/Prototypes/Loadouts/Jobs/Engineering/atmosphericTechnician.yml @@ -295,6 +295,19 @@ - ClothingMaskGasAtmos # Outer +- type: loadout + id: LoadoutAtmosphericTechnicianWinterCoat + category: JobsEngineeringAtmosphericTechnician + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutAtmosphericTechnicianOuter + - !type:CharacterJobRequirement + jobs: + - AtmosphericTechnician + items: + - ClothingOuterWinterAtmos + - type: loadout id: LoadoutAtmosphericTechnicianChickenSuit category: JobsEngineeringAtmosphericTechnician diff --git a/Resources/Prototypes/Loadouts/Jobs/Engineering/uncategorized.yml b/Resources/Prototypes/Loadouts/Jobs/Engineering/uncategorized.yml index 391aa975e5..3c9fae6bd9 100644 --- a/Resources/Prototypes/Loadouts/Jobs/Engineering/uncategorized.yml +++ b/Resources/Prototypes/Loadouts/Jobs/Engineering/uncategorized.yml @@ -198,6 +198,20 @@ # Mask # Outer + +- type: loadout + id: LoadoutEngineeringWinterCoat + category: JobsEngineeringAAUncategorized + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutEngineeringOuter + - !type:CharacterDepartmentRequirement + departments: + - Engineering + items: + - ClothingOuterWinterEngi + - type: loadout id: LoadoutEngineeringOuterHazard category: JobsEngineeringAAUncategorized diff --git a/Resources/Prototypes/Loadouts/Jobs/Epistemics/golemancer.yml b/Resources/Prototypes/Loadouts/Jobs/Epistemics/golemancer.yml index 73063a3dc5..4cb0bd989a 100644 --- a/Resources/Prototypes/Loadouts/Jobs/Epistemics/golemancer.yml +++ b/Resources/Prototypes/Loadouts/Jobs/Epistemics/golemancer.yml @@ -100,7 +100,18 @@ # Mask # Outer - +- type: loadout + id: LoadoutScienceUniformWinterCoatRoboticist + category: JobsEpistemicsGolemancer + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutGolemancerUniforms + - !type:CharacterJobRequirement + jobs: + - Roboticist + items: + - ClothingOuterWinterRobo # Shoes # Uniforms diff --git a/Resources/Prototypes/Loadouts/Jobs/Logistics/logisticsOfficer.yml b/Resources/Prototypes/Loadouts/Jobs/Logistics/logisticsOfficer.yml index 190c7467b5..f2cf9502d1 100644 --- a/Resources/Prototypes/Loadouts/Jobs/Logistics/logisticsOfficer.yml +++ b/Resources/Prototypes/Loadouts/Jobs/Logistics/logisticsOfficer.yml @@ -61,6 +61,18 @@ # Mask # Outer +- type: loadout + id: LoadoutQMWinterCoat + category: JobsLogisticsLogisticsOfficer + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutLogisticsOfficerOuter + - !type:CharacterJobRequirement + jobs: + - Quartermaster + items: + - ClothingOuterWinterQM # Shoes - type: loadout diff --git a/Resources/Prototypes/Loadouts/Jobs/Medical/chemist.yml b/Resources/Prototypes/Loadouts/Jobs/Medical/chemist.yml index cb5b872928..361c807e59 100644 --- a/Resources/Prototypes/Loadouts/Jobs/Medical/chemist.yml +++ b/Resources/Prototypes/Loadouts/Jobs/Medical/chemist.yml @@ -255,6 +255,19 @@ # Mask # Outer +- type: loadout + id: LoadoutChemistWinterCoat + category: JobsMedicalChemist + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChemistOuter + - !type:CharacterJobRequirement + jobs: + - Chemist + items: + - ClothingOuterWinterChem + - type: loadout id: LoadoutMedicalOuterLabcoatChem category: JobsMedicalChemist diff --git a/Resources/Prototypes/Loadouts/Jobs/Medical/uncategorized.yml b/Resources/Prototypes/Loadouts/Jobs/Medical/uncategorized.yml index cc653a0593..2909a210a8 100644 --- a/Resources/Prototypes/Loadouts/Jobs/Medical/uncategorized.yml +++ b/Resources/Prototypes/Loadouts/Jobs/Medical/uncategorized.yml @@ -371,6 +371,19 @@ # Mask # Outer +- type: loadout + id: LoadoutMedicalOuterWinterCoat + category: JobsMedicalAUncategorized + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMedicalOuter + - !type:CharacterDepartmentRequirement + departments: + - Medical + items: + - ClothingOuterWinterMed + - type: loadout id: LoadoutMedicalOuterLabcoat category: JobsMedicalAUncategorized diff --git a/Resources/Prototypes/Loadouts/Jobs/Security/headOfSecurity.yml b/Resources/Prototypes/Loadouts/Jobs/Security/headOfSecurity.yml index 7954e5d444..e918615e4c 100644 --- a/Resources/Prototypes/Loadouts/Jobs/Security/headOfSecurity.yml +++ b/Resources/Prototypes/Loadouts/Jobs/Security/headOfSecurity.yml @@ -188,6 +188,19 @@ # Mask # Outer +- type: loadout + id: LoadoutCommandHOSOuterWinterUnarmored + category: JobsSecurityHeadOfSecurity + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutHeadOfSecurityOuter + - !type:CharacterJobRequirement + jobs: + - HeadOfSecurity + items: + - ClothingOuterWinterHoSUnarmored + - type: loadout id: LoadoutCommandHOSOuterWinter category: JobsSecurityHeadOfSecurity diff --git a/Resources/Prototypes/Loadouts/Jobs/Security/uncategorized.yml b/Resources/Prototypes/Loadouts/Jobs/Security/uncategorized.yml index 282d9d8534..9fb358f05d 100644 --- a/Resources/Prototypes/Loadouts/Jobs/Security/uncategorized.yml +++ b/Resources/Prototypes/Loadouts/Jobs/Security/uncategorized.yml @@ -982,6 +982,20 @@ - ClothingMaskGasSwat # Outer +- type: loadout + id: LoadoutClothingOuterWinterCoatSec + category: JobsSecurityAUncategorized + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutSecurityOuter + - !type:CharacterDepartmentRequirement + departments: + - Security + items: + - ClothingOuterWinterSec + + - type: loadout id: LoadoutClothingOuterArmorPlateCarrier category: JobsSecurityAUncategorized diff --git a/Resources/Prototypes/Loadouts/Jobs/Security/warden.yml b/Resources/Prototypes/Loadouts/Jobs/Security/warden.yml index 45ef25e326..b71e0320c4 100644 --- a/Resources/Prototypes/Loadouts/Jobs/Security/warden.yml +++ b/Resources/Prototypes/Loadouts/Jobs/Security/warden.yml @@ -33,6 +33,19 @@ # Mask # Outer +- type: loadout + id: LoadoutClothingOuterWinterCoatWarden + category: JobsSecurityWarden + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutWardenOuter + - !type:CharacterJobRequirement + jobs: + - Warden + items: + - ClothingOuterWinterWardenUnarmored + - type: loadout id: LoadoutClothingOuterCoatWarden category: JobsSecurityWarden diff --git a/Resources/Prototypes/Loadouts/Jobs/Service/bartender.yml b/Resources/Prototypes/Loadouts/Jobs/Service/bartender.yml index e2b21a63df..ef4614e886 100644 --- a/Resources/Prototypes/Loadouts/Jobs/Service/bartender.yml +++ b/Resources/Prototypes/Loadouts/Jobs/Service/bartender.yml @@ -116,6 +116,19 @@ # Mask # Outer +- type: loadout + id: LoadoutServiceBartenderWinterCoat + category: JobsServiceBartender + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutBartenderOuter + - !type:CharacterJobRequirement + jobs: + - Bartender + items: + - ClothingOuterWinterBar + - type: loadout id: LoadoutServiceBartenderArmorDuraVest category: JobsServiceBartender diff --git a/Resources/Prototypes/Loadouts/Jobs/Service/botanist.yml b/Resources/Prototypes/Loadouts/Jobs/Service/botanist.yml index c34eb3f55a..2777416bc9 100644 --- a/Resources/Prototypes/Loadouts/Jobs/Service/botanist.yml +++ b/Resources/Prototypes/Loadouts/Jobs/Service/botanist.yml @@ -20,7 +20,18 @@ # Mask # Outer - +- type: loadout + id: LoadoutServiceBotanistWinterCoat + category: JobsServiceBotanist + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutBotanistOuter + - !type:CharacterJobRequirement + jobs: + - Botanist + items: + - ClothingOuterWinterHydro # Shoes # Uniforms diff --git a/Resources/Prototypes/Loadouts/Jobs/Service/clown.yml b/Resources/Prototypes/Loadouts/Jobs/Service/clown.yml index 666fddd9c9..60bd4214f2 100644 --- a/Resources/Prototypes/Loadouts/Jobs/Service/clown.yml +++ b/Resources/Prototypes/Loadouts/Jobs/Service/clown.yml @@ -97,6 +97,7 @@ - ClothingMaskSexyClown # Outer + - type: loadout id: LoadoutServiceClownOuterWinter category: JobsServiceClown diff --git a/Resources/Prototypes/Loadouts/Jobs/Service/janitor.yml b/Resources/Prototypes/Loadouts/Jobs/Service/janitor.yml index b8a2909e20..e5745c90fa 100644 --- a/Resources/Prototypes/Loadouts/Jobs/Service/janitor.yml +++ b/Resources/Prototypes/Loadouts/Jobs/Service/janitor.yml @@ -20,7 +20,18 @@ # Mask # Outer - +- type: loadout + id: LoadoutServiceWinterCoatJanitor + category: JobsServiceJanitor + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutJanitorOuter + - !type:CharacterJobRequirement + jobs: + - Janitor + items: + - ClothingOuterWinterJani # Shoes # Uniforms diff --git a/Resources/Prototypes/Loadouts/Jobs/Service/musician.yml b/Resources/Prototypes/Loadouts/Jobs/Service/musician.yml index 4fe668d920..a52ba8d8f0 100644 --- a/Resources/Prototypes/Loadouts/Jobs/Service/musician.yml +++ b/Resources/Prototypes/Loadouts/Jobs/Service/musician.yml @@ -620,6 +620,18 @@ # Mask # Outer +- type: loadout + id: LoadoutServiceWinterCoatMusician + category: JobsServiceMusician + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMusicianOuter + - !type:CharacterJobRequirement + jobs: + - Musician + items: + - ClothingOuterWinterMusician # Shoes From 2a61d0397fd6a502aadbb65b301fb1cd03aa2d1f Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Sun, 12 Jan 2025 23:08:53 +0000 Subject: [PATCH 03/39] Automatic Changelog Update (#1520) --- Resources/Changelog/Changelog.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 0d9b81a3b3..dff8bf3e72 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -9741,3 +9741,10 @@ Entries: id: 6680 time: '2025-01-12T21:25:13.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1469 +- author: BlueHNT + changes: + - type: Tweak + message: Tweaked DeltaV armors + id: 6681 + time: '2025-01-12T23:08:27.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1520 From 72cc96328f642131fa34e36910ddf038df7feae9 Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Sun, 12 Jan 2025 23:09:19 +0000 Subject: [PATCH 04/39] Automatic Changelog Update (#1510) --- Resources/Changelog/Changelog.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index dff8bf3e72..b36c2ef429 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -9748,3 +9748,12 @@ Entries: id: 6681 time: '2025-01-12T23:08:27.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1520 +- author: LonoferaRS + changes: + - type: Add + message: >- + A bunch of winter coats that are already in the game were added as a + loadouts. + id: 6682 + time: '2025-01-12T23:08:43.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1510 From 8779f3bc597c1afa3b67ee176e73efc0eef8bc69 Mon Sep 17 00:00:00 2001 From: Blu <79374236+BlueHNT@users.noreply.github.com> Date: Mon, 13 Jan 2025 00:09:32 +0100 Subject: [PATCH 05/39] Space Law, Irons Out Xml's and Proposes Default Lawset (#1386) # Description Wizard's lawset while good for LRP and NRP, doesn't serve perfectly force MRP-HRP type servers as it is missing some common laws. I wish to introduce a more encompassing lawset which while it's still a bit underwork, should be fuller and more encompassing for what Einstein-Engines is trying to do. At the same time I have gone through some other entries in SpaceLaw category and added colouring to Controlled and Restricted items, while also adding further explanation of law categorization. Documentation on the space law is [here](https://docs.google.com/spreadsheets/d/1kSJSmXltODHW-gpnUb3b-lDwbq-c8W21MopfDSEqfI4/edit?gid=1898009230#gid=1898009230). --- # TODO - [x] Make SL more readable - [x] Add Space Law table - [x] Add individual item explanations ---

Media

![image](https://github.com/user-attachments/assets/0b00b349-7075-495f-92f8-72e05cf3171d) ![image](https://github.com/user-attachments/assets/cbfd81df-4310-4b40-824b-2007aacdd13e) ![image](https://github.com/user-attachments/assets/f8c1020c-9d6c-4849-88f9-a993e03b6fa7)

--- # Changelog :cl: - add: Added New Law - tweak: Tweaked Space Law entries - remove: Removed Old Law --- Resources/Locale/en-US/guidebook/guides.ftl | 2 +- Resources/Prototypes/Guidebook/rules.yml | 7 + .../SpaceLaw/SLControlledSubstances.xml | 20 +- .../ServerRules/SpaceLaw/SLCrimeList.xml | 1861 +++++++++++++++++ .../ServerRules/SpaceLaw/SLRestrictedGear.xml | 39 +- .../SpaceLaw/SLRestrictedWeapons.xml | 22 +- .../ServerRules/SpaceLaw/SpaceLaw.xml | 44 +- 7 files changed, 1941 insertions(+), 54 deletions(-) create mode 100644 Resources/ServerInfo/Guidebook/ServerRules/SpaceLaw/SLCrimeList.xml diff --git a/Resources/Locale/en-US/guidebook/guides.ftl b/Resources/Locale/en-US/guidebook/guides.ftl index 5abf979841..e4a4fa0702 100644 --- a/Resources/Locale/en-US/guidebook/guides.ftl +++ b/Resources/Locale/en-US/guidebook/guides.ftl @@ -118,7 +118,7 @@ guide-entry-rules-s8 = S8 guide-entry-rules-s9 = S9 guide-entry-rules-s10 = S10 guide-entry-rules-space-law = Space Law -guide-entry-rules-sl-crime-list = Crime List +guide-entry-rules-sl-crime-list = Law Book guide-entry-rules-sl-controlled-substances = Controlled Substances guide-entry-rules-sl-restricted-gear = Restricted Gear guide-entry-rules-sl-restricted-weapons = Restricted Weapons diff --git a/Resources/Prototypes/Guidebook/rules.yml b/Resources/Prototypes/Guidebook/rules.yml index 162cdba770..288c093f89 100644 --- a/Resources/Prototypes/Guidebook/rules.yml +++ b/Resources/Prototypes/Guidebook/rules.yml @@ -12,6 +12,7 @@ - SpaceLawControlledSubstances - SpaceLawRestrictedGear - SpaceLawRestrictedWeapons + - SpaceLawCrimeList - type: guideEntry id: SpaceLawControlledSubstances @@ -30,3 +31,9 @@ name: guide-entry-rules-sl-restricted-weapons priority: 40 text: "/ServerInfo/Guidebook/ServerRules/SpaceLaw/SLRestrictedWeapons.xml" + +- type: guideEntry + id: SpaceLawCrimeList + name: guide-entry-rules-sl-crime-list + priority: 50 + text: "/ServerInfo/Guidebook/ServerRules/SpaceLaw/SLCrimeList.xml" \ No newline at end of file diff --git a/Resources/ServerInfo/Guidebook/ServerRules/SpaceLaw/SLControlledSubstances.xml b/Resources/ServerInfo/Guidebook/ServerRules/SpaceLaw/SLControlledSubstances.xml index 14f0f46de1..9d91262ecb 100644 --- a/Resources/ServerInfo/Guidebook/ServerRules/SpaceLaw/SLControlledSubstances.xml +++ b/Resources/ServerInfo/Guidebook/ServerRules/SpaceLaw/SLControlledSubstances.xml @@ -1,14 +1,12 @@  + Certain substances are considered controlled due to their hazardous, addictive, or otherwise detrimental nature. These substances are categorized based on their potential for abuse, danger to personnel, or restricted usage outside of authorized roles and departments. Unauthorized possession, production, or distribution of these substances is a violation of NanoTrasen policy. + # Space Law: Controlled Substances - - \[Chemists/Science\] Explosive and pyrotechnic compounds excluding welding fuel contained in welders or welding fuel storage vessels - - \[Science\] Toxins - - \[Medical\] Chloral hydrate, Impedrezene, Ipecac, and Pax - - \[Medical\] Desoxyephedrine and Ephedrine - - \[None\] Mindbreaker toxin - - \[None\] Mute toxin - - \[None\] Nocturine - - \[None\] Norepinephirc acid - - \[None\] Romerol - - \[None\] Space drugs - - \[None\] Stimulants, excluding Desoxyephedrine and Ephedrine + + - [color=#cb0000]\[Chemists/Science\][/color] Includes any compound capable of combustion, explosion, or significant thermal output (excluding welding fuel stored in approved containers or welders for maintenance use.) + - [color=#cb0000]\[Science\][/color] Substances that directly harm or kill biological organisms. Examples include chemical toxins used in research or biohazard testing + - [color=#cb0000]\[Medical\][/color] Includes substances designed to impair cognitive function, induce paralysis, or suppress neural activity (Authorized for use by medical staff only in controlled doses for therapeutic purposes.) + - [color=#cb0000]\[Medical\][/color] Substances that enhance physical or mental performance, increase energy, or reduce fatigue (Restricted to medical use or approved research by medical personnel.) + - [color=#cb0000]\[None\][/color] Substances that alter perception, induce hallucinations, or affect mental stability (Unauthorized possession or distribution is prohibited unless explicitly authorized for research purposes.) + - [color=#cb0000]\[None\][/color] Any chemical compound classified as experimental or restricted under NanoTrasen policy (Includes substances with unknown effects or those tied to unauthorized cult activity or rituals.) diff --git a/Resources/ServerInfo/Guidebook/ServerRules/SpaceLaw/SLCrimeList.xml b/Resources/ServerInfo/Guidebook/ServerRules/SpaceLaw/SLCrimeList.xml new file mode 100644 index 0000000000..ea59844a58 --- /dev/null +++ b/Resources/ServerInfo/Guidebook/ServerRules/SpaceLaw/SLCrimeList.xml @@ -0,0 +1,1861 @@ + + # Space Law: Crime Listing + Crime codes are grouped by color to represent linked crime categories. Crimes within the same group cannot be stacked. + Suffixes are provided in the Quick Crime Guide to identify these links, with only the highest penalty being applied. + + ## Quick Crime Guide + + + + Code + + + + + §0-XX - Infraction + + + + + §1-XX - Minor + + + + + §2-XX - Moderate + + + + + §3-XX - Major + + + + + §4-XX - Capital + + + + + 01 + + + + + Disorderly Conduct (V) + + + + + Assault (V) + + + + + Aggravated Assault (V) + + + + + Murder (V) + + + + + Prime/Mass Murder (V) + + + + + 02 + + + + + + + + + + Pick-pocketing (T) + + + + + Theft (T) + + + + + Larceny (T) + + + + + Grand Larceny (T) + + + + + 03 + + + + + Superficial Vandalism (S) + + + + + Minor Vandalism (S) + + + + + Vandalism, Major (S) + + + + + Sabotage (S) + + + + + Grand Sabotage (S) + + + + + 04 + + + + + + + + + + Vigilantism + + + + + Conspiracy (C) + + + + + High Conspiracy (C) + + + + + Espionage (C) + + + + + 05 + + + + + Drug Possession + + + + + Illegal Distribution + + + + + Hostile Affiliation (A) + + + + + Hostile Activity (A) + + + + + Enemy Combatant (A) + + + + + 06 + + + + + Disruptive Communications + + + + + Disturbing the Peace + + + + + Possession, Contraband Equipmment (P) + + + + + Possession, Dangerous Contraband (P) + + + + + Possession, Corporate Secrets (P) + + + + + 07 + + + + + + + + + + + + + + + Rioting (R) + + + + + Inciting a Riot (R) + + + + + Subversion of the Chain of Command (R) + + + + + 08 + + + + + Creating a Hazard (N) + + + + + Negligence (N) + + + + + High Negligence (N) + + + + + Manslaughter (V)(N) + + + + + Biological Terror (V)(N) + + + + + 09 + + + + + + + + + + Trespass (T) + + + + + Trespass, Inherently Dangerous Areas (T) + + + + + Trespass, High Security Areas (T) + + + + + + + + + + 10 + + + + + + + + + + Breaking and Entering (T) + + + + + Breaking and Entering, Inherently Dangerous Areas (T) + + + + + Breaking and Entering, High Security Areas (T) + + + + + + + + + + 11 + + + + + + + + + + Discriminatory Language + + + + + Insubordination + + + + + Dereliction (N) + + + + + + + + + + 12 + + + + + + + + + + + + + + + Fraud (F) + + + + + Corporate Fraud (F) + + + + + + + + + + 13 + + + + + + + + + + + + + + + + + + + + Identity Theft + + + + + + + + + + 14 + + + + + + + + + + + + + + + + + + + + Kidnapping + + + + + + + + + + 15 + + + + + Unreported Psionics + + + + + + + + + + Mindguard Act + + + + + Mindbreaking + + + + + + + +
+ + ## Stackable Crimes: Crimes are to be considered ‘stackable’ + in the sense that if you charge someone with two or more different crimes, + you should combine the times you would give them for each crime. + Make sure you do not combine the same category of crimes, indicated by brackets. + + ## Crime Modifiers + Crimes can be influenced by specific modifiers that adjust their severity, sentencing, or context. + These modifiers provide additional nuance to legal proceedings and ensure appropriate handling of offenses; + Based on circumstances such as intent, danger, or external factors. + + + + + Code + + + + + Modifier + + + + + Description + + + + + Notes + + + + + M-01 + + + + + Clear and Present Danger + + + + + Crimes Committed in the interest of saving life, property, or preventing a disaster may have their sentences reduced, voided, or expunged. + + + + + This modifier is primarily to cover situations such as breaking into an area one does not have access to, in the interest of saving someone's life or otherwise with good intent. + + + + + M-02 + + + + + Elevated Sentencing + + + + + The scope of the crime(s), or repetitious behavior committed, warrant the charge be elevated to a higher offense for punishment in increments of one level per instance. + + + + + Primarily intended to be used after a few repetitions. This includes attacking security, heads of staff, or committing multiple instances of the same crime. Crimes charged with this modifier are exempt from punishment outside of confinement. + + + + + M-03 + + + + + Self Defense + + + + + Actions taken to defend ones self from an assailant may have sentences reduced, voided, or expunged if the officer(s) involved deem that use of force reasonable. + + + + + This isn't a school. You can punch back, but don't be out of scale. + + + + + M-04 + + + + + Non Compos Mentis + + + + + Those of unstable mind should be referred to medical treatment or, if required, forced cryogenic storage. + + + + + English: Insanity. This is intended to be applied to IC hypnosis, mind control, or otherwise actual incapacitation. IC 'insanity' is not an excuse for high crimes. + + + + + M-05 + + + + + Griseo Maris + + + + + Coordinated behavior by those with no clear assigned duty which interrupts the normal function of any one department may lead to sentencing for any crimes committed during such actions to be increased in severity by one level for punishment. + + + + + English: Grey Tide. Go be useful you fucks. + + + + + M-06 + + + + + Resisting Arrest + + + + + Knowingly resisting attempts at legal detention by members of the security team. It is advised that these individuals should have their sentences increased the recommended 20% of total duration. + + + + + Running will only increase your sentence. + + + + + M-07 + + + + + Escaped Prisoner + + + + + Someone who has escaped their cell should be recaptured and returned to the brig. Their timer should be reset to the full length of the original sentence. The sentence can be bumped by up to 50% with this. + + + + + Escaping will only delay the inevitable. + + + + + M-08 + + + + + Attempted crime + + + + + Anyone that tries to commit a crime but fails to achieve it, is to be charged under the relevant crime while recording that it was an attempt. A crime being an attempt can be downgraded to a lower offense for punishment in increments of one level per instance. This however does not bind in the case of repeated offender. + + + + + If a fact is too ambiguous, in that it is possible to both interpret it as the beginning of a crime and as a legal endeavor, then Security cannot charge with attempted crime. + + +
+ + ## Infractions + - The maximum sentence per Infraction is 2 minutes + - First time offenders should only receive a warning and be logged, but it is situationally dependant + - Also covers minor misdemeanors + + + + Code + + + + + Crime + + + + + Description + + + + + Notes + + + + + 0-1 + + + + + Disorderly Conduct (V) + + + + + To conduct ones self in a way unsuitable for the retention of one’s position. + + + + + Minor disruptive behavior that isn't otherwise illegal, such as drunkenly harassing a crew member. + + + + + 0-3 + + + + + Superficial Vandalism (S) + + + + + To deface the station or property of another individual. + + + + + Minor damage that can be repaired with space cleaner or other cosmetic only damage. + + + + + 0-5 + + + + + Drug Possession + + + + + The possession of illegal drugs in quantities appropriate for personal use. + + + + + A pill or two of drugs is reasonable for recreational use, anything more is probably better charged as distribution. + + + + + 0-6 + + + + + Disruptive Communications + + + + + To knowingly disrupt or needlessly populate a radio frequency with the intent to be a nuisance to users of that frequency. + + + + + Radio spam bad. I'm looking at you, circuit makers. + + + + + 0-8 + + + + + Creating a Hazard (N) + + + + + To create a situation which may lead to the harm of others during normal operation in that department. + + + + + Minor unsafe behavior can also be charged under this crime. + + + + + 0-15 + + + + + Unreported Psionics + + + + + Knowingly failing to report the possession or awakening of psionic abilities to the Mantis Authority. + + + + + Transparency with the Mantis is crucial for ensuring station safety and the proper regulation of psionic capabilities. + This act applies to all sophonts, without exception for rank or status. + Non-compliance may result in mindbreaking or designation as a threat to station security. + Failure to report potentially lethal psionics may result in immediate mindbreaking at the discretion of Security and the Mantis Authority and should be charged under 2XX Code as a Moderate Crime. + + +
+ + # Felonies + - The maximum sentence per Felony is 4 minutes + - Minor crimes encompass low-severity offenses that typically do not pose a significant threat to station security or personnel. + + + + Code + + + + + Crime + + + + + Description + + + + + Notes + + + + + 1-01 + + + + + Assault (V) + + + + + To use physical force against someone without the apparent intent to harm them. + + + + + This covers minor criminal uses of force, Without intent to injure. That would be Aggravated Assault, or possibly a flavor of Murder. + + + + + 1-02 + + + + + Pick-pocketing (T) + + + + + To steal items belonging another person. + + + + + Small or easily replaceable items should be charged with this, otherwise consider a higher class of theft. + + + + + 1-03 + + + + + Minor Vandalism (S) + + + + + To damage, destroy, or permanently deface non-critical furniture, vendors, or personal property. + + + + + Large amounts of irreparable damage should be charged with Major Vandalism, Damage to critical infrastructure may be a form of Sabotage. + + + + + 1-04 + + + + + Vigilantism + + + + + To perform the responsibilities and duties of the security department without approval or due cause to act. + + + + + Valid hunting bad. Let the red shirts do their job. + + + + + 1-05 + + + + + Illegal Distribution + + + + + The possession of dangerous or illegal drugs/equipment in a quantity greater than that which is reasonable for personal consumption. + + + + + You should probably try to determine intent from additional evidence before charging someone with this. + + + + + 1-06 + + + + + Disturbing the Peace + + + + + To knowingly organize a movement which disrupts the normal operations of a department, or being a public disturbance. + + + + + Establishing a peaceful strike or otherwise disrupting standard department order without attachment to criminal entities. In the case of criminal attachment, refer to Rioting or Hostile Activity. + + + + + 1-08 + + + + + Negligence (N) + + + + + To be negligent in one's duty to an extent that it may cause harm, illness, or other negative effect, to another. + + + + + This is the charge for the doctor that accidentally pumps pentetic acid into an oozeling, or a scientist who accidentally floods toxins with room temperature CO2 or N2O. + + + + + 1-09 + + + + + Trespass (T) + + + + + To be in an area which a person has either not purposefully been admitted to, does not have access, or has been asked to leave by someone who has access to that area. + + + + + Being in an area, or having access to an area is not permission to that area. This crime covers non forcible entry into areas, such as following someone through a door. + + + + + 1-10 + + + + + Breaking and Entering (T) + + + + + To trespass into an area using a method of forcible entry. + + + + + This is a variant of trespass, but instead of tailgating someone or gaining access the individual had to break or disable something to enter, such as hacking an airlock. + + + + + 1-11 + + + + + Discriminatory Language + + + + + To use language which demeans, generalizes, or otherwise de-personafies the individual at which it is targeted. This counts towards all species. + + + + + Note that actual, OOC racism is not acceptable under the rules. + + +
+ + ## Moderate Crimes + - The maximum sentence per Moderate Crime is 7 minutes + - Moderate crimes involve more serious offenses that can disrupt station operations or endanger personnel, requiring stricter enforcement. + + + + Code + + + + + Crime + + + + + Description + + + + + Notes + + + + + 2-01 + + + + + Aggravated Assault (V) + + + + + To take physical action against a person with intent to grievously harm, but not to kill. + + + + + This covers criminal uses of force, with intent to seriously injure, but no intent to kill. That would be some variation of Murder. This law also constitutes unlawful mindbreaking. + + + + + 2-02 + + + + + Theft (T) + + + + + To steal equipment or items from a workplace, or items of high value from one's person. + + + + + This includes things like insulated gloves, crew pinpointers, normal ID cards, or personal items. + + + + + 2-03 + + + + + Vandalism, Major (S) + + + + + To destroy or damage non-critical furniture, vendors, or personal property in a manor that can not be repaired. + + + + + Spray painting all the lights red and wrecking tables in the bar is fun and all, but it makes it hard to figure out where the fire is, or to have a polite sip of tea. + + + + + 2-04 + + + + + Conspiracy (C) + + + + + To knowingly work with another person in the interest of committing an illegal action. + + + + + It's important to note that an unwitting accomplice is not the same as a conspirator. Timer should be identical to the perpetrator that person conspired with. + + + + + 2-05 + + + + + Hostile Affiliation (A) + + + + + To knowingly act as a recruiter, representative, messenger, ally, benefactor, or associate of an organization criminally opposed to the Corporation or the Biesel Republic. + + + + + Syndicate agents, such as traitors, will generally fall under this charge rather than "Enemy Combatant" (4-05) unless violent actions are confirmed. + + + + + 2-06 + + + + + Possession, Contraband Equipment (P) + + + + + To possess equipment not approved for use or production aboard Nanotrasen stations. This includes equipment produced by The Syndicate, Wizard Federation, or any other hostile organization as defined within Code 405. + + + + + Reminder: Contraband equipment should be stored in evidence as per SOP. It is not candy to hand out to Security. + + + + + 2-07 + + + + + Rioting (R) + + + + + To act as a member in a group which collectively commits acts of vandalism, or other felony crimes. + + + + + A riot typically constitutes five or more people acting in a coordinated effort. This can however vary on the size and circumstances of the station. + + + + + 2-08 + + + + + High Negligence (N) + + + + + To be negligent in one's duty to an extent that it may cause harm to multiple individuals, a department, or in a manor which directly leads to a serious injury of another person which requires emergency medical treatment. + + + + + Virologists releasing Spanish flu on accident, or scientists that flood science/toxins with plasma get charged here. It can also include engineers who delaminate the SM or wander around with highly radioactive material. + + + + + 2-09 + + + + + Trespass, Inherently Dangerous Areas (T) + + + + + Trespassing in an area which may lead to the injury of self, or others. This also includes areas like security or general command areas which do not contain any sensitive items or consoles. + + + + + Engineering spaces specifically related to an engine such as turbine, super-matter room/chamber, or toxins lab count here. This list is not exhaustive, but should not be extorted to increase sentencing. + + + + + 2-10 + + + + + Breaking and Entering, Inherently Dangerous Areas (T) + + + + + To trespass into an area which may lead to the injury of self or others using forcible entry. Refer to 209 for area restrictions. + + + + + Generally this will lead to injury. See breaking and entering, and apply any of the areas for Trespassing to dangerous areas. + + + + + 2-11 + + + + + Insubordination + + + + + To knowingly disobey a lawful order from a superior, or obstructing security from doing it's job. + + + + + Obey your heads of staff if they instruct you to do something within the scope of your job. This crime can normally be accompanied by a demotion at the discretion of the relevant head of staff. + + + + + 2-12 + + + + + Fraud (F) + + + + + To misrepresent ones intention in the interest of gaining property or money from another individual. + + + + + Lying to someone about a cargo bounty, for example. Be honest with your intentions. Don't stretch this, gaining items which normally wouldn't be considered theft likely aren't worth charging under fraud. + + + + + 2-15 + + + + + Mindguard Act + + + + + Prohibits harmful misuse of psionics, causing danger, trauma, or detrimental alterations to others or the station. + + + + + Individuals convicted under this act must wear anti-psionic helmet for the full duration fo their sentence, removing it is akin to breaking out of prison. + Sophonts charged under the Mindguard Act are to be evaluated as potential candidates for mindbreaking or sacrifical use in the events of code white emergency. + Cases involving the misuse of lethal psionic powers or familiars fall under Code 3XX and should be treated as a Major Offense. + + +
+ + ## Major Crimes + - The maximum sentence per Major Crime is 10 minutes + - Major crimes are severe offenses that pose significant threats to station security, personnel safety, or corporate interests. These crimes warrant serious repercussions and careful documentation. + + + + Code + + + + + Crime + + + + + Description + + + + + Notes + + + + + 3-01 + + + + + Murder (V) + + + + + To purposefully kill someone. + + + + + Please note, that negligence is covered under Code 208 + + + + + 3-02 + + + + + Larceny (T) + + + + + To steal rare, extraordinarily expensive (Items of greater than 1000 credit value), or restricted equipment from secure areas or one's person. This also constitutes kidnapping. + + + + + This does not include theft of people's ID cards, which are likely to hold a value of more than 1000 credits. + It does however cover ID cards which could lead into high security areas, such as the Captain's, Head of Personnel's, or Head of Security's. + + + + + 3-03 + + + + + Sabotage (S) + + + + + To destroy station assets or resources critical to normal or emergency station procedures, or cause sections of the station to become uninhabitable. + + + + + Spacing areas, tampering with fire alarms, pipes, wiring, disabling the emitters on the Supermatter and other general station assets. This includes unauthorized construction. + + + + + 3-04 + + + + + High Conspiracy (C) + + + + + To knowingly work with another person in the interest of committing a major or greater crime. + + + + + Generally this will be shown through communications records or other means of surveillance. The most basic proof of course is capturing the two together in the act. + + + + + 3-05 + + + + + Hostile Activity (A) + + + + + To knowingly commit an act which is in direct opposition to the interests of Nanotrasen, Or to directly assist a known enemy of the corporation. + + + + + Impeding security's ability to detain a dangerous convict, or walling off the security department or other critical areas. + + + + + 3-06 + + + + + Posession, Dangerous Contraband (P) + + + + + To possess restricted or illegal equipment which has a primary purpose of causing harm to others, or large amounts of destruction. + + + + + Energy daggers, swords, guns (without a weapons permit), and so on count here. And no, the bartender can not have a captured LMG because they have a weapon permit. Again, security, those are not toys, put them in evidence. + + + + + 3-07 + + + + + Inciting a Riot (R) + + + + + To perform actions in the interest of causing large amounts of unrest up to and including rioting. + + + + + This is for the ring leader in any insurrection or riot. Prisoners may have their radios removed and be contained in areas which are not visible to the general populace. + + + + + 3-08 + + + + + Manslaughter (V) (N) + + + + + To unintentionally kill someone through negligent, but not malicious, actions. + + + + + They didn't mean to do it but someone's dead now. It's important to remember that you may want them to fix what they've done before throwing them in the brig, in the example of medical malpractice. + + + + + 3-09 + + + + + Trespass, High Security Areas (T) + + + + + Trespassing in any of the following without appropriate permission or access: Command areas, Personal offices, Weapons storage, or other high security areas. + + + + + The clown is not legally allowed to trail the captain into the bridge unless it is for a prank according to their Standard Operating Procedures. + + + + + 3-10 + + + + + Breaking and Entering, High Security Areas (T) + + + + + To commit trespassing into a secure area as defined in Code 309 using forcible entry. + + + + + Please note, paramedics may have to commit breaking and entry in order to perform their duties. + + + + + 3-11 + + + + + Dereliction (N) + + + + + To willfully abandon an obligation that is critical to the station's continued operation. + + + + + Engineer didn't set up power? Doctor's doing botany and not treating the five corpses in med-bay? Miners not providing materials for station objectives? That all goes here. + + + + + 3-12 + + + + + Corporate Fraud (F) + + + + + To misrepresent one's intention in the interest of gaining property or money from Nanotrasen, or to gain or give property or money from Nanotrasen without proper authorization. + + + + + If you receive money to order something for a department don't pocket that money. + + + + + 3-13 + + + + + Identity Theft + + + + + To assume the identity of another individual. + + + + + This can include utilizing someone else PDA in order to impersonate them. + + + + + 3-14 + + + + + Kidnapping + + + + + To cause a intellectual being's unlawful confinement or restriction of free movement against their will, This act can involve the use of force, threats, or deception. + + + + + This can include the intent to use the victim as a ransom, as a shield or hostage, or inflict harm. or otherwise exploit them. + + + + + 3-15 + + + + + Mindbreaking + + + + + To unlawfully and maliciously rid a psionic sophont of their powers. + + + + + This law does not apply to lawful mindbreaking of individuals misusing their psionics or having inherently dangerous abilities. + In cases where unlawful mindbreaking results in the loss of a soul, rendering the individual a husked body, this act shall be escalated to 4XX Capital Punishment, as the sophont has been unjustly and irreversibly deprived of all life. + + +
+ + ## Capital Punishments + - The sentences given for Capital Offenses are permanent imprisonment or execution + - Charging someone under Capital Punishments needs to be authorized by Warden, Head of Security or Captain + - Capital crimes are the gravest offenses that represent an existential threat to the station, its personnel, or NanoTrasen's corporate sovereignty. These acts demand the most severe penalties, including permanent imprisonment or execution. + + + + Code + + + + + Crime + + + + + Description + + + + + Notes + + + + + 4-01 + + + + + Prime/Mass Murder (V) + + + + + To commit the act of murder, with clear intent to kill, and clear intent or to have materially taken steps to prevent the revival of the victim + + + + + This includes debraining a corpse with purpose other than cloning. + + + + + 4-02 + + + + + Grand Larceny (T) + + + + + To steal inherently dangerous items from their storage, one's person, or other such methods acquire through illicit means. + + + + + This includes items such as HoS's gun, RD's teleporter, SM sliver, Nuke disk and other High Risk items. + + + + + 4-03 + + + + + Grand Sabotage (S) + + + + + To destroy or modify station assets or equipment without which the station may collapse or otherwise become uninhabitable. + + + + + This may include tampering with station records, purposefully delaminating the SM, destroying the SMES power storage equipment, plasma flooding, or super-heating distro. + + + + + 4-04 + + + + + Espionage (C) + + + + + To knowingly betray critical information to enemies of the station. + + + + + Telling nukies where the disk or a pinpointer is would wind up here. Please note, knowingly assisting antagonists as a non-antag may violate server rules. + + + + + 4-05 + + + + + Enemy Combatant (A) + + + + + To be confirmed without a shadow of a doubt as an active member of an organization that is in violent opposition to the Corporation or the Biesel Republic. + + + + + Membership in an opposition organization without further actions should be charged under Code 2-05. This is a LAST RESORT, and a trial must be held before convicting personnel who were at any time listed on the crew manifest. + + + + + 4-06 + + + + + Possession, Corporate Secrets (P) + + + + + To possess secret documentation or high density tamper-resistant data storage devices (Blackboxes) from any organization without authorization by Nanotrasen. + + + + + Explorers and miners returning with secret documents or black boxes are not committing a crime, as retrieval as such can fall under their normal duties. The greyshirt that just ran off with the black box or documents? That's a criminal. + + + + + 4-07 + + + + + Subversion of the Chain of Command (R) + + + + + Disrupting the chain of command via either murder of a commanding officer or illegally declaring oneself to be a commanding officer. + + + + + Security officers are not considered to be commanding officers. Heads of staff, captains, Centcom Commanders and admirals are. This does not include replacement of heads of staff with solid reasoning backing it. (Derelection, Negligence, unfit for Job) + + + + + 4-08 + + + + + Biological Terror (V)(N) + + + + + To knowingly release, cause, or otherwise cause the station to become affected by a disease, plant, or other biological form which may spread unconstrained and or cause serious physical harm. + + + + + Don't immediately lynch the virologist, but an investigation might be a good idea. + + +
+
\ No newline at end of file diff --git a/Resources/ServerInfo/Guidebook/ServerRules/SpaceLaw/SLRestrictedGear.xml b/Resources/ServerInfo/Guidebook/ServerRules/SpaceLaw/SLRestrictedGear.xml index ce804009a1..e9a9ef1282 100644 --- a/Resources/ServerInfo/Guidebook/ServerRules/SpaceLaw/SLRestrictedGear.xml +++ b/Resources/ServerInfo/Guidebook/ServerRules/SpaceLaw/SLRestrictedGear.xml @@ -1,21 +1,24 @@  + The following outlines the categories of restricted gear aboard NanoTrasen property. Unauthorized possession or use of these items is considered a violation of corporate regulations and may be met with disciplinary action. Access and permissions are clearly defined based on job roles. + # Space Law: Restricted Gear - - \[ERT/Central Command\] ERT and central command clothing - - \[Command\] Command clothing - - \[Security\] Security clothing - - \[Security\] Less than lethal and non-lethal weapons, excluding disablers and beanbag shotguns - - \[Security/Command\] Disablers - - \[Security/Bartender\] Beanbag shotguns - - \[Security\] Flash technology, excluding handheld flashes - - \[Security/Science/Command\] Handheld flashes - - \[Security\] Helmets and shields - - \[Security/Command/Bartender\] Protective vests and chest rigs - - \[Security/Command\] Restraining gear - - \[Security/Command\] Security HUDs - - \[Engineering\] Engineering goggles - - \[None\] Improvised less lethal and non-lethal weaponry - - \[None\] Unauthorized PDA software - - \[None\] Syndicate clothing - - \[None\] Syndicate equipment, excluding communication equipment - - \[Security\] Syndicate communication equipment equipment + + - [color=#cb0000]\[ERT/Central Command\][/color] Equipment and clothing exclusive to Emergency Response Teams (ERT) or Central Command personnel + - [color=#cb0000]\[Command\][/color] Command-level clothing and equipment, including headsets with encrypted channels or access overlays + - [color=#cb0000]\[Security\][/color] Security clothing, protective gear, and equipment + - [color=#cb0000]\[Security\][/color] Less-than-lethal and non-lethal weaponry, excluding general-purpose disablers and beanbag shotguns + - [color=#cb0000]\[Security\][/color] Flash technology (e.g., flashbang grenades, flash projectors), excluding handheld flashes + - [color=#cb0000]\[Security\][/color] Helmets, riot shields, and ballistic shields + - [color=#cb0000]\[Security\][/color] Security HUDs and restraining gear (e.g., handcuffs) + - [color=#cb0000]\[Security/Command\][/color] Disablers and restraining gear used by authorized personnel + - [color=#cb0000]\[Security/Command\][/color] Security HUDs + - [color=#cb0000]\[Security/Command/Bartender\][/color] Protective vests and chest rigs designed to mitigate damage from projectiles or blunt force + - [color=#cb0000]\[Security/Bartender\][/color] Beanbag shotguns (Bartenders may only use them within station bar premises) + - [color=#cb0000]\[Security/Science/Command\][/color] Handheld flashes + - [color=#cb0000]\[Engineering\][/color] Engineering goggles, and Rapid Construction Devices + - [color=#cb0000]\[None\][/color] Unauthorized PDA software + - [color=#cb0000]\[None\][/color] Ammunition or explosives not issued by NanoTrasen + - [color=#cb0000]\[None\][/color] Body armor or tactical suits unauthorized for use by crew roles + - [color=#cb0000]\[None\][/color] Communication equipment designed to intercept, decrypt, or bypass corporate channels + - [color=#cb0000]\[None\][/color] Terrorist paraphernalia, including items with clear indicators of association with hostile organizations diff --git a/Resources/ServerInfo/Guidebook/ServerRules/SpaceLaw/SLRestrictedWeapons.xml b/Resources/ServerInfo/Guidebook/ServerRules/SpaceLaw/SLRestrictedWeapons.xml index c1d8ff3b02..edbd88a5e6 100644 --- a/Resources/ServerInfo/Guidebook/ServerRules/SpaceLaw/SLRestrictedWeapons.xml +++ b/Resources/ServerInfo/Guidebook/ServerRules/SpaceLaw/SLRestrictedWeapons.xml @@ -1,11 +1,15 @@  -# Space Law: Restricted Weapons -- \[Security\] Lethal firearms, excluding syndicate firearms, proto kinetic accelerators, glaives, daggers, crushers and the antique laser gun -- \[Security/Salvage\] Proto kinetic accelerators, glaives, daggers, and crushers -- \[Security/Command\] Antique laser gun -- \[None\] Syndicate weapons -- \[None\] Swords -- \[None\] Improvised weaponry, including baseball bats -- \[None\] Lethal implants -- \[None\] Other lethal weapons + The following outlines the restrictions and allowances for weapon possession and usage on NanoTrasen property. Weapon categories and authorized users are clearly defined to maintain order and security aboard the station. + + # Space Law: Restricted Weapons + +- [color=#cb0000]\[Security\][/color] Lethal firearms (excluding unmarked weapons, specialty tools like proto-kinetic accelerators) +- [color=#cb0000]\[Security/Salvage\][/color] Specialty mining tools such as proto-kinetic accelerators, glaives, daggers, and crushers. (Salvage must use these tools off-station or in authorized operations only) +- [color=#cb0000]\[Security/Command\][/color] Command-approved antique weapons (e.g., antique laser gun) +- [color=#cb0000]\[Bartender\][/color] Civilian firearms, limited to less-than-lethal ammunition only +- [color=#cb0000]\[None\][/color] Unlicensed firearms +- [color=#cb0000]\[None\][/color] Exotic weapons (e.g., swords) +- [color=#cb0000]\[None\][/color] Improvised weapons (e.g., baseball bats, pipe tools) +- [color=#cb0000]\[None\][/color] Lethal implants +- [color=#cb0000]\[None\][/color] Other lethal weapons not listed above diff --git a/Resources/ServerInfo/Guidebook/ServerRules/SpaceLaw/SpaceLaw.xml b/Resources/ServerInfo/Guidebook/ServerRules/SpaceLaw/SpaceLaw.xml index f2b913a171..7366862fc1 100644 --- a/Resources/ServerInfo/Guidebook/ServerRules/SpaceLaw/SpaceLaw.xml +++ b/Resources/ServerInfo/Guidebook/ServerRules/SpaceLaw/SpaceLaw.xml @@ -3,17 +3,18 @@ On Space Station 14, stations operate under abbreviated space law. All crew, passengers, and visitors aboard the station are expected to follow these laws. Foreign invaders, such as nuclear operatives, ninjas, and pirates, are not protected under space law. Traitors are not foreign invaders so are usually protected by space law. + Exceptions are made in cases of unnatural phenomena similar to changelings and heretics, where their humanity is put to question. Space Law is not the server rules, but some rules reference Space Law and require it to be followed by certain people or to some degree. ## Treatment Of Prisoners Prisoners still have certain rights that must be upheld by law enforcement: - - Prisoners must be granted adequate medical care. - - Prisoners must be allowed access to basic communications equipment (Radios) so long as they are not abused. - - Prisoners must be granted clothing, food, water, shelter and safety. If the brig is no longer safe, confinement must be established in another location. - - Prisoners must be given access to legal counsel during an interrogation if requested and available. - - Prisoners must be given their shift mandated PDA after confinement has finished, unless there is solid proof of PDA tampering. In case of tampering, the PDA is to be secured and replaced with a new unit. - - Prisoners must be granted freedom of movement, and should not be restrained with handcuffs or other devices after incarceration unless there is an undue risk to life and limb. Similarly, any prisoners held for permanent confinement should be held in the communal brig, and should not be confined to a solitary cell unless they pose a risk to life and limb. + - Prisoners must be granted adequate medical care. + - Prisoners must be allowed access to basic communications equipment (Radios) so long as they are not abused. + - Prisoners must be granted clothing, food, water, shelter and safety. If the brig is no longer safe, confinement must be established in another location. + - Prisoners must be given access to legal counsel during an interrogation if requested and available. + - Prisoners must be given their shift mandated PDA after confinement has finished, unless there is solid proof of PDA tampering. In case of tampering, the PDA is to be secured and replaced with a new unit. + - Prisoners must be granted freedom of movement, and should not be restrained with handcuffs or other devices after incarceration unless there is an undue risk to life and limb. Similarly, any prisoners held for permanent confinement should be held in the communal brig, and should not be confined to a solitary cell unless they pose a risk to life and limb. ## Search and Seizure A personnel search is a seizure of the objects in a person's backpack, hands, coat, belt, and pockets. If any contraband is found during a search, the officer may choose to further the search into a detainment or simply confiscate the restricted items. After the search is conducted, all legal items are to be returned to the person. A crewmate may legally decline any search conducted without probable cause or a warrant while the alert level is green. It should be noted that if the alert level is blue or above, all personnel searches are legal. @@ -39,29 +40,42 @@ [color=#a4885c]Stackable Crimes:[/color] Crimes are to be considered 'stackable' in the sense that if you charge someone with two or more different crimes, you should combine the times you would give them for each crime. Linked crimes, shown in matching colors on the Quick Crime Guide, can not be stacked and instead override each other, you should pick the highest crime that matches the case. - - Example: A suspect has committed a 2-01 (possession of restricted gear) and a 3-01 (possession of restricted weapons). The maximum sentence here would be 10 minutes due to them being linked crimes, and 3-01 is the greater crime. - - Example 2: A suspect commits a 3-04 (Secure trespassing) and a 3-06 (manslaughter). Those crimes stack since they are not linked crimes. You could sentence for a maximum of 20 minutes, but context matters heavily, and maximum sentences should only be used for the worst offenders. + - Example: A suspect has committed a 2-01 (possession of restricted gear) and a 3-01 (possession of restricted weapons). The maximum sentence here would be 10 minutes due to them being linked crimes, and 3-01 is the greater crime. + - Example 2: A suspect commits a 3-04 (Secure trespassing) and a 3-06 (manslaughter). Those crimes stack since they are not linked crimes. You could sentence for a maximum of 20 minutes, but context matters heavily, and maximum sentences should only be used for the worst offenders. [color=#a4885c]Repeater Offenders:[/color] Repeated crimes are when someone is released for a crime and then goes to commit the same crime within the same shift. Repeated crimes can be charged with tacked-on time; first repeat: 3:00, second repeat: 6:00, third repeat: permanent confinement. It should be noted each tacked-on time is directly linked to one type of crime, so for example, if someone does their first repeat of trespass and petty theft, you can charge them with an extra 6 minutes. [color=#a4885c]Accessory, Attempting, And Intention:[/color] If someone intentionally, knowingly and substantially assists someone in enacting a crime they can be charged with the relevant crimes, such as an engineer giving someone tools, who says they are going to break into an area. Same goes for a clear and solid attempt at a crime, or a person who shows clear intent to act out a crime, such as a syndicate nuclear operative arming a nuke but getting arrested before it goes off, they can still be charged with terrorism. Does not apply to crimes that have an attempted listing already, like attempted murder. + ## Categories of Crime + Space Law divides offenses into several categories based on severity and nature. These include: + - [color=yellow][bold]Minor Infractions[/bold][/color]: Non-critical disruptions or low-impact crimes. + - [color=orange][bold]Moderate Crimes[/bold][/color]: Actions with moderate consequences, affecting individuals or station operations. + - [color=red][bold]Major Crimes[/bold][/color]: Severe breaches of safety, security, or operational integrity. + - [color=purple][bold]Capital Crimes[/bold][/color]: Offenses warranting the most serious consequences, including potential execution or permanent confinement. + ## Normal Punishments - - [color=#a4885c]Warning:[/color] For minor crimes, fix the issue, then warn the person not to attempt the crime again. If they still proceed to do it at a later date, a brig time may be better. - - [color=#a4885c]Confinement:[/color] The typical punishment, being confined in a cell for a temporary amount of time according to the crimes. - - [color=#a4885c]Demotion:[/color] Entails removing all departmental gear they have on their person and revoking the involved department access off their ID. This requires the captain's or involved department head's approval. Demotions should only be issued if the person pose a threat to their own department or are in a position where they have/can abuse their job's gear to commit further crimes. + - [color=#a4885c]Warning:[/color] For minor crimes, fix the issue, then warn the person not to attempt the crime again. If they still proceed to do it at a later date, a brig time may be better. + - [color=#a4885c]Confinement:[/color] The typical punishment, being confined in a cell for a temporary amount of time according to the crimes. + - [color=#a4885c]Demotion:[/color] Entails removing all departmental gear they have on their person and revoking the involved department access off their ID. This requires the captain's or involved department head's approval. Demotions should only be issued if the person pose a threat to their own department or are in a position where they have/can abuse their job's gear to commit further crimes. ## Major Punishments [color=#a4885c]Permanent Confinement:[/color] Being held in the permanent brig for the entire duration of the shift. A person is eligible for permanent confinement if their timed sentence would exceed 15 minutes. Any persons subject to this punishment are required to be transported in cuffs to CentComm at the end of the shift. A permanent prisoner can not be deprived of anything covered by the section "Treatment Of Prisoners". [color=#a4885c]Execution:[/color] A humane way of dealing with extremely unruly crewmates. A prisoner who has been given the death sentence may pick how they wish to be killed, common methods are firing line, lethal injection, exile, and high voltage electrocution. Another alternate method of "execution" is the process of placing a staff's mind into a borg, this is allowed so long as it is lawful. Execution can only be issued with the captain's or acting captain's approval; if the HoS is acting captain or there is no acting captain, all heads of staff are to hold a vote on the matter. + ## Amendments and Exceptions + Space Law can be amended or overridden under specific circumstances: + - Emergency Situations: Command staff may implement temporary measures to restore order. + - Central Command Overrides: Directives from Central Command supersede Space Law where applicable. + - Executive Discretion: Captains and Heads of Staff have limited authority to interpret and enforce laws based on context. + ## Restricted Items Items in the lists are preceded by an indication of which department or job is legally allowed to use or possess the item on most stations. The station captain may modify these lists as they see fit so long as they exercise due care and provide reasonable notification to the station. Members of command who oversee a department that is permitted to use a restricted item may issue permits to specific people outside of their department to use those items. "None" indicates that there are no departments or roles authorized to use or possess the item. - - [textlink="List of Controlled Substances" link="SpaceLawControlledSubstances"] - - [textlink="List of Restricted Gear" link="SpaceLawRestrictedGear"] - - [textlink="List of Restricted Weapons" link="SpaceLawRestrictedWeapons"] + - [textlink="List of Controlled Substances" link="SpaceLawControlledSubstances"] + - [textlink="List of Restricted Gear" link="SpaceLawRestrictedGear"] + - [textlink="List of Restricted Weapons" link="SpaceLawRestrictedWeapons"] ## Crime Listing - - [textlink="Crime Listing" link="SpaceLawCrimeList"] + - [textlink="Crime Listing" link="SpaceLawCrimeList"] From 7f1cdb1bfe8b22f48a46e7a18423dbb78699421b Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Sun, 12 Jan 2025 23:09:57 +0000 Subject: [PATCH 06/39] Automatic Changelog Update (#1386) --- Resources/Changelog/Changelog.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index b36c2ef429..2c8b134a02 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -9757,3 +9757,14 @@ Entries: id: 6682 time: '2025-01-12T23:08:43.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1510 +- author: BlueHNT + changes: + - type: Add + message: Added New Law + - type: Tweak + message: Tweaked Space Law entries + - type: Remove + message: Removed Old Law + id: 6683 + time: '2025-01-12T23:09:32.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1386 From 5828f6b31fbdd4c9970c0c1471757cf9e412a5df Mon Sep 17 00:00:00 2001 From: Jonathan <44554691+Mike32oz@users.noreply.github.com> Date: Sun, 12 Jan 2025 17:11:11 -0600 Subject: [PATCH 07/39] Modify the Cargo Shuttle and ATS. (#1457) # Description Howdy Folks, I've made a few modifications to the cargo shuttle and the automated Trading station (ATS). First, I added two more seats to the shuttle. I also added some tools, including a wrench and a crowbar. I also provided proper air distribution throughout the shuttle. I removed the plastic airtight flats because the blast door opens, but can't be closed. The same goes for the ATS. Finally, I added a station anchor, a clean bot to the ATS, and a couple of lockers. The place doesn't get dirty or drift away.

Media

![Example Media Embed](https://example.com/thisimageisntreal.png) ![Screenshot 2025-01-07 111438](https://github.com/user-attachments/assets/b5f44167-5f3c-4af7-8281-148a3d17b56d) ![Screenshot 2025-01-06 012814](https://github.com/user-attachments/assets/411f208d-8ddd-47c0-9f90-ed1dbd7b6bd0)

--- # Changelog :cl: Mike32oz - add: Station anchor on ATS - add: Clean bot and two locker - tweak: Air distribution on cargo shuttle - add: two seats including a wrench and a crowbar - remove: Plastic airtight flats and replace them with tiny fans Signed-off-by: VMSolidus Co-authored-by: VMSolidus --- Resources/Maps/Shuttles/cargo.yml | 1075 +++-- Resources/Maps/Shuttles/trading_outpost.yml | 4348 +++++++++---------- 2 files changed, 2779 insertions(+), 2644 deletions(-) diff --git a/Resources/Maps/Shuttles/cargo.yml b/Resources/Maps/Shuttles/cargo.yml index 8a3007dd9c..b2041aeba1 100644 --- a/Resources/Maps/Shuttles/cargo.yml +++ b/Resources/Maps/Shuttles/cargo.yml @@ -7,17 +7,31 @@ tilemap: 89: FloorShuttleWhite 93: FloorSteel 108: FloorTechMaint + 1: Lattice 126: Plating entities: - proto: "" entities: - - uid: 173 + - uid: 1 + components: + - type: MetaData + name: Map Entity + - type: Transform + - type: Map + mapPaused: True + - type: PhysicsMap + - type: GridTree + - type: MovedGrids + - type: Broadphase + - type: OccluderTree + - type: LoadedMap + - uid: 2 components: - type: MetaData name: Cargo shuttle - type: Transform pos: 2.2710133,-2.4148211 - parent: invalid + parent: 1 - type: MapGrid chunks: -1,0: @@ -30,7 +44,7 @@ entities: version: 6 -1,-1: ind: -1,-1 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAXQAAAAAAXQAAAAAAXQAAAAAAXQAAAAAAXQAAAAAA + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAQAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAXQAAAAAAXQAAAAAAXQAAAAAAXQAAAAAAXQAAAAAA version: 6 0,-1: ind: 0,-1 @@ -106,34 +120,33 @@ entities: version: 2 data: tiles: - -2,-1: - 0: 52428 - -1,-1: - 0: 65535 - -1,-2: - 0: 61440 + -2,0: + 0: 51400 -2,1: - 0: 52428 + 0: 16520 + -2,-1: + 0: 32832 -1,0: 0: 65535 -1,1: - 0: 65535 + 0: 30719 + -2,2: + 0: 128 + -1,-1: + 0: 63346 -1,2: - 0: 255 - 0,-1: - 0: 4369 - 0,1: - 0: 4369 - 0,2: - 0: 1 + 0: 130 0,0: - 0: 4369 - -2,0: - 0: 52428 - -2,2: - 0: 140 + 0: 4112 + 0,1: + 0: 4096 -2,-2: 0: 32768 + -1,-2: + 1: 8192 + 0: 32768 + 0,-1: + 0: 16 uniqueMixes: - volume: 2500 temperature: 293.15 @@ -150,6 +163,21 @@ entities: - 0 - 0 - 0 + - volume: 2500 + immutable: True + moles: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 chunkSize: 4 - type: OccluderTree - type: Shuttle @@ -159,1097 +187,1262 @@ entities: - type: GravityShake shakeTimes: 10 - type: GasTileOverlay +- proto: AirAlarm + entities: + - uid: 3 + components: + - type: Transform + pos: -4.5,6.5 + parent: 2 + - type: DeviceList + devices: + - 118 + - 9 + - 119 - proto: AirCanister entities: - - uid: 172 + - uid: 4 components: - type: Transform pos: -3.5,-1.5 - parent: 173 - - type: AtmosDevice - joinedGrid: 173 + parent: 2 - proto: AirlockGlassShuttle entities: - - uid: 45 + - uid: 5 components: - type: Transform rot: -1.5707963267948966 rad pos: -5.5,3.5 - parent: 173 - - uid: 50 + parent: 2 + - uid: 6 components: - type: Transform rot: -1.5707963267948966 rad pos: -5.5,1.5 - parent: 173 - - uid: 52 + parent: 2 + - uid: 7 components: - type: Transform rot: 1.5707963267948966 rad pos: 0.5,3.5 - parent: 173 - - uid: 53 + parent: 2 + - uid: 8 components: - type: Transform rot: 1.5707963267948966 rad pos: 0.5,1.5 - parent: 173 + parent: 2 +- proto: AirSensor + entities: + - uid: 9 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,4.5 + parent: 2 + - type: DeviceNetwork + configurators: + - invalid + deviceLists: + - 3 - proto: APCHyperCapacity entities: - - uid: 79 + - uid: 10 components: - type: Transform pos: -0.5,6.5 - parent: 173 + parent: 2 - proto: AtmosDeviceFanTiny entities: - - uid: 168 + - uid: 11 components: - type: Transform pos: -5.5,1.5 - parent: 173 - - uid: 169 + parent: 2 + - uid: 12 components: - type: Transform pos: -5.5,3.5 - parent: 173 - - uid: 170 + parent: 2 + - uid: 13 components: - type: Transform pos: 0.5,3.5 - parent: 173 - - uid: 171 + parent: 2 + - uid: 14 components: - type: Transform pos: 0.5,1.5 - parent: 173 + parent: 2 + - uid: 128 + components: + - type: Transform + pos: 0.5,4.5 + parent: 2 + - uid: 129 + components: + - type: Transform + pos: -5.5,0.5 + parent: 2 + - uid: 130 + components: + - type: Transform + pos: -5.5,4.5 + parent: 2 + - uid: 131 + components: + - type: Transform + pos: 0.5,0.5 + parent: 2 - proto: BlastDoor entities: - - uid: 1 + - uid: 15 components: - type: Transform - pos: 0.5,4.5 - parent: 173 + rot: -1.5707963267948966 rad + pos: -5.5,0.5 + parent: 2 - type: DeviceLinkSink links: - - 57 - - uid: 3 + - 145 + - uid: 16 components: - type: Transform - pos: -5.5,0.5 - parent: 173 + rot: -1.5707963267948966 rad + pos: -5.5,4.5 + parent: 2 - type: DeviceLinkSink links: - - 55 - - uid: 54 + - 142 + - uid: 17 components: - type: Transform + rot: -1.5707963267948966 rad pos: 0.5,0.5 - parent: 173 + parent: 2 - type: DeviceLinkSink links: - - 58 - - uid: 56 + - 143 + - uid: 18 components: - type: Transform - pos: -5.5,4.5 - parent: 173 + rot: -1.5707963267948966 rad + pos: 0.5,4.5 + parent: 2 - type: DeviceLinkSink links: - - 2 + - 144 - proto: CableApcExtension entities: - - uid: 100 + - uid: 19 + components: + - type: Transform + pos: -3.5,-1.5 + parent: 2 + - uid: 20 components: - type: Transform pos: -0.5,6.5 - parent: 173 - - uid: 101 + parent: 2 + - uid: 21 components: - type: Transform pos: -1.5,6.5 - parent: 173 - - uid: 102 + parent: 2 + - uid: 22 components: - type: Transform pos: -2.5,6.5 - parent: 173 - - uid: 103 + parent: 2 + - uid: 23 components: - type: Transform pos: -2.5,5.5 - parent: 173 - - uid: 104 - components: - - type: Transform - pos: -2.5,8.5 - parent: 173 - - uid: 105 - components: - - type: Transform - pos: -3.5,8.5 - parent: 173 - - uid: 106 + parent: 2 + - uid: 24 components: - type: Transform - pos: -1.5,8.5 - parent: 173 - - uid: 107 + pos: -4.5,8.5 + parent: 2 + - uid: 25 components: - type: Transform pos: -3.5,6.5 - parent: 173 - - uid: 108 + parent: 2 + - uid: 26 components: - type: Transform pos: -3.5,7.5 - parent: 173 - - uid: 109 + parent: 2 + - uid: 27 components: - type: Transform pos: -2.5,4.5 - parent: 173 - - uid: 110 + parent: 2 + - uid: 28 components: - type: Transform pos: -2.5,3.5 - parent: 173 - - uid: 111 + parent: 2 + - uid: 29 components: - type: Transform pos: -2.5,2.5 - parent: 173 - - uid: 112 + parent: 2 + - uid: 30 components: - type: Transform pos: -2.5,1.5 - parent: 173 - - uid: 113 + parent: 2 + - uid: 31 components: - type: Transform pos: -2.5,0.5 - parent: 173 - - uid: 114 + parent: 2 + - uid: 32 components: - type: Transform pos: -2.5,-0.5 - parent: 173 - - uid: 115 + parent: 2 + - uid: 33 components: - type: Transform pos: -2.5,-1.5 - parent: 173 - - uid: 116 + parent: 2 + - uid: 34 components: - type: Transform pos: -1.5,-4.5 - parent: 173 - - uid: 117 + parent: 2 + - uid: 35 components: - type: Transform pos: -1.5,-1.5 - parent: 173 - - uid: 118 + parent: 2 + - uid: 36 components: - type: Transform pos: -1.5,-2.5 - parent: 173 - - uid: 119 + parent: 2 + - uid: 37 components: - type: Transform - pos: -2.5,-4.5 - parent: 173 - - uid: 120 + pos: -4.5,-1.5 + parent: 2 + - uid: 38 components: - type: Transform pos: -1.5,-3.5 - parent: 173 - - uid: 121 + parent: 2 + - uid: 39 components: - type: Transform pos: -3.5,-4.5 - parent: 173 - - uid: 122 + parent: 2 + - uid: 40 components: - type: Transform pos: -3.5,-3.5 - parent: 173 - - uid: 123 + parent: 2 + - uid: 41 components: - type: Transform pos: -4.5,7.5 - parent: 173 - - uid: 124 + parent: 2 + - uid: 42 components: - type: Transform pos: -0.5,7.5 - parent: 173 - - uid: 125 + parent: 2 + - uid: 43 components: - type: Transform pos: -1.5,3.5 - parent: 173 - - uid: 126 + parent: 2 + - uid: 44 components: - type: Transform pos: -0.5,3.5 - parent: 173 - - uid: 127 + parent: 2 + - uid: 45 components: - type: Transform pos: -1.5,1.5 - parent: 173 - - uid: 128 + parent: 2 + - uid: 46 components: - type: Transform pos: -0.5,1.5 - parent: 173 - - uid: 129 + parent: 2 + - uid: 47 components: - type: Transform pos: -3.5,1.5 - parent: 173 - - uid: 130 + parent: 2 + - uid: 48 components: - type: Transform pos: -4.5,1.5 - parent: 173 - - uid: 131 + parent: 2 + - uid: 49 components: - type: Transform pos: -3.5,3.5 - parent: 173 - - uid: 132 + parent: 2 + - uid: 50 components: - type: Transform pos: -4.5,3.5 - parent: 173 - - uid: 163 + parent: 2 + - uid: 51 components: - type: Transform pos: -4.5,-3.5 - parent: 173 + parent: 2 + - uid: 52 + components: + - type: Transform + pos: -0.5,8.5 + parent: 2 + - uid: 53 + components: + - type: Transform + pos: -4.5,-2.5 + parent: 2 - proto: CableHV entities: - - uid: 80 + - uid: 54 components: - type: Transform pos: -1.5,-2.5 - parent: 173 - - uid: 81 + parent: 2 + - uid: 55 components: - type: Transform pos: -2.5,-2.5 - parent: 173 - - uid: 86 + parent: 2 + - uid: 56 components: - type: Transform pos: -2.5,-3.5 - parent: 173 + parent: 2 - proto: CableMV entities: - - uid: 87 + - uid: 57 components: - type: Transform pos: -1.5,-2.5 - parent: 173 - - uid: 88 + parent: 2 + - uid: 58 components: - type: Transform pos: -1.5,-1.5 - parent: 173 - - uid: 89 + parent: 2 + - uid: 59 components: - type: Transform pos: -2.5,-1.5 - parent: 173 - - uid: 90 + parent: 2 + - uid: 60 components: - type: Transform pos: -2.5,-0.5 - parent: 173 - - uid: 91 + parent: 2 + - uid: 61 components: - type: Transform pos: -2.5,0.5 - parent: 173 - - uid: 92 + parent: 2 + - uid: 62 components: - type: Transform pos: -2.5,1.5 - parent: 173 - - uid: 93 + parent: 2 + - uid: 63 components: - type: Transform pos: -2.5,2.5 - parent: 173 - - uid: 94 + parent: 2 + - uid: 64 components: - type: Transform pos: -2.5,3.5 - parent: 173 - - uid: 95 + parent: 2 + - uid: 65 components: - type: Transform pos: -2.5,4.5 - parent: 173 - - uid: 96 + parent: 2 + - uid: 66 components: - type: Transform pos: -2.5,5.5 - parent: 173 - - uid: 97 + parent: 2 + - uid: 67 components: - type: Transform pos: -2.5,6.5 - parent: 173 - - uid: 98 + parent: 2 + - uid: 68 components: - type: Transform pos: -1.5,6.5 - parent: 173 - - uid: 99 + parent: 2 + - uid: 69 components: - type: Transform pos: -0.5,6.5 - parent: 173 + parent: 2 - proto: CableTerminal entities: - - uid: 82 + - uid: 70 components: - type: Transform rot: 3.141592653589793 rad pos: -2.5,-3.5 - parent: 173 + parent: 2 - proto: CargoPallet entities: - - uid: 151 + - uid: 71 components: - type: Transform pos: -4.5,5.5 - parent: 173 - - uid: 152 + parent: 2 + - uid: 72 components: - type: Transform pos: -3.5,5.5 - parent: 173 - - uid: 153 + parent: 2 + - uid: 73 components: - type: Transform pos: -1.5,5.5 - parent: 173 - - uid: 154 + parent: 2 + - uid: 74 components: - type: Transform pos: -0.5,5.5 - parent: 173 - - uid: 155 + parent: 2 + - uid: 75 components: - type: Transform pos: -0.5,2.5 - parent: 173 - - uid: 156 + parent: 2 + - uid: 76 components: - type: Transform pos: -1.5,2.5 - parent: 173 - - uid: 157 + parent: 2 + - uid: 77 components: - type: Transform pos: -1.5,-0.5 - parent: 173 - - uid: 158 + parent: 2 + - uid: 78 components: - type: Transform pos: -0.5,-0.5 - parent: 173 - - uid: 159 + parent: 2 + - uid: 79 components: - type: Transform pos: -3.5,2.5 - parent: 173 - - uid: 160 + parent: 2 + - uid: 80 components: - type: Transform pos: -4.5,2.5 - parent: 173 - - uid: 161 + parent: 2 + - uid: 81 components: - type: Transform pos: -4.5,-0.5 - parent: 173 - - uid: 162 + parent: 2 + - uid: 82 components: - type: Transform pos: -3.5,-0.5 - parent: 173 + parent: 2 - proto: ChairPilotSeat entities: - - uid: 141 + - uid: 83 components: - type: Transform rot: 3.141592653589793 rad pos: -2.5,7.5 - parent: 173 -- proto: ComputerShuttle - entities: - - uid: 78 + parent: 2 + - uid: 84 + components: + - type: Transform + pos: -1.5,6.5 + parent: 2 + - uid: 85 + components: + - type: Transform + pos: -3.5,6.5 + parent: 2 +- proto: ComputerShuttle + entities: + - uid: 86 components: - type: Transform pos: -2.5,8.5 - parent: 173 + parent: 2 - proto: ConveyorBelt entities: - - uid: 38 + - uid: 87 components: - type: Transform rot: 1.5707963267948966 rad pos: 0.5,4.5 - parent: 173 + parent: 2 - type: DeviceLinkSink links: - - 36 - - uid: 39 + - 160 + - uid: 88 components: - type: Transform rot: 1.5707963267948966 rad pos: -0.5,4.5 - parent: 173 + parent: 2 - type: DeviceLinkSink links: - - 36 - - uid: 40 + - 160 + - uid: 89 components: - type: Transform rot: 1.5707963267948966 rad pos: -1.5,4.5 - parent: 173 + parent: 2 - type: DeviceLinkSink links: - - 36 - - uid: 41 + - 160 + - uid: 90 components: - type: Transform rot: 1.5707963267948966 rad pos: -5.5,0.5 - parent: 173 + parent: 2 - type: DeviceLinkSink links: - - 34 - - uid: 42 + - 158 + - uid: 91 components: - type: Transform rot: 1.5707963267948966 rad pos: -4.5,0.5 - parent: 173 + parent: 2 - type: DeviceLinkSink links: - - 34 - - uid: 43 + - 158 + - uid: 92 components: - type: Transform rot: 1.5707963267948966 rad pos: -3.5,0.5 - parent: 173 + parent: 2 - type: DeviceLinkSink links: - - 34 - - uid: 46 + - 158 + - uid: 93 components: - type: Transform rot: -1.5707963267948966 rad pos: -0.5,0.5 - parent: 173 + parent: 2 - type: DeviceLinkSink links: - - 35 - - uid: 47 + - 159 + - uid: 94 components: - type: Transform rot: -1.5707963267948966 rad pos: -3.5,4.5 - parent: 173 + parent: 2 - type: DeviceLinkSink links: - - 37 - - uid: 48 + - 161 + - uid: 95 components: - type: Transform rot: -1.5707963267948966 rad pos: -4.5,4.5 - parent: 173 + parent: 2 - type: DeviceLinkSink links: - - 37 - - uid: 49 + - 161 + - uid: 96 components: - type: Transform rot: -1.5707963267948966 rad pos: -5.5,4.5 - parent: 173 + parent: 2 - type: DeviceLinkSink links: - - 37 - - uid: 51 + - 161 + - uid: 97 components: - type: Transform rot: -1.5707963267948966 rad pos: -1.5,0.5 - parent: 173 + parent: 2 - type: DeviceLinkSink links: - - 35 - - uid: 167 + - 159 + - uid: 98 components: - type: Transform rot: -1.5707963267948966 rad pos: 0.5,0.5 - parent: 173 + parent: 2 - type: DeviceLinkSink links: - - 35 + - 159 +- proto: Crowbar + entities: + - uid: 99 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.641858,-1.5760336 + parent: 2 +- proto: GasOutletInjector + entities: + - uid: 100 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,-4.5 + parent: 2 - proto: GasPipeBend entities: - - uid: 134 + - uid: 101 components: - type: Transform rot: -1.5707963267948966 rad pos: -2.5,-1.5 - parent: 173 + parent: 2 + - uid: 102 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,-2.5 + parent: 2 + - uid: 103 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-2.5 + parent: 2 + - uid: 104 + components: + - type: Transform + pos: -1.5,6.5 + parent: 2 - proto: GasPipeStraight entities: - - uid: 136 + - uid: 105 components: - type: Transform rot: 3.141592653589793 rad pos: -2.5,0.5 - parent: 173 - - uid: 137 + parent: 2 + - uid: 106 components: - type: Transform rot: 3.141592653589793 rad pos: -2.5,1.5 - parent: 173 - - uid: 140 + parent: 2 + - uid: 107 + components: + - type: Transform + pos: -2.5,-3.5 + parent: 2 + - uid: 108 components: - type: Transform rot: 3.141592653589793 rad - pos: -2.5,-0.5 - parent: 173 + pos: -1.5,-1.5 + parent: 2 + - uid: 109 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,-0.5 + parent: 2 + - uid: 110 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,0.5 + parent: 2 + - uid: 111 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,1.5 + parent: 2 + - uid: 112 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,2.5 + parent: 2 + - uid: 113 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,3.5 + parent: 2 + - uid: 114 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,4.5 + parent: 2 + - uid: 115 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,5.5 + parent: 2 - proto: GasPort entities: - - uid: 135 + - uid: 116 components: - type: Transform rot: 1.5707963267948966 rad pos: -3.5,-1.5 - parent: 173 - - type: AtmosDevice - joinedGrid: 173 + parent: 2 +- proto: GasPressurePump + entities: + - uid: 117 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,-0.5 + parent: 2 - proto: GasVentPump entities: - - uid: 138 + - uid: 118 components: - type: Transform pos: -2.5,2.5 - parent: 173 - - type: AtmosDevice - joinedGrid: 173 + parent: 2 + - type: DeviceNetwork + configurators: + - invalid + deviceLists: + - 3 +- proto: GasVentScrubber + entities: + - uid: 119 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,6.5 + parent: 2 + - type: DeviceNetwork + configurators: + - invalid + deviceLists: + - 3 - proto: GeneratorBasic15kW entities: - - uid: 83 + - uid: 120 components: - type: Transform pos: -2.5,-3.5 - parent: 173 + parent: 2 - proto: GravityGeneratorMini entities: - - uid: 146 + - uid: 121 components: - type: Transform pos: -1.5,-1.5 - parent: 173 + parent: 2 - proto: Grille entities: - - uid: 73 + - uid: 122 components: - type: Transform pos: -3.5,8.5 - parent: 173 - - uid: 74 + parent: 2 + - uid: 123 components: - type: Transform pos: -3.5,9.5 - parent: 173 - - uid: 75 + parent: 2 + - uid: 124 components: - type: Transform pos: -2.5,9.5 - parent: 173 - - uid: 76 + parent: 2 + - uid: 125 components: - type: Transform pos: -1.5,9.5 - parent: 173 - - uid: 77 + parent: 2 + - uid: 126 components: - type: Transform pos: -1.5,8.5 - parent: 173 + parent: 2 - proto: Gyroscope entities: - - uid: 133 + - uid: 127 components: - type: Transform pos: -3.5,-2.5 - parent: 173 -- proto: PlasticFlapsAirtightClear - entities: - - uid: 44 - components: - - type: Transform - pos: 0.5,0.5 - parent: 173 - - uid: 164 - components: - - type: Transform - pos: -5.5,0.5 - parent: 173 - - uid: 165 - components: - - type: Transform - pos: -5.5,4.5 - parent: 173 - - uid: 166 - components: - - type: Transform - pos: 0.5,4.5 - parent: 173 + parent: 2 - proto: Poweredlight entities: - - uid: 147 + - uid: 132 components: - type: Transform rot: -1.5707963267948966 rad pos: -0.5,2.5 - parent: 173 + parent: 2 - type: ApcPowerReceiver powerLoad: 0 - - uid: 148 + - uid: 133 components: - type: Transform rot: 1.5707963267948966 rad pos: -4.5,2.5 - parent: 173 + parent: 2 - type: ApcPowerReceiver powerLoad: 0 - - uid: 149 + - uid: 134 components: - type: Transform rot: 1.5707963267948966 rad pos: -3.5,7.5 - parent: 173 + parent: 2 - type: ApcPowerReceiver powerLoad: 0 - - uid: 150 + - uid: 135 components: - type: Transform rot: -1.5707963267948966 rad pos: -1.5,7.5 - parent: 173 + parent: 2 - type: ApcPowerReceiver powerLoad: 0 +- proto: Rack + entities: + - uid: 136 + components: + - type: Transform + pos: -2.5,-1.5 + parent: 2 - proto: ShuttleWindow entities: - - uid: 68 + - uid: 137 components: - type: Transform pos: -1.5,8.5 - parent: 173 - - uid: 69 + parent: 2 + - uid: 138 components: - type: Transform pos: -1.5,9.5 - parent: 173 - - uid: 70 + parent: 2 + - uid: 139 components: - type: Transform pos: -2.5,9.5 - parent: 173 - - uid: 71 + parent: 2 + - uid: 140 components: - type: Transform pos: -3.5,9.5 - parent: 173 - - uid: 72 + parent: 2 + - uid: 141 components: - type: Transform pos: -3.5,8.5 - parent: 173 + parent: 2 - proto: SignalButton entities: - - uid: 2 + - uid: 142 components: - type: Transform pos: -5.5,5.5 - parent: 173 + parent: 2 - type: DeviceLinkSource linkedPorts: - 56: + 16: - Pressed: Toggle - - uid: 55 + - uid: 143 components: - type: Transform - pos: -5.5,-0.5 - parent: 173 + rot: 3.141592653589793 rad + pos: 0.5,-0.5 + parent: 2 - type: DeviceLinkSource linkedPorts: - 3: + 17: - Pressed: Toggle - - uid: 57 + - uid: 144 components: - type: Transform pos: 0.5,5.5 - parent: 173 + parent: 2 - type: DeviceLinkSource linkedPorts: - 1: + 18: - Pressed: Toggle - - uid: 58 + - uid: 145 components: - type: Transform - pos: 0.5,-0.5 - parent: 173 + rot: 3.141592653589793 rad + pos: -5.5,-0.5 + parent: 2 - type: DeviceLinkSource linkedPorts: - 54: + 15: - Pressed: Toggle - proto: SMESBasic entities: - - uid: 84 + - uid: 146 components: - type: Transform pos: -2.5,-2.5 - parent: 173 + parent: 2 - proto: SubstationBasic entities: - - uid: 85 + - uid: 147 components: - type: Transform pos: -1.5,-2.5 - parent: 173 + parent: 2 - proto: TableReinforced entities: - - uid: 143 + - uid: 148 components: - type: Transform pos: -3.5,7.5 - parent: 173 - - uid: 144 + parent: 2 + - uid: 149 components: - type: Transform pos: -1.5,7.5 - parent: 173 + parent: 2 - proto: Thruster entities: - - uid: 12 + - uid: 150 components: - type: Transform rot: -1.5707963267948966 rad pos: 0.5,-2.5 - parent: 173 - - uid: 13 + parent: 2 + - uid: 151 components: - type: Transform rot: -1.5707963267948966 rad pos: 0.5,7.5 - parent: 173 - - uid: 14 + parent: 2 + - uid: 152 components: - type: Transform rot: 1.5707963267948966 rad pos: -5.5,7.5 - parent: 173 - - uid: 15 + parent: 2 + - uid: 153 components: - type: Transform rot: 1.5707963267948966 rad pos: -5.5,-2.5 - parent: 173 - - uid: 59 + parent: 2 + - uid: 154 components: - type: Transform pos: -4.5,9.5 - parent: 173 - - uid: 60 + parent: 2 + - uid: 155 components: - type: Transform pos: -0.5,9.5 - parent: 173 - - uid: 61 + parent: 2 + - uid: 156 components: - type: Transform rot: 3.141592653589793 rad pos: -0.5,-4.5 - parent: 173 - - uid: 62 + parent: 2 + - uid: 157 components: - type: Transform rot: 3.141592653589793 rad pos: -4.5,-4.5 - parent: 173 + parent: 2 - proto: TwoWayLever entities: - - uid: 34 + - uid: 158 components: - type: Transform pos: -3.5,1.5 - parent: 173 + parent: 2 - type: DeviceLinkSource linkedPorts: - 43: + 92: - Left: Forward - Right: Reverse - Middle: Off - 42: + 91: - Left: Forward - Right: Reverse - Middle: Off - 41: + 90: - Left: Forward - Right: Reverse - Middle: Off - - uid: 35 + - uid: 159 components: - type: Transform pos: -1.5,1.5 - parent: 173 + parent: 2 - type: DeviceLinkSource linkedPorts: - 51: + 97: - Left: Forward - Right: Reverse - Middle: Off - 46: + 93: - Left: Forward - Right: Reverse - Middle: Off - 167: + 98: - Left: Forward - Right: Reverse - Middle: Off - - uid: 36 + - uid: 160 components: - type: Transform pos: -1.5,3.5 - parent: 173 + parent: 2 - type: DeviceLinkSource linkedPorts: - 38: + 87: - Left: Forward - Right: Reverse - Middle: Off - 39: + 88: - Left: Forward - Right: Reverse - Middle: Off - 40: + 89: - Left: Forward - Right: Reverse - Middle: Off - - uid: 37 + - uid: 161 components: - type: Transform pos: -3.5,3.5 - parent: 173 + parent: 2 - type: DeviceLinkSource linkedPorts: - 49: + 96: - Left: Forward - Right: Reverse - Middle: Off - 48: + 95: - Left: Forward - Right: Reverse - Middle: Off - 47: + 94: - Left: Forward - Right: Reverse - Middle: Off - proto: WallShuttle entities: - - uid: 4 + - uid: 162 components: - type: Transform - pos: -5.5,8.5 - parent: 173 - - uid: 5 + pos: -0.5,8.5 + parent: 2 + - uid: 163 components: - type: Transform - pos: -4.5,8.5 - parent: 173 - - uid: 6 + pos: -5.5,8.5 + parent: 2 + - uid: 164 components: - type: Transform - pos: -0.5,8.5 - parent: 173 - - uid: 7 + pos: -4.5,8.5 + parent: 2 + - uid: 165 components: - type: Transform pos: 0.5,8.5 - parent: 173 - - uid: 8 + parent: 2 + - uid: 166 components: - type: Transform pos: -0.5,-3.5 - parent: 173 - - uid: 9 + parent: 2 + - uid: 167 components: - type: Transform pos: 0.5,-3.5 - parent: 173 - - uid: 10 + parent: 2 + - uid: 168 components: - type: Transform pos: -4.5,-3.5 - parent: 173 - - uid: 11 + parent: 2 + - uid: 169 components: - type: Transform pos: -5.5,-3.5 - parent: 173 - - uid: 16 + parent: 2 + - uid: 170 components: - type: Transform pos: -0.5,-1.5 - parent: 173 - - uid: 17 + parent: 2 + - uid: 171 components: - type: Transform pos: -0.5,-2.5 - parent: 173 - - uid: 18 + parent: 2 + - uid: 172 components: - type: Transform pos: -4.5,-1.5 - parent: 173 - - uid: 19 + parent: 2 + - uid: 173 components: - type: Transform pos: 0.5,-1.5 - parent: 173 - - uid: 20 + parent: 2 + - uid: 174 components: - type: Transform pos: -4.5,-2.5 - parent: 173 - - uid: 21 + parent: 2 + - uid: 175 components: - type: Transform pos: -5.5,-1.5 - parent: 173 - - uid: 22 + parent: 2 + - uid: 176 components: - type: Transform pos: -0.5,7.5 - parent: 173 - - uid: 23 + parent: 2 + - uid: 177 components: - type: Transform pos: -0.5,6.5 - parent: 173 - - uid: 24 + parent: 2 + - uid: 178 components: - type: Transform pos: 0.5,6.5 - parent: 173 - - uid: 25 + parent: 2 + - uid: 179 components: - type: Transform pos: -4.5,7.5 - parent: 173 - - uid: 26 + parent: 2 + - uid: 180 components: - type: Transform pos: -4.5,6.5 - parent: 173 - - uid: 27 + parent: 2 + - uid: 181 components: - type: Transform pos: -5.5,6.5 - parent: 173 - - uid: 28 + parent: 2 + - uid: 182 components: - type: Transform pos: -5.5,-0.5 - parent: 173 - - uid: 29 + parent: 2 + - uid: 183 components: - type: Transform pos: -5.5,5.5 - parent: 173 - - uid: 30 + parent: 2 + - uid: 184 components: - type: Transform pos: 0.5,5.5 - parent: 173 - - uid: 31 + parent: 2 + - uid: 185 components: - type: Transform pos: 0.5,-0.5 - parent: 173 - - uid: 32 + parent: 2 + - uid: 186 components: - type: Transform pos: 0.5,2.5 - parent: 173 - - uid: 33 + parent: 2 + - uid: 187 components: - type: Transform pos: -5.5,2.5 - parent: 173 - - uid: 63 + parent: 2 + - uid: 188 components: - type: Transform pos: -3.5,-4.5 - parent: 173 - - uid: 64 - components: - - type: Transform - pos: -2.5,-4.5 - parent: 173 - - uid: 65 + parent: 2 + - uid: 189 components: - type: Transform pos: -1.5,-4.5 - parent: 173 - - uid: 66 + parent: 2 + - uid: 190 components: - type: Transform pos: -3.5,-3.5 - parent: 173 - - uid: 67 + parent: 2 + - uid: 191 components: - type: Transform pos: -1.5,-3.5 - parent: 173 + parent: 2 - proto: WindoorCargoLocked entities: - - uid: 139 + - uid: 192 components: - type: Transform pos: -2.5,7.5 - parent: 173 + parent: 2 - proto: WindowReinforcedDirectional entities: - - uid: 142 + - uid: 193 components: - type: Transform pos: -1.5,7.5 - parent: 173 - - uid: 145 + parent: 2 + - uid: 194 components: - type: Transform pos: -3.5,7.5 - parent: 173 + parent: 2 + - uid: 195 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,-4.5 + parent: 2 + - uid: 196 + components: + - type: Transform + pos: -2.5,-4.5 + parent: 2 +- proto: Wrench + entities: + - uid: 197 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.529358,-1.5535336 + parent: 2 ... diff --git a/Resources/Maps/Shuttles/trading_outpost.yml b/Resources/Maps/Shuttles/trading_outpost.yml index 961b4fac1b..c95e1d3642 100644 --- a/Resources/Maps/Shuttles/trading_outpost.yml +++ b/Resources/Maps/Shuttles/trading_outpost.yml @@ -20,34 +20,46 @@ tilemap: entities: - proto: "" entities: + - uid: 1 + components: + - type: MetaData + name: Map Entity + - type: Transform + - type: Map + mapPaused: True + - type: PhysicsMap + - type: GridTree + - type: MovedGrids + - type: Broadphase + - type: OccluderTree - uid: 2 components: - type: MetaData name: Automated Trade Station - type: Transform pos: -2.9375,-1.625 - parent: invalid + parent: 1 - type: MapGrid chunks: 0,0: ind: 0,0 - tiles: XQAAAAABXQAAAAABTwAAAAAATwAAAAAATwAAAAAAfgAAAAAATwAAAAAATwAAAAAATwAAAAAAXQAAAAABXQAAAAADfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAXQAAAAADXQAAAAADXQAAAAACXQAAAAADXQAAAAAAXQAAAAAAXQAAAAADXQAAAAAAXQAAAAABXQAAAAADXQAAAAAAJAAAAAABJwAAAAADfgAAAAAAAAAAAAAAAAAAAAAAJAAAAAAAJAAAAAAAJAAAAAABJAAAAAAAJAAAAAAAJAAAAAACJAAAAAABJAAAAAAAJAAAAAAAJAAAAAABJAAAAAACfgAAAAAATwAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAATwAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAegAAAAAAfAAAAAABfAAAAAADfAAAAAACMwAAAAAAMwAAAAAAMwAAAAAAfAAAAAADfAAAAAABfAAAAAABegAAAAACfgAAAAAATwAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAegAAAAADfAAAAAABfAAAAAADfAAAAAADegAAAAADegAAAAACegAAAAADfAAAAAAAfAAAAAABfAAAAAAAegAAAAACJAAAAAADJwAAAAACfgAAAAAAAAAAAAAAAAAAAAAAegAAAAAAegAAAAABegAAAAACegAAAAABegAAAAAAegAAAAACegAAAAAAegAAAAAAegAAAAABegAAAAADegAAAAACfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: XQAAAAABXQAAAAABTwAAAAAATwAAAAAATwAAAAAAfgAAAAAATwAAAAAATwAAAAAATwAAAAAAXQAAAAABXQAAAAADfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAXQAAAAADXQAAAAADXQAAAAACXQAAAAADXQAAAAAAXQAAAAAAXQAAAAADXQAAAAAAXQAAAAABXQAAAAADXQAAAAAAXQAAAAAAXQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAXQAAAAAAXQAAAAAAXQAAAAAAXQAAAAAAXQAAAAAAXQAAAAAAXQAAAAAAXQAAAAAAXQAAAAAAXQAAAAAAXQAAAAAAfgAAAAAAXQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAXQAAAAAAXQAAAAAAXQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAAAXQAAAAAAXQAAAAAAfgAAAAAAfgAAAAAAXQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAXQAAAAAAXQAAAAAAXQAAAAAAXQAAAAAAXQAAAAAAXQAAAAAAXQAAAAAAXQAAAAAAXQAAAAAAXQAAAAAAXQAAAAAAfgAAAAAAXQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAXQAAAAAAXQAAAAAAXQAAAAAAXQAAAAAAXQAAAAAAXQAAAAAAXQAAAAAAXQAAAAAAXQAAAAAAXQAAAAAAXQAAAAAAXQAAAAAAXQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAXQAAAAAAXQAAAAAAXQAAAAAAXQAAAAAAXQAAAAAAXQAAAAAAXQAAAAAAXQAAAAAAXQAAAAAAXQAAAAAAXQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 0,-1: ind: 0,-1 - tiles: fgAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAJAAAAAAAfgAAAAAAfgAAAAAAJAAAAAABJAAAAAABHwAAAAACfgAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAJAAAAAABJAAAAAACJAAAAAAAJAAAAAAAJAAAAAABJAAAAAABJAAAAAACJAAAAAAAJAAAAAACfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAXQAAAAADXQAAAAADXQAAAAAAXQAAAAACXQAAAAADXQAAAAACXQAAAAADXQAAAAAAXQAAAAACXQAAAAABXQAAAAABfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAXQAAAAACXQAAAAAATwAAAAAATwAAAAAATwAAAAAAfgAAAAAATwAAAAAATwAAAAAATwAAAAAAXQAAAAAAXQAAAAABfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAAADXQAAAAAATwAAAAAATwAAAAAATwAAAAAAfgAAAAAATwAAAAAATwAAAAAATwAAAAAAXQAAAAACaAAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAXQAAAAADXQAAAAABTwAAAAAATwAAAAAATwAAAAAAfgAAAAAATwAAAAAATwAAAAAATwAAAAAAXQAAAAAAXQAAAAADfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAXQAAAAACXQAAAAABTwAAAAAATwAAAAAATwAAAAAAfgAAAAAATwAAAAAATwAAAAAATwAAAAAAXQAAAAADXQAAAAADfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAaAAAAAAAXQAAAAABbQAAAAAAbQAAAAAAbAAAAAAAfgAAAAAAbAAAAAAAbQAAAAAAbQAAAAAAXQAAAAAAaAAAAAACfgAAAAAAJAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAXQAAAAACXQAAAAAAbQAAAAAAbQAAAAAAbAAAAAAAfgAAAAAAbAAAAAAAbQAAAAAAbQAAAAAAXQAAAAADXQAAAAACfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAaAAAAAAAXQAAAAAAbQAAAAAAbQAAAAAAbAAAAAAAfgAAAAAAbAAAAAAAbQAAAAAAbQAAAAAAXQAAAAABaAAAAAACfgAAAAAAJAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAXQAAAAAAXQAAAAADTwAAAAAATwAAAAAATwAAAAAAfgAAAAAATwAAAAAATwAAAAAATwAAAAAAXQAAAAADXQAAAAABfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAXQAAAAABXQAAAAACTwAAAAAATwAAAAAATwAAAAAAfgAAAAAATwAAAAAATwAAAAAATwAAAAAAXQAAAAABXQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAaAAAAAACXQAAAAAATwAAAAAATwAAAAAATwAAAAAAfgAAAAAATwAAAAAATwAAAAAATwAAAAAAXQAAAAADaAAAAAADfgAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAA + tiles: fgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAXQAAAAAAfgAAAAAAfgAAAAAAXQAAAAAAXQAAAAAAXQAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAXQAAAAAAXQAAAAAAXQAAAAAAXQAAAAAAXQAAAAAAXQAAAAAAXQAAAAAAXQAAAAAAXQAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAXQAAAAADXQAAAAADXQAAAAAAXQAAAAACXQAAAAADXQAAAAACXQAAAAADXQAAAAAAXQAAAAACXQAAAAABXQAAAAABfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAXQAAAAACXQAAAAAATwAAAAAATwAAAAAATwAAAAAAfgAAAAAATwAAAAAATwAAAAAATwAAAAAAXQAAAAAAXQAAAAABfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXQAAAAAAXQAAAAAATwAAAAAATwAAAAAATwAAAAAAfgAAAAAATwAAAAAATwAAAAAATwAAAAAAXQAAAAACXQAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAXQAAAAADXQAAAAABTwAAAAAATwAAAAAATwAAAAAAfgAAAAAATwAAAAAATwAAAAAATwAAAAAAXQAAAAAAXQAAAAADfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAXQAAAAACXQAAAAABTwAAAAAATwAAAAAATwAAAAAAfgAAAAAATwAAAAAATwAAAAAATwAAAAAAXQAAAAADXQAAAAADfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAXQAAAAAAXQAAAAABXQAAAAAAXQAAAAAAbQAAAAAAfgAAAAAAbQAAAAAAXQAAAAAAXQAAAAAAXQAAAAAAXQAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAXQAAAAACXQAAAAAAXQAAAAAAXQAAAAAAbQAAAAAAfgAAAAAAbQAAAAAAXQAAAAAAXQAAAAAAXQAAAAADXQAAAAACfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAXQAAAAAAXQAAAAAAXQAAAAAAXQAAAAAAbQAAAAAAfgAAAAAAbQAAAAAAXQAAAAAAXQAAAAAAXQAAAAABXQAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAXQAAAAAAXQAAAAADTwAAAAAATwAAAAAATwAAAAAAfgAAAAAATwAAAAAATwAAAAAATwAAAAAAXQAAAAADXQAAAAABfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAXQAAAAABXQAAAAACTwAAAAAATwAAAAAATwAAAAAAfgAAAAAATwAAAAAATwAAAAAATwAAAAAAXQAAAAABXQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAXQAAAAAAXQAAAAAATwAAAAAATwAAAAAATwAAAAAAfgAAAAAATwAAAAAATwAAAAAATwAAAAAAXQAAAAADXQAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAA version: 6 -1,0: ind: -1,0 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAJwAAAAACJAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAATwAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAATwAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAATwAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAJwAAAAADJAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAXQAAAAAAXQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAXQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAXQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAXQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAXQAAAAAAXQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 -1,-1: ind: -1,-1 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAJAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAJAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfgAAAAAA + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfgAAAAAA version: 6 0,-2: ind: 0,-2 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAQgAAAAAAQgAAAAAAQgAAAAAAJAAAAAABJAAAAAACHwAAAAACHwAAAAADHwAAAAABHwAAAAABfgAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAHwAAAAABHwAAAAACHwAAAAABJAAAAAADJAAAAAADHwAAAAACfgAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAA + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAXQAAAAAAXQAAAAAAXQAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAAAXQAAAAAAXQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAXQAAAAAAXQAAAAAAXQAAAAAAXQAAAAAAXQAAAAAAXQAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAXQAAAAAAXQAAAAAAXQAAAAAAXQAAAAAAXQAAAAAAXQAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAA version: 6 -1,-2: ind: -1,-2 @@ -65,6 +77,9 @@ entities: angularDampening: 0.05 - type: Fixtures fixtures: {} + - type: PassiveDampening + angularDampening: 0.01 + linearDampening: 0.01 - type: OccluderTree - type: SpreaderGrid - type: Shuttle @@ -77,280 +92,267 @@ entities: version: 2 nodes: - node: - angle: -1.5707963267948966 rad - color: '#FFFFFFFF' - id: Arrows - decals: - 71: 12,-6 - 72: 12,-4 - - node: - angle: 1.5707963267948966 rad + angle: 3.141592653589793 rad color: '#FFFFFFFF' id: Arrows decals: - 69: -2,-4 - 70: -2,-6 + 70: 2,2 + 71: 8,2 - node: color: '#FFFFFFFF' id: Bot decals: - 19: 0,2 - 20: 10,2 - 21: 9,-12 - 25: 4,-16 - 28: 0,-6 - 29: 0,-4 - 30: 0,-1 - 31: 0,-9 - 32: 10,-9 - 33: 10,-6 - 34: 10,-4 - 35: 10,-1 - 50: 4,-5 - 51: 6,-5 - 61: 1,-12 - - node: - color: '#FFFFFFFF' - id: Box - decals: - 26: 4,-18 - 27: 5,-18 - - node: - color: '#FFFFFFFF' - id: BrickTileDarkLineE - decals: - 0: 3,-18 - 1: 3,-17 - 2: 3,-16 - 58: 8,-6 - 59: 8,-5 - 60: 8,-4 - 62: 3,-6 - 63: 3,-5 - 64: 3,-4 - - node: - color: '#FFFFFFFF' - id: BrickTileDarkLineW - decals: - 52: 2,-6 - 53: 2,-5 - 54: 2,-4 - 55: 7,-6 - 56: 7,-5 - 57: 7,-4 - - node: - color: '#FFFFFFFF' - id: BushCOne - decals: - 23: 6,4 + 0: 4,-5 + 1: 6,-5 + 61: 4,4 + 62: 4,5 + 63: 5,5 + 64: 6,5 + 65: 6,4 + 66: 5,4 + 67: 4,6 + 68: 5,6 + 69: 6,6 + 76: 4,-12 + 77: 5,-12 + 78: 6,-12 - node: color: '#FFFFFFFF' - id: BushCTwo + id: Delivery decals: - 22: 4,4 - - node: - color: '#FFFFFFFF' - id: Bushi2 - decals: - 24: 5,4 + 55: 1,3 + 56: 2,3 + 57: 3,3 + 58: 7,3 + 59: 8,3 + 60: 9,3 - node: angle: -1.5707963267948966 rad color: '#FFFFFFFF' id: LoadingArea decals: - 65: 9,-7 - 66: 9,-3 + 74: 9,-7 + 75: 1,-7 - node: angle: 1.5707963267948966 rad color: '#FFFFFFFF' id: LoadingArea decals: - 67: 1,-7 - 68: 1,-3 + 72: 1,-3 + 73: 9,-3 - node: - color: '#FFFFFFFF' - id: WarnLineN + color: '#A4610696' + id: QuarterTileOverlayGreyscale decals: - 43: 8,1 - 44: 7,1 - 45: 6,1 - 46: 5,1 - 47: 4,1 - 48: 3,1 - 49: 2,1 + 16: 0,-3 + 17: 0,-2 + 18: 0,-1 + 19: 0,0 + 20: 0,1 + 21: 0,2 + 41: 6,2 - node: - color: '#FFFFFFFF' - id: WarnLineW + color: '#A4610696' + id: QuarterTileOverlayGreyscale180 decals: - 36: 2,-11 - 37: 3,-11 - 38: 4,-11 - 39: 5,-11 - 40: 6,-11 - 41: 7,-11 - 42: 8,-11 + 27: 10,-11 + 28: 10,-10 + 29: 10,-9 + 30: 10,-8 + 38: 9,-12 + 39: 8,-12 + 40: 7,-12 - node: - color: '#FFFFFFFF' - id: WoodTrimThinInnerSe + color: '#A4610696' + id: QuarterTileOverlayGreyscale270 decals: - 17: 0,6 - 18: 6,6 + 31: 0,-11 + 32: 0,-10 + 33: 0,-9 + 34: 0,-8 + 35: 1,-12 + 36: 2,-12 + 37: 3,-12 + - node: + color: '#A4610696' + id: QuarterTileOverlayGreyscale90 + decals: + 22: 10,2 + 23: 10,1 + 24: 10,0 + 25: 10,-1 + 26: 10,-2 + 42: 4,2 - node: color: '#FFFFFFFF' - id: WoodTrimThinInnerSw + id: WarnLineGreyscaleN decals: - 15: 4,6 - 16: 10,6 + 43: 1,2 + 44: 2,2 + 45: 3,2 + 46: 7,2 + 47: 8,2 + 48: 9,2 - node: color: '#FFFFFFFF' - id: WoodTrimThinLineE + id: WarnLineGreyscaleS decals: - 9: 0,4 - 10: 0,5 - 11: 6,5 + 49: 1,4 + 50: 2,4 + 51: 3,4 + 52: 7,4 + 53: 8,4 + 54: 9,4 - node: color: '#FFFFFFFF' - id: WoodTrimThinLineS + id: WarnLineN decals: - 3: 1,6 - 4: 2,6 - 5: 3,6 - 6: 7,6 - 7: 9,6 - 8: 8,6 + 8: 2,1 + 9: 3,1 + 10: 5,1 + 11: 4,1 + 12: 6,1 + 13: 7,1 + 14: 8,1 - node: color: '#FFFFFFFF' - id: WoodTrimThinLineW + id: WarnLineW decals: - 12: 4,5 - 13: 10,4 - 14: 10,5 + 2: 2,-11 + 3: 3,-11 + 4: 4,-11 + 5: 6,-11 + 6: 7,-11 + 7: 8,-11 + 15: 5,-11 - type: GridAtmosphere version: 2 data: tiles: 0,0: + 0: 4095 + 0,-1: 0: 65535 + -1,0: + 0: 17600 0,1: - 0: 65535 + 0: 4095 + -1,1: + 0: 196 + 1: 16384 0,2: - 0: 65535 - 0,3: - 0: 14 + 1: 241 + -1,2: + 1: 192 1,0: - 0: 65535 + 0: 4093 1,1: - 0: 65535 + 0: 4095 1,2: - 0: 65535 - 1,3: - 0: 15 + 1: 240 + 1,-1: + 0: 56797 2,0: - 0: 65535 + 0: 2039 2,1: - 0: 65535 + 0: 2039 2,2: - 0: 30583 - 1: 128 - 2,3: - 0: 3 + 1: 244 + 2,-1: + 0: 30591 3,0: - 0: 13107 + 0: 4368 3,1: - 0: 4915 + 0: 17 + 1: 4096 + 3,2: + 1: 16 + 3,-1: + 1: 12288 + 0: 19 0,-4: - 0: 65535 + 0: 1038 + 1: 256 + -1,-4: + 1: 43690 0,-3: - 0: 65535 + 0: 65534 0,-2: 0: 65535 - 0,-1: - 0: 65535 + -1,-2: + 0: 3648 + -1,-1: + 0: 78 + 1: 24576 + 0,-5: + 0: 60928 + 1: 5 1,-4: - 0: 65535 + 0: 15 + 1: 1792 1,-3: - 0: 65535 + 0: 56831 1,-2: - 0: 65535 - 1,-1: - 0: 65535 + 0: 56797 + 1,-5: + 0: 65399 2,-4: - 0: 65535 + 0: 259 + 1: 35976 2,-3: - 0: 65535 + 0: 30579 2,-2: - 0: 65535 - 2,-1: - 0: 65535 - 3,-2: - 0: 13107 - 3,-1: - 0: 13107 - -1,0: - 0: 61166 - -1,1: - 0: 52974 - -1,-2: - 0: 61166 - -1,-1: - 0: 61166 - -1,-4: - 0: 34952 - 1: 8738 - -1,-3: - 0: 59528 - 1: 38 - 0,-5: - 0: 65520 - 1: 9 - 1,-5: - 0: 65520 - 1: 8 + 0: 32631 2,-5: - 0: 65392 - 1: 140 - -1,-5: - 0: 34816 - 1: 8938 + 0: 13192 + 1: 34821 3,-3: - 0: 12288 - 1: 35 - 3,2: - 1: 16 + 1: 12323 + 3,-2: + 0: 784 3,-4: 1: 8738 - -1,2: - 1: 192 + 3,-5: + 1: 8754 + -1,-5: + 1: 43618 + 0: 136 + -1,-3: + 1: 24614 0,-8: 1: 12288 + -1,-8: + 1: 40960 0,-7: 1: 61936 + -1,-7: + 0: 34944 + 1: 8750 0,-6: - 1: 61937 + 1: 29169 + -1,-6: + 0: 34952 + 1: 610 1,-7: - 1: 53456 + 1: 32976 + 0: 20480 1,-6: - 1: 53456 + 0: 80 + 1: 640 2,-7: - 1: 64760 + 1: 29816 + 0: 34944 2,-6: - 1: 64764 + 1: 29812 + 0: 34952 2,-8: 1: 57344 3,-7: 1: 8739 3,-6: 1: 562 - 3,-5: - 1: 8754 3,-8: 1: 8192 - -1,-8: - 1: 40960 - -1,-7: - 1: 43694 - -1,-6: - 1: 35562 uniqueMixes: - volume: 2500 temperature: 293.15 @@ -368,7 +370,7 @@ entities: - 0 - 0 - volume: 2500 - temperature: 293.15 + immutable: True moles: - 0 - 0 @@ -387,7 +389,7 @@ entities: - type: RadiationGridResistance - proto: AirAlarm entities: - - uid: 802 + - uid: 3 components: - type: Transform rot: 1.5707963267948966 rad @@ -395,16 +397,11 @@ entities: parent: 2 - type: DeviceList devices: - - 793 - - 411 - - 400 - - 410 - - 402 - - 790 - - 789 - - type: AtmosDevice - joinedGrid: 2 - - uid: 803 + - 567 + - 558 + - 566 + - 560 + - uid: 4 components: - type: Transform rot: -1.5707963267948966 rad @@ -412,52 +409,13 @@ entities: parent: 2 - type: DeviceList devices: - - 794 - - 402 - - 410 - - 400 - - 411 - - 789 - - 790 - - type: AtmosDevice - joinedGrid: 2 - - uid: 805 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 11.5,4.5 - parent: 2 - - type: DeviceList - devices: - - 796 - - 409 - - 403 - - 401 - - 408 - - 783 - - 782 - - type: AtmosDevice - joinedGrid: 2 - - uid: 806 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -0.5,4.5 - parent: 2 - - type: DeviceList - devices: - - 795 - - 408 - - 401 - - 403 - - 409 - - 783 - - 782 - - type: AtmosDevice - joinedGrid: 2 + - 560 + - 566 + - 558 + - 567 - proto: AirCanister entities: - - uid: 387 + - uid: 5 components: - type: Transform anchored: True @@ -465,2262 +423,2243 @@ entities: parent: 2 - type: Physics bodyType: Static - - type: AtmosDevice - joinedGrid: 2 -- proto: AirlockCargo - entities: - - uid: 1 - components: - - type: Transform - pos: 11.5,1.5 - parent: 2 - - uid: 22 - components: - - type: Transform - pos: -0.5,1.5 - parent: 2 -- proto: AirlockCargoGlass +- proto: AirlockCargoLocked entities: - - uid: 248 + - uid: 6 components: - type: Transform + rot: -1.5707963267948966 rad pos: 11.5,5.5 parent: 2 - - uid: 249 - components: - - type: Transform - pos: -0.5,5.5 - parent: 2 -- proto: AirlockExternalGlass - entities: - - uid: 582 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -0.5,-5.5 - parent: 2 - - uid: 583 + - uid: 7 components: - type: Transform - rot: 3.141592653589793 rad - pos: -0.5,-3.5 + rot: -1.5707963267948966 rad + pos: 11.5,1.5 parent: 2 - - uid: 584 + - uid: 8 components: - type: Transform - rot: 3.141592653589793 rad - pos: 11.5,-5.5 + rot: -1.5707963267948966 rad + pos: -0.5,5.5 parent: 2 - - uid: 585 + - uid: 9 components: - type: Transform - rot: 3.141592653589793 rad - pos: 11.5,-3.5 + rot: -1.5707963267948966 rad + pos: -0.5,1.5 parent: 2 -- proto: AirlockExternalGlassShuttleLocked +- proto: AirlockExternalGlass entities: - - uid: 313 + - uid: 10 components: - type: Transform rot: -1.5707963267948966 rad - pos: -2.5,-3.5 + pos: 11.5,-5.5 parent: 2 - - uid: 560 + - uid: 11 components: - type: Transform rot: -1.5707963267948966 rad - pos: -2.5,-5.5 - parent: 2 - - uid: 562 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 13.5,-3.5 - parent: 2 - - uid: 563 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 13.5,-5.5 + pos: -0.5,-5.5 parent: 2 -- proto: AirSensor - entities: - - uid: 793 + - uid: 12 components: - type: Transform rot: -1.5707963267948966 rad - pos: 0.5,-4.5 + pos: 11.5,-3.5 parent: 2 - - uid: 794 + - uid: 13 components: - type: Transform rot: -1.5707963267948966 rad - pos: 10.5,-4.5 + pos: -0.5,-3.5 parent: 2 - - uid: 795 +- proto: AirlockGlassShuttle + entities: + - uid: 14 components: - type: Transform rot: -1.5707963267948966 rad - pos: 0.5,4.5 + pos: -2.5,-5.5 parent: 2 - - uid: 796 + - uid: 15 components: - type: Transform rot: -1.5707963267948966 rad - pos: 10.5,4.5 + pos: -2.5,-3.5 parent: 2 -- proto: AlwaysPoweredWallLight - entities: - - uid: 541 + - uid: 16 components: - type: Transform - pos: 3.5,-19.5 + rot: 1.5707963267948966 rad + pos: 13.5,-5.5 parent: 2 - - uid: 576 + - uid: 17 components: - type: Transform - pos: 7.5,-19.5 + rot: 1.5707963267948966 rad + pos: 13.5,-3.5 parent: 2 - proto: APCBasic entities: - - uid: 597 + - uid: 18 components: - type: Transform rot: 1.5707963267948966 rad pos: -0.5,0.5 parent: 2 - - uid: 944 + - uid: 19 components: - type: Transform pos: 2.5,-14.5 parent: 2 - proto: AtmosDeviceFanTiny entities: - - uid: 947 + - uid: 23 components: - type: Transform - pos: 13.5,-5.5 + pos: -2.5,-6.5 + parent: 2 + - uid: 681 + components: + - type: Transform + pos: -2.5,-2.5 parent: 2 - - uid: 948 + - uid: 908 components: - type: Transform pos: 13.5,-3.5 parent: 2 - - uid: 949 + - uid: 909 components: - type: Transform - pos: 13.5,-2.5 + pos: 13.5,-5.5 parent: 2 - - uid: 950 + - uid: 910 components: - type: Transform - pos: 13.5,-6.5 + pos: -2.5,-5.5 parent: 2 - - uid: 951 + - uid: 911 components: - type: Transform - pos: -2.5,-6.5 + pos: -2.5,-3.5 parent: 2 - - uid: 952 + - uid: 916 components: - type: Transform pos: -2.5,-5.5 parent: 2 - - uid: 953 + - uid: 917 components: - type: Transform pos: -2.5,-3.5 parent: 2 - - uid: 954 + - uid: 918 components: - type: Transform - pos: -2.5,-2.5 + pos: 13.5,-5.5 parent: 2 -- proto: BoxFolderClipboard - entities: - - uid: 779 + - uid: 919 components: - type: Transform - pos: 9.622929,-17.072632 + pos: 13.5,-3.5 + parent: 2 +- proto: BlastDoor + entities: + - uid: 20 + components: + - type: Transform + pos: 13.5,-6.5 + parent: 2 + - type: DeviceLinkSink + links: + - 741 + - uid: 21 + components: + - type: Transform + pos: -2.5,-2.5 + parent: 2 + - type: DeviceLinkSink + links: + - 740 + - uid: 22 + components: + - type: Transform + pos: 13.5,-2.5 + parent: 2 + - type: DeviceLinkSink + links: + - 742 + - uid: 679 + components: + - type: Transform + pos: -2.5,-6.5 + parent: 2 + - type: DeviceLinkSink + links: + - 739 +- proto: ButtonFrameCaution + entities: + - uid: 24 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 11.5,-7.5 + parent: 2 + - uid: 25 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,-7.5 + parent: 2 + - uid: 26 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,-1.5 + parent: 2 + - uid: 27 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 11.5,-1.5 parent: 2 - proto: CableApcExtension entities: - - uid: 31 + - uid: 28 components: - type: Transform pos: 1.5,-4.5 parent: 2 - - uid: 222 + - uid: 29 + components: + - type: Transform + pos: 5.5,-17.5 + parent: 2 + - uid: 30 components: - type: Transform pos: 11.5,1.5 parent: 2 - - uid: 260 + - uid: 31 components: - type: Transform pos: 12.5,1.5 parent: 2 - - uid: 276 + - uid: 32 components: - type: Transform pos: 7.5,-4.5 parent: 2 - - uid: 283 + - uid: 33 components: - type: Transform pos: 6.5,5.5 parent: 2 - - uid: 305 + - uid: 34 components: - type: Transform pos: 12.5,5.5 parent: 2 - - uid: 308 + - uid: 35 components: - type: Transform pos: -0.5,1.5 parent: 2 - - uid: 309 + - uid: 36 components: - type: Transform pos: -1.5,1.5 parent: 2 - - uid: 310 + - uid: 37 components: - type: Transform pos: 8.5,5.5 parent: 2 - - uid: 319 + - uid: 38 components: - type: Transform pos: -1.5,5.5 parent: 2 - - uid: 320 + - uid: 39 components: - type: Transform pos: 2.5,5.5 parent: 2 - - uid: 324 + - uid: 40 components: - type: Transform pos: -1.5,2.5 parent: 2 - - uid: 542 + - uid: 41 + components: + - type: Transform + pos: 5.5,-18.5 + parent: 2 + - uid: 42 + components: + - type: Transform + pos: 5.5,-19.5 + parent: 2 + - uid: 43 components: - type: Transform pos: 4.5,-4.5 parent: 2 - - uid: 575 + - uid: 44 components: - type: Transform pos: 2.5,-4.5 parent: 2 - - uid: 577 + - uid: 45 components: - type: Transform pos: 5.5,-4.5 parent: 2 - - uid: 638 + - uid: 46 components: - type: Transform pos: 1.5,-14.5 parent: 2 - - uid: 639 + - uid: 47 components: - type: Transform pos: 1.5,-15.5 parent: 2 - - uid: 640 + - uid: 48 components: - type: Transform pos: 2.5,-17.5 parent: 2 - - uid: 641 + - uid: 49 components: - type: Transform pos: 2.5,-16.5 parent: 2 - - uid: 642 + - uid: 50 components: - type: Transform pos: 3.5,-16.5 parent: 2 - - uid: 643 + - uid: 51 components: - type: Transform pos: 4.5,-16.5 parent: 2 - - uid: 644 + - uid: 52 components: - type: Transform pos: 5.5,-16.5 parent: 2 - - uid: 645 + - uid: 53 components: - type: Transform pos: 6.5,-16.5 parent: 2 - - uid: 646 + - uid: 54 components: - type: Transform pos: 7.5,-16.5 parent: 2 - - uid: 647 + - uid: 55 components: - type: Transform pos: 8.5,-16.5 parent: 2 - - uid: 648 + - uid: 56 components: - type: Transform pos: 9.5,-16.5 parent: 2 - - uid: 651 + - uid: 57 components: - type: Transform pos: 8.5,-15.5 parent: 2 - - uid: 652 + - uid: 58 components: - type: Transform pos: 8.5,-14.5 parent: 2 - - uid: 653 + - uid: 59 components: - type: Transform pos: 8.5,-13.5 parent: 2 - - uid: 654 + - uid: 60 components: - type: Transform pos: 2.5,-13.5 parent: 2 - - uid: 655 + - uid: 61 components: - type: Transform pos: 2.5,-14.5 parent: 2 - - uid: 656 + - uid: 62 components: - type: Transform pos: 2.5,-15.5 parent: 2 - - uid: 657 + - uid: 63 components: - type: Transform pos: 2.5,-12.5 parent: 2 - - uid: 658 + - uid: 64 components: - type: Transform pos: 8.5,-12.5 parent: 2 - - uid: 659 + - uid: 65 components: - type: Transform pos: 1.5,-17.5 parent: 2 - - uid: 660 + - uid: 66 components: - type: Transform pos: -0.5,0.5 parent: 2 - - uid: 661 + - uid: 67 components: - type: Transform pos: 0.5,0.5 parent: 2 - - uid: 662 + - uid: 68 components: - type: Transform pos: 0.5,-0.5 parent: 2 - - uid: 663 + - uid: 69 components: - type: Transform pos: 0.5,2.5 parent: 2 - - uid: 664 + - uid: 70 components: - type: Transform pos: 1.5,2.5 parent: 2 - - uid: 665 + - uid: 71 components: - type: Transform pos: 2.5,2.5 parent: 2 - - uid: 666 + - uid: 72 components: - type: Transform pos: 3.5,2.5 parent: 2 - - uid: 667 + - uid: 73 components: - type: Transform pos: 5.5,2.5 parent: 2 - - uid: 668 + - uid: 74 components: - type: Transform pos: 4.5,2.5 parent: 2 - - uid: 669 + - uid: 75 components: - type: Transform pos: 6.5,2.5 parent: 2 - - uid: 670 + - uid: 76 components: - type: Transform pos: 7.5,2.5 parent: 2 - - uid: 671 + - uid: 77 components: - type: Transform pos: 8.5,2.5 parent: 2 - - uid: 672 + - uid: 78 components: - type: Transform pos: 9.5,2.5 parent: 2 - - uid: 673 + - uid: 79 components: - type: Transform pos: 0.5,-1.5 parent: 2 - - uid: 674 + - uid: 80 components: - type: Transform pos: 0.5,1.5 parent: 2 - - uid: 675 + - uid: 81 components: - type: Transform pos: 10.5,2.5 parent: 2 - - uid: 676 + - uid: 82 components: - type: Transform pos: 10.5,1.5 parent: 2 - - uid: 677 + - uid: 83 components: - type: Transform pos: 10.5,0.5 parent: 2 - - uid: 678 + - uid: 84 components: - type: Transform pos: 10.5,-0.5 parent: 2 - - uid: 679 + - uid: 85 components: - type: Transform pos: 10.5,-1.5 parent: 2 - - uid: 680 + - uid: 86 components: - type: Transform pos: 10.5,-2.5 parent: 2 - - uid: 681 + - uid: 87 components: - type: Transform pos: 10.5,-3.5 parent: 2 - - uid: 682 + - uid: 88 components: - type: Transform pos: 10.5,-4.5 parent: 2 - - uid: 683 + - uid: 89 components: - type: Transform pos: 10.5,-5.5 parent: 2 - - uid: 684 + - uid: 90 components: - type: Transform pos: 10.5,-6.5 parent: 2 - - uid: 685 + - uid: 91 components: - type: Transform pos: 10.5,-7.5 parent: 2 - - uid: 686 + - uid: 92 components: - type: Transform pos: 10.5,-8.5 parent: 2 - - uid: 687 + - uid: 93 components: - type: Transform pos: 10.5,-9.5 parent: 2 - - uid: 688 + - uid: 94 components: - type: Transform pos: 10.5,-10.5 parent: 2 - - uid: 689 + - uid: 95 components: - type: Transform pos: 9.5,-10.5 parent: 2 - - uid: 690 + - uid: 96 components: - type: Transform pos: 8.5,-10.5 parent: 2 - - uid: 691 + - uid: 97 components: - type: Transform pos: 7.5,-10.5 parent: 2 - - uid: 692 + - uid: 98 components: - type: Transform pos: 6.5,-10.5 parent: 2 - - uid: 693 + - uid: 99 components: - type: Transform pos: 5.5,-10.5 parent: 2 - - uid: 694 + - uid: 100 components: - type: Transform pos: 4.5,-10.5 parent: 2 - - uid: 695 + - uid: 101 components: - type: Transform pos: 3.5,-10.5 parent: 2 - - uid: 696 + - uid: 102 components: - type: Transform pos: 2.5,-10.5 parent: 2 - - uid: 697 + - uid: 103 components: - type: Transform pos: 1.5,-10.5 parent: 2 - - uid: 698 + - uid: 104 components: - type: Transform pos: 0.5,-10.5 parent: 2 - - uid: 699 + - uid: 105 components: - type: Transform pos: 0.5,-9.5 parent: 2 - - uid: 700 + - uid: 106 components: - type: Transform pos: 0.5,-8.5 parent: 2 - - uid: 701 + - uid: 107 components: - type: Transform pos: 0.5,-7.5 parent: 2 - - uid: 702 + - uid: 108 components: - type: Transform pos: 0.5,-6.5 parent: 2 - - uid: 703 + - uid: 109 components: - type: Transform pos: 0.5,-5.5 parent: 2 - - uid: 704 + - uid: 110 components: - type: Transform pos: 0.5,-4.5 parent: 2 - - uid: 705 + - uid: 111 components: - type: Transform pos: 0.5,-3.5 parent: 2 - - uid: 706 + - uid: 112 components: - type: Transform pos: 0.5,-2.5 parent: 2 - - uid: 707 + - uid: 113 components: - type: Transform pos: 1.5,-0.5 parent: 2 - - uid: 708 + - uid: 114 components: - type: Transform pos: 2.5,-0.5 parent: 2 - - uid: 709 + - uid: 115 components: - type: Transform pos: 3.5,-0.5 parent: 2 - - uid: 710 + - uid: 116 components: - type: Transform pos: 4.5,-0.5 parent: 2 - - uid: 711 + - uid: 117 components: - type: Transform pos: 4.5,-8.5 parent: 2 - - uid: 712 + - uid: 118 components: - type: Transform pos: 3.5,-8.5 parent: 2 - - uid: 713 + - uid: 119 components: - type: Transform pos: 2.5,-8.5 parent: 2 - - uid: 714 + - uid: 120 components: - type: Transform pos: 1.5,-8.5 parent: 2 - - uid: 715 + - uid: 121 components: - type: Transform pos: 6.5,-8.5 parent: 2 - - uid: 716 + - uid: 122 components: - type: Transform pos: 7.5,-8.5 parent: 2 - - uid: 717 + - uid: 123 components: - type: Transform pos: 8.5,-8.5 parent: 2 - - uid: 718 + - uid: 124 components: - type: Transform pos: 9.5,-8.5 parent: 2 - - uid: 719 + - uid: 125 components: - type: Transform pos: 9.5,-0.5 parent: 2 - - uid: 720 + - uid: 126 components: - type: Transform pos: 8.5,-0.5 parent: 2 - - uid: 721 + - uid: 127 components: - type: Transform pos: 7.5,-0.5 parent: 2 - - uid: 722 + - uid: 128 components: - type: Transform pos: 6.5,-0.5 parent: 2 - - uid: 723 + - uid: 129 components: - type: Transform pos: 11.5,-3.5 parent: 2 - - uid: 724 + - uid: 130 components: - type: Transform pos: 12.5,-3.5 parent: 2 - - uid: 725 - components: - - type: Transform - pos: 13.5,-3.5 - parent: 2 - - uid: 726 - components: - - type: Transform - pos: 13.5,-5.5 - parent: 2 - - uid: 727 + - uid: 131 components: - type: Transform pos: 12.5,-5.5 parent: 2 - - uid: 728 + - uid: 132 components: - type: Transform pos: 11.5,-5.5 parent: 2 - - uid: 729 + - uid: 133 components: - type: Transform pos: -0.5,-5.5 parent: 2 - - uid: 730 + - uid: 134 components: - type: Transform pos: -1.5,-5.5 parent: 2 - - uid: 731 - components: - - type: Transform - pos: -2.5,-5.5 - parent: 2 - - uid: 732 + - uid: 135 components: - type: Transform pos: -0.5,-3.5 parent: 2 - - uid: 733 + - uid: 136 components: - type: Transform pos: -1.5,-3.5 parent: 2 - - uid: 734 - components: - - type: Transform - pos: -2.5,-3.5 - parent: 2 - - uid: 736 + - uid: 137 components: - type: Transform pos: 9.5,-4.5 parent: 2 - - uid: 739 + - uid: 138 components: - type: Transform pos: 7.5,5.5 parent: 2 - - uid: 740 + - uid: 139 components: - type: Transform pos: 5.5,5.5 parent: 2 - - uid: 741 + - uid: 140 components: - type: Transform pos: 4.5,5.5 parent: 2 - - uid: 742 + - uid: 141 components: - type: Transform pos: 3.5,5.5 parent: 2 - - uid: 744 + - uid: 142 components: - type: Transform pos: 1.5,5.5 parent: 2 - - uid: 745 + - uid: 143 components: - type: Transform pos: 0.5,5.5 parent: 2 - - uid: 747 + - uid: 144 components: - type: Transform pos: 9.5,5.5 parent: 2 - - uid: 748 + - uid: 145 components: - type: Transform pos: 10.5,5.5 parent: 2 - - uid: 749 + - uid: 146 components: - type: Transform pos: 11.5,5.5 parent: 2 - - uid: 751 + - uid: 147 components: - type: Transform pos: 12.5,4.5 parent: 2 - - uid: 752 + - uid: 148 components: - type: Transform pos: 12.5,3.5 parent: 2 - - uid: 753 + - uid: 149 components: - type: Transform pos: 12.5,2.5 parent: 2 - - uid: 757 + - uid: 150 components: - type: Transform pos: -1.5,3.5 parent: 2 - - uid: 758 + - uid: 151 components: - type: Transform pos: -1.5,4.5 parent: 2 - - uid: 760 + - uid: 152 components: - type: Transform pos: -0.5,5.5 parent: 2 - - uid: 804 + - uid: 153 components: - type: Transform pos: 6.5,-4.5 parent: 2 - - uid: 819 + - uid: 154 components: - type: Transform pos: 8.5,-4.5 parent: 2 - - uid: 855 + - uid: 155 components: - type: Transform pos: 3.5,-4.5 parent: 2 - proto: CableHV entities: - - uid: 53 + - uid: 156 components: - type: Transform pos: 11.5,-21.5 parent: 2 - - uid: 62 + - uid: 157 components: - type: Transform pos: 8.5,-20.5 parent: 2 - - uid: 63 + - uid: 158 components: - type: Transform pos: 10.5,-20.5 parent: 2 - - uid: 64 + - uid: 159 components: - type: Transform pos: 9.5,-20.5 parent: 2 - - uid: 190 + - uid: 160 + components: + - type: Transform + pos: -0.5,-12.5 + parent: 2 + - uid: 161 components: - type: Transform pos: 11.5,-20.5 parent: 2 - - uid: 191 + - uid: 162 components: - type: Transform pos: 11.5,-22.5 parent: 2 - - uid: 267 + - uid: 163 + components: + - type: Transform + pos: 11.5,-12.5 + parent: 2 + - uid: 164 components: - type: Transform pos: 11.5,-23.5 parent: 2 - - uid: 273 + - uid: 165 components: - type: Transform pos: -0.5,-17.5 parent: 2 - - uid: 274 + - uid: 166 components: - type: Transform pos: -0.5,-20.5 parent: 2 - - uid: 275 + - uid: 167 components: - type: Transform pos: -0.5,-21.5 parent: 2 - - uid: 278 + - uid: 168 components: - type: Transform pos: -0.5,-26.5 parent: 2 - - uid: 383 + - uid: 169 components: - type: Transform pos: 11.5,-15.5 parent: 2 - - uid: 392 + - uid: 170 components: - type: Transform pos: 11.5,-18.5 parent: 2 - - uid: 591 + - uid: 171 components: - type: Transform pos: 2.5,-17.5 parent: 2 - - uid: 592 + - uid: 172 components: - type: Transform pos: 1.5,-17.5 parent: 2 - - uid: 593 + - uid: 173 components: - type: Transform pos: 3.5,-17.5 parent: 2 - - uid: 594 + - uid: 174 components: - type: Transform pos: 3.5,-16.5 parent: 2 - - uid: 595 + - uid: 175 components: - type: Transform pos: 3.5,-15.5 parent: 2 - - uid: 623 + - uid: 176 components: - type: Transform pos: 11.5,-17.5 parent: 2 - - uid: 735 + - uid: 177 components: - type: Transform pos: 11.5,-13.5 parent: 2 - - uid: 738 + - uid: 178 components: - type: Transform pos: -0.5,-19.5 parent: 2 - - uid: 743 + - uid: 179 components: - type: Transform pos: -0.5,-22.5 parent: 2 - - uid: 746 + - uid: 180 components: - type: Transform pos: -0.5,-25.5 parent: 2 - - uid: 763 + - uid: 181 components: - type: Transform pos: 11.5,-24.5 parent: 2 - - uid: 764 + - uid: 182 components: - type: Transform pos: 11.5,-25.5 parent: 2 - - uid: 765 + - uid: 183 components: - type: Transform pos: 11.5,-26.5 parent: 2 - - uid: 778 + - uid: 184 components: - type: Transform pos: 1.5,-16.5 parent: 2 - - uid: 780 + - uid: 185 components: - type: Transform pos: 0.5,-16.5 parent: 2 - - uid: 781 + - uid: 186 components: - type: Transform pos: 11.5,-14.5 parent: 2 - - uid: 784 + - uid: 187 components: - type: Transform pos: -0.5,-15.5 parent: 2 - - uid: 785 + - uid: 188 components: - type: Transform pos: 11.5,-16.5 parent: 2 - - uid: 800 + - uid: 189 components: - type: Transform pos: -0.5,-16.5 parent: 2 - - uid: 801 + - uid: 190 components: - type: Transform pos: -0.5,-14.5 parent: 2 - - uid: 817 + - uid: 191 components: - type: Transform pos: -0.5,-24.5 parent: 2 - - uid: 818 + - uid: 192 components: - type: Transform pos: -0.5,-23.5 parent: 2 - - uid: 824 + - uid: 193 components: - type: Transform pos: -0.5,-13.5 parent: 2 - - uid: 825 + - uid: 194 components: - type: Transform pos: -0.5,-18.5 parent: 2 - - uid: 828 + - uid: 195 components: - type: Transform pos: 10.5,-13.5 parent: 2 - - uid: 829 + - uid: 196 components: - type: Transform pos: 9.5,-13.5 parent: 2 - - uid: 830 + - uid: 197 components: - type: Transform pos: 8.5,-13.5 parent: 2 - - uid: 831 + - uid: 198 components: - type: Transform pos: 7.5,-13.5 parent: 2 - - uid: 832 + - uid: 199 components: - type: Transform pos: 6.5,-13.5 parent: 2 - - uid: 833 + - uid: 200 components: - type: Transform pos: 5.5,-13.5 parent: 2 - - uid: 834 + - uid: 201 components: - type: Transform pos: 4.5,-13.5 parent: 2 - - uid: 835 + - uid: 202 components: - type: Transform pos: 3.5,-13.5 parent: 2 - - uid: 836 + - uid: 203 components: - type: Transform pos: 2.5,-13.5 parent: 2 - - uid: 837 + - uid: 204 components: - type: Transform pos: 1.5,-13.5 parent: 2 - - uid: 838 + - uid: 205 components: - type: Transform pos: 0.5,-13.5 parent: 2 - - uid: 902 + - uid: 206 components: - type: Transform pos: 10.5,-22.5 parent: 2 - - uid: 904 + - uid: 207 components: - type: Transform pos: 11.5,-19.5 parent: 2 - - uid: 905 - components: - - type: Transform - pos: 7.5,-20.5 - parent: 2 - - uid: 906 - components: - - type: Transform - pos: 6.5,-20.5 - parent: 2 - - uid: 910 + - uid: 208 components: - type: Transform pos: 9.5,-22.5 parent: 2 - - uid: 911 + - uid: 209 components: - type: Transform pos: 8.5,-22.5 parent: 2 - - uid: 912 + - uid: 210 components: - type: Transform pos: 7.5,-22.5 parent: 2 - - uid: 913 + - uid: 211 components: - type: Transform pos: 6.5,-22.5 parent: 2 - - uid: 914 - components: - - type: Transform - pos: 4.5,-20.5 - parent: 2 - - uid: 915 - components: - - type: Transform - pos: 3.5,-20.5 - parent: 2 - - uid: 916 + - uid: 212 components: - type: Transform pos: 2.5,-20.5 parent: 2 - - uid: 917 + - uid: 213 components: - type: Transform pos: 1.5,-20.5 parent: 2 - - uid: 918 + - uid: 214 components: - type: Transform pos: 0.5,-20.5 parent: 2 - - uid: 919 + - uid: 215 components: - type: Transform pos: 0.5,-22.5 parent: 2 - - uid: 920 + - uid: 216 components: - type: Transform pos: 1.5,-22.5 parent: 2 - - uid: 921 + - uid: 217 components: - type: Transform pos: 2.5,-22.5 parent: 2 - - uid: 922 + - uid: 218 components: - type: Transform pos: 3.5,-22.5 parent: 2 - - uid: 923 + - uid: 219 components: - type: Transform pos: 4.5,-22.5 parent: 2 - - uid: 924 + - uid: 220 components: - type: Transform pos: 4.5,-24.5 parent: 2 - - uid: 925 + - uid: 221 components: - type: Transform pos: 3.5,-24.5 parent: 2 - - uid: 926 + - uid: 222 components: - type: Transform pos: 2.5,-24.5 parent: 2 - - uid: 927 + - uid: 223 components: - type: Transform pos: 1.5,-24.5 parent: 2 - - uid: 928 + - uid: 224 components: - type: Transform pos: 0.5,-24.5 parent: 2 - - uid: 929 + - uid: 225 components: - type: Transform pos: 0.5,-26.5 parent: 2 - - uid: 930 + - uid: 226 components: - type: Transform pos: 1.5,-26.5 parent: 2 - - uid: 931 + - uid: 227 components: - type: Transform pos: 2.5,-26.5 parent: 2 - - uid: 932 + - uid: 228 components: - type: Transform pos: 3.5,-26.5 parent: 2 - - uid: 933 + - uid: 229 components: - type: Transform pos: 4.5,-26.5 parent: 2 - - uid: 934 + - uid: 230 components: - type: Transform pos: 6.5,-26.5 parent: 2 - - uid: 935 + - uid: 231 components: - type: Transform pos: 7.5,-26.5 parent: 2 - - uid: 936 + - uid: 232 components: - type: Transform pos: 9.5,-26.5 parent: 2 - - uid: 937 + - uid: 233 components: - type: Transform pos: 8.5,-26.5 parent: 2 - - uid: 938 + - uid: 234 components: - type: Transform pos: 10.5,-26.5 parent: 2 - - uid: 939 + - uid: 235 components: - type: Transform pos: 6.5,-24.5 parent: 2 - - uid: 940 + - uid: 236 components: - type: Transform pos: 7.5,-24.5 parent: 2 - - uid: 941 + - uid: 237 components: - type: Transform pos: 8.5,-24.5 parent: 2 - - uid: 942 + - uid: 238 components: - type: Transform pos: 9.5,-24.5 parent: 2 - - uid: 943 + - uid: 239 components: - type: Transform pos: 10.5,-24.5 parent: 2 - proto: CableMV entities: - - uid: 599 + - uid: 240 components: - type: Transform - pos: 3.5,-15.5 + pos: 2.5,5.5 parent: 2 - - uid: 600 + - uid: 241 components: - type: Transform - pos: 2.5,-15.5 + pos: 6.5,7.5 parent: 2 - - uid: 601 + - uid: 242 components: - type: Transform - pos: -0.5,0.5 + pos: 7.5,7.5 parent: 2 - - uid: 602 + - uid: 243 components: - type: Transform - pos: 1.5,-14.5 + pos: 5.5,7.5 parent: 2 - - uid: 603 + - uid: 244 components: - type: Transform - pos: 2.5,-14.5 + pos: 4.5,7.5 parent: 2 - - uid: 604 + - uid: 245 components: - type: Transform - pos: 2.5,-13.5 + pos: 3.5,7.5 parent: 2 - - uid: 605 + - uid: 246 components: - type: Transform - pos: 2.5,-12.5 + pos: -1.5,1.5 parent: 2 - - uid: 606 + - uid: 247 components: - type: Transform - pos: 2.5,-11.5 + pos: -2.5,1.5 parent: 2 - - uid: 607 + - uid: 248 components: - type: Transform - pos: 1.5,1.5 + pos: -2.5,2.5 parent: 2 - - uid: 608 + - uid: 249 components: - type: Transform - pos: 2.5,1.5 + pos: -2.5,3.5 parent: 2 - - uid: 609 + - uid: 250 components: - type: Transform - pos: 2.5,0.5 + pos: -2.5,4.5 parent: 2 - - uid: 610 + - uid: 251 components: - type: Transform - pos: 2.5,-0.5 + pos: -2.5,5.5 parent: 2 - - uid: 611 + - uid: 252 components: - type: Transform - pos: 2.5,-1.5 + pos: -1.5,5.5 parent: 2 - - uid: 612 + - uid: 253 components: - type: Transform - pos: 2.5,-2.5 + pos: 7.5,5.5 parent: 2 - - uid: 613 + - uid: 254 components: - type: Transform - pos: 2.5,-3.5 + pos: 8.5,5.5 parent: 2 - - uid: 614 + - uid: 255 components: - type: Transform - pos: 2.5,-4.5 + pos: 9.5,5.5 parent: 2 - - uid: 615 + - uid: 256 components: - type: Transform - pos: 2.5,-5.5 + pos: 11.5,5.5 parent: 2 - - uid: 616 + - uid: 257 components: - type: Transform - pos: 2.5,-6.5 + pos: 10.5,5.5 parent: 2 - - uid: 617 + - uid: 258 components: - type: Transform - pos: 2.5,-7.5 + pos: 12.5,5.5 parent: 2 - - uid: 618 + - uid: 259 components: - type: Transform - pos: 2.5,-8.5 + pos: 13.5,5.5 parent: 2 - - uid: 619 + - uid: 260 components: - type: Transform - pos: 2.5,-9.5 + pos: 13.5,4.5 parent: 2 - - uid: 620 + - uid: 261 components: - type: Transform - pos: 2.5,-10.5 + pos: 13.5,3.5 parent: 2 - - uid: 621 + - uid: 262 components: - type: Transform - pos: 0.5,1.5 + pos: 13.5,2.5 parent: 2 - - uid: 622 + - uid: 263 components: - type: Transform - pos: -0.5,1.5 + pos: 13.5,1.5 parent: 2 - - uid: 628 + - uid: 264 components: - type: Transform - pos: -0.5,5.5 + pos: 12.5,1.5 parent: 2 - - uid: 629 + - uid: 265 components: - type: Transform - pos: 0.5,5.5 + pos: 12.5,0.5 parent: 2 - - uid: 630 + - uid: 266 components: - type: Transform - pos: 1.5,5.5 + pos: -1.5,0.5 parent: 2 - - uid: 633 + - uid: 267 components: - type: Transform - pos: 6.5,6.5 + pos: -1.5,-0.5 parent: 2 - - uid: 634 + - uid: 268 components: - type: Transform - pos: 6.5,5.5 + pos: -1.5,-1.5 parent: 2 - - uid: 635 + - uid: 269 components: - type: Transform - pos: 5.5,5.5 + pos: 1.5,-6.5 parent: 2 - - uid: 636 + - uid: 270 components: - type: Transform - pos: 4.5,5.5 + pos: 0.5,-6.5 parent: 2 - - uid: 637 + - uid: 271 components: - type: Transform - pos: 3.5,5.5 + pos: -0.5,-6.5 parent: 2 -- proto: CableTerminal - entities: - - uid: 590 + - uid: 272 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 2.5,-17.5 + pos: -1.5,-6.5 parent: 2 -- proto: CargoPalletBuy - entities: - - uid: 21 + - uid: 273 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 3.5,-9.5 + pos: -1.5,-7.5 parent: 2 - - uid: 24 + - uid: 274 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 2.5,-9.5 + pos: 12.5,-7.5 parent: 2 - - uid: 25 + - uid: 275 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 2.5,-8.5 + pos: 12.5,-6.5 parent: 2 - - uid: 26 + - uid: 276 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 3.5,-8.5 + pos: 11.5,-6.5 parent: 2 - - uid: 27 + - uid: 277 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 3.5,-7.5 + pos: 10.5,-6.5 parent: 2 - - uid: 30 + - uid: 278 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 2.5,-7.5 + pos: 9.5,-6.5 parent: 2 - - uid: 32 + - uid: 279 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 4.5,-9.5 + pos: 9.5,-7.5 parent: 2 - - uid: 35 + - uid: 280 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 7.5,-0.5 + pos: 9.5,-8.5 parent: 2 - - uid: 36 + - uid: 281 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 6.5,-0.5 + pos: 9.5,-9.5 parent: 2 - - uid: 37 + - uid: 282 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 4.5,-7.5 + pos: 9.5,-10.5 parent: 2 - - uid: 39 + - uid: 283 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 6.5,-2.5 + pos: 8.5,-10.5 parent: 2 - - uid: 41 + - uid: 284 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 6.5,-1.5 + pos: 7.5,-10.5 parent: 2 - - uid: 42 + - uid: 285 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 7.5,-1.5 + pos: 6.5,-10.5 parent: 2 - - uid: 43 + - uid: 286 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 8.5,-2.5 + pos: 5.5,-10.5 parent: 2 - - uid: 44 + - uid: 287 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 8.5,-1.5 + pos: 4.5,-10.5 parent: 2 - - uid: 47 + - uid: 288 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 8.5,0.5 + pos: 3.5,-10.5 parent: 2 - - uid: 49 + - uid: 289 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 8.5,-0.5 + pos: 12.5,-0.5 parent: 2 - - uid: 50 + - uid: 290 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 7.5,-2.5 + pos: 12.5,-1.5 parent: 2 - - uid: 56 + - uid: 291 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 4.5,-6.5 + pos: 3.5,-15.5 parent: 2 - - uid: 61 + - uid: 292 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 4.5,-8.5 + pos: 2.5,-15.5 parent: 2 - - uid: 67 + - uid: 293 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 3.5,-6.5 + pos: -0.5,0.5 parent: 2 - - uid: 71 + - uid: 294 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 2.5,-6.5 + pos: 1.5,-14.5 parent: 2 - - uid: 183 + - uid: 295 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 6.5,0.5 + pos: 2.5,-14.5 parent: 2 - - uid: 900 + - uid: 296 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 7.5,0.5 + pos: 2.5,-13.5 parent: 2 -- proto: CargoPalletSell - entities: - - uid: 34 + - uid: 297 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 4.5,-0.5 + pos: 2.5,-12.5 parent: 2 - - uid: 45 + - uid: 298 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 8.5,-7.5 + pos: 2.5,-11.5 parent: 2 - - uid: 46 + - uid: 299 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 4.5,-2.5 + pos: 1.5,1.5 parent: 2 - - uid: 48 + - uid: 300 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 3.5,-2.5 + pos: 2.5,1.5 parent: 2 - - uid: 51 + - uid: 301 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 3.5,-1.5 + pos: 2.5,0.5 parent: 2 - - uid: 52 + - uid: 302 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 2.5,-2.5 + pos: 2.5,-0.5 parent: 2 - - uid: 54 + - uid: 303 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 6.5,-9.5 + pos: 2.5,-1.5 parent: 2 - - uid: 55 + - uid: 304 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 2.5,-1.5 + pos: 2.5,-2.5 parent: 2 - - uid: 57 + - uid: 305 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 8.5,-9.5 + pos: 2.5,-3.5 parent: 2 - - uid: 58 + - uid: 306 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 4.5,0.5 + pos: 2.5,-4.5 parent: 2 - - uid: 59 + - uid: 307 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 8.5,-6.5 + pos: 2.5,-5.5 parent: 2 - - uid: 60 + - uid: 308 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 7.5,-7.5 + pos: 2.5,-6.5 parent: 2 - - uid: 66 + - uid: 309 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 3.5,0.5 + pos: 2.5,-7.5 parent: 2 - - uid: 68 + - uid: 310 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 7.5,-8.5 + pos: 2.5,-8.5 parent: 2 - - uid: 69 + - uid: 311 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 8.5,-8.5 + pos: 2.5,-9.5 parent: 2 - - uid: 70 + - uid: 312 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 7.5,-9.5 + pos: 2.5,-10.5 parent: 2 - - uid: 72 + - uid: 313 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 7.5,-6.5 + pos: 0.5,1.5 parent: 2 - - uid: 73 + - uid: 314 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 6.5,-6.5 + pos: -0.5,1.5 parent: 2 - - uid: 901 + - uid: 315 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 2.5,-0.5 + pos: -0.5,5.5 parent: 2 - - uid: 903 + - uid: 316 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 3.5,-0.5 + pos: 0.5,5.5 parent: 2 - - uid: 907 + - uid: 317 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 7.5,-7.5 + pos: 1.5,5.5 parent: 2 - - uid: 908 + - uid: 318 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 4.5,-1.5 + pos: 6.5,6.5 parent: 2 - - uid: 909 + - uid: 319 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 6.5,-8.5 + pos: 6.5,5.5 + parent: 2 + - uid: 320 + components: + - type: Transform + pos: 5.5,5.5 parent: 2 - - uid: 960 + - uid: 321 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 6.5,-7.5 + pos: 4.5,5.5 parent: 2 - - uid: 961 + - uid: 322 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 2.5,0.5 + pos: 3.5,5.5 parent: 2 -- proto: CarpetBlack +- proto: CableTerminal entities: - - uid: 33 + - uid: 323 components: - type: Transform rot: 1.5707963267948966 rad - pos: 6.5,5.5 + pos: 2.5,-17.5 parent: 2 - - uid: 65 +- proto: CargoPalletBuy + entities: + - uid: 324 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 5.5,5.5 + rot: -1.5707963267948966 rad + pos: 3.5,-9.5 parent: 2 - - uid: 199 + - uid: 325 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 4.5,6.5 + rot: -1.5707963267948966 rad + pos: 2.5,-9.5 parent: 2 - - uid: 200 + - uid: 326 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 4.5,5.5 + rot: -1.5707963267948966 rad + pos: 2.5,-8.5 parent: 2 - - uid: 201 + - uid: 327 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 1.5,5.5 + rot: -1.5707963267948966 rad + pos: 3.5,-8.5 parent: 2 - - uid: 211 + - uid: 328 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 5.5,6.5 + rot: -1.5707963267948966 rad + pos: 3.5,-7.5 parent: 2 - - uid: 212 + - uid: 329 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 9.5,6.5 + rot: -1.5707963267948966 rad + pos: 2.5,-7.5 parent: 2 - - uid: 213 + - uid: 330 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 7.5,6.5 + rot: -1.5707963267948966 rad + pos: 4.5,-9.5 parent: 2 - - uid: 214 + - uid: 331 components: - type: Transform rot: 1.5707963267948966 rad - pos: 10.5,5.5 + pos: 7.5,-0.5 parent: 2 - - uid: 215 + - uid: 332 components: - type: Transform rot: 1.5707963267948966 rad - pos: 1.5,6.5 + pos: 6.5,-0.5 parent: 2 - - uid: 221 + - uid: 333 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 6.5,6.5 + rot: -1.5707963267948966 rad + pos: 4.5,-7.5 parent: 2 - - uid: 246 + - uid: 334 components: - type: Transform rot: 1.5707963267948966 rad - pos: 10.5,6.5 + pos: 6.5,-2.5 parent: 2 - - uid: 247 + - uid: 335 components: - type: Transform rot: 1.5707963267948966 rad - pos: 3.5,5.5 + pos: 6.5,-1.5 parent: 2 - - uid: 265 + - uid: 336 components: - type: Transform rot: 1.5707963267948966 rad - pos: 3.5,6.5 + pos: 7.5,-1.5 parent: 2 - - uid: 266 + - uid: 337 components: - type: Transform rot: 1.5707963267948966 rad - pos: 0.5,6.5 + pos: 8.5,-2.5 parent: 2 - - uid: 268 + - uid: 338 components: - type: Transform rot: 1.5707963267948966 rad - pos: 9.5,5.5 + pos: 8.5,-1.5 parent: 2 - - uid: 269 + - uid: 339 components: - type: Transform rot: 1.5707963267948966 rad - pos: 7.5,5.5 + pos: 8.5,0.5 parent: 2 - - uid: 270 + - uid: 340 components: - type: Transform rot: 1.5707963267948966 rad - pos: 0.5,5.5 + pos: 8.5,-0.5 parent: 2 - - uid: 271 + - uid: 341 components: - type: Transform rot: 1.5707963267948966 rad - pos: 1.5,6.5 + pos: 7.5,-2.5 parent: 2 -- proto: Catwalk - entities: - - uid: 294 + - uid: 342 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 12.5,4.5 + rot: -1.5707963267948966 rad + pos: 4.5,-6.5 parent: 2 - - uid: 295 + - uid: 343 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 12.5,3.5 + rot: -1.5707963267948966 rad + pos: 4.5,-8.5 parent: 2 - - uid: 296 + - uid: 344 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 12.5,2.5 + rot: -1.5707963267948966 rad + pos: 3.5,-6.5 parent: 2 - - uid: 297 + - uid: 345 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -1.5,4.5 + rot: -1.5707963267948966 rad + pos: 2.5,-6.5 parent: 2 - - uid: 298 + - uid: 346 components: - type: Transform rot: 1.5707963267948966 rad - pos: -1.5,3.5 + pos: 6.5,0.5 parent: 2 - - uid: 299 + - uid: 347 components: - type: Transform rot: 1.5707963267948966 rad - pos: -1.5,2.5 + pos: 7.5,0.5 parent: 2 - - uid: 528 +- proto: CargoPalletSell + entities: + - uid: 348 components: - type: Transform - pos: 0.5,-24.5 + rot: -1.5707963267948966 rad + pos: 4.5,-0.5 parent: 2 - - uid: 529 + - uid: 349 components: - type: Transform - pos: 2.5,-26.5 + rot: 1.5707963267948966 rad + pos: 8.5,-7.5 parent: 2 - - uid: 533 + - uid: 350 components: - type: Transform - pos: 3.5,-22.5 + rot: -1.5707963267948966 rad + pos: 4.5,-2.5 parent: 2 - - uid: 538 + - uid: 351 components: - type: Transform - pos: 0.5,-20.5 + rot: -1.5707963267948966 rad + pos: 3.5,-2.5 parent: 2 - - uid: 539 + - uid: 352 components: - type: Transform - pos: 9.5,-20.5 + rot: -1.5707963267948966 rad + pos: 3.5,-1.5 parent: 2 - - uid: 540 + - uid: 353 components: - type: Transform - pos: 9.5,-22.5 + rot: -1.5707963267948966 rad + pos: 2.5,-2.5 parent: 2 - - uid: 543 + - uid: 354 components: - type: Transform - pos: 8.5,-22.5 + rot: 1.5707963267948966 rad + pos: 6.5,-9.5 parent: 2 - - uid: 544 + - uid: 355 components: - type: Transform - pos: 9.5,-24.5 + rot: -1.5707963267948966 rad + pos: 2.5,-1.5 parent: 2 - - uid: 552 + - uid: 356 components: - type: Transform - pos: 2.5,-24.5 + rot: 1.5707963267948966 rad + pos: 8.5,-9.5 parent: 2 - - uid: 554 + - uid: 357 components: - type: Transform - pos: 7.5,-26.5 + rot: -1.5707963267948966 rad + pos: 4.5,0.5 parent: 2 - - uid: 557 + - uid: 358 components: - type: Transform - pos: 3.5,-26.5 + rot: 1.5707963267948966 rad + pos: 8.5,-6.5 parent: 2 - - uid: 559 + - uid: 359 components: - type: Transform - pos: 0.5,-26.5 + rot: 1.5707963267948966 rad + pos: 7.5,-7.5 parent: 2 - - uid: 571 + - uid: 360 components: - type: Transform - pos: 8.5,-20.5 + rot: -1.5707963267948966 rad + pos: 3.5,0.5 parent: 2 - - uid: 573 + - uid: 361 components: - type: Transform - pos: 10.5,-20.5 + rot: 1.5707963267948966 rad + pos: 7.5,-8.5 parent: 2 - - uid: 578 + - uid: 362 components: - type: Transform - pos: 9.5,-26.5 + rot: 1.5707963267948966 rad + pos: 8.5,-8.5 parent: 2 - - uid: 579 + - uid: 363 components: - type: Transform - pos: 10.5,-24.5 + rot: 1.5707963267948966 rad + pos: 7.5,-9.5 parent: 2 - - uid: 586 + - uid: 364 components: - type: Transform rot: 1.5707963267948966 rad - pos: 13.5,-3.5 + pos: 7.5,-6.5 parent: 2 - - uid: 587 + - uid: 365 components: - type: Transform rot: 1.5707963267948966 rad - pos: 13.5,-5.5 + pos: 6.5,-6.5 parent: 2 - - uid: 588 + - uid: 366 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 11.5,-5.5 + rot: -1.5707963267948966 rad + pos: 2.5,-0.5 parent: 2 - - uid: 589 + - uid: 367 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,-0.5 + parent: 2 + - uid: 368 components: - type: Transform rot: 1.5707963267948966 rad - pos: 11.5,-3.5 + pos: 7.5,-7.5 parent: 2 - - uid: 596 + - uid: 369 components: - type: Transform - pos: 7.5,-24.5 + rot: -1.5707963267948966 rad + pos: 4.5,-1.5 parent: 2 - - uid: 598 + - uid: 370 components: - type: Transform - pos: 7.5,-22.5 + rot: 1.5707963267948966 rad + pos: 6.5,-8.5 parent: 2 - - uid: 759 + - uid: 371 components: - type: Transform - pos: 3.5,-24.5 + rot: 1.5707963267948966 rad + pos: 6.5,-7.5 parent: 2 - - uid: 761 + - uid: 372 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,0.5 + parent: 2 +- proto: Catwalk + entities: + - uid: 373 components: - type: Transform - pos: 1.5,-22.5 + pos: 2.5,-15.5 parent: 2 - - uid: 762 + - uid: 374 components: - type: Transform - pos: 2.5,-20.5 + pos: 12.5,-3.5 parent: 2 - - uid: 840 + - uid: 375 components: - type: Transform - pos: 3.5,-20.5 + pos: 12.5,-5.5 parent: 2 - - uid: 841 + - uid: 376 components: - type: Transform - pos: 1.5,-24.5 + pos: -1.5,-3.5 parent: 2 - - uid: 846 + - uid: 377 components: - type: Transform - pos: 1.5,-26.5 + pos: 2.5,-16.5 parent: 2 - - uid: 848 + - uid: 378 components: - type: Transform - pos: 4.5,-26.5 + pos: -1.5,-5.5 parent: 2 - - uid: 849 + - uid: 379 components: - type: Transform - pos: 0.5,-22.5 + pos: 0.5,-24.5 parent: 2 - - uid: 850 + - uid: 380 components: - type: Transform - pos: 2.5,-22.5 + pos: 2.5,-26.5 parent: 2 - - uid: 856 + - uid: 381 components: - type: Transform - pos: 6.5,-26.5 + pos: 3.5,-22.5 parent: 2 - - uid: 857 + - uid: 382 components: - type: Transform - pos: 10.5,-22.5 + pos: 0.5,-20.5 parent: 2 - - uid: 858 + - uid: 383 components: - type: Transform - pos: 6.5,-20.5 + pos: 9.5,-20.5 parent: 2 - - uid: 859 + - uid: 384 components: - type: Transform - pos: 1.5,-20.5 + pos: 9.5,-22.5 parent: 2 - - uid: 860 + - uid: 385 components: - type: Transform - pos: 4.5,-20.5 + pos: 8.5,-22.5 parent: 2 - - uid: 861 + - uid: 386 components: - type: Transform - pos: 7.5,-20.5 + pos: 9.5,-24.5 parent: 2 - - uid: 863 + - uid: 387 components: - type: Transform - pos: 8.5,-24.5 + pos: 2.5,-24.5 parent: 2 - - uid: 864 + - uid: 388 components: - type: Transform - pos: 8.5,-26.5 + pos: 7.5,-26.5 parent: 2 - - uid: 865 + - uid: 389 components: - type: Transform - pos: 10.5,-26.5 + pos: 3.5,-26.5 parent: 2 - - uid: 956 + - uid: 390 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -0.5,-3.5 + pos: 0.5,-26.5 parent: 2 - - uid: 957 + - uid: 391 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -0.5,-5.5 + pos: 8.5,-20.5 parent: 2 - - uid: 958 + - uid: 392 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -2.5,-5.5 + pos: 10.5,-20.5 parent: 2 - - uid: 959 + - uid: 393 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -2.5,-3.5 + pos: 9.5,-26.5 parent: 2 -- proto: Chair - entities: - - uid: 38 + - uid: 394 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 7.5,-4.5 + pos: 10.5,-24.5 parent: 2 - - uid: 40 + - uid: 395 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 3.5,-4.5 + pos: 7.5,-24.5 parent: 2 - - uid: 94 + - uid: 396 components: - type: Transform - rot: 3.141592653589793 rad - pos: 7.5,-11.5 + pos: 7.5,-22.5 parent: 2 - - uid: 99 + - uid: 397 components: - type: Transform - rot: 3.141592653589793 rad - pos: 3.5,-11.5 + pos: 3.5,-24.5 parent: 2 - - uid: 138 + - uid: 398 components: - type: Transform - rot: 3.141592653589793 rad - pos: 4.5,-11.5 + pos: 1.5,-22.5 parent: 2 - - uid: 143 + - uid: 399 components: - type: Transform - rot: 3.141592653589793 rad - pos: 6.5,-11.5 + pos: 2.5,-20.5 parent: 2 - - uid: 226 + - uid: 400 components: - type: Transform - pos: 8.5,2.5 + pos: 1.5,-24.5 parent: 2 - - uid: 227 + - uid: 401 components: - type: Transform - pos: 7.5,2.5 + pos: 1.5,-26.5 parent: 2 - - uid: 394 + - uid: 402 components: - type: Transform - rot: 3.141592653589793 rad - pos: 2.5,-11.5 + pos: 4.5,-26.5 parent: 2 - - uid: 395 + - uid: 403 components: - type: Transform - rot: 3.141592653589793 rad - pos: 8.5,-11.5 + pos: 0.5,-22.5 parent: 2 - - uid: 396 + - uid: 404 components: - type: Transform - pos: 2.5,2.5 + pos: 2.5,-22.5 parent: 2 - uid: 405 components: - type: Transform - pos: 3.5,2.5 + pos: 6.5,-26.5 parent: 2 - uid: 406 components: - type: Transform - pos: 4.5,2.5 + pos: 10.5,-22.5 parent: 2 - uid: 407 components: - type: Transform - pos: 6.5,2.5 + pos: 1.5,-20.5 parent: 2 -- proto: ChairPilotSeat - entities: - - uid: 767 + - uid: 408 components: - type: Transform - rot: 3.141592653589793 rad - pos: 7.5,-16.5 + pos: 8.5,-24.5 parent: 2 - - uid: 768 + - uid: 409 components: - type: Transform - rot: 3.141592653589793 rad - pos: 8.5,-16.5 + pos: 8.5,-26.5 parent: 2 -- proto: ChairWood - entities: - - uid: 253 + - uid: 410 components: - type: Transform - pos: 2.5,5.5 + pos: 10.5,-26.5 parent: 2 - - uid: 254 +- proto: Chair + entities: + - uid: 411 components: - type: Transform - pos: 7.5,5.5 + rot: -1.5707963267948966 rad + pos: 7.5,-4.5 parent: 2 - - uid: 255 + - uid: 412 components: - type: Transform - pos: 3.5,5.5 + rot: 1.5707963267948966 rad + pos: 3.5,-4.5 parent: 2 - - uid: 258 +- proto: ChairOfficeDark + entities: + - uid: 413 components: - type: Transform - pos: 1.5,5.5 + rot: 3.141592653589793 rad + pos: 8.5,-16.5 parent: 2 - - uid: 263 +- proto: ClosetEmergencyFilledRandom + entities: + - uid: 414 components: - type: Transform - pos: 8.5,5.5 + pos: 10.5,6.5 parent: 2 - - uid: 264 + - uid: 914 components: - type: Transform - pos: 9.5,5.5 + pos: 0.5,4.5 parent: 2 -- proto: ClosetEmergencyFilledRandom +- proto: ClosetFireFilled entities: - - uid: 354 + - uid: 415 components: - type: Transform - pos: 0.5,2.5 + pos: 10.5,4.5 parent: 2 -- proto: ClosetFireFilled - entities: - - uid: 355 + - uid: 915 components: - type: Transform - pos: 10.5,2.5 + pos: 0.5,6.5 parent: 2 - proto: ComputerPalletConsole entities: - - uid: 894 + - uid: 416 components: - type: Transform rot: 1.5707963267948966 rad pos: 6.5,-4.5 parent: 2 - - uid: 895 + - uid: 417 components: - type: Transform rot: -1.5707963267948966 rad @@ -2728,3230 +2667,3233 @@ entities: parent: 2 - proto: ComputerPowerMonitoring entities: - - uid: 766 + - uid: 418 components: - type: Transform pos: 7.5,-15.5 parent: 2 - proto: ComputerSolarControl entities: - - uid: 772 + - uid: 419 components: - type: Transform pos: 8.5,-15.5 parent: 2 - proto: ConveyorBelt entities: - - uid: 81 + - uid: 420 components: - type: Transform rot: 1.5707963267948966 rad - pos: -0.5,-2.5 + pos: 0.5,-6.5 parent: 2 - type: DeviceLinkSink links: - - 365 - - uid: 82 + - 801 + - uid: 421 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -0.5,-6.5 + rot: -1.5707963267948966 rad + pos: -2.5,-2.5 parent: 2 - type: DeviceLinkSink links: - - 366 - - uid: 108 + - 802 + - uid: 422 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 12.5,-2.5 + rot: 1.5707963267948966 rad + pos: -2.5,-6.5 parent: 2 - type: DeviceLinkSink links: - - 393 - - uid: 110 + - 801 + - uid: 423 components: - type: Transform rot: 1.5707963267948966 rad - pos: -2.5,-2.5 + pos: -0.5,-6.5 parent: 2 - type: DeviceLinkSink links: - - 365 - - uid: 329 + - 801 + - uid: 424 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -1.5,-6.5 + rot: -1.5707963267948966 rad + pos: -1.5,-2.5 parent: 2 - type: DeviceLinkSink links: - - 366 - - uid: 330 + - 802 + - uid: 425 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 13.5,-6.5 + rot: 1.5707963267948966 rad + pos: -1.5,-6.5 parent: 2 - type: DeviceLinkSink links: - - 404 - - uid: 331 + - 801 + - uid: 426 components: - type: Transform rot: -1.5707963267948966 rad - pos: 11.5,-6.5 + pos: 0.5,-2.5 parent: 2 - type: DeviceLinkSink links: - - 404 - - uid: 335 + - 802 + - uid: 427 components: - type: Transform rot: -1.5707963267948966 rad - pos: 12.5,-6.5 + pos: 10.5,-6.5 parent: 2 - type: DeviceLinkSink links: - - 404 - - uid: 337 + - 800 + - uid: 428 components: - type: Transform rot: -1.5707963267948966 rad - pos: 11.5,-2.5 + pos: 11.5,-6.5 parent: 2 - type: DeviceLinkSink links: - - 393 - - uid: 338 + - 800 + - uid: 429 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -2.5,-6.5 + rot: -1.5707963267948966 rad + pos: 12.5,-6.5 parent: 2 - type: DeviceLinkSink links: - - 366 - - uid: 339 + - 800 + - uid: 430 components: - type: Transform rot: 1.5707963267948966 rad - pos: -1.5,-2.5 + pos: 12.5,-2.5 parent: 2 - type: DeviceLinkSink links: - - 365 - - uid: 340 + - 803 + - uid: 431 components: - type: Transform - rot: -1.5707963267948966 rad + rot: 1.5707963267948966 rad pos: 13.5,-2.5 parent: 2 - type: DeviceLinkSink links: - - 393 - - uid: 359 + - 803 + - uid: 432 components: - type: Transform rot: -1.5707963267948966 rad - pos: 10.5,-2.5 + pos: 13.5,-6.5 parent: 2 - type: DeviceLinkSink links: - - 393 - - uid: 362 + - 800 + - uid: 433 components: - type: Transform rot: -1.5707963267948966 rad - pos: 10.5,-6.5 + pos: -0.5,-2.5 parent: 2 - type: DeviceLinkSink links: - - 404 - - uid: 363 + - 802 + - uid: 434 components: - type: Transform rot: 1.5707963267948966 rad - pos: 0.5,-2.5 + pos: 10.5,-2.5 parent: 2 - type: DeviceLinkSink links: - - 365 - - uid: 364 + - 803 + - uid: 435 components: - type: Transform rot: 1.5707963267948966 rad - pos: 0.5,-6.5 + pos: 11.5,-2.5 parent: 2 - type: DeviceLinkSink links: - - 366 + - 803 - proto: ExtinguisherCabinetFilled entities: - - uid: 360 + - uid: 436 components: - type: Transform rot: 3.141592653589793 rad pos: 5.5,0.5 parent: 2 - - uid: 361 + - uid: 437 components: - type: Transform rot: 3.141592653589793 rad pos: 5.5,-9.5 parent: 2 -- proto: Firelock - entities: - - uid: 789 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -0.5,1.5 - parent: 2 - - uid: 790 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 11.5,1.5 - parent: 2 -- proto: FirelockEdge - entities: - - uid: 786 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 4.5,-16.5 - parent: 2 -- proto: FirelockGlass +- proto: FoodBreadMoldySlice entities: - - uid: 782 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 11.5,5.5 - parent: 2 - - uid: 783 + - uid: 677 components: - type: Transform - rot: 3.141592653589793 rad - pos: -0.5,5.5 + pos: 9.492397,-17.283579 parent: 2 + missingComponents: + - Food + - InjectableSolution + - RefillableSolution - proto: GasOutletInjector entities: - - uid: 386 + - uid: 438 components: - type: Transform rot: -1.5707963267948966 rad pos: 5.5,-15.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: GasPassiveVent entities: - - uid: 397 + - uid: 439 components: - type: Transform rot: 1.5707963267948966 rad pos: 6.5,-15.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - - uid: 414 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 440 components: - type: Transform rot: 3.141592653589793 rad pos: 5.5,-13.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 + - type: AtmosPipeColor + color: '#FF1212FF' - proto: GasPipeBend entities: - - uid: 316 + - uid: 441 components: - type: Transform pos: 7.5,6.5 parent: 2 - - uid: 317 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 442 components: - type: Transform rot: 3.141592653589793 rad pos: 7.5,4.5 parent: 2 - - uid: 318 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 443 components: - type: Transform rot: -1.5707963267948966 rad pos: 3.5,4.5 parent: 2 - - uid: 322 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 444 components: - type: Transform rot: 1.5707963267948966 rad pos: 3.5,6.5 parent: 2 - - uid: 434 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 445 components: - type: Transform rot: 3.141592653589793 rad pos: 2.5,-17.5 parent: 2 - - uid: 457 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 446 components: - type: Transform rot: -1.5707963267948966 rad pos: 7.5,-11.5 parent: 2 - - uid: 458 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 447 components: - type: Transform rot: 1.5707963267948966 rad pos: 7.5,-8.5 parent: 2 - - uid: 475 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 448 components: - type: Transform pos: 3.5,-8.5 parent: 2 - - uid: 476 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 449 components: - type: Transform rot: 3.141592653589793 rad pos: 3.5,-10.5 parent: 2 - - uid: 486 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 450 components: - type: Transform pos: 2.5,1.5 parent: 2 - - uid: 487 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 451 components: - type: Transform rot: 3.141592653589793 rad pos: -1.5,1.5 parent: 2 - - uid: 488 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 452 components: - type: Transform rot: 1.5707963267948966 rad pos: -1.5,5.5 parent: 2 - - uid: 489 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 453 components: - type: Transform rot: 1.5707963267948966 rad pos: 8.5,1.5 parent: 2 - - uid: 490 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 454 components: - type: Transform rot: -1.5707963267948966 rad pos: 12.5,1.5 parent: 2 - - uid: 491 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 455 components: - type: Transform pos: 12.5,5.5 parent: 2 - - uid: 512 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 456 components: - type: Transform rot: 3.141592653589793 rad pos: 1.5,4.5 parent: 2 - - uid: 520 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 457 components: - type: Transform rot: -1.5707963267948966 rad pos: 9.5,4.5 parent: 2 - - uid: 522 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 458 components: - type: Transform rot: 3.141592653589793 rad pos: 2.5,5.5 parent: 2 + - type: AtmosPipeColor + color: '#0335FCFF' - proto: GasPipeStraight entities: - - uid: 223 + - uid: 459 components: - type: Transform rot: -1.5707963267948966 rad pos: 5.5,6.5 parent: 2 - - uid: 241 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 460 components: - type: Transform rot: -1.5707963267948966 rad pos: 6.5,6.5 parent: 2 - - uid: 250 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 461 components: - type: Transform rot: -1.5707963267948966 rad pos: 4.5,6.5 parent: 2 - - uid: 284 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 462 components: - type: Transform pos: 7.5,5.5 parent: 2 - - uid: 321 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 463 components: - type: Transform rot: -1.5707963267948966 rad pos: 7.5,5.5 parent: 2 - - uid: 323 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 464 components: - type: Transform pos: 3.5,5.5 parent: 2 - - uid: 417 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 465 components: - type: Transform rot: 3.141592653589793 rad pos: 8.5,-14.5 parent: 2 - - uid: 418 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 466 components: - type: Transform rot: 3.141592653589793 rad pos: 8.5,-13.5 parent: 2 - - uid: 419 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 467 components: - type: Transform rot: 3.141592653589793 rad pos: 8.5,-12.5 parent: 2 - - uid: 420 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 468 components: - type: Transform rot: 3.141592653589793 rad pos: 8.5,-11.5 parent: 2 - - uid: 421 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 469 components: - type: Transform rot: -1.5707963267948966 rad pos: 7.5,-16.5 parent: 2 - - uid: 422 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 470 components: - type: Transform rot: -1.5707963267948966 rad pos: 6.5,-16.5 parent: 2 - - uid: 423 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 471 components: - type: Transform rot: -1.5707963267948966 rad pos: 5.5,-16.5 parent: 2 - - uid: 424 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 472 components: - type: Transform rot: -1.5707963267948966 rad pos: 4.5,-16.5 parent: 2 - - uid: 425 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 473 components: - type: Transform rot: -1.5707963267948966 rad pos: 3.5,-16.5 parent: 2 - - uid: 426 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 474 components: - type: Transform rot: 1.5707963267948966 rad pos: 2.5,-16.5 parent: 2 - - uid: 428 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 475 components: - type: Transform rot: 1.5707963267948966 rad pos: 7.5,-15.5 parent: 2 - - uid: 430 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 476 components: - type: Transform rot: 3.141592653589793 rad pos: 2.5,-14.5 parent: 2 - - uid: 431 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 477 components: - type: Transform rot: 3.141592653589793 rad pos: 2.5,-13.5 parent: 2 - - uid: 432 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 478 components: - type: Transform rot: 3.141592653589793 rad pos: 2.5,-12.5 parent: 2 - - uid: 435 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 479 components: - type: Transform rot: 3.141592653589793 rad pos: 2.5,-16.5 parent: 2 - - uid: 436 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 480 components: - type: Transform rot: 1.5707963267948966 rad pos: 3.5,-17.5 parent: 2 - - uid: 437 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 481 components: - type: Transform rot: 1.5707963267948966 rad pos: 4.5,-17.5 parent: 2 - - uid: 438 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 482 components: - type: Transform rot: 1.5707963267948966 rad pos: 5.5,-17.5 parent: 2 - - uid: 439 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 483 components: - type: Transform rot: 1.5707963267948966 rad pos: 6.5,-17.5 parent: 2 - - uid: 442 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 484 components: - type: Transform rot: -1.5707963267948966 rad pos: 1.5,-0.5 parent: 2 - - uid: 443 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 485 components: - type: Transform rot: 3.141592653589793 rad pos: 2.5,-1.5 parent: 2 - - uid: 444 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 486 components: - type: Transform rot: 3.141592653589793 rad pos: 2.5,-2.5 parent: 2 - - uid: 445 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 487 components: - type: Transform rot: 3.141592653589793 rad pos: 2.5,-3.5 parent: 2 - - uid: 446 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 488 components: - type: Transform rot: 3.141592653589793 rad pos: 2.5,-4.5 parent: 2 - - uid: 447 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 489 components: - type: Transform rot: 3.141592653589793 rad pos: 2.5,-5.5 parent: 2 - - uid: 448 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 490 components: - type: Transform rot: 3.141592653589793 rad pos: 2.5,-6.5 parent: 2 - - uid: 449 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 491 components: - type: Transform rot: 3.141592653589793 rad pos: 2.5,-7.5 parent: 2 - - uid: 450 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 492 components: - type: Transform rot: 3.141592653589793 rad pos: 2.5,-8.5 parent: 2 - - uid: 451 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 493 components: - type: Transform rot: 3.141592653589793 rad pos: 2.5,-9.5 parent: 2 - - uid: 452 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 494 components: - type: Transform rot: 3.141592653589793 rad pos: 2.5,-10.5 parent: 2 - - uid: 453 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 495 components: - type: Transform rot: 1.5707963267948966 rad pos: 4.5,-11.5 parent: 2 - - uid: 454 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 496 components: - type: Transform rot: 1.5707963267948966 rad pos: 3.5,-11.5 parent: 2 - - uid: 455 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 497 components: - type: Transform pos: 5.5,-12.5 parent: 2 - - uid: 456 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 498 components: - type: Transform rot: -1.5707963267948966 rad pos: 6.5,-11.5 parent: 2 - - uid: 459 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 499 components: - type: Transform rot: 1.5707963267948966 rad pos: 8.5,-8.5 parent: 2 - - uid: 460 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 500 components: - type: Transform rot: 1.5707963267948966 rad pos: 9.5,-8.5 parent: 2 - - uid: 461 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 501 components: - type: Transform pos: 7.5,-10.5 parent: 2 - - uid: 462 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 502 components: - type: Transform pos: 7.5,-9.5 parent: 2 - - uid: 464 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 503 components: - type: Transform pos: 8.5,-9.5 parent: 2 - - uid: 465 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 504 components: - type: Transform pos: 8.5,-8.5 parent: 2 - - uid: 466 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 505 components: - type: Transform pos: 8.5,-7.5 parent: 2 - - uid: 467 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 506 components: - type: Transform pos: 8.5,-6.5 parent: 2 - - uid: 468 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 507 components: - type: Transform pos: 8.5,-5.5 parent: 2 - - uid: 469 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 508 components: - type: Transform pos: 8.5,-4.5 parent: 2 - - uid: 470 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 509 components: - type: Transform pos: 8.5,-3.5 parent: 2 - - uid: 471 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 510 components: - type: Transform pos: 8.5,-2.5 parent: 2 - - uid: 472 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 511 components: - type: Transform pos: 8.5,-1.5 parent: 2 - - uid: 473 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 512 components: - type: Transform rot: -1.5707963267948966 rad pos: 9.5,-0.5 parent: 2 - - uid: 477 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 513 components: - type: Transform rot: 1.5707963267948966 rad pos: 1.5,-8.5 parent: 2 - - uid: 478 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 514 components: - type: Transform rot: 1.5707963267948966 rad pos: 2.5,-8.5 parent: 2 - - uid: 479 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 515 components: - type: Transform pos: 3.5,-9.5 parent: 2 - - uid: 480 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 516 components: - type: Transform rot: -1.5707963267948966 rad pos: 4.5,-10.5 parent: 2 - - uid: 481 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 517 components: - type: Transform rot: -1.5707963267948966 rad pos: 6.5,-10.5 parent: 2 - - uid: 482 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 518 components: - type: Transform rot: -1.5707963267948966 rad pos: 5.5,-10.5 parent: 2 - - uid: 483 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 519 components: - type: Transform rot: -1.5707963267948966 rad pos: 7.5,-10.5 parent: 2 - - uid: 484 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 520 components: - type: Transform rot: 3.141592653589793 rad pos: 2.5,0.5 parent: 2 - - uid: 485 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 521 components: - type: Transform rot: 3.141592653589793 rad pos: 8.5,0.5 parent: 2 - - uid: 492 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 522 components: - type: Transform rot: -1.5707963267948966 rad pos: 9.5,1.5 parent: 2 - - uid: 493 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 523 components: - type: Transform rot: -1.5707963267948966 rad pos: 10.5,1.5 parent: 2 - - uid: 494 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 524 components: - type: Transform rot: -1.5707963267948966 rad pos: 11.5,1.5 parent: 2 - - uid: 495 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 525 components: - type: Transform rot: -1.5707963267948966 rad pos: 1.5,1.5 parent: 2 - - uid: 496 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 526 components: - type: Transform rot: -1.5707963267948966 rad pos: 0.5,1.5 parent: 2 - - uid: 497 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 527 components: - type: Transform rot: -1.5707963267948966 rad pos: -0.5,1.5 parent: 2 - - uid: 498 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 528 components: - type: Transform rot: 3.141592653589793 rad pos: -1.5,2.5 parent: 2 - - uid: 499 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 529 components: - type: Transform rot: 3.141592653589793 rad pos: -1.5,3.5 parent: 2 - - uid: 500 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 530 components: - type: Transform rot: 3.141592653589793 rad pos: -1.5,4.5 parent: 2 - - uid: 501 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 531 components: - type: Transform rot: 1.5707963267948966 rad pos: -0.5,5.5 parent: 2 - - uid: 502 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 532 components: - type: Transform rot: 1.5707963267948966 rad pos: 0.5,5.5 parent: 2 - - uid: 503 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 533 components: - type: Transform pos: 12.5,4.5 parent: 2 - - uid: 504 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 534 components: - type: Transform pos: 12.5,3.5 parent: 2 - - uid: 505 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 535 components: - type: Transform pos: 12.5,2.5 parent: 2 - - uid: 506 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 536 components: - type: Transform rot: -1.5707963267948966 rad pos: 11.5,5.5 parent: 2 - - uid: 507 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 537 components: - type: Transform rot: -1.5707963267948966 rad pos: 10.5,5.5 parent: 2 - - uid: 508 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 538 components: - type: Transform rot: -1.5707963267948966 rad pos: 9.5,5.5 parent: 2 - - uid: 511 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 0.5,5.5 - parent: 2 - - uid: 513 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 539 components: - type: Transform rot: 1.5707963267948966 rad pos: 2.5,4.5 parent: 2 - - uid: 519 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 540 components: - type: Transform rot: 1.5707963267948966 rad pos: 8.5,4.5 parent: 2 - - uid: 521 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 541 components: - type: Transform rot: 3.141592653589793 rad pos: 9.5,5.5 parent: 2 - - uid: 523 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 542 components: - type: Transform rot: 1.5707963267948966 rad pos: 3.5,5.5 parent: 2 - - uid: 524 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 543 components: - type: Transform rot: 1.5707963267948966 rad pos: 4.5,5.5 parent: 2 - - uid: 525 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 544 components: - type: Transform rot: 1.5707963267948966 rad pos: 5.5,5.5 parent: 2 - - uid: 526 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 545 components: - type: Transform rot: 1.5707963267948966 rad pos: 6.5,5.5 parent: 2 + - type: AtmosPipeColor + color: '#0335FCFF' - proto: GasPipeTJunction entities: - - uid: 415 + - uid: 546 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,5.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 547 components: - type: Transform rot: -1.5707963267948966 rad pos: 8.5,-16.5 parent: 2 - - uid: 416 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 548 components: - type: Transform rot: -1.5707963267948966 rad pos: 8.5,-15.5 parent: 2 - - uid: 429 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 549 components: - type: Transform rot: -1.5707963267948966 rad pos: 2.5,-15.5 parent: 2 - - uid: 433 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 550 components: - type: Transform rot: 1.5707963267948966 rad pos: 2.5,-11.5 parent: 2 - - uid: 440 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 551 components: - type: Transform pos: 5.5,-11.5 parent: 2 - - uid: 441 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 552 components: - type: Transform rot: -1.5707963267948966 rad pos: 2.5,-0.5 parent: 2 - - uid: 463 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 553 components: - type: Transform rot: -1.5707963267948966 rad pos: 8.5,-10.5 parent: 2 - - uid: 474 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 554 components: - type: Transform rot: 1.5707963267948966 rad pos: 8.5,-0.5 parent: 2 - - uid: 509 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 555 components: - type: Transform rot: 3.141592653589793 rad pos: 8.5,5.5 parent: 2 - - uid: 510 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 1.5,5.5 - parent: 2 + - type: AtmosPipeColor + color: '#0335FCFF' - proto: GasPort entities: - - uid: 427 + - uid: 556 components: - type: Transform rot: 1.5707963267948966 rad pos: 4.5,-15.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: GasVentPump entities: - - uid: 398 + - uid: 557 components: - type: Transform rot: 3.141592653589793 rad pos: 8.5,-17.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - - uid: 400 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 558 components: - type: Transform rot: 1.5707963267948966 rad pos: 0.5,-8.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - - uid: 401 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 559 components: - type: Transform pos: 2.5,6.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - - uid: 402 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 560 components: - type: Transform rot: -1.5707963267948966 rad pos: 10.5,-0.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - - uid: 403 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 561 components: - type: Transform pos: 8.5,6.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - - uid: 412 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 562 components: - type: Transform rot: 1.5707963267948966 rad pos: 1.5,-16.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 + - type: AtmosPipeColor + color: '#0335FCFF' - proto: GasVentScrubber entities: - - uid: 399 + - uid: 563 components: - type: Transform rot: 1.5707963267948966 rad pos: 1.5,-15.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - - uid: 408 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 564 components: - type: Transform pos: 1.5,6.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - - uid: 409 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 565 components: - type: Transform pos: 9.5,6.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - - uid: 410 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 566 components: - type: Transform rot: -1.5707963267948966 rad pos: 10.5,-8.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - - uid: 411 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 567 components: - type: Transform rot: 1.5707963267948966 rad pos: 0.5,-0.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - - uid: 413 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 568 components: - type: Transform rot: -1.5707963267948966 rad pos: 7.5,-17.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 -- proto: GeneratorRTG + - type: AtmosPipeColor + color: '#FF1212FF' +- proto: GeneratorBasic15kW entities: - - uid: 367 + - uid: 569 components: - type: Transform pos: 1.5,-17.5 parent: 2 - - uid: 368 + - uid: 570 components: - type: Transform - pos: 2.5,-17.5 + pos: 1.5,-16.5 parent: 2 - proto: GravityGeneratorMini entities: - - uid: 279 + - uid: 571 components: - type: Transform - pos: 1.5,-16.5 + pos: 1.5,-15.5 parent: 2 - proto: Grille entities: - - uid: 14 + - uid: 572 components: - type: Transform pos: 5.5,-1.5 parent: 2 - - uid: 15 + - uid: 573 components: - type: Transform pos: 5.5,-2.5 parent: 2 - - uid: 16 + - uid: 574 components: - type: Transform pos: 5.5,-3.5 parent: 2 - - uid: 17 + - uid: 575 components: - type: Transform pos: 5.5,-4.5 parent: 2 - - uid: 18 + - uid: 576 components: - type: Transform pos: 5.5,-5.5 parent: 2 - - uid: 19 + - uid: 577 components: - type: Transform pos: 5.5,-6.5 parent: 2 - - uid: 75 + - uid: 578 components: - type: Transform pos: 5.5,-7.5 parent: 2 - - uid: 146 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 1.5,3.5 - parent: 2 - - uid: 147 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 2.5,3.5 - parent: 2 - - uid: 148 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 3.5,3.5 - parent: 2 - - uid: 149 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 7.5,3.5 - parent: 2 - - uid: 150 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 8.5,3.5 - parent: 2 - - uid: 151 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 9.5,3.5 - parent: 2 - - uid: 153 + - uid: 579 components: - type: Transform rot: 3.141592653589793 rad pos: -2.5,5.5 parent: 2 - - uid: 162 + - uid: 580 components: - type: Transform rot: 3.141592653589793 rad pos: 13.5,3.5 parent: 2 - - uid: 163 + - uid: 581 components: - type: Transform rot: 3.141592653589793 rad pos: 13.5,2.5 parent: 2 - - uid: 164 + - uid: 582 components: - type: Transform rot: 3.141592653589793 rad pos: 13.5,1.5 parent: 2 - - uid: 166 + - uid: 583 components: - type: Transform rot: 3.141592653589793 rad pos: 12.5,0.5 parent: 2 - - uid: 167 + - uid: 584 components: - type: Transform rot: 3.141592653589793 rad pos: -1.5,0.5 parent: 2 - - uid: 168 + - uid: 585 components: - type: Transform rot: 3.141592653589793 rad pos: -2.5,4.5 parent: 2 - - uid: 169 + - uid: 586 components: - type: Transform rot: 3.141592653589793 rad pos: -2.5,1.5 parent: 2 - - uid: 170 + - uid: 587 components: - type: Transform rot: 3.141592653589793 rad pos: -2.5,2.5 parent: 2 - - uid: 171 + - uid: 588 components: - type: Transform rot: 3.141592653589793 rad pos: -2.5,3.5 parent: 2 - - uid: 194 + - uid: 589 components: - type: Transform rot: 3.141592653589793 rad pos: 1.5,-13.5 parent: 2 - - uid: 195 + - uid: 590 components: - type: Transform rot: 3.141592653589793 rad pos: 3.5,-13.5 parent: 2 - - uid: 196 + - uid: 591 components: - type: Transform rot: 3.141592653589793 rad pos: 7.5,-13.5 parent: 2 - - uid: 197 + - uid: 592 components: - type: Transform rot: 3.141592653589793 rad pos: 9.5,-13.5 parent: 2 - - uid: 224 + - uid: 593 + components: + - type: Transform + pos: 6.5,-12.5 + parent: 2 + - uid: 594 + components: + - type: Transform + pos: 5.5,-12.5 + parent: 2 + - uid: 595 + components: + - type: Transform + pos: 4.5,-12.5 + parent: 2 + - uid: 596 components: - type: Transform pos: 8.5,-13.5 parent: 2 - - uid: 225 + - uid: 597 components: - type: Transform pos: 2.5,-13.5 parent: 2 - - uid: 228 + - uid: 598 components: - type: Transform rot: 3.141592653589793 rad pos: 13.5,4.5 parent: 2 - - uid: 229 + - uid: 599 components: - type: Transform rot: 3.141592653589793 rad pos: 13.5,5.5 parent: 2 - - uid: 272 + - uid: 600 components: - type: Transform pos: 10.5,-28.5 parent: 2 - - uid: 282 + - uid: 601 components: - type: Transform rot: 1.5707963267948966 rad pos: 13.5,-11.5 parent: 2 - - uid: 286 + - uid: 602 components: - type: Transform pos: -2.5,-24.5 parent: 2 - - uid: 291 + - uid: 603 components: - type: Transform pos: -2.5,-28.5 parent: 2 - - uid: 303 + - uid: 604 components: - type: Transform pos: 4.5,7.5 parent: 2 - - uid: 304 + - uid: 605 components: - type: Transform pos: 3.5,7.5 parent: 2 - - uid: 306 + - uid: 606 components: - type: Transform pos: 6.5,7.5 parent: 2 - - uid: 307 + - uid: 607 components: - type: Transform pos: 5.5,7.5 parent: 2 - - uid: 312 + - uid: 608 components: - type: Transform pos: 7.5,7.5 parent: 2 - - uid: 349 + - uid: 609 components: - type: Transform rot: 1.5707963267948966 rad pos: -1.5,-1.5 parent: 2 - - uid: 350 + - uid: 610 components: - type: Transform rot: 1.5707963267948966 rad pos: -1.5,-7.5 parent: 2 - - uid: 351 + - uid: 611 components: - type: Transform rot: 1.5707963267948966 rad pos: 12.5,-7.5 parent: 2 - - uid: 352 + - uid: 612 components: - type: Transform rot: 1.5707963267948966 rad pos: 12.5,-1.5 parent: 2 - - uid: 373 + - uid: 613 components: - type: Transform rot: 1.5707963267948966 rad pos: -2.5,-12.5 parent: 2 - - uid: 379 + - uid: 614 components: - type: Transform rot: 1.5707963267948966 rad pos: 13.5,-19.5 parent: 2 - - uid: 514 + - uid: 615 components: - type: Transform rot: 1.5707963267948966 rad pos: -2.5,-16.5 parent: 2 - - uid: 516 + - uid: 616 components: - type: Transform pos: 13.5,-27.5 parent: 2 - - uid: 527 + - uid: 617 components: - type: Transform pos: -0.5,-28.5 parent: 2 - - uid: 556 + - uid: 618 components: - type: Transform pos: 13.5,-21.5 parent: 2 - - uid: 569 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -1.5,-4.5 - parent: 2 - - uid: 570 + - uid: 619 components: - type: Transform pos: 13.5,-24.5 parent: 2 - - uid: 572 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 12.5,-4.5 - parent: 2 - - uid: 624 + - uid: 620 components: - type: Transform rot: 1.5707963267948966 rad pos: -2.5,-19.5 parent: 2 - - uid: 625 + - uid: 621 components: - type: Transform rot: 1.5707963267948966 rad pos: -2.5,-14.5 parent: 2 - - uid: 626 + - uid: 622 components: - type: Transform rot: 1.5707963267948966 rad pos: -2.5,-11.5 parent: 2 - - uid: 627 + - uid: 623 components: - type: Transform rot: 1.5707963267948966 rad pos: 13.5,-12.5 parent: 2 - - uid: 737 + - uid: 624 components: - type: Transform pos: 9.5,-28.5 parent: 2 - - uid: 750 + - uid: 625 components: - type: Transform pos: -2.5,-27.5 parent: 2 - - uid: 787 + - uid: 626 components: - type: Transform rot: 1.5707963267948966 rad pos: -2.5,-18.5 parent: 2 - - uid: 788 + - uid: 627 components: - type: Transform rot: 1.5707963267948966 rad pos: -2.5,-10.5 parent: 2 - - uid: 791 + - uid: 628 components: - type: Transform rot: 1.5707963267948966 rad pos: 13.5,-10.5 parent: 2 - - uid: 792 + - uid: 629 components: - type: Transform rot: 1.5707963267948966 rad pos: 13.5,-16.5 parent: 2 - - uid: 798 + - uid: 630 components: - type: Transform rot: 1.5707963267948966 rad pos: 13.5,-17.5 parent: 2 - - uid: 814 + - uid: 631 components: - type: Transform pos: 13.5,-28.5 parent: 2 - - uid: 820 + - uid: 632 components: - type: Transform pos: -2.5,-25.5 parent: 2 - - uid: 821 + - uid: 633 components: - type: Transform pos: -2.5,-22.5 parent: 2 - - uid: 823 + - uid: 634 components: - type: Transform pos: 0.5,-28.5 parent: 2 - - uid: 826 + - uid: 635 components: - type: Transform rot: 1.5707963267948966 rad pos: 13.5,-18.5 parent: 2 - - uid: 827 + - uid: 636 components: - type: Transform rot: 1.5707963267948966 rad pos: 13.5,-14.5 parent: 2 - - uid: 847 + - uid: 637 components: - type: Transform pos: 13.5,-26.5 parent: 2 - - uid: 862 + - uid: 638 components: - type: Transform pos: 13.5,-23.5 parent: 2 - - uid: 876 + - uid: 639 components: - type: Transform pos: -1.5,9.5 parent: 2 - - uid: 877 + - uid: 640 components: - type: Transform pos: -0.5,9.5 parent: 2 - - uid: 878 + - uid: 641 components: - type: Transform pos: 1.5,9.5 parent: 2 - - uid: 879 + - uid: 642 components: - type: Transform pos: 0.5,9.5 parent: 2 - - uid: 880 + - uid: 643 components: - type: Transform pos: 3.5,9.5 parent: 2 - - uid: 881 + - uid: 644 components: - type: Transform pos: 5.5,9.5 parent: 2 - - uid: 882 + - uid: 645 components: - type: Transform pos: 7.5,9.5 parent: 2 - - uid: 883 + - uid: 646 components: - type: Transform pos: 8.5,9.5 parent: 2 - - uid: 884 + - uid: 647 components: - type: Transform pos: 10.5,9.5 parent: 2 - - uid: 885 + - uid: 648 components: - type: Transform pos: 9.5,9.5 parent: 2 - - uid: 886 + - uid: 649 components: - type: Transform pos: 12.5,9.5 parent: 2 + - uid: 650 + components: + - type: Transform + pos: 6.5,-14.5 + parent: 2 + - uid: 651 + components: + - type: Transform + pos: 5.5,-14.5 + parent: 2 + - uid: 652 + components: + - type: Transform + pos: 4.5,-14.5 + parent: 2 - proto: GrilleSpawner entities: - - uid: 277 + - uid: 653 components: - type: Transform pos: 11.5,-28.5 parent: 2 - - uid: 382 + - uid: 654 components: - type: Transform pos: 13.5,-13.5 parent: 2 - - uid: 517 + - uid: 655 components: - type: Transform pos: -2.5,-26.5 parent: 2 - - uid: 631 + - uid: 656 components: - type: Transform pos: -2.5,-15.5 parent: 2 - - uid: 632 + - uid: 657 components: - type: Transform pos: -2.5,-17.5 parent: 2 - - uid: 754 + - uid: 658 components: - type: Transform pos: -2.5,-21.5 parent: 2 - - uid: 755 + - uid: 659 components: - type: Transform pos: 13.5,-25.5 parent: 2 - - uid: 756 + - uid: 660 components: - type: Transform pos: 13.5,-22.5 parent: 2 - - uid: 797 + - uid: 661 components: - type: Transform pos: 13.5,-15.5 parent: 2 - - uid: 799 + - uid: 662 components: - type: Transform pos: -2.5,-13.5 parent: 2 - - uid: 815 + - uid: 663 components: - type: Transform pos: 1.5,-28.5 parent: 2 - - uid: 822 + - uid: 664 components: - type: Transform pos: -2.5,-23.5 parent: 2 - - uid: 887 + - uid: 665 components: - type: Transform pos: 2.5,9.5 parent: 2 - - uid: 888 + - uid: 666 components: - type: Transform pos: 4.5,9.5 parent: 2 - - uid: 889 - components: - - type: Transform - pos: 6.5,9.5 - parent: 2 - - uid: 890 - components: - - type: Transform - pos: 11.5,9.5 - parent: 2 -- proto: Gyroscope - entities: - - uid: 816 - components: - - type: Transform - pos: 1.5,-15.5 - parent: 2 -- proto: Lamp - entities: - - uid: 774 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 9.59808,-15.833403 - parent: 2 -- proto: LiquidNitrogenCanister - entities: - - uid: 385 - components: - - type: Transform - pos: 5.5,-17.5 - parent: 2 - - type: AtmosDevice - joinedGrid: 2 -- proto: LiquidOxygenCanister - entities: - - uid: 384 - components: - - type: Transform - pos: 4.5,-17.5 - parent: 2 - - type: AtmosDevice - joinedGrid: 2 -- proto: Paper - entities: - - uid: 775 - components: - - type: Transform - pos: 9.61031,-16.5917 - parent: 2 - - uid: 776 - components: - - type: Transform - pos: 9.488004,-16.738466 - parent: 2 - - uid: 777 - components: - - type: Transform - pos: 9.341236,-16.909695 - parent: 2 -- proto: PlasmaReinforcedWindowDirectional - entities: - - uid: 388 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 5.5,-15.5 - parent: 2 - - uid: 389 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 6.5,-15.5 - parent: 2 - - uid: 390 - components: - - type: Transform - pos: 6.5,-15.5 - parent: 2 - - uid: 391 - components: - - type: Transform - pos: 5.5,-15.5 - parent: 2 -- proto: PlasticFlapsAirtightClear - entities: - - uid: 84 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 13.5,-6.5 - parent: 2 - - uid: 86 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -0.5,-2.5 - parent: 2 - - uid: 112 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 11.5,-6.5 - parent: 2 - - uid: 328 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -2.5,-2.5 - parent: 2 - - uid: 332 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -0.5,-6.5 - parent: 2 - - uid: 333 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -2.5,-6.5 - parent: 2 - - uid: 334 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 13.5,-2.5 - parent: 2 - - uid: 336 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 11.5,-2.5 - parent: 2 -- proto: PottedPlantRandom - entities: - - uid: 139 - components: - - type: Transform - pos: 1.5,-11.5 - parent: 2 - - uid: 140 - components: - - type: Transform - pos: 9.5,-11.5 - parent: 2 - - uid: 218 - components: - - type: Transform - pos: 1.5,2.5 - parent: 2 - - uid: 238 - components: - - type: Transform - pos: 9.5,2.5 - parent: 2 - - uid: 314 - components: - - type: Transform - pos: 0.5,4.5 - parent: 2 - - uid: 315 - components: - - type: Transform - pos: 10.5,4.5 - parent: 2 -- proto: PowerCellRecharger - entities: - - uid: 773 - components: - - type: Transform - pos: 9.5,-15.5 - parent: 2 -- proto: Poweredlight - entities: - - uid: 119 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 4.5,-0.5 - parent: 2 - - uid: 120 + - uid: 667 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 6.5,-0.5 + pos: 6.5,9.5 parent: 2 - - uid: 121 + - uid: 668 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 6.5,-8.5 + pos: 11.5,9.5 parent: 2 - - uid: 122 +- proto: NewtonCradle + entities: + - uid: 669 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 4.5,-8.5 + pos: 9.501623,-16.39294 parent: 2 - - uid: 123 +- proto: PlasmaReinforcedWindowDirectional + entities: + - uid: 670 components: - type: Transform - rot: 3.141592653589793 rad - pos: 5.5,-11.5 + rot: -1.5707963267948966 rad + pos: 5.5,-15.5 parent: 2 - - uid: 124 + - uid: 671 components: - type: Transform - pos: 5.5,2.5 + rot: 1.5707963267948966 rad + pos: 6.5,-15.5 parent: 2 - - uid: 216 + - uid: 672 components: - type: Transform - rot: 3.141592653589793 rad - pos: 2.5,-17.5 + pos: 6.5,-15.5 parent: 2 - - uid: 219 + - uid: 673 components: - type: Transform - rot: 3.141592653589793 rad - pos: 8.5,-17.5 + pos: 5.5,-15.5 parent: 2 - - uid: 231 +- proto: PlasticFlapsAirtightClear + entities: + - uid: 674 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 0.5,6.5 + pos: 11.5,-2.5 parent: 2 - - uid: 232 + - uid: 675 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 10.5,6.5 + pos: -0.5,-2.5 parent: 2 - - uid: 233 + - uid: 678 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -1.5,3.5 + pos: 11.5,-6.5 parent: 2 - - uid: 234 + - uid: 680 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 12.5,3.5 + pos: -0.5,-6.5 parent: 2 -- proto: PoweredSmallLight +- proto: PlastitaniumWindow entities: - - uid: 259 + - uid: 905 components: - type: Transform - rot: 3.141592653589793 rad - pos: -1.5,-3.5 + pos: 4.5,-14.5 parent: 2 - - uid: 574 + missingComponents: + - Repairable + - Destructible + - ExaminableDamage + - RCDDeconstructable + - Construction + - uid: 906 components: - type: Transform - pos: -1.5,-5.5 + pos: 5.5,-14.5 parent: 2 - - uid: 580 + missingComponents: + - Repairable + - Destructible + - ExaminableDamage + - RCDDeconstructable + - Construction + - uid: 907 components: - type: Transform - pos: 12.5,-5.5 + pos: 6.5,-14.5 parent: 2 - - uid: 581 + missingComponents: + - Repairable + - Destructible + - ExaminableDamage + - RCDDeconstructable + - Construction +- proto: PosterLegitVacation + entities: + - uid: 682 components: - type: Transform - rot: 3.141592653589793 rad - pos: 12.5,-3.5 + rot: 1.5707963267948966 rad + pos: 8.5,-14.5 parent: 2 -- proto: Railing +- proto: PowerCellRecharger entities: - - uid: 287 + - uid: 683 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 3.5,4.5 + pos: 9.5,-15.5 parent: 2 - - uid: 288 +- proto: Poweredlight + entities: + - uid: 684 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 7.5,4.5 + pos: 5.5,2.5 parent: 2 - - uid: 289 + - uid: 685 components: - type: Transform rot: 1.5707963267948966 rad - pos: 9.5,4.5 + pos: 0.5,-8.5 parent: 2 - - uid: 293 + - uid: 686 components: - type: Transform rot: -1.5707963267948966 rad - pos: 1.5,4.5 - parent: 2 - - uid: 325 - components: - - type: Transform - pos: 6.5,5.5 + pos: 10.5,-8.5 parent: 2 - - uid: 326 + - uid: 687 components: - type: Transform - pos: 4.5,5.5 + rot: -1.5707963267948966 rad + pos: 10.5,-0.5 parent: 2 - - uid: 327 + - uid: 688 components: - type: Transform - pos: 5.5,5.5 + rot: 1.5707963267948966 rad + pos: 0.5,-0.5 parent: 2 -- proto: RailingCornerSmall +- proto: PoweredSmallLight entities: - - uid: 290 + - uid: 689 components: - type: Transform rot: 3.141592653589793 rad - pos: 3.5,5.5 + pos: 5.5,4.5 parent: 2 - - uid: 292 + - uid: 690 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 7.5,5.5 + rot: 3.141592653589793 rad + pos: 5.5,-19.5 parent: 2 -- proto: RandomPosterLegit - entities: - - uid: 518 + - uid: 691 components: - type: Transform - rot: 3.141592653589793 rad - pos: 3.5,-14.5 + rot: -1.5707963267948966 rad + pos: 9.5,-16.5 parent: 2 - - uid: 545 + - uid: 692 components: - type: Transform rot: 3.141592653589793 rad - pos: 0.5,3.5 + pos: -1.5,-3.5 parent: 2 - - uid: 546 + - uid: 693 components: - type: Transform - rot: 3.141592653589793 rad - pos: 10.5,3.5 + pos: -1.5,-5.5 parent: 2 - - uid: 547 + - uid: 694 components: - type: Transform - rot: 3.141592653589793 rad - pos: 10.5,-11.5 + pos: 12.5,-5.5 parent: 2 - - uid: 548 + - uid: 695 components: - type: Transform rot: 3.141592653589793 rad - pos: 0.5,-11.5 + pos: 12.5,-3.5 parent: 2 - - uid: 549 +- proto: RandomInstruments + entities: + - uid: 913 components: - type: Transform - rot: 3.141592653589793 rad - pos: 9.5,7.5 + pos: 5.5,2.5 parent: 2 - - uid: 550 +- proto: RandomPosterLegit + entities: + - uid: 696 components: - type: Transform rot: 3.141592653589793 rad - pos: 1.5,7.5 + pos: 10.5,-11.5 parent: 2 - - uid: 551 + - uid: 697 components: - type: Transform rot: 3.141592653589793 rad - pos: 7.5,-14.5 + pos: 0.5,-11.5 parent: 2 - proto: ReinforcedWindow entities: - - uid: 3 + - uid: 698 components: - type: Transform rot: 3.141592653589793 rad pos: 13.5,4.5 parent: 2 - - uid: 7 + - uid: 699 components: - type: Transform pos: 5.5,-7.5 parent: 2 - - uid: 8 + - uid: 700 components: - type: Transform pos: 5.5,-1.5 parent: 2 - - uid: 9 + - uid: 701 components: - type: Transform pos: 5.5,-2.5 parent: 2 - - uid: 10 + - uid: 702 components: - type: Transform pos: 5.5,-3.5 parent: 2 - - uid: 11 + - uid: 703 components: - type: Transform pos: 5.5,-4.5 parent: 2 - - uid: 12 + - uid: 704 components: - type: Transform pos: 5.5,-5.5 parent: 2 - - uid: 13 + - uid: 705 components: - type: Transform pos: 5.5,-6.5 parent: 2 - - uid: 77 + - uid: 706 components: - type: Transform rot: 3.141592653589793 rad pos: 7.5,-13.5 parent: 2 - - uid: 100 + - uid: 707 components: - type: Transform rot: 3.141592653589793 rad pos: 1.5,-13.5 parent: 2 - - uid: 127 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 9.5,3.5 - parent: 2 - - uid: 128 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 8.5,3.5 - parent: 2 - - uid: 129 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 7.5,3.5 - parent: 2 - - uid: 133 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 3.5,3.5 - parent: 2 - - uid: 134 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 2.5,3.5 - parent: 2 - - uid: 135 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 1.5,3.5 - parent: 2 - - uid: 142 + - uid: 708 components: - type: Transform rot: 3.141592653589793 rad pos: 9.5,-13.5 parent: 2 - - uid: 152 + - uid: 709 components: - type: Transform rot: 3.141592653589793 rad pos: -1.5,0.5 parent: 2 - - uid: 154 + - uid: 710 components: - type: Transform rot: 3.141592653589793 rad pos: -2.5,1.5 parent: 2 - - uid: 155 + - uid: 711 components: - type: Transform rot: 3.141592653589793 rad pos: -2.5,3.5 parent: 2 - - uid: 156 + - uid: 712 components: - type: Transform rot: 3.141592653589793 rad pos: -2.5,2.5 parent: 2 - - uid: 157 + - uid: 713 components: - type: Transform rot: 3.141592653589793 rad pos: 12.5,0.5 parent: 2 - - uid: 158 + - uid: 714 components: - type: Transform rot: 3.141592653589793 rad pos: 13.5,5.5 parent: 2 - - uid: 159 + - uid: 715 components: - type: Transform rot: 3.141592653589793 rad pos: 13.5,1.5 parent: 2 - - uid: 160 + - uid: 716 components: - type: Transform rot: 3.141592653589793 rad pos: 13.5,2.5 parent: 2 - - uid: 161 + - uid: 717 components: - type: Transform rot: 3.141592653589793 rad pos: 13.5,3.5 parent: 2 - - uid: 165 + - uid: 718 components: - type: Transform rot: 3.141592653589793 rad pos: -2.5,5.5 parent: 2 - - uid: 182 + - uid: 719 components: - type: Transform rot: 3.141592653589793 rad pos: -2.5,4.5 parent: 2 - - uid: 185 + - uid: 720 components: - type: Transform rot: 3.141592653589793 rad pos: 3.5,-13.5 parent: 2 - - uid: 285 + - uid: 721 components: - type: Transform pos: 3.5,7.5 parent: 2 - - uid: 300 + - uid: 722 components: - type: Transform pos: 5.5,7.5 parent: 2 - - uid: 301 + - uid: 723 components: - type: Transform pos: 6.5,7.5 parent: 2 - - uid: 302 + - uid: 724 components: - type: Transform pos: 7.5,7.5 parent: 2 - - uid: 311 + - uid: 725 components: - type: Transform pos: 4.5,7.5 parent: 2 - - uid: 353 + - uid: 726 components: - type: Transform rot: 1.5707963267948966 rad pos: -1.5,-1.5 parent: 2 - - uid: 356 + - uid: 727 components: - type: Transform rot: 1.5707963267948966 rad pos: -1.5,-7.5 parent: 2 - - uid: 357 + - uid: 728 components: - type: Transform rot: 1.5707963267948966 rad pos: 12.5,-7.5 parent: 2 - - uid: 358 + - uid: 729 components: - type: Transform rot: 1.5707963267948966 rad pos: 12.5,-1.5 parent: 2 - - uid: 555 + - uid: 730 components: - type: Transform - rot: 3.141592653589793 rad - pos: -1.5,-4.5 + pos: 6.5,-12.5 parent: 2 - - uid: 558 + - uid: 731 components: - type: Transform - rot: 3.141592653589793 rad - pos: 12.5,-4.5 + pos: 5.5,-12.5 + parent: 2 + - uid: 732 + components: + - type: Transform + pos: 4.5,-12.5 parent: 2 -- proto: ShuttersNormalOpen +- proto: ShuttersNormal entities: - - uid: 808 + - uid: 733 components: - type: Transform - pos: 1.5,3.5 + pos: 9.5,3.5 parent: 2 - type: DeviceLinkSink links: - - 807 - - uid: 809 + - 745 + - 746 + - uid: 734 components: - type: Transform - pos: 2.5,3.5 + pos: 1.5,3.5 parent: 2 - type: DeviceLinkSink links: - - 807 - - uid: 810 + - 743 + - 744 + - uid: 735 components: - type: Transform - pos: 3.5,3.5 + pos: 2.5,3.5 parent: 2 - type: DeviceLinkSink links: - - 807 - - uid: 811 + - 743 + - 744 + - uid: 736 components: - type: Transform - pos: 7.5,3.5 + pos: 3.5,3.5 parent: 2 - type: DeviceLinkSink links: - - 807 - - uid: 812 + - 743 + - 744 + - uid: 737 components: - type: Transform pos: 8.5,3.5 parent: 2 - type: DeviceLinkSink links: - - 807 - - uid: 813 + - 745 + - 746 + - uid: 738 components: - type: Transform - pos: 9.5,3.5 + pos: 7.5,3.5 parent: 2 - type: DeviceLinkSink links: - - 807 -- proto: SignalButton + - 745 + - 746 +- proto: SignalButtonDirectional entities: - - uid: 807 + - uid: 739 components: - - type: MetaData - name: shutters button - type: Transform - pos: 0.5,7.5 + rot: 1.5707963267948966 rad + pos: -0.5,-7.5 parent: 2 - type: DeviceLinkSource linkedPorts: - 808: - - Pressed: Toggle - 809: + invalid: - Pressed: Toggle - 810: + 679: - Pressed: Toggle - 811: + - uid: 740 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,-1.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 21: - Pressed: Toggle - 812: + - uid: 741 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 11.5,-7.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 20: - Pressed: Toggle - 813: + - uid: 742 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 11.5,-1.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 22: - Pressed: Toggle -- proto: SignSecureMed +- proto: SignalSwitchDirectional entities: - - uid: 144 + - uid: 743 components: - type: Transform - rot: 3.141592653589793 rad - pos: 5.5,-8.5 + pos: 4.5,3.5 parent: 2 - - uid: 145 + - type: DeviceLinkSource + linkedPorts: + 736: + - On: Open + - Off: Close + 735: + - On: Open + - Off: Close + 734: + - On: Open + - Off: Close + - uid: 744 components: - type: Transform rot: 3.141592653589793 rad - pos: 5.5,-0.5 + pos: 4.5,3.5 parent: 2 -- proto: SignShipDock - entities: - - uid: 945 + - type: DeviceLinkSource + linkedPorts: + 736: + - On: Open + - Off: Close + 735: + - On: Open + - Off: Close + 734: + - On: Open + - Off: Close + - uid: 745 components: - type: Transform - pos: -2.5,-4.5 + rot: 3.141592653589793 rad + pos: 6.5,3.5 parent: 2 - - uid: 946 + - type: DeviceLinkSource + linkedPorts: + 738: + - On: Open + - Off: Close + 737: + - On: Open + - Off: Close + 733: + - On: Open + - Off: Close + - uid: 746 components: - type: Transform - pos: 13.5,-4.5 + pos: 6.5,3.5 parent: 2 -- proto: SignSpace + - type: DeviceLinkSource + linkedPorts: + 738: + - On: Open + - Off: Close + 737: + - On: Open + - Off: Close + 733: + - On: Open + - Off: Close +- proto: SignCargoDock entities: - - uid: 341 + - uid: 747 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -0.5,-1.5 + pos: 13.5,-4.5 parent: 2 - - uid: 342 + - uid: 748 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 11.5,-1.5 + pos: -2.5,-4.5 parent: 2 - - uid: 343 +- proto: SignSecureMed + entities: + - uid: 749 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 11.5,-7.5 + rot: 3.141592653589793 rad + pos: 5.5,-8.5 parent: 2 - - uid: 344 + - uid: 750 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -0.5,-7.5 + rot: 3.141592653589793 rad + pos: 5.5,-0.5 parent: 2 - proto: SMESBasic entities: - - uid: 380 + - uid: 751 components: - type: Transform pos: 3.5,-17.5 parent: 2 - proto: SolarPanel entities: - - uid: 280 + - uid: 752 components: - type: Transform - pos: 3.5,-24.5 + rot: 1.5707963267948966 rad + pos: 11.5,-12.5 parent: 2 - - uid: 281 + - uid: 753 components: - type: Transform - pos: 1.5,-24.5 + rot: -1.5707963267948966 rad + pos: -0.5,-12.5 parent: 2 - - uid: 530 + - uid: 754 components: - type: Transform - pos: 6.5,-20.5 + pos: 3.5,-24.5 parent: 2 - - uid: 531 + - uid: 755 + components: + - type: Transform + pos: 1.5,-24.5 + parent: 2 + - uid: 756 components: - type: Transform pos: 8.5,-20.5 parent: 2 - - uid: 532 + - uid: 757 components: - type: Transform pos: 10.5,-20.5 parent: 2 - - uid: 534 + - uid: 758 components: - type: Transform pos: 0.5,-26.5 parent: 2 - - uid: 535 + - uid: 759 components: - type: Transform pos: 9.5,-24.5 parent: 2 - - uid: 536 + - uid: 760 components: - type: Transform pos: 10.5,-22.5 parent: 2 - - uid: 537 + - uid: 761 components: - type: Transform pos: 7.5,-24.5 parent: 2 - - uid: 561 + - uid: 762 components: - type: Transform pos: 9.5,-26.5 parent: 2 - - uid: 564 - components: - - type: Transform - pos: 7.5,-20.5 - parent: 2 - - uid: 565 + - uid: 763 components: - type: Transform pos: 6.5,-26.5 parent: 2 - - uid: 566 + - uid: 764 components: - type: Transform pos: 10.5,-24.5 parent: 2 - - uid: 567 + - uid: 765 components: - type: Transform pos: 1.5,-26.5 parent: 2 - - uid: 568 + - uid: 766 components: - type: Transform pos: 7.5,-22.5 parent: 2 - - uid: 649 + - uid: 767 components: - type: Transform pos: 4.5,-26.5 parent: 2 - - uid: 650 + - uid: 768 components: - type: Transform pos: 2.5,-24.5 parent: 2 - - uid: 839 + - uid: 769 components: - type: Transform pos: 8.5,-24.5 parent: 2 - - uid: 842 + - uid: 770 components: - type: Transform pos: 10.5,-26.5 parent: 2 - - uid: 843 + - uid: 771 components: - type: Transform pos: 7.5,-26.5 parent: 2 - - uid: 844 + - uid: 772 components: - type: Transform pos: 8.5,-26.5 parent: 2 - - uid: 845 + - uid: 773 components: - type: Transform pos: 9.5,-20.5 parent: 2 - - uid: 851 + - uid: 774 components: - type: Transform pos: 2.5,-26.5 parent: 2 - - uid: 852 + - uid: 775 components: - type: Transform pos: 3.5,-26.5 parent: 2 - - uid: 853 + - uid: 776 components: - type: Transform pos: 9.5,-22.5 parent: 2 - - uid: 854 + - uid: 777 components: - type: Transform pos: 8.5,-22.5 parent: 2 - - uid: 866 + - uid: 778 components: - type: Transform pos: 0.5,-24.5 parent: 2 - - uid: 867 + - uid: 779 components: - type: Transform pos: 3.5,-22.5 parent: 2 - - uid: 868 + - uid: 780 components: - type: Transform pos: 1.5,-22.5 parent: 2 - - uid: 869 + - uid: 781 components: - type: Transform pos: 2.5,-22.5 parent: 2 - - uid: 870 + - uid: 782 components: - type: Transform pos: 0.5,-20.5 parent: 2 - - uid: 871 + - uid: 783 components: - type: Transform pos: 2.5,-20.5 parent: 2 - - uid: 872 - components: - - type: Transform - pos: 3.5,-20.5 - parent: 2 - - uid: 873 - components: - - type: Transform - pos: 4.5,-20.5 - parent: 2 - - uid: 891 + - uid: 784 components: - type: Transform pos: 0.5,-22.5 parent: 2 - - uid: 892 + - uid: 785 components: - type: Transform pos: 1.5,-20.5 parent: 2 - proto: SolarTracker entities: - - uid: 198 + - uid: 786 components: - type: Transform pos: 4.5,-22.5 parent: 2 - - uid: 874 + - uid: 787 components: - type: Transform pos: 6.5,-22.5 parent: 2 - - uid: 875 + - uid: 788 components: - type: Transform pos: 4.5,-24.5 parent: 2 - - uid: 893 + - uid: 789 components: - type: Transform pos: 6.5,-24.5 parent: 2 -- proto: SubstationBasic +- proto: SpawnMobBear entities: - - uid: 381 + - uid: 790 components: - type: Transform - pos: 3.5,-15.5 + pos: 7.5,-16.5 parent: 2 -- proto: TableCounterWood +- proto: SpawnMobCleanBot entities: - - uid: 251 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 2.5,4.5 - parent: 2 - - uid: 252 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 1.5,4.5 - parent: 2 - - uid: 256 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 3.5,4.5 - parent: 2 - - uid: 257 + - uid: 676 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 7.5,4.5 + pos: 5.5,5.5 parent: 2 - - uid: 261 +- proto: StationAnchorIndestructible + entities: + - uid: 791 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 9.5,4.5 + pos: 5.5,-18.5 parent: 2 - - uid: 262 +- proto: SubstationBasic + entities: + - uid: 792 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 8.5,4.5 + pos: 3.5,-15.5 parent: 2 - proto: TableReinforced entities: - - uid: 769 + - uid: 793 components: - type: Transform rot: 3.141592653589793 rad pos: 9.5,-15.5 parent: 2 - - uid: 770 + - uid: 794 components: - type: Transform rot: 3.141592653589793 rad pos: 9.5,-16.5 parent: 2 - - uid: 771 + - uid: 795 components: - type: Transform rot: 3.141592653589793 rad pos: 9.5,-17.5 parent: 2 - - uid: 896 + - uid: 796 components: - type: Transform rot: -1.5707963267948966 rad pos: 4.5,-3.5 parent: 2 - - uid: 897 + - uid: 797 components: - type: Transform rot: -1.5707963267948966 rad pos: 4.5,-5.5 parent: 2 - - uid: 898 + - uid: 798 components: - type: Transform rot: -1.5707963267948966 rad pos: 6.5,-3.5 parent: 2 - - uid: 899 + - uid: 799 components: - type: Transform rot: -1.5707963267948966 rad pos: 6.5,-5.5 parent: 2 +- proto: TableWood + entities: + - uid: 912 + components: + - type: Transform + pos: 5.5,2.5 + parent: 2 - proto: TwoWayLever entities: - - uid: 365 + - uid: 800 components: - type: Transform - pos: 0.5,-3.5 + pos: 10.5,-7.5 parent: 2 - type: DeviceLinkSource linkedPorts: - 363: + 432: - Left: Forward - Right: Reverse - Middle: Off - 81: + 429: - Left: Forward - Right: Reverse - Middle: Off - 339: + 428: - Left: Forward - Right: Reverse - Middle: Off - 110: + 427: - Left: Forward - Right: Reverse - Middle: Off - - uid: 366 + - uid: 801 components: - type: Transform - pos: 0.5,-5.5 + pos: 0.5,-7.5 parent: 2 - type: DeviceLinkSource linkedPorts: - 364: + 422: - Left: Forward - Right: Reverse - Middle: Off - 82: + 425: - Left: Forward - Right: Reverse - Middle: Off - 329: + 423: - Left: Forward - Right: Reverse - Middle: Off - 338: + 420: - Left: Forward - Right: Reverse - Middle: Off - - uid: 393 + - uid: 802 components: - type: Transform - pos: 10.5,-3.5 + pos: 0.5,-1.5 parent: 2 - type: DeviceLinkSource linkedPorts: - 359: + 421: - Left: Forward - Right: Reverse - Middle: Off - 337: + 424: - Left: Forward - Right: Reverse - Middle: Off - 108: + 433: - Left: Forward - Right: Reverse - Middle: Off - 340: + 426: - Left: Forward - Right: Reverse - Middle: Off - - uid: 404 + - uid: 803 components: - type: Transform - pos: 10.5,-5.5 + pos: 10.5,-1.5 parent: 2 - type: DeviceLinkSource linkedPorts: - 362: + 431: - Left: Forward - Right: Reverse - Middle: Off - 331: + 430: - Left: Forward - Right: Reverse - Middle: Off - 335: + 435: - Left: Forward - Right: Reverse - Middle: Off - 330: + 434: - Left: Forward - Right: Reverse - Middle: Off -- proto: WallReinforced +- proto: WallPlastitaniumIndestructible entities: - - uid: 4 + - uid: 804 components: - type: Transform - pos: 5.5,0.5 + pos: 7.5,-20.5 parent: 2 - - uid: 5 + - uid: 805 components: - type: Transform - pos: 5.5,-0.5 + pos: 7.5,-19.5 parent: 2 - - uid: 6 + - uid: 806 components: - type: Transform - pos: 5.5,-8.5 + pos: 4.5,-20.5 parent: 2 - - uid: 28 + - uid: 807 + components: + - type: Transform + pos: 3.5,-19.5 + parent: 2 + - uid: 808 + components: + - type: Transform + pos: 6.5,-20.5 + parent: 2 + - uid: 809 + components: + - type: Transform + pos: 5.5,-20.5 + parent: 2 + - uid: 810 + components: + - type: Transform + pos: 3.5,-20.5 + parent: 2 + - uid: 811 components: - type: Transform - rot: -1.5707963267948966 rad pos: 10.5,-15.5 parent: 2 - - uid: 29 + - uid: 812 components: - type: Transform - rot: -1.5707963267948966 rad pos: 10.5,-16.5 parent: 2 - - uid: 74 + - uid: 813 + components: + - type: Transform + pos: 3.5,-14.5 + parent: 2 + - uid: 814 + components: + - type: Transform + pos: 1.5,-14.5 + parent: 2 + - uid: 815 + components: + - type: Transform + pos: 7.5,-14.5 + parent: 2 + - uid: 816 + components: + - type: Transform + pos: 9.5,-14.5 + parent: 2 + - uid: 817 + components: + - type: Transform + pos: 1.5,-18.5 + parent: 2 + - uid: 818 + components: + - type: Transform + pos: 2.5,-18.5 + parent: 2 + - uid: 819 + components: + - type: Transform + pos: 3.5,-18.5 + parent: 2 + - uid: 820 + components: + - type: Transform + pos: 7.5,-18.5 + parent: 2 + - uid: 821 + components: + - type: Transform + pos: 8.5,-18.5 + parent: 2 + - uid: 822 + components: + - type: Transform + pos: 9.5,-18.5 + parent: 2 + - uid: 823 + components: + - type: Transform + pos: 0.5,-18.5 + parent: 2 + - uid: 824 + components: + - type: Transform + pos: 8.5,-14.5 + parent: 2 + - uid: 825 + components: + - type: Transform + pos: 2.5,-14.5 + parent: 2 + - uid: 826 + components: + - type: Transform + pos: 0.5,-17.5 + parent: 2 + - uid: 827 + components: + - type: Transform + pos: 10.5,-14.5 + parent: 2 + - uid: 828 + components: + - type: Transform + pos: 0.5,-16.5 + parent: 2 + - uid: 829 + components: + - type: Transform + pos: 0.5,-15.5 + parent: 2 + - uid: 830 + components: + - type: Transform + pos: 0.5,-14.5 + parent: 2 + - uid: 831 + components: + - type: Transform + pos: 10.5,-18.5 + parent: 2 + - uid: 832 + components: + - type: Transform + pos: 10.5,-17.5 + parent: 2 +- proto: WallReinforced + entities: + - uid: 833 + components: + - type: Transform + pos: 5.5,0.5 + parent: 2 + - uid: 834 + components: + - type: Transform + pos: 5.5,-0.5 + parent: 2 + - uid: 835 + components: + - type: Transform + pos: 5.5,-8.5 + parent: 2 + - uid: 836 components: - type: Transform pos: 5.5,-9.5 parent: 2 - - uid: 76 + - uid: 837 components: - type: Transform pos: 11.5,2.5 parent: 2 - - uid: 78 + - uid: 838 components: - type: Transform pos: 11.5,0.5 parent: 2 - - uid: 79 + - uid: 839 components: - type: Transform pos: 11.5,-0.5 parent: 2 - - uid: 80 + - uid: 840 components: - type: Transform pos: 11.5,-1.5 parent: 2 - - uid: 83 + - uid: 841 components: - type: Transform pos: 11.5,-4.5 parent: 2 - - uid: 85 + - uid: 842 components: - type: Transform pos: 11.5,-7.5 parent: 2 - - uid: 87 + - uid: 843 components: - type: Transform pos: 11.5,-8.5 parent: 2 - - uid: 88 + - uid: 844 components: - type: Transform pos: 11.5,-9.5 parent: 2 - - uid: 89 + - uid: 845 components: - type: Transform pos: 11.5,-10.5 parent: 2 - - uid: 90 + - uid: 846 components: - type: Transform pos: 11.5,-11.5 parent: 2 - - uid: 91 + - uid: 847 components: - type: Transform pos: 10.5,-11.5 parent: 2 - - uid: 92 + - uid: 848 components: - type: Transform pos: 10.5,-12.5 parent: 2 - - uid: 93 + - uid: 849 components: - type: Transform pos: 9.5,-12.5 parent: 2 - - uid: 95 + - uid: 850 components: - type: Transform pos: 7.5,-12.5 parent: 2 - - uid: 96 - components: - - type: Transform - pos: 6.5,-12.5 - parent: 2 - - uid: 97 - components: - - type: Transform - pos: 5.5,-12.5 - parent: 2 - - uid: 98 - components: - - type: Transform - pos: 4.5,-12.5 - parent: 2 - - uid: 101 + - uid: 851 components: - type: Transform pos: 1.5,-12.5 parent: 2 - - uid: 102 + - uid: 852 components: - type: Transform pos: 0.5,-12.5 parent: 2 - - uid: 103 + - uid: 853 components: - type: Transform pos: 0.5,-11.5 parent: 2 - - uid: 104 + - uid: 854 components: - type: Transform pos: -0.5,-11.5 parent: 2 - - uid: 105 + - uid: 855 components: - type: Transform pos: -0.5,-10.5 parent: 2 - - uid: 106 + - uid: 856 components: - type: Transform pos: -0.5,-8.5 parent: 2 - - uid: 107 + - uid: 857 components: - type: Transform pos: -0.5,-7.5 parent: 2 - - uid: 109 + - uid: 858 components: - type: Transform pos: -0.5,-9.5 parent: 2 - - uid: 111 + - uid: 859 components: - type: Transform rot: 3.141592653589793 rad pos: 13.5,-4.5 parent: 2 - - uid: 113 + - uid: 860 components: - type: Transform pos: -0.5,-4.5 parent: 2 - - uid: 114 + - uid: 861 components: - type: Transform pos: -0.5,-1.5 parent: 2 - - uid: 115 + - uid: 862 components: - type: Transform pos: -0.5,-0.5 parent: 2 - - uid: 116 + - uid: 863 components: - type: Transform pos: -0.5,0.5 parent: 2 - - uid: 117 + - uid: 864 components: - type: Transform rot: 3.141592653589793 rad pos: 3.5,-12.5 parent: 2 - - uid: 118 + - uid: 865 components: - type: Transform pos: -0.5,2.5 parent: 2 - - uid: 125 + - uid: 866 components: - type: Transform pos: 11.5,3.5 parent: 2 - - uid: 126 + - uid: 867 components: - type: Transform pos: 10.5,3.5 parent: 2 - - uid: 130 + - uid: 868 components: - type: Transform pos: 6.5,3.5 parent: 2 - - uid: 131 + - uid: 869 components: - type: Transform pos: 5.5,3.5 parent: 2 - - uid: 132 + - uid: 870 components: - type: Transform pos: 4.5,3.5 parent: 2 - - uid: 136 + - uid: 871 components: - type: Transform pos: 0.5,3.5 parent: 2 - - uid: 137 + - uid: 872 components: - type: Transform pos: -0.5,3.5 parent: 2 - - uid: 141 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 3.5,-14.5 - parent: 2 - - uid: 172 + - uid: 873 components: - type: Transform rot: 3.141592653589793 rad pos: -2.5,0.5 parent: 2 - - uid: 173 + - uid: 874 components: - type: Transform rot: 3.141592653589793 rad pos: 13.5,0.5 parent: 2 - - uid: 174 + - uid: 875 components: - type: Transform rot: 3.141592653589793 rad pos: -0.5,4.5 parent: 2 - - uid: 175 + - uid: 876 components: - type: Transform rot: 3.141592653589793 rad pos: 13.5,6.5 parent: 2 - - uid: 176 + - uid: 877 components: - type: Transform rot: 3.141592653589793 rad pos: 12.5,6.5 parent: 2 - - uid: 177 + - uid: 878 components: - type: Transform rot: 3.141592653589793 rad pos: 11.5,6.5 parent: 2 - - uid: 178 + - uid: 879 components: - type: Transform rot: 3.141592653589793 rad pos: 11.5,4.5 parent: 2 - - uid: 179 + - uid: 880 components: - type: Transform rot: 3.141592653589793 rad pos: -0.5,6.5 parent: 2 - - uid: 180 + - uid: 881 components: - type: Transform rot: 3.141592653589793 rad pos: -1.5,6.5 parent: 2 - - uid: 181 + - uid: 882 components: - type: Transform rot: 3.141592653589793 rad pos: -2.5,6.5 parent: 2 - - uid: 184 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 1.5,-14.5 - parent: 2 - - uid: 186 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 4.5,-14.5 - parent: 2 - - uid: 187 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 5.5,-14.5 - parent: 2 - - uid: 188 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 6.5,-14.5 - parent: 2 - - uid: 189 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 7.5,-14.5 - parent: 2 - - uid: 192 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 9.5,-14.5 - parent: 2 - - uid: 193 + - uid: 883 components: - type: Transform pos: 2.5,-12.5 parent: 2 - - uid: 202 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 1.5,-18.5 - parent: 2 - - uid: 203 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 2.5,-18.5 - parent: 2 - - uid: 204 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 3.5,-18.5 - parent: 2 - - uid: 205 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 4.5,-18.5 - parent: 2 - - uid: 206 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 5.5,-18.5 - parent: 2 - - uid: 207 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 6.5,-18.5 - parent: 2 - - uid: 208 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 7.5,-18.5 - parent: 2 - - uid: 209 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 8.5,-18.5 - parent: 2 - - uid: 210 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 9.5,-18.5 - parent: 2 - - uid: 217 + - uid: 884 components: - type: Transform pos: 8.5,-12.5 parent: 2 - - uid: 220 + - uid: 885 components: - type: Transform - rot: 3.141592653589793 rad - pos: 0.5,-18.5 + pos: 12.5,-4.5 parent: 2 - - uid: 230 + - uid: 886 components: - type: Transform rot: 1.5707963267948966 rad pos: -0.5,7.5 parent: 2 - - uid: 235 + - uid: 887 components: - type: Transform rot: 1.5707963267948966 rad pos: 0.5,7.5 parent: 2 - - uid: 236 + - uid: 888 components: - type: Transform rot: 1.5707963267948966 rad pos: 1.5,7.5 parent: 2 - - uid: 237 + - uid: 889 components: - type: Transform rot: 1.5707963267948966 rad pos: 2.5,7.5 parent: 2 - - uid: 239 - components: - - type: Transform - pos: 8.5,-14.5 - parent: 2 - - uid: 240 - components: - - type: Transform - pos: 2.5,-14.5 - parent: 2 - - uid: 242 + - uid: 890 components: - type: Transform rot: 1.5707963267948966 rad pos: 8.5,7.5 parent: 2 - - uid: 243 + - uid: 891 components: - type: Transform rot: 1.5707963267948966 rad pos: 9.5,7.5 parent: 2 - - uid: 244 + - uid: 892 components: - type: Transform rot: 1.5707963267948966 rad pos: 10.5,7.5 parent: 2 - - uid: 245 + - uid: 893 components: - type: Transform rot: 1.5707963267948966 rad pos: 11.5,7.5 parent: 2 - - uid: 345 + - uid: 894 + components: + - type: Transform + pos: -1.5,-4.5 + parent: 2 + - uid: 895 components: - type: Transform rot: 1.5707963267948966 rad pos: 13.5,-7.5 parent: 2 - - uid: 346 + - uid: 896 components: - type: Transform rot: 1.5707963267948966 rad pos: -2.5,-7.5 parent: 2 - - uid: 347 + - uid: 897 components: - type: Transform rot: 1.5707963267948966 rad pos: -2.5,-1.5 parent: 2 - - uid: 348 + - uid: 898 components: - type: Transform rot: 1.5707963267948966 rad pos: 13.5,-1.5 parent: 2 - - uid: 372 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 0.5,-17.5 - parent: 2 - - uid: 374 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 10.5,-14.5 - parent: 2 - - uid: 375 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 0.5,-16.5 - parent: 2 - - uid: 376 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 0.5,-15.5 - parent: 2 - - uid: 377 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 0.5,-14.5 - parent: 2 - - uid: 378 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 10.5,-18.5 - parent: 2 - - uid: 515 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 10.5,-17.5 - parent: 2 - - uid: 553 + - uid: 899 components: - type: Transform rot: 3.141592653589793 rad @@ -5959,16 +5901,16 @@ entities: parent: 2 - proto: WarpPoint entities: - - uid: 955 + - uid: 900 components: - type: Transform pos: 5.5,-4.5 parent: 2 - type: WarpPoint location: Automated Trade Station -- proto: WindoorSecureEngineeringLocked +- proto: Windoor entities: - - uid: 371 + - uid: 901 components: - type: Transform rot: 1.5707963267948966 rad @@ -5976,13 +5918,13 @@ entities: parent: 2 - proto: WindowReinforcedDirectional entities: - - uid: 369 + - uid: 902 components: - type: Transform rot: 1.5707963267948966 rad pos: 3.5,-15.5 parent: 2 - - uid: 370 + - uid: 903 components: - type: Transform rot: 1.5707963267948966 rad @@ -5990,9 +5932,9 @@ entities: parent: 2 - proto: Wrench entities: - - uid: 23 + - uid: 904 components: - type: Transform - pos: 4.301509,-15.756044 + pos: 2.489903,-15.514006 parent: 2 ... From c886bf0bbebdcb675ef422d216eefca5d1f9a8b7 Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Sun, 12 Jan 2025 23:11:40 +0000 Subject: [PATCH 08/39] Automatic Changelog Update (#1457) --- Resources/Changelog/Changelog.yml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 2c8b134a02..b237ec9aba 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -9768,3 +9768,18 @@ Entries: id: 6683 time: '2025-01-12T23:09:32.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1386 +- author: Mike32oz + changes: + - type: Add + message: 'Station anchor on ATS ' + - type: Add + message: Clean bot and two locker + - type: Tweak + message: Air distribution on cargo shuttle + - type: Add + message: two seats including a wrench and a crowbar + - type: Remove + message: Plastic airtight flats and replace them with tiny fans + id: 6684 + time: '2025-01-12T23:11:11.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1457 From 4c582042c2d6b43e6b6935faa6e3f64660b4efaa Mon Sep 17 00:00:00 2001 From: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Date: Wed, 28 Aug 2024 17:39:36 +1000 Subject: [PATCH 09/39] Add some more stuff to AI whitelist (#31564) * Add some more stuff to AI whitelist * by the nine --- .../Prototypes/Entities/Structures/Doors/Shutter/shutters.yml | 1 + .../Structures/Doors/Windoors/base_structurewindoors.yml | 3 +++ .../Entities/Structures/Wallmounts/surveillance_camera.yml | 2 -- Resources/Prototypes/Entities/Structures/Wallmounts/switch.yml | 3 +++ 4 files changed, 7 insertions(+), 2 deletions(-) diff --git a/Resources/Prototypes/Entities/Structures/Doors/Shutter/shutters.yml b/Resources/Prototypes/Entities/Structures/Doors/Shutter/shutters.yml index 3465b646b4..eec2a57c8b 100644 --- a/Resources/Prototypes/Entities/Structures/Doors/Shutter/shutters.yml +++ b/Resources/Prototypes/Entities/Structures/Doors/Shutter/shutters.yml @@ -7,6 +7,7 @@ placement: mode: SnapgridCenter components: + - type: StationAiWhitelist - type: Sprite sprite: Structures/Doors/Shutters/shutters.rsi drawdepth: BlastDoors diff --git a/Resources/Prototypes/Entities/Structures/Doors/Windoors/base_structurewindoors.yml b/Resources/Prototypes/Entities/Structures/Doors/Windoors/base_structurewindoors.yml index 462632dc07..7c8439fd6e 100644 --- a/Resources/Prototypes/Entities/Structures/Doors/Windoors/base_structurewindoors.yml +++ b/Resources/Prototypes/Entities/Structures/Doors/Windoors/base_structurewindoors.yml @@ -11,6 +11,7 @@ Brute: collection: GlassSmash - type: InteractionOutline + - type: StationAiWhitelist - type: Physics - type: Fixtures fixtures: @@ -130,6 +131,8 @@ layoutId: Airlock - type: UserInterface interfaces: + enum.AiUi.Key: + type: StationAiBoundUserInterface enum.WiresUiKey.Key: type: WiresBoundUserInterface - type: Appearance diff --git a/Resources/Prototypes/Entities/Structures/Wallmounts/surveillance_camera.yml b/Resources/Prototypes/Entities/Structures/Wallmounts/surveillance_camera.yml index c82a3f2108..6bed67574c 100644 --- a/Resources/Prototypes/Entities/Structures/Wallmounts/surveillance_camera.yml +++ b/Resources/Prototypes/Entities/Structures/Wallmounts/surveillance_camera.yml @@ -65,8 +65,6 @@ InUse: camera_in_use - type: UserInterface interfaces: - enum.AiUi.Key: - type: StationAiBoundUserInterface enum.SurveillanceCameraSetupUiKey.Camera: type: SurveillanceCameraSetupBoundUi enum.WiresUiKey.Key: diff --git a/Resources/Prototypes/Entities/Structures/Wallmounts/switch.yml b/Resources/Prototypes/Entities/Structures/Wallmounts/switch.yml index dbcb076344..9171291680 100644 --- a/Resources/Prototypes/Entities/Structures/Wallmounts/switch.yml +++ b/Resources/Prototypes/Entities/Structures/Wallmounts/switch.yml @@ -7,6 +7,7 @@ snap: - Wallmount components: + - type: StationAiWhitelist - type: WallMount arc: 360 - type: Clickable @@ -46,6 +47,7 @@ snap: - Wallmount components: + - type: StationAiWhitelist - type: WallMount arc: 360 - type: Clickable @@ -137,6 +139,7 @@ placement: mode: SnapgridCenter components: + - type: StationAiWhitelist - type: Clickable - type: InteractionOutline - type: Sprite From cac7af677349567aeeea0ff45d222a22a15973c0 Mon Sep 17 00:00:00 2001 From: ScarKy0 <106310278+ScarKy0@users.noreply.github.com> Date: Thu, 5 Sep 2024 11:31:03 +0200 Subject: [PATCH 10/39] Basically every electronic device can now be used by the AI. (#31730) * Basically every electronic device can now be used by the AI. * Removed stuff that didnt make sense * oops * Removed access from mailing and disposal units. * Added AI wires to a couple machines. * cool epic stuff --- Resources/Locale/en-US/wires/wire-names.ftl | 1 + .../Structures/Doors/Airlocks/highsec.yml | 3 +++ .../Structures/Doors/Firelocks/firelock.yml | 3 +++ .../Structures/Machines/Computers/arcades.yml | 2 ++ .../Machines/Computers/computers.yml | 21 ++++++++++++++++++ .../Structures/Machines/anomaly_equipment.yml | 6 +++++ .../Structures/Machines/gravity_generator.yml | 2 ++ .../Entities/Structures/Machines/jukebox.yml | 7 ++++++ .../Structures/Machines/smartfridge.yml | 1 + .../Structures/Machines/vending_machines.yml | 1 + .../Structures/Piping/Atmospherics/binary.yml | 1 + .../Piping/Atmospherics/portable.yml | 1 + .../Structures/Piping/Atmospherics/unary.yml | 2 ++ .../Structures/Shuttles/station_anchor.yml | 1 + .../Structures/Wallmounts/air_alarm.yml | 1 + Resources/Prototypes/Wires/layouts.yml | 22 +++++++++++++++++-- 16 files changed, 73 insertions(+), 2 deletions(-) diff --git a/Resources/Locale/en-US/wires/wire-names.ftl b/Resources/Locale/en-US/wires/wire-names.ftl index a1ebec9e7d..1ac2ae8912 100644 --- a/Resources/Locale/en-US/wires/wire-names.ftl +++ b/Resources/Locale/en-US/wires/wire-names.ftl @@ -39,6 +39,7 @@ wires-board-name-mech = Mech wires-board-name-fatextractor = FatExtractor wires-board-name-flatpacker = Flatpacker wires-board-name-spaceheater = Space Heater +wires-board-name-jukebox = Jukebox # names that get displayed in the wire hacking hud & admin logs. diff --git a/Resources/Prototypes/Entities/Structures/Doors/Airlocks/highsec.yml b/Resources/Prototypes/Entities/Structures/Doors/Airlocks/highsec.yml index 559dca704c..e5470f2781 100644 --- a/Resources/Prototypes/Entities/Structures/Doors/Airlocks/highsec.yml +++ b/Resources/Prototypes/Entities/Structures/Doors/Airlocks/highsec.yml @@ -6,6 +6,7 @@ placement: mode: SnapgridCenter components: + - type: StationAiWhitelist - type: InteractionOutline - type: Sprite sprite: Structures/Doors/Airlocks/highsec/highsec.rsi @@ -79,6 +80,8 @@ alwaysRandomize: true - type: UserInterface interfaces: + enum.AiUi.Key: + type: StationAiBoundUserInterface enum.WiresUiKey.Key: type: WiresBoundUserInterface - type: Airtight diff --git a/Resources/Prototypes/Entities/Structures/Doors/Firelocks/firelock.yml b/Resources/Prototypes/Entities/Structures/Doors/Firelocks/firelock.yml index a1451f7a8c..b3ac934ade 100644 --- a/Resources/Prototypes/Entities/Structures/Doors/Firelocks/firelock.yml +++ b/Resources/Prototypes/Entities/Structures/Doors/Firelocks/firelock.yml @@ -115,6 +115,7 @@ id: Firelock parent: BaseFirelock components: + - type: StationAiWhitelist - type: ContainerContainer containers: board: !type:Container @@ -132,6 +133,7 @@ parent: Firelock name: glass firelock components: + - type: StationAiWhitelist - type: Sprite sprite: Structures/Doors/Airlocks/Glass/firelock.rsi - type: Occluder @@ -157,6 +159,7 @@ parent: Firelock name: firelock components: + - type: StationAiWhitelist - type: Sprite sprite: Structures/Doors/edge_door_hazard.rsi snapCardinals: false diff --git a/Resources/Prototypes/Entities/Structures/Machines/Computers/arcades.yml b/Resources/Prototypes/Entities/Structures/Machines/Computers/arcades.yml index 98c0f229ed..da1f91a350 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/Computers/arcades.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/Computers/arcades.yml @@ -88,6 +88,7 @@ - type: ActivatableUI key: enum.SpaceVillainArcadeUiKey.Key - type: ActivatableUIRequiresPower + - type: StationAiWhitelist - type: UserInterface interfaces: enum.SpaceVillainArcadeUiKey.Key: @@ -132,6 +133,7 @@ - type: ActivatableUI key: enum.BlockGameUiKey.Key - type: ActivatableUIRequiresPower + - type: StationAiWhitelist - type: UserInterface interfaces: enum.BlockGameUiKey.Key: diff --git a/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml b/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml index 59e6b5fa4d..8829a9025f 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml @@ -4,6 +4,7 @@ name: atmospheric alerts computer description: Used to access the station's automated atmospheric alert system. components: + - type: StationAiWhitelist - type: Computer board: AlertsComputerCircuitboard - type: Sprite @@ -220,6 +221,7 @@ name: IFF computer description: Allows you to control the IFF characteristics of this vessel. components: + - type: StationAiWhitelist - type: IFFConsole - type: Sprite layers: @@ -267,6 +269,7 @@ name: power monitoring computer description: It monitors power levels across the station. components: + - type: StationAiWhitelist - type: Sprite layers: - map: ["computerLayerBody"] @@ -306,6 +309,7 @@ name: medical records computer description: This can be used to check medical records. components: + - type: StationAiWhitelist - type: Sprite layers: - map: ["computerLayerBody"] @@ -329,6 +333,7 @@ name: criminal records computer description: This can be used to check criminal records. Only security can modify them. components: + - type: StationAiWhitelist - type: CriminalRecordsConsole - type: UserInterface interfaces: @@ -364,6 +369,7 @@ name: station records computer description: This can be used to check station records. components: + - type: StationAiWhitelist - type: GeneralStationRecordConsole - type: UserInterface interfaces: @@ -387,6 +393,7 @@ name: crew monitoring console description: Used to monitor active health sensors built into most of the crew's uniforms. components: + - type: StationAiWhitelist - type: Sprite layers: - map: ["computerLayerBody"] @@ -422,6 +429,7 @@ name: R&D computer description: A computer used to interface with R&D tools. components: + - type: StationAiWhitelist - type: Sprite layers: - map: ["computerLayerBody"] @@ -466,6 +474,7 @@ name: analysis console description: A computer used to interface with the artifact analyzer. components: + - type: StationAiWhitelist - type: Sprite layers: - map: ["computerLayerBody"] @@ -512,6 +521,7 @@ name: ID card computer description: Terminal for programming Nanotrasen employee ID cards to access parts of the station. components: + - type: StationAiWhitelist - type: IdCardConsole privilegedIdSlot: name: id-card-console-privileged-id @@ -571,6 +581,7 @@ name: body scanner computer description: A body scanner. components: + - type: StationAiWhitelist - type: ApcPowerReceiver powerLoad: 500 - type: Computer @@ -656,6 +667,7 @@ name: solar control computer description: A controller for solar panel arrays. components: + - type: StationAiWhitelist - type: Sprite layers: - map: ["computerLayerBody"] @@ -687,6 +699,7 @@ name: mass scanner computer description: A computer for detecting nearby bodies, displaying them by position and mass. components: + - type: StationAiWhitelist - type: Sprite layers: - map: ["computerLayerBody"] @@ -717,6 +730,7 @@ name: cargo shuttle computer description: Used to order the shuttle. components: + - type: StationAiWhitelist - type: Sprite layers: - map: ["computerLayerBody"] @@ -752,6 +766,7 @@ name: cargo request computer description: Used to order supplies and approve requests. components: + - type: StationAiWhitelist - type: Sprite layers: - map: ["computerLayerBody"] @@ -801,6 +816,7 @@ name: cargo bounty computer description: Used to manage currently active bounties. components: + - type: StationAiWhitelist - type: Sprite layers: - map: ["computerLayerBody"] @@ -836,6 +852,7 @@ name: cloning console computer description: The centerpiece of the cloning system, medicine's greatest accomplishment. It has lots of ports and wires. components: + - type: StationAiWhitelist - type: CloningConsole - type: DeviceList - type: DeviceNetwork @@ -885,6 +902,7 @@ name: salvage expeditions computer description: Used to accept salvage missions, if you're tough enough. components: + - type: StationAiWhitelist - type: Sprite layers: - map: ["computerLayerBody"] @@ -1002,6 +1020,7 @@ name: cargo sale computer description: Used to sell goods loaded onto cargo pallets components: + - type: StationAiWhitelist - type: Sprite layers: - map: ["computerLayerBody"] @@ -1039,6 +1058,7 @@ name: news manager console description: Write your message to the world! components: + - type: StationAiWhitelist - type: Sprite layers: - map: ["computerLayerBody"] @@ -1114,6 +1134,7 @@ name: robotics control console description: Used to remotely monitor, disable and destroy the station's cyborgs. components: + - type: StationAiWhitelist - type: Sprite layers: - map: ["computerLayerBody"] diff --git a/Resources/Prototypes/Entities/Structures/Machines/anomaly_equipment.yml b/Resources/Prototypes/Entities/Structures/Machines/anomaly_equipment.yml index 09ee110054..18169728c6 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/anomaly_equipment.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/anomaly_equipment.yml @@ -226,6 +226,7 @@ placement: mode: AlignTileAny components: + - type: StationAiWhitelist - type: SpriteFade - type: Sprite sprite: Structures/Machines/Anomaly/anomaly_generator.rsi @@ -284,6 +285,9 @@ fuelCost: 10 doAfterDelay: 5 - type: WiresPanel + - type: Wires + boardName: wires-board-name-anomalygenerator + layoutId: AnomalyGenerator - type: Destructible thresholds: - trigger: @@ -300,6 +304,8 @@ interfaces: enum.AnomalyGeneratorUiKey.Key: type: AnomalyGeneratorBoundUserInterface + enum.WiresUiKey.Key: + type: WiresBoundUserInterface - type: Appearance - type: ActiveRadio channels: diff --git a/Resources/Prototypes/Entities/Structures/Machines/gravity_generator.yml b/Resources/Prototypes/Entities/Structures/Machines/gravity_generator.yml index 2880f819a7..133562d2eb 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/gravity_generator.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/gravity_generator.yml @@ -6,6 +6,7 @@ placement: mode: AlignTileAny components: + - type: StationAiWhitelist - type: AmbientSound enabled: false volume: -6 @@ -85,6 +86,7 @@ name: mini gravity generator description: It's what keeps you to the floor, now in fun size. components: + - type: StationAiWhitelist - type: Sprite sprite: Structures/Machines/gravity_generator_mini.rsi snapCardinals: true diff --git a/Resources/Prototypes/Entities/Structures/Machines/jukebox.yml b/Resources/Prototypes/Entities/Structures/Machines/jukebox.yml index acd8527dbb..42b144a97d 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/jukebox.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/jukebox.yml @@ -4,6 +4,7 @@ parent: [ BaseMachinePowered, ConstructibleMachine ] description: A machine capable of playing a wide variety of tunes. Enjoyment not guaranteed. components: + - type: StationAiWhitelist - type: Sprite sprite: Structures/Machines/jukebox.rsi layers: @@ -28,6 +29,12 @@ interfaces: enum.JukeboxUiKey.Key: type: JukeboxBoundUserInterface + enum.WiresUiKey.Key: + type: WiresBoundUserInterface + - type: WiresPanel + - type: Wires + boardName: wires-board-name-jukebox + layoutId: Jukebox - type: Damageable damageContainer: Inorganic damageModifierSet: Metallic diff --git a/Resources/Prototypes/Entities/Structures/Machines/smartfridge.yml b/Resources/Prototypes/Entities/Structures/Machines/smartfridge.yml index 5a62b74ac0..baf5649b4b 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/smartfridge.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/smartfridge.yml @@ -4,6 +4,7 @@ name: SmartFridge description: A refrigerated storage unit for keeping items cold and fresh. components: + - type: StationAiWhitelist - type: Advertise pack: SmartFridgeAds - type: Speech diff --git a/Resources/Prototypes/Entities/Structures/Machines/vending_machines.yml b/Resources/Prototypes/Entities/Structures/Machines/vending_machines.yml index b4df776351..76181249b5 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/vending_machines.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/vending_machines.yml @@ -5,6 +5,7 @@ description: Just add capitalism! abstract: true components: + - type: StationAiWhitelist - type: AmbientOnPowered - type: AmbientSound volume: -9 diff --git a/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/binary.yml b/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/binary.yml index fa5804c645..f13d5af75c 100644 --- a/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/binary.yml +++ b/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/binary.yml @@ -197,6 +197,7 @@ placement: mode: SnapgridCenter components: + - type: StationAiWhitelist - type: Sprite sprite: Structures/Piping/Atmospherics/pump.rsi layers: diff --git a/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/portable.yml b/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/portable.yml index 87e71400f7..aba786a589 100644 --- a/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/portable.yml +++ b/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/portable.yml @@ -102,6 +102,7 @@ description: A bluespace technology device that alters local temperature. Commonly referred to as a "Space Heater". suffix: Unanchored components: + - type: StationAiWhitelist - type: Transform anchored: false - type: Physics diff --git a/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/unary.yml b/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/unary.yml index 7a69f4759c..5fe99b26ca 100644 --- a/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/unary.yml +++ b/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/unary.yml @@ -274,6 +274,7 @@ placement: mode: SnapgridCenter components: + - type: StationAiWhitelist - type: Sprite granularLayersRendering: true layers: @@ -318,6 +319,7 @@ placement: mode: SnapgridCenter components: + - type: StationAiWhitelist - type: Sprite granularLayersRendering : true layers: diff --git a/Resources/Prototypes/Entities/Structures/Shuttles/station_anchor.yml b/Resources/Prototypes/Entities/Structures/Shuttles/station_anchor.yml index 4e9a63f2af..284ea9fcf7 100644 --- a/Resources/Prototypes/Entities/Structures/Shuttles/station_anchor.yml +++ b/Resources/Prototypes/Entities/Structures/Shuttles/station_anchor.yml @@ -60,6 +60,7 @@ placement: mode: AlignTileAny components: + - type: StationAiWhitelist - type: PowerCharge windowTitle: station-anchor-window-title idlePower: 50 diff --git a/Resources/Prototypes/Entities/Structures/Wallmounts/air_alarm.yml b/Resources/Prototypes/Entities/Structures/Wallmounts/air_alarm.yml index 3e97255960..cff9bed3d0 100644 --- a/Resources/Prototypes/Entities/Structures/Wallmounts/air_alarm.yml +++ b/Resources/Prototypes/Entities/Structures/Wallmounts/air_alarm.yml @@ -7,6 +7,7 @@ snap: - Wallmount components: + - type: StationAiWhitelist - type: WallMount - type: ApcPowerReceiver - type: Electrified diff --git a/Resources/Prototypes/Wires/layouts.yml b/Resources/Prototypes/Wires/layouts.yml index 7ef30d116b..9dade6fa72 100644 --- a/Resources/Prototypes/Wires/layouts.yml +++ b/Resources/Prototypes/Wires/layouts.yml @@ -54,11 +54,13 @@ - !type:DoorBoltLightWireAction - !type:DoorTimingWireAction - !type:DoorSafetyWireAction - dummyWires: 5 + - !type:AiInteractWireAction + dummyWires: 4 - type: wireLayout id: Vending wires: + - !type:AiInteractWireAction - !type:PowerWireAction - !type:AccessWireAction - !type:LogWireAction @@ -69,6 +71,7 @@ - type: wireLayout id: AirAlarm wires: + - !type:AiInteractWireAction - !type:PowerWireAction - !type:AccessWireAction - !type:LogWireAction @@ -97,6 +100,7 @@ - !type:ArcadeOverflowWireAction - !type:ArcadePlayerInvincibleWireAction - !type:ArcadeEnemyInvincibleWireAction + - !type:AiInteractWireAction - type: wireLayout id: SurveillanceCamera @@ -162,4 +166,18 @@ wires: # - !type:AiInteractWireAction - !type:PowerWireAction - - !type:AccessWireAction \ No newline at end of file + - !type:AccessWireAction + +- type: wireLayout + id: Jukebox + dummyWires: 2 + wires: + - !type:PowerWireAction + - !type:AiInteractWireAction + +- type: wireLayout + id: AnomalyGenerator + dummyWires: 2 + wires: + - !type:PowerWireAction + - !type:AiInteractWireAction From 4c7f2238e9e09e7341a6bf1b95b6640f006a02d6 Mon Sep 17 00:00:00 2001 From: sleepyyapril Date: Sun, 12 Jan 2025 23:19:43 -0400 Subject: [PATCH 11/39] Fixed the mail system --- Content.Server/Mail/MailCommands.cs | 51 +- Content.Server/Mail/Systems/MailSystem.cs | 1141 +++++++++++---------- 2 files changed, 615 insertions(+), 577 deletions(-) diff --git a/Content.Server/Mail/MailCommands.cs b/Content.Server/Mail/MailCommands.cs index 390de93fb3..dac9b60ace 100644 --- a/Content.Server/Mail/MailCommands.cs +++ b/Content.Server/Mail/MailCommands.cs @@ -20,10 +20,10 @@ public sealed class MailToCommand : IConsoleCommand [Dependency] private readonly IPrototypeManager _prototypeManager = default!; [Dependency] private readonly IEntitySystemManager _entitySystemManager = default!; - private readonly string _blankMailPrototype = "MailAdminFun"; - private readonly string _blankLargeMailPrototype = "MailLargeAdminFun"; // Frontier: large mail - private readonly string _container = "storagebase"; - private readonly string _mailContainer = "contents"; + private const string BlankMailPrototype = "MailAdminFun"; + private const string BlankLargeMailPrototype = "MailLargeAdminFun"; // Frontier: large mail + private const string Container = "storagebase"; + private const string MailContainer = "contents"; public async void Execute(IConsoleShell shell, string argStr, string[] args) @@ -46,73 +46,83 @@ public async void Execute(IConsoleShell shell, string argStr, string[] args) return; } - if (!bool.TryParse(args[2], out var isFragile) || !bool.TryParse(args[3], out var isPriority)) + if (!bool.TryParse(args[2], out var isFragile)) { shell.WriteError(Loc.GetString("shell-invalid-bool")); return; } + if (!bool.TryParse(args[3], out var isPriority)) + { + shell.WriteError(Loc.GetString("shell-invalid-bool")); + return; + } + + // Frontier: Large Mail var isLarge = false; if (args.Length > 4 && !bool.TryParse(args[4], out isLarge)) { shell.WriteError(Loc.GetString("shell-invalid-bool")); return; } - var mailPrototype = isLarge ? _blankLargeMailPrototype : _blankMailPrototype; + var mailPrototype = isLarge ? BlankLargeMailPrototype : BlankMailPrototype; + // End Frontier var mailSystem = _entitySystemManager.GetEntitySystem(); var containerSystem = _entitySystemManager.GetEntitySystem(); - if (!_entityManager.TryGetComponent(recipientUid, out MailReceiverComponent? mailReceiver)) + if (!_entityManager.HasComponent(recipientUid)) { shell.WriteLine(Loc.GetString("command-mailto-no-mailreceiver", ("requiredComponent", nameof(MailReceiverComponent)))); return; } - if (!_prototypeManager.HasIndex(mailPrototype)) + if (!_prototypeManager.HasIndex(mailPrototype)) // Frontier: _blankMailPrototype(containerUid).Coordinates); - var mailContents = containerSystem.EnsureContainer(mailUid, _mailContainer); + var mailUid = _entityManager.SpawnEntity(mailPrototype, _entityManager.GetComponent(containerUid).Coordinates); // Frontier: _blankMailPrototype(mailUid, MailContainer); - if (!_entityManager.TryGetComponent(mailUid, out MailComponent? mailComponent)) + if (!_entityManager.TryGetComponent(mailUid, out var mailComponent)) { - shell.WriteLine(Loc.GetString("command-mailto-bogus-mail", ("blankMail", mailPrototype), ("requiredMailComponent", nameof(MailComponent)))); + shell.WriteLine(Loc.GetString("command-mailto-bogus-mail", ("blankMail", mailPrototype), ("requiredMailComponent", nameof(MailComponent)))); // Frontier: _blankMailPrototype(teleporterComponent.Owner, "queued"); + var teleporterQueue = containerSystem.EnsureContainer((EntityUid)teleporterUid, "queued"); containerSystem.Insert(mailUid, teleporterQueue); shell.WriteLine(Loc.GetString("command-mailto-success", ("timeToTeleport", teleporterComponent.TeleportInterval.TotalSeconds - teleporterComponent.Accumulator))); } @@ -126,12 +136,9 @@ public sealed class MailNowCommand : IConsoleCommand public string Help => Loc.GetString("command-mailnow-help", ("command", Command)); [Dependency] private readonly IEntityManager _entityManager = default!; - [Dependency] private readonly IEntitySystemManager _entitySystemManager = default!; public async void Execute(IConsoleShell shell, string argStr, string[] args) { - var entitySystem = _entitySystemManager.GetEntitySystem(); - foreach (var mailTeleporter in _entityManager.EntityQuery()) { mailTeleporter.Accumulator += (float) mailTeleporter.TeleportInterval.TotalSeconds - mailTeleporter.Accumulator; diff --git a/Content.Server/Mail/Systems/MailSystem.cs b/Content.Server/Mail/Systems/MailSystem.cs index e80febd230..c779b8088b 100644 --- a/Content.Server/Mail/Systems/MailSystem.cs +++ b/Content.Server/Mail/Systems/MailSystem.cs @@ -1,27 +1,21 @@ -using System.Diagnostics.CodeAnalysis; -using System.Linq; -using System.Threading; using Content.Server.Access.Systems; using Content.Server.Cargo.Components; using Content.Server.Cargo.Systems; using Content.Server.Chat.Systems; -using Content.Server.Chemistry.Containers.EntitySystems; using Content.Server.Damage.Components; -using Content.Server.Destructible; -using Content.Server.Destructible.Thresholds; using Content.Server.Destructible.Thresholds.Behaviors; using Content.Server.Destructible.Thresholds.Triggers; -using Content.Server.Item; -using Content.Server.Mail.Components; +using Content.Server.Destructible.Thresholds; +using Content.Server.Destructible; using Content.Server.Mind; using Content.Server.Popups; using Content.Server.Power.Components; using Content.Server.Spawners.EntitySystems; using Content.Server.Station.Systems; -using Content.Shared.Access; using Content.Shared.Access.Components; using Content.Shared.Access.Systems; -using Content.Shared.Chat; +using Content.Shared.Access; +using Content.Shared.Chemistry.EntitySystems; using Content.Shared.Damage; using Content.Shared.Destructible; using Content.Shared.Emag.Components; @@ -29,728 +23,765 @@ using Content.Shared.Examine; using Content.Shared.Fluids.Components; using Content.Shared.Hands.EntitySystems; -using Content.Shared.Interaction; using Content.Shared.Interaction.Events; -using Content.Shared.Mail; -using Content.Shared.Maps; +using Content.Shared.Interaction; using Content.Shared.Nutrition.Components; using Content.Shared.Nutrition.EntitySystems; using Content.Shared.PDA; using Content.Shared.Roles; using Content.Shared.Storage; using Content.Shared.Tag; -using Robust.Shared.Audio; using Robust.Shared.Audio.Systems; +using Robust.Shared.Audio; using Robust.Shared.Containers; using Robust.Shared.Prototypes; using Robust.Shared.Random; +using System.Diagnostics.CodeAnalysis; +using System.Linq; +using System.Threading; +using Content.Server.Mail.Components; +using Content.Shared.Chat; +using Content.Shared.Mail; using Timer = Robust.Shared.Timing.Timer; -namespace Content.Server.Mail.Systems; - -public sealed class MailSystem : EntitySystem +namespace Content.Server.Mail.Systems { - [Dependency] private readonly PopupSystem _popupSystem = default!; - [Dependency] private readonly AccessReaderSystem _accessSystem = default!; - [Dependency] private readonly SharedHandsSystem _handsSystem = default!; - [Dependency] private readonly IdCardSystem _idCardSystem = default!; - [Dependency] private readonly IRobustRandom _random = default!; - [Dependency] private readonly TagSystem _tagSystem = default!; - [Dependency] private readonly CargoSystem _cargoSystem = default!; - [Dependency] private readonly StationSystem _stationSystem = default!; - [Dependency] private readonly ChatSystem _chatSystem = default!; - [Dependency] private readonly OpenableSystem _openable = default!; - [Dependency] private readonly IPrototypeManager _prototypeManager = default!; - [Dependency] private readonly SharedContainerSystem _containerSystem = default!; - [Dependency] private readonly SolutionContainerSystem _solutionContainerSystem = default!; - [Dependency] private readonly SharedAppearanceSystem _appearanceSystem = default!; - [Dependency] private readonly SharedAudioSystem _audioSystem = default!; - [Dependency] private readonly DamageableSystem _damageableSystem = default!; - [Dependency] private readonly MindSystem _mindSystem = default!; - [Dependency] private readonly MetaDataSystem _metaDataSystem = default!; - - // DeltaV - system that keeps track of mail and cargo stats - [Dependency] private readonly LogisticStatsSystem _logisticsStatsSystem = default!; - - private ISawmill _sawmill = default!; - - public override void Initialize() + public sealed class MailSystem : EntitySystem { - base.Initialize(); + [Dependency] private readonly AccessReaderSystem _accessSystem = default!; + [Dependency] private readonly CargoSystem _cargoSystem = default!; + [Dependency] private readonly ChatSystem _chatSystem = default!; + [Dependency] private readonly DamageableSystem _damageableSystem = default!; + [Dependency] private readonly EntityLookupSystem _lookup = default!; + [Dependency] private readonly IPrototypeManager _prototypeManager = default!; + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly IdCardSystem _idCardSystem = default!; + [Dependency] private readonly MetaDataSystem _metaDataSystem = default!; + [Dependency] private readonly MindSystem _mindSystem = default!; + [Dependency] private readonly OpenableSystem _openable = default!; + [Dependency] private readonly PopupSystem _popupSystem = default!; + [Dependency] private readonly SharedAppearanceSystem _appearanceSystem = default!; + [Dependency] private readonly SharedAudioSystem _audioSystem = default!; + [Dependency] private readonly SharedContainerSystem _containerSystem = default!; + [Dependency] private readonly SharedHandsSystem _handsSystem = default!; + [Dependency] private readonly SharedSolutionContainerSystem _solution = default!; + [Dependency] private readonly StationSystem _stationSystem = default!; + [Dependency] private readonly TagSystem _tagSystem = default!; + + // DeltaV - system that keeps track of mail and cargo stats + [Dependency] private readonly LogisticStatsSystem _logisticsStatsSystem = default!; + + private ISawmill _sawmill = default!; + + public override void Initialize() + { + base.Initialize(); - _sawmill = Logger.GetSawmill("mail"); + _sawmill = Logger.GetSawmill("mail"); - SubscribeLocalEvent(OnSpawnPlayer, after: new[] { typeof(SpawnPointSystem) }); + SubscribeLocalEvent(OnSpawnPlayer, after: new[] { typeof(SpawnPointSystem) }); - SubscribeLocalEvent(OnRemove); - SubscribeLocalEvent(OnUseInHand); - SubscribeLocalEvent(OnAfterInteractUsing); - SubscribeLocalEvent(OnExamined); - SubscribeLocalEvent(OnDestruction); - SubscribeLocalEvent(OnDamage); - SubscribeLocalEvent(OnBreak); - SubscribeLocalEvent(OnMailEmagged); - } + SubscribeLocalEvent(OnRemove); + SubscribeLocalEvent(OnUseInHand); + SubscribeLocalEvent(OnAfterInteractUsing); + SubscribeLocalEvent(OnExamined); + SubscribeLocalEvent(OnDestruction); + SubscribeLocalEvent(OnDamage); + SubscribeLocalEvent(OnBreak); + SubscribeLocalEvent(OnMailEmagged); + } - public override void Update(float frameTime) - { - base.Update(frameTime); - foreach (var mailTeleporter in EntityQuery()) + public override void Update(float frameTime) { - if (TryComp(mailTeleporter.Owner, out var power) && !power.Powered) - continue; + base.Update(frameTime); - mailTeleporter.Accumulator += frameTime; - if (mailTeleporter.Accumulator < mailTeleporter.TeleportInterval.TotalSeconds) - continue; + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var uid, out var mailTeleporter)) + { + if (TryComp(uid, out var power) && !power.Powered) + continue; - mailTeleporter.Accumulator -= (float) mailTeleporter.TeleportInterval.TotalSeconds; + mailTeleporter.Accumulator += frameTime; + + if (mailTeleporter.Accumulator < mailTeleporter.TeleportInterval.TotalSeconds) + continue; - SpawnMail(mailTeleporter.Owner, mailTeleporter); + mailTeleporter.Accumulator -= (float)mailTeleporter.TeleportInterval.TotalSeconds; + SpawnMail(uid, mailTeleporter); + } } - } - /// - /// Dynamically add the MailReceiver component to appropriate entities. - /// - private void OnSpawnPlayer(PlayerSpawningEvent args) - { - if (args.SpawnResult == null - || args.Job == null - || args.Station is not {} station - || !HasComp(station)) - return; + /// + /// Dynamically add the MailReceiver component to appropriate entities. + /// + private void OnSpawnPlayer(PlayerSpawningEvent args) + { + if (args.SpawnResult == null || + args.Job == null || + args.Station is not {} station) + { + return; + } - AddComp(args.SpawnResult.Value); - } + if (!HasComp(station)) + return; - private void OnRemove(EntityUid uid, MailComponent component, ComponentRemove args) - { - // Make sure the priority timer doesn't run. - if (component.PriorityCancelToken != null) - component.PriorityCancelToken.Cancel(); - } + AddComp(args.SpawnResult.Value); + } - /// - /// Try to open the mail. - /// - private void OnUseInHand(EntityUid uid, MailComponent component, UseInHandEvent args) - { - if (!component.IsEnabled) - return; - if (component.IsLocked) + private static void OnRemove(EntityUid uid, MailComponent component, ComponentRemove args) { - _popupSystem.PopupEntity(Loc.GetString("mail-locked"), uid, args.User); - return; + component.PriorityCancelToken?.Cancel(); } - OpenMail(uid, component, args.User); - } - /// - /// Handle logic similar between a normal mail unlock and an emag - /// frying out the lock. - /// - private void UnlockMail(EntityUid uid, MailComponent component) - { - component.IsLocked = false; - UpdateAntiTamperVisuals(uid, false); + /// + /// Try to open the mail. + /// + private void OnUseInHand(EntityUid uid, MailComponent component, UseInHandEvent args) + { + if (!component.IsEnabled) + return; + if (component.IsLocked) + { + _popupSystem.PopupEntity(Loc.GetString("mail-locked"), uid, args.User); + return; + } + OpenMail(uid, component, args.User); + } - if (component.IsPriority) + /// + /// Handle logic similar between a normal mail unlock and an emag + /// frying out the lock. + /// + private void UnlockMail(EntityUid uid, MailComponent component) { - // This is a successful delivery. Keep the failure timer from triggering. - if (component.PriorityCancelToken != null) - component.PriorityCancelToken.Cancel(); + component.IsLocked = false; + UpdateAntiTamperVisuals(uid, false); - // The priority tape is visually considered to be a part of the - // anti-tamper lock, so remove that too. - _appearanceSystem.SetData(uid, MailVisuals.IsPriority, false); + if (!component.IsPriority) + return; - // The examination code depends on this being false to not show - // the priority tape description anymore. - component.IsPriority = false; - } - } + // This is a successful delivery. Keep the failure timer from triggering. + component.PriorityCancelToken?.Cancel(); - /// - /// Check the ID against the mail's lock - /// - private void OnAfterInteractUsing(EntityUid uid, MailComponent component, AfterInteractUsingEvent args) - { - if (!args.CanReach || !component.IsLocked || !TryComp(uid, out var access)) - return; + // The priority tape is visually considered to be a part of the + // anti-tamper lock, so remove that too. + _appearanceSystem.SetData(uid, MailVisuals.IsPriority, false); - IdCardComponent? idCard = null; // We need an ID card. - if (HasComp(args.Used)) // Can we find it in a PDA if the user is using that? - { - _idCardSystem.TryGetIdCard(args.Used, out var pdaID); - idCard = pdaID; + // The examination code depends on this being false to not show + // the priority tape description anymore. + component.IsPriority = false; } - if (HasComp(args.Used)) // Or are they using an id card directly? - idCard = Comp(args.Used); + /// + /// Check the ID against the mail's lock + /// + private void OnAfterInteractUsing(EntityUid uid, MailComponent component, AfterInteractUsingEvent args) + { + if (!args.CanReach || !component.IsLocked) + return; + + if (!HasComp(uid)) + return; - if (idCard == null) // Return if we still haven't found an id card. - return; + IdCardComponent? idCard = null; // We need an ID card. - if (!HasComp(uid)) - { - if (idCard.FullName != component.Recipient || idCard.JobTitle != component.RecipientJob) + if (HasComp(args.Used)) // Can we find it in a PDA if the user is using that? { - _popupSystem.PopupEntity(Loc.GetString("mail-recipient-mismatch"), uid, args.User); - return; + _idCardSystem.TryGetIdCard(args.Used, out var pdaId); + idCard = pdaId; } + if (idCard == null && HasComp(args.Used)) // If we still don't have an ID, check if the item itself is one + idCard = Comp(args.Used); - if (!_accessSystem.IsAllowed(uid, args.User)) - { - _popupSystem.PopupEntity(Loc.GetString("mail-invalid-access"), uid, args.User); + if (idCard == null) // Return if we still haven't found an id card. return; + + if (!HasComp(uid)) + { + if (idCard.FullName != component.Recipient || idCard.LocalizedJobTitle != component.RecipientJob) + { + _popupSystem.PopupEntity(Loc.GetString("mail-recipient-mismatch"), uid, args.User); + return; + } + + if (!_accessSystem.IsAllowed(uid, args.User)) + { + _popupSystem.PopupEntity(Loc.GetString("mail-invalid-access"), uid, args.User); + return; + } } - } - ExecuteForEachLogisticsStats(uid, (station, logisticStats) => - { - _logisticsStatsSystem.AddOpenedMailEarnings(station, - logisticStats, - component.IsProfitable ? component.Bounty : 0); - }); - UnlockMail(uid, component); + // DeltaV - Add earnings to logistic stats + ExecuteForEachLogisticsStats(uid, + (station, logisticStats) => + { + _logisticsStatsSystem.AddOpenedMailEarnings(station, + logisticStats, + component.IsProfitable ? component.Bounty : 0); + }); - if (!component.IsProfitable) - { - _popupSystem.PopupEntity(Loc.GetString("mail-unlocked"), uid, args.User); - return; - } + UnlockMail(uid, component); - _popupSystem.PopupEntity(Loc.GetString("mail-unlocked-reward", ("bounty", component.Bounty)), uid, args.User); + if (!component.IsProfitable) + { + _popupSystem.PopupEntity(Loc.GetString("mail-unlocked"), uid, args.User); + return; + } - component.IsProfitable = false; + _popupSystem.PopupEntity(Loc.GetString("mail-unlocked-reward", ("bounty", component.Bounty)), uid, args.User); + component.IsProfitable = false; - var query = EntityQueryEnumerator(); - while (query.MoveNext(out var station, out var account)) - { - if (_stationSystem.GetOwningStation(uid) != station) - continue; + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var station, out var account)) + { + if (_stationSystem.GetOwningStation(uid) != station) + continue; - _cargoSystem.UpdateBankAccount(station, account, component.Bounty); + _cargoSystem.UpdateBankAccount(station, account, component.Bounty); + } } - } - private void OnExamined(EntityUid uid, MailComponent component, ExaminedEvent args) - { - MailEntityStrings mailEntityStrings = component.IsLarge ? MailConstants.MailLarge : MailConstants.Mail; //Frontier: mail types stored per type (large mail) - if (!args.IsInDetailsRange) + private void OnExamined(EntityUid uid, MailComponent component, ExaminedEvent args) { - args.PushMarkup(Loc.GetString(mailEntityStrings.DescFar)); // Frontier: mail constants struct - return; - } + var mailEntityStrings = component.IsLarge ? MailConstants.MailLarge : MailConstants.Mail; - args.PushMarkup(Loc.GetString(mailEntityStrings.DescClose, ("name", component.Recipient), ("job", component.RecipientJob))); // Frontier: mail constants struct + if (!args.IsInDetailsRange) + { + args.PushMarkup(Loc.GetString(mailEntityStrings.DescFar)); + return; + } - if (component.IsFragile) - args.PushMarkup(Loc.GetString("mail-desc-fragile")); + args.PushMarkup(Loc.GetString(mailEntityStrings.DescClose, + ("name", component.Recipient), + ("job", component.RecipientJob))); - if (component.IsPriority) - { - if (component.IsProfitable) - args.PushMarkup(Loc.GetString("mail-desc-priority")); - else - args.PushMarkup(Loc.GetString("mail-desc-priority-inactive")); + if (component.IsFragile) + args.PushMarkup(Loc.GetString("mail-desc-fragile")); + + if (component.IsPriority) + args.PushMarkup(Loc.GetString(component.IsProfitable ? "mail-desc-priority" : "mail-desc-priority-inactive")); } - } - /// - /// Penalize a station for a failed delivery. - /// - /// - /// This will mark a parcel as no longer being profitable, which will - /// prevent multiple failures on different conditions for the same - /// delivery.

- /// - /// The standard penalization is breaking the anti-tamper lock, - /// but this allows a delivery to fail for other reasons too - /// while having a generic function to handle different messages. - ///
- public void PenalizeStationFailedDelivery(EntityUid uid, MailComponent component, string localizationString) - { - if (!component.IsProfitable) - return; - _chatSystem.TrySendInGameICMessage(uid, Loc.GetString(localizationString, ("credits", component.Penalty)), InGameICChatType.Speak, false); - _audioSystem.PlayPvs(component.PenaltySound, uid); + /// + /// Penalize a station for a failed delivery. + /// + /// + /// This will mark a parcel as no longer being profitable, which will + /// prevent multiple failures on different conditions for the same + /// delivery. + /// + /// The standard penalization is breaking the anti-tamper lock, + /// but this allows a delivery to fail for other reasons too + /// while having a generic function to handle different messages. + /// + private void PenalizeStationFailedDelivery(EntityUid uid, MailComponent component, string localizationString) + { + if (!component.IsProfitable) + return; - component.IsProfitable = false; + _chatSystem.TrySendInGameICMessage(uid, Loc.GetString(localizationString, ("credits", component.Penalty)), InGameICChatType.Speak, false); + _audioSystem.PlayPvs(component.PenaltySound, uid); - if (component.IsPriority) - _appearanceSystem.SetData(uid, MailVisuals.IsPriorityInactive, true); + component.IsProfitable = false; - var query = EntityQueryEnumerator(); - while (query.MoveNext(out var station, out var account)) - { - if (_stationSystem.GetOwningStation(uid) != station) - continue; + if (component.IsPriority) + _appearanceSystem.SetData(uid, MailVisuals.IsPriorityInactive, true); + + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var station, out var account)) + { + if (_stationSystem.GetOwningStation(uid) != station) + continue; - _cargoSystem.UpdateBankAccount(station, account, component.Penalty); - return; + _cargoSystem.UpdateBankAccount(station, account, component.Penalty); + return; + } } - } - private void OnDestruction(EntityUid uid, MailComponent component, DestructionEventArgs args) - { - if (component.IsLocked) + private void OnDestruction(EntityUid uid, MailComponent component, DestructionEventArgs args) { - // DeltaV - Tampered mail recorded to logistic stats - ExecuteForEachLogisticsStats(uid, (station, logisticStats) => + if (component.IsLocked) { - _logisticsStatsSystem.AddTamperedMailLosses(station, - logisticStats, - component.IsProfitable ? component.Penalty : 0); - }); + // DeltaV - Tampered mail recorded to logistic stats + ExecuteForEachLogisticsStats(uid, + (station, logisticStats) => + { + _logisticsStatsSystem.AddTamperedMailLosses(station, + logisticStats, + component.IsProfitable ? component.Penalty : 0); + }); - PenalizeStationFailedDelivery(uid, component, "mail-penalty-lock"); - } + PenalizeStationFailedDelivery(uid, component, "mail-penalty-lock"); + } - if (component.IsEnabled) - OpenMail(uid, component); + if (component.IsEnabled) + OpenMail(uid, component); - UpdateAntiTamperVisuals(uid, false); - } + UpdateAntiTamperVisuals(uid, false); + } - private void OnDamage(EntityUid uid, MailComponent component, DamageChangedEvent args) - { - if (args.DamageDelta == null || !_containerSystem.TryGetContainer(uid, "contents", out var contents)) - return; + private void OnDamage(EntityUid uid, MailComponent component, DamageChangedEvent args) + { + if (args.DamageDelta == null) + return; - // Transfer damage to the contents. - // This should be a general-purpose feature for all containers in the future. - foreach (var entity in contents.ContainedEntities.ToArray()) - _damageableSystem.TryChangeDamage(entity, args.DamageDelta); - } + if (!_containerSystem.TryGetContainer(uid, "contents", out var contents)) + return; - private void OnBreak(EntityUid uid, MailComponent component, BreakageEventArgs args) - { - _appearanceSystem.SetData(uid, MailVisuals.IsBroken, true); + // Transfer damage to the contents. + // This should be a general-purpose feature for all containers in the future. + foreach (var entity in contents.ContainedEntities.ToArray()) + { + _damageableSystem.TryChangeDamage(entity, args.DamageDelta); + } + } - if (component.IsFragile) + private void OnBreak(EntityUid uid, MailComponent component, BreakageEventArgs args) { + _appearanceSystem.SetData(uid, MailVisuals.IsBroken, true); + + if (!component.IsFragile) + return; // DeltaV - Broken mail recorded to logistic stats - ExecuteForEachLogisticsStats(uid, (station, logisticStats) => - { - _logisticsStatsSystem.AddDamagedMailLosses(station, - logisticStats, - component.IsProfitable ? component.Penalty : 0); - }); + ExecuteForEachLogisticsStats(uid, + (station, logisticStats) => + { + _logisticsStatsSystem.AddDamagedMailLosses(station, + logisticStats, + component.IsProfitable ? component.Penalty : 0); + }); PenalizeStationFailedDelivery(uid, component, "mail-penalty-fragile"); } - } - - private void OnMailEmagged(EntityUid uid, MailComponent component, ref GotEmaggedEvent args) - { - if (!component.IsLocked) - return; - UnlockMail(uid, component); + private void OnMailEmagged(EntityUid uid, MailComponent component, ref GotEmaggedEvent args) + { + if (!component.IsLocked) + return; - _popupSystem.PopupEntity(Loc.GetString("mail-unlocked-by-emag"), uid, args.UserUid); + UnlockMail(uid, component); - _audioSystem.PlayPvs(component.EmagSound, uid, AudioParams.Default.WithVolume(4)); - component.IsProfitable = false; - args.Handled = true; - } + _popupSystem.PopupEntity(Loc.GetString("mail-unlocked-by-emag"), uid, args.UserUid); - /// - /// Returns true if the given entity is considered fragile for delivery. - /// - public bool IsEntityFragile(EntityUid uid, int fragileDamageThreshold) - { - // It takes damage on falling. - if (HasComp(uid)) - return true; - - // It can be spilled easily and has something to spill. - if (HasComp(uid) - && TryComp(uid, out var openable) - && !_openable.IsClosed(uid, null, openable) - && _solutionContainerSystem.PercentFull(uid) > 0) - return true; - - // It might be made of non-reinforced glass. - if (TryComp(uid, out DamageableComponent? damageableComponent) - && damageableComponent.DamageModifierSetId == "Glass") - return true; - - if (!TryComp(uid, out DestructibleComponent? destructibleComp)) - return false; + _audioSystem.PlayPvs(component.EmagSound, uid, AudioParams.Default.WithVolume(4)); + component.IsProfitable = false; + args.Handled = true; + } - // Fallback: It breaks or is destroyed in less than a damage - // threshold dictated by the teleporter. - foreach (var threshold in destructibleComp.Thresholds) + /// + /// Returns true if the given entity is considered fragile for delivery. + /// + private bool IsEntityFragile(EntityUid uid, int fragileDamageThreshold) { - if (threshold.Trigger is not DamageTrigger trigger || trigger.Damage >= fragileDamageThreshold) - continue; + // It takes damage on falling. + if (HasComp(uid)) + return true; - foreach (var behavior in threshold.Behaviors) + // It can be spilled easily and has something to spill. + if (HasComp(uid) + && TryComp(uid, out var openable) + && !_openable.IsClosed(uid, null, openable) + && _solution.PercentFull(uid) > 0) + return true; + + // It might be made of non-reinforced glass. + if (TryComp(uid, out var damageableComponent) + && damageableComponent.DamageModifierSetId == "Glass") + return true; + + // Fallback: It breaks or is destroyed in less than a damage + // threshold dictated by the teleporter. + if (!TryComp(uid, out var destructibleComp)) + return false; + + foreach (var threshold in destructibleComp.Thresholds) { - if (behavior is not DoActsBehavior doActs) + if (threshold.Trigger is not DamageTrigger trigger || trigger.Damage >= fragileDamageThreshold) continue; - if (doActs.Acts.HasFlag(ThresholdActs.Breakage) || doActs.Acts.HasFlag(ThresholdActs.Destruction)) - return true; + foreach (var behavior in threshold.Behaviors) + { + if (behavior is not DoActsBehavior doActs) + continue; + + if (doActs.Acts.HasFlag(ThresholdActs.Breakage) || doActs.Acts.HasFlag(ThresholdActs.Destruction)) + return true; + } } - } - return false; - } + return false; + } - public bool TryMatchJobTitleToDepartment(string jobTitle, [NotNullWhen(true)] out string? jobDepartment) - { - foreach (var department in _prototypeManager.EnumeratePrototypes()) + private bool TryMatchJobTitleToDepartment(string jobTitle, [NotNullWhen(true)] out string? jobDepartment) { - foreach (var role in department.Roles) + jobDepartment = null; + + var departments = _prototypeManager.EnumeratePrototypes(); + + foreach (var department in departments) { - if (!_prototypeManager.TryIndex(role, out JobPrototype? jobPrototype) || jobPrototype.LocalizedName != jobTitle) + var foundJob = department.Roles + .Any(role => + _prototypeManager.TryIndex(role, out var jobPrototype) + && jobPrototype.LocalizedName == jobTitle); + + if (!foundJob) continue; jobDepartment = department.ID; return true; } + + return false; } - jobDepartment = null; - return false; - } + private bool TryMatchJobTitleToPrototype(string jobTitle, [NotNullWhen(true)] out JobPrototype? jobPrototype) + { + jobPrototype = _prototypeManager + .EnumeratePrototypes() + .FirstOrDefault(job => job.LocalizedName == jobTitle); - public bool TryMatchJobTitleToPrototype(string jobTitle, [NotNullWhen(true)] out JobPrototype? jobPrototype) - { - foreach (var job in _prototypeManager.EnumeratePrototypes()) + return jobPrototype != null; + } + + /// + /// Handle all the gritty details particular to a new mail entity. + /// + /// + /// This is separate mostly so the unit tests can get to it. + /// + public void SetupMail(EntityUid uid, MailTeleporterComponent component, MailRecipient recipient) { - if (job.LocalizedName == jobTitle) + var mailComp = EnsureComp(uid); + + var container = _containerSystem.EnsureContainer(uid, "contents"); + foreach (var entity in EntitySpawnCollection.GetSpawns(mailComp.Contents, _random).Select(item => EntityManager.SpawnEntity(item, Transform(uid).Coordinates))) { - jobPrototype = job; - return true; + if (!_containerSystem.Insert(entity, container)) + { + _sawmill.Error($"Can't insert {ToPrettyString(entity)} into new mail delivery {ToPrettyString(uid)}! Deleting it."); + QueueDel(entity); + } + else if (!mailComp.IsFragile && IsEntityFragile(entity, component.FragileDamageThreshold)) + { + mailComp.IsFragile = true; + } } - } - jobPrototype = null; - return false; - } + if (_random.Prob(component.PriorityChance)) + mailComp.IsPriority = true; - /// - /// Handle all the gritty details particular to a new mail entity. - /// - /// - /// This is separate mostly so the unit tests can get to it. - /// - public void SetupMail(EntityUid uid, MailTeleporterComponent component, MailRecipient recipient) - { - var mailComp = EnsureComp(uid); + // This needs to override both the random probability and the + // entity prototype, so this is fine. + if (!recipient.MayReceivePriorityMail) + mailComp.IsPriority = false; - var container = _containerSystem.EnsureContainer(uid, "contents"); - foreach (var item in EntitySpawnCollection.GetSpawns(mailComp.Contents, _random)) - { - var entity = EntityManager.SpawnEntity(item, Transform(uid).Coordinates); - if (!_containerSystem.Insert(entity, container)) + mailComp.RecipientJob = recipient.Job; + mailComp.Recipient = recipient.Name; + + // Frontier: Large mail bonus + var mailEntityStrings = mailComp.IsLarge ? MailConstants.MailLarge : MailConstants.Mail; + if (mailComp.IsLarge) { - _sawmill.Error($"Can't insert {ToPrettyString(entity)} into new mail delivery {ToPrettyString(uid)}! Deleting it."); - QueueDel(entity); + mailComp.Bounty += component.LargeBonus; + mailComp.Penalty += component.LargeMalus; } - else if (!mailComp.IsFragile && IsEntityFragile(entity, component.FragileDamageThreshold)) + // End Frontier + + if (mailComp.IsFragile) { - mailComp.IsFragile = true; + mailComp.Bounty += component.FragileBonus; + mailComp.Penalty += component.FragileMalus; + _appearanceSystem.SetData(uid, MailVisuals.IsFragile, true); } - } - mailComp.IsPriority = recipient.MayReceivePriorityMail && _random.Prob(component.PriorityChance); - mailComp.RecipientJob = recipient.Job; - mailComp.Recipient = recipient.Name; - - var mailEntityStrings = mailComp.IsLarge ? MailConstants.MailLarge : MailConstants.Mail; - if (mailComp.IsLarge) - { - mailComp.Bounty += component.LargeBonus; - mailComp.Penalty += component.LargeMalus; - } + if (mailComp.IsPriority) + { + mailComp.Bounty += component.PriorityBonus; + mailComp.Penalty += component.PriorityMalus; + _appearanceSystem.SetData(uid, MailVisuals.IsPriority, true); + + mailComp.PriorityCancelToken = new CancellationTokenSource(); + + Timer.Spawn((int) component.PriorityDuration.TotalMilliseconds, + () => + { + // DeltaV - Expired mail recorded to logistic stats + ExecuteForEachLogisticsStats(uid, + (station, logisticStats) => + { + _logisticsStatsSystem.AddExpiredMailLosses(station, + logisticStats, + mailComp.IsProfitable ? mailComp.Penalty : 0); + }); + + PenalizeStationFailedDelivery(uid, mailComp, "mail-penalty-expired"); + }, + mailComp.PriorityCancelToken.Token); + } - if (mailComp.IsFragile) - { - mailComp.Bounty += component.FragileBonus; - mailComp.Penalty += component.FragileMalus; - _appearanceSystem.SetData(uid, MailVisuals.IsFragile, true); - } + _appearanceSystem.SetData(uid, MailVisuals.JobIcon, recipient.JobIcon); - if (mailComp.IsPriority) - { - mailComp.Bounty += component.PriorityBonus; - mailComp.Penalty += component.PriorityMalus; - _appearanceSystem.SetData(uid, MailVisuals.IsPriority, true); - mailComp.PriorityCancelToken = new CancellationTokenSource(); + _metaDataSystem.SetEntityName(uid, + Loc.GetString(mailEntityStrings.NameAddressed, // Frontier: move constant to MailEntityString + ("recipient", recipient.Name))); - Timer.Spawn((int) component.PriorityDuration.TotalMilliseconds, () => + var accessReader = EnsureComp(uid); + foreach (var access in recipient.AccessTags) { - // DeltaV - Expired mail recorded to logistic stats - ExecuteForEachLogisticsStats(uid, (station, logisticStats) => - { - _logisticsStatsSystem.AddExpiredMailLosses(station, - logisticStats, - mailComp.IsProfitable ? mailComp.Penalty : 0); - }); - - PenalizeStationFailedDelivery(uid, mailComp, "mail-penalty-expired"); - }, mailComp.PriorityCancelToken.Token); + accessReader.AccessLists.Add([access]); + } } - _appearanceSystem.SetData(uid, MailVisuals.JobIcon, recipient.JobIcon); + /// + /// Return the parcels waiting for delivery. + /// + /// The mail teleporter to check. + private List GetUndeliveredParcels(EntityUid uid) + { + // An alternative solution would be to keep a list of the unopened + // parcels spawned by the teleporter and see if they're not carried + // by someone, but this is simple, and simple is good. + var coordinates = Transform(uid).Coordinates; + const LookupFlags lookupFlags = LookupFlags.Dynamic | LookupFlags.Sundries; - _metaDataSystem.SetEntityName(uid, Loc.GetString(mailEntityStrings.NameAddressed, // Frontier: move constant to MailEntityString - ("recipient", recipient.Name))); + var entitiesInTile = _lookup.GetEntitiesIntersecting(coordinates, lookupFlags); - var accessReader = EnsureComp(uid); - accessReader.AccessLists.Add(recipient.AccessTags); - } - - /// - /// Return the parcels waiting for delivery. - /// - /// The mail teleporter to check. - public List GetUndeliveredParcels(EntityUid uid) - { - // An alternative solution would be to keep a list of the unopened - // parcels spawned by the teleporter and see if they're not carried - // by someone, but this is simple, and simple is good. - List undeliveredParcels = new(); - foreach (var entityInTile in TurfHelpers.GetEntitiesInTile(Transform(uid).Coordinates, LookupFlags.Dynamic | LookupFlags.Sundries)) - { - if (HasComp(entityInTile)) - undeliveredParcels.Add(entityInTile); + return entitiesInTile.Where(HasComp).ToList(); } - return undeliveredParcels; - } - /// - /// Return how many parcels are waiting for delivery. - /// - /// The mail teleporter to check. - public uint GetUndeliveredParcelCount(EntityUid uid) - { - return (uint) GetUndeliveredParcels(uid).Count(); - } - - /// - /// Try to match a mail receiver to a mail teleporter. - /// - public bool TryGetMailTeleporterForReceiver(MailReceiverComponent receiver, [NotNullWhen(true)] out MailTeleporterComponent? teleporterComponent) - { - foreach (var mailTeleporter in EntityQuery()) + /// + /// Return how many parcels are waiting for delivery. + /// + /// The mail teleporter to check. + private uint GetUndeliveredParcelCount(EntityUid uid) { - if (_stationSystem.GetOwningStation(receiver.Owner) != _stationSystem.GetOwningStation(mailTeleporter.Owner)) - continue; - - teleporterComponent = mailTeleporter; - return true; + return (uint)GetUndeliveredParcels(uid).Count; } - teleporterComponent = null; - return false; - } - - /// - /// Try to construct a recipient struct for a mail parcel based on a receiver. - /// - public bool TryGetMailRecipientForReceiver(MailReceiverComponent receiver, [NotNullWhen(true)] out MailRecipient? recipient) - { - // Because of the way this works, people are not considered - // candidates for mail if there is no valid PDA or ID in their slot - // or active hand. A better future solution might be checking the - // station records, possibly cross-referenced with the medical crew - // scanner to look for living recipients. TODO - - if (_idCardSystem.TryFindIdCard(receiver.Owner, out var idCard) - && TryComp(idCard.Owner, out var access) - && idCard.Comp.FullName != null - && idCard.Comp.JobTitle != null) + /// + /// Try to match a mail receiver to a mail teleporter. + /// + public bool TryGetMailTeleporterForReceiver(EntityUid receiverUid, [NotNullWhen(true)] out MailTeleporterComponent? teleporterComponent, [NotNullWhen(true)] out EntityUid? teleporterUid) { - var accessTags = access.Tags; - - var mayReceivePriorityMail = !(_mindSystem.GetMind(receiver.Owner) == null); + var query = EntityQueryEnumerator(); + var receiverStation = _stationSystem.GetOwningStation(receiverUid); - recipient = new MailRecipient(idCard.Comp.FullName, - idCard.Comp.JobTitle, - idCard.Comp.JobIcon, - accessTags, - mayReceivePriorityMail); + while (query.MoveNext(out var uid, out var mailTeleporter)) + { + var teleporterStation = _stationSystem.GetOwningStation(uid); + if (receiverStation != teleporterStation) + continue; + teleporterComponent = mailTeleporter; + teleporterUid = uid; + return true; + } - return true; + teleporterComponent = null; + teleporterUid = null; + return false; } - recipient = null; - return false; - } + /// + /// Try to construct a recipient struct for a mail parcel based on a receiver. + /// + public bool TryGetMailRecipientForReceiver(EntityUid receiverUid, [NotNullWhen(true)] out MailRecipient? recipient) + { + if (_idCardSystem.TryFindIdCard(receiverUid, out var idCard) + && TryComp(idCard.Owner, out var access) + && idCard.Comp.FullName != null) + { + var accessTags = access.Tags; + var mayReceivePriorityMail = !(_mindSystem.GetMind(receiverUid) == null); - /// - /// Get the list of valid mail recipients for a mail teleporter. - /// - public List GetMailRecipientCandidates(EntityUid uid) - { - List candidateList = new(); + recipient = new MailRecipient( + idCard.Comp.FullName, + idCard.Comp.LocalizedJobTitle ?? idCard.Comp.JobTitle ?? "Unknown", + idCard.Comp.JobIcon, + accessTags, + mayReceivePriorityMail); - foreach (var receiver in EntityQuery()) - { - if (_stationSystem.GetOwningStation(receiver.Owner) != _stationSystem.GetOwningStation(uid)) - continue; + return true; + } - if (TryGetMailRecipientForReceiver(receiver, out MailRecipient? recipient)) - candidateList.Add(recipient.Value); + recipient = null; + return false; } - return candidateList; - } - - /// - /// Handle the spawning of all the mail for a mail teleporter. - /// - public void SpawnMail(EntityUid uid, MailTeleporterComponent? component = null) - { - if (!Resolve(uid, ref component)) + /// + /// Get the list of valid mail recipients for a mail teleporter. + /// + private List GetMailRecipientCandidates(EntityUid uid) { - _sawmill.Error($"Tried to SpawnMail on {ToPrettyString(uid)} without a valid MailTeleporterComponent!"); - return; - } + var candidateList = new List(); + var query = EntityQueryEnumerator(); + var teleporterStation = _stationSystem.GetOwningStation(uid); - if (GetUndeliveredParcelCount(uid) >= component.MaximumUndeliveredParcels) - return; + while (query.MoveNext(out var receiverUid, out _)) + { + var receiverStation = _stationSystem.GetOwningStation(receiverUid); + if (receiverStation != teleporterStation) + continue; - var candidateList = GetMailRecipientCandidates(uid); + if (TryGetMailRecipientForReceiver(receiverUid, out var recipient)) + candidateList.Add(recipient.Value); + } - if (candidateList.Count <= 0) - { - _sawmill.Error("List of mail candidates was empty!"); - return; + return candidateList; } - if (!_prototypeManager.TryIndex(component.MailPool, out var pool)) + /// + /// Handle the spawning of all the mail for a mail teleporter. + /// + private void SpawnMail(EntityUid uid, MailTeleporterComponent? component = null) { - _sawmill.Error($"Can't index {ToPrettyString(uid)}'s MailPool {component.MailPool}!"); - return; - } + if (!Resolve(uid, ref component)) + { + _sawmill.Error($"Tried to SpawnMail on {ToPrettyString(uid)} without a valid MailTeleporterComponent!"); + return; + } - for (int i = 0; - i < component.MinimumDeliveriesPerTeleport + candidateList.Count / component.CandidatesPerDelivery; - i++) - { - var candidate = _random.Pick(candidateList); - var possibleParcels = new Dictionary(pool.Everyone); + if (GetUndeliveredParcelCount(uid) >= component.MaximumUndeliveredParcels) + return; - if (TryMatchJobTitleToPrototype(candidate.Job, out JobPrototype? jobPrototype) - && pool.Jobs.TryGetValue(jobPrototype.ID, out Dictionary? jobParcels)) + var candidateList = GetMailRecipientCandidates(uid); + + if (candidateList.Count <= 0) { - possibleParcels = possibleParcels.Union(jobParcels) - .GroupBy(g => g.Key) - .ToDictionary(pair => pair.Key, pair => pair.First().Value); + _sawmill.Error("List of mail candidates was empty!"); + return; } - if (TryMatchJobTitleToDepartment(candidate.Job, out string? department) - && pool.Departments.TryGetValue(department, out Dictionary? departmentParcels)) + if (!_prototypeManager.TryIndex(component.MailPool, out var pool)) { - possibleParcels = possibleParcels.Union(departmentParcels) - .GroupBy(g => g.Key) - .ToDictionary(pair => pair.Key, pair => pair.First().Value); + _sawmill.Error($"Can't index {ToPrettyString(uid)}'s MailPool {component.MailPool}!"); + return; } - var accumulated = 0f; - var randomPoint = _random.NextFloat(possibleParcels.Values.Sum()); - string? chosenParcel = null; - foreach (var (key, weight) in possibleParcels) + var deliveryCount = component.MinimumDeliveriesPerTeleport + candidateList.Count / component.CandidatesPerDelivery; + + for (var i = 0; i < deliveryCount; i++) { - accumulated += weight; - if (accumulated >= randomPoint) + var candidate = _random.Pick(candidateList); + var possibleParcels = new Dictionary(pool.Everyone); + + if (TryMatchJobTitleToPrototype(candidate.Job, out var jobPrototype) + && pool.Jobs.TryGetValue(jobPrototype.ID, out var jobParcels)) + { + possibleParcels = possibleParcels + .Concat(jobParcels) + .GroupBy(g => g.Key) + .ToDictionary(pair => pair.Key, pair => pair.First().Value); + } + + if (TryMatchJobTitleToDepartment(candidate.Job, out var department) + && pool.Departments.TryGetValue(department, out var departmentParcels)) + { + possibleParcels = possibleParcels + .Concat(departmentParcels) + .GroupBy(g => g.Key) + .ToDictionary(pair => pair.Key, pair => pair.First().Value); + } + + var accumulated = 0f; + var randomPoint = _random.NextFloat(possibleParcels.Values.Sum()); + string? chosenParcel = null; + + foreach (var parcel in possibleParcels) { - chosenParcel = key; + accumulated += parcel.Value; + if (!(accumulated >= randomPoint)) + continue; + chosenParcel = parcel.Key; break; } - } - if (chosenParcel == null) - { - _sawmill.Error($"MailSystem wasn't able to find a deliverable parcel for {candidate.Name}, {candidate.Job}!"); - return; + if (chosenParcel == null) + { + _sawmill.Error($"MailSystem wasn't able to find a deliverable parcel for {candidate.Name}, {candidate.Job}!"); + return; + } + + var coordinates = Transform(uid).Coordinates; + var mail = EntityManager.SpawnEntity(chosenParcel, coordinates); + SetupMail(mail, component, candidate); + + _tagSystem.AddTag(mail, "Mail"); // Frontier } - var mail = EntityManager.SpawnEntity(chosenParcel, Transform(uid).Coordinates); - SetupMail(mail, component, candidate); + if (_containerSystem.TryGetContainer(uid, "queued", out var queued)) + _containerSystem.EmptyContainer(queued); - _tagSystem.AddTag(mail, "Mail"); // Frontier + _audioSystem.PlayPvs(component.TeleportSound, uid); } - if (_containerSystem.TryGetContainer(uid, "queued", out var queued)) - _containerSystem.EmptyContainer(queued); + private void OpenMail(EntityUid uid, MailComponent? component = null, EntityUid? user = null) + { + if (!Resolve(uid, ref component)) + return; - _audioSystem.PlayPvs(component.TeleportSound, uid); - } + _audioSystem.PlayPvs(component.OpenSound, uid); - public void OpenMail(EntityUid uid, MailComponent? component = null, EntityUid? user = null) - { - if (!Resolve(uid, ref component)) - return; + if (user != null) + _handsSystem.TryDrop((EntityUid) user); - _audioSystem.PlayPvs(component.OpenSound, uid); + if (!_containerSystem.TryGetContainer(uid, "contents", out var contents)) + { + // I silenced this error because it fails non deterministically in tests and doesn't seem to effect anything else. + // _sawmill.Error($"Mail {ToPrettyString(uid)} was missing contents container!"); + return; + } - if (user != null) - _handsSystem.TryDrop((EntityUid) user); + foreach (var entity in contents.ContainedEntities.ToArray()) + { + _handsSystem.PickupOrDrop(user, entity); + } - if (!_containerSystem.TryGetContainer(uid, "contents", out var contents)) - { - // I silenced this error because it fails non deterministically in tests and doesn't seem to effect anything else. - // _sawmill.Error($"Mail {ToPrettyString(uid)} was missing contents container!"); - return; + _tagSystem.AddTag(uid, "Trash"); + _tagSystem.AddTag(uid, "Recyclable"); + component.IsEnabled = false; + UpdateMailTrashState(uid, true); } - foreach (var entity in contents.ContainedEntities.ToArray()) + private void UpdateAntiTamperVisuals(EntityUid uid, bool isLocked) { - _handsSystem.PickupOrDrop(user, entity); + _appearanceSystem.SetData(uid, MailVisuals.IsLocked, isLocked); } - _tagSystem.AddTag(uid, "Trash"); - _tagSystem.AddTag(uid, "Recyclable"); - component.IsEnabled = false; - UpdateMailTrashState(uid, true); - } + private void UpdateMailTrashState(EntityUid uid, bool isTrash) + { + _appearanceSystem.SetData(uid, MailVisuals.IsTrash, isTrash); + } - private void UpdateAntiTamperVisuals(EntityUid uid, bool isLocked) - { - _appearanceSystem.SetData(uid, MailVisuals.IsLocked, isLocked); - } + // DeltaV - Helper function that executes for each StationLogisticsStatsComponent + // For updating MailMetrics stats + private void ExecuteForEachLogisticsStats(EntityUid uid, + Action action) + { - private void UpdateMailTrashState(EntityUid uid, bool isTrash) - { - _appearanceSystem.SetData(uid, MailVisuals.IsTrash, isTrash); + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var station, out var logisticStats)) + { + if (_stationSystem.GetOwningStation(uid) != station) + continue; + action(station, logisticStats); + } + } } - // DeltaV - Helper function that executes for each StationLogisticsStatsComponent - // For updating MailMetrics stats - private void ExecuteForEachLogisticsStats(EntityUid uid, - Action action) + public struct MailRecipient( + string name, + string job, + string jobIcon, + HashSet> accessTags, + bool mayReceivePriorityMail) { - - var query = EntityQueryEnumerator(); - while (query.MoveNext(out var station, out var logisticStats)) - { - if (_stationSystem.GetOwningStation(uid) != station) - continue; - action(station, logisticStats); - } + public readonly string Name = name; + public readonly string Job = job; + public readonly string JobIcon = jobIcon; + public readonly HashSet> AccessTags = accessTags; + public readonly bool MayReceivePriorityMail = mayReceivePriorityMail; } } - -public struct MailRecipient( - string name, - string job, - string jobIcon, - HashSet> accessTags, - bool mayReceivePriorityMail) -{ - public string Name = name; - public string Job = job; - public string JobIcon = jobIcon; - public HashSet> AccessTags = accessTags; - public bool MayReceivePriorityMail = mayReceivePriorityMail; -} From ad2918a33a588fa64ef9699b456be9f60cc08c3d Mon Sep 17 00:00:00 2001 From: sleepyyapril Date: Sun, 12 Jan 2025 23:20:05 -0400 Subject: [PATCH 12/39] As a stop-gap, CPR will not loop at all. --- Content.Server/Medical/CPR/CPRSystem.cs | 2 +- .../EntitySystems/ContainerSpawnPointSystem.cs | 17 ++++++++++------- .../StationEvents/Events/RandomSentienceRule.cs | 15 ++++++++++----- .../StationAi/SharedStationAiSystem.Held.cs | 2 +- .../Silicons/StationAi/SharedStationAiSystem.cs | 3 +++ .../Structures/Machines/Computers/computers.yml | 5 ----- .../Structures/Wallmounts/air_alarm.yml | 1 - 7 files changed, 25 insertions(+), 20 deletions(-) diff --git a/Content.Server/Medical/CPR/CPRSystem.cs b/Content.Server/Medical/CPR/CPRSystem.cs index fe4521a15d..2e42a5a3f6 100644 --- a/Content.Server/Medical/CPR/CPRSystem.cs +++ b/Content.Server/Medical/CPR/CPRSystem.cs @@ -87,7 +87,7 @@ private void StartCPR(Entity performer, EntityUid target) _doAfterSystem.TryStartDoAfter(doAfterArgs); - var playingStream = _audio.PlayPvs(performer.Comp.CPRSound, performer, AudioParams.Default.WithLoop(true)); + var playingStream = _audio.PlayPvs(performer.Comp.CPRSound, performer, AudioParams.Default); if (!playingStream.HasValue) return; diff --git a/Content.Server/Spawners/EntitySystems/ContainerSpawnPointSystem.cs b/Content.Server/Spawners/EntitySystems/ContainerSpawnPointSystem.cs index 6b0033124e..bc37d93dec 100644 --- a/Content.Server/Spawners/EntitySystems/ContainerSpawnPointSystem.cs +++ b/Content.Server/Spawners/EntitySystems/ContainerSpawnPointSystem.cs @@ -22,7 +22,7 @@ public sealed class ContainerSpawnPointSystem : EntitySystem public override void Initialize() { base.Initialize(); - SubscribeLocalEvent(HandlePlayerSpawning, before: new []{ typeof(SpawnPointSystem) }); + SubscribeLocalEvent(HandlePlayerSpawning, before: [ typeof(SpawnPointSystem) ]); } public void HandlePlayerSpawning(PlayerSpawningEvent args) @@ -30,9 +30,14 @@ public void HandlePlayerSpawning(PlayerSpawningEvent args) if (args.SpawnResult != null) return; + JobPrototype? jobProto = null; + // If it's just a spawn pref check if it's for cryo (silly). if (args.HumanoidCharacterProfile?.SpawnPriority != SpawnPriorityPreference.Cryosleep && - (!_proto.TryIndex(args.Job?.Prototype, out var jobProto) || jobProto.JobEntity == null)) + (!_proto.TryIndex(args.Job?.Prototype, out jobProto) || jobProto.JobEntity == null)) + return; + + if (jobProto == null && !_proto.TryIndex(args.Job?.Prototype, out jobProto)) return; var query = EntityQueryEnumerator(); @@ -63,17 +68,15 @@ public void HandlePlayerSpawning(PlayerSpawningEvent args) continue; } - if (_gameTicker.RunLevel == GameRunLevel.InRound && spawnPoint.SpawnType == SpawnPointType.LateJoin) - { + if (_gameTicker.RunLevel == GameRunLevel.InRound + && spawnPoint.SpawnType == SpawnPointType.LateJoin + && jobProto.JobEntity == null) possibleContainers.Add((uid, spawnPoint, container, xform)); - } if (_gameTicker.RunLevel != GameRunLevel.InRound && spawnPoint.SpawnType == SpawnPointType.Job && (args.Job == null || spawnPoint.Job == args.Job.Prototype)) - { possibleContainers.Add((uid, spawnPoint, container, xform)); - } } if (possibleContainers.Count == 0) diff --git a/Content.Server/StationEvents/Events/RandomSentienceRule.cs b/Content.Server/StationEvents/Events/RandomSentienceRule.cs index 0c8b811b8c..4ee5c69953 100644 --- a/Content.Server/StationEvents/Events/RandomSentienceRule.cs +++ b/Content.Server/StationEvents/Events/RandomSentienceRule.cs @@ -64,9 +64,14 @@ protected override void Started(EntityUid uid, RandomSentienceRuleComponent comp return; var groupList = groups.ToList(); - var kind1 = groupList.Count > 0 ? groupList[0] : "???"; - var kind2 = groupList.Count > 1 ? groupList[1] : "???"; - var kind3 = groupList.Count > 2 ? groupList[2] : "???"; + var kind1 = groupList.Count > 0 ? Loc.GetString(groupList[0]) : "???"; + var kind2 = groupList.Count > 1 ? Loc.GetString(groupList[1]) : "???"; + var kind3 = groupList.Count > 2 ? Loc.GetString(groupList[2]) : "???"; + var data = _random.Pick(_prototype.Index("RandomSentienceEventData")); + var strength = _random.Pick(_prototype.Index("RandomSentienceEventStrength")); + + data = Loc.GetString(data); + strength = Loc.GetString(strength); ChatSystem.DispatchStationAnnouncement( station.Value, @@ -76,8 +81,8 @@ protected override void Started(EntityUid uid, RandomSentienceRuleComponent comp ("kind2", kind2), ("kind3", kind3), ("amount", groupList.Count), - ("data", _random.Pick(_prototype.Index("RandomSentienceEventData"))), - ("strength", _random.Pick(_prototype.Index("RandomSentienceEventStrength")))) + ("data", data), + ("strength", strength)) ); } } diff --git a/Content.Shared/Silicons/StationAi/SharedStationAiSystem.Held.cs b/Content.Shared/Silicons/StationAi/SharedStationAiSystem.Held.cs index 33afb5673f..a8ba901450 100644 --- a/Content.Shared/Silicons/StationAi/SharedStationAiSystem.Held.cs +++ b/Content.Shared/Silicons/StationAi/SharedStationAiSystem.Held.cs @@ -72,7 +72,7 @@ private bool TryGetHeld(Entity entity, out EntityUid he private bool TryGetCore(EntityUid ent, out Entity core) { - if (!_containers.TryGetContainingContainer(ent, out var container) || + if (!_containers.TryGetContainingContainer((ent, null, null), out var container) || container.ID != StationAiCoreComponent.Container || !TryComp(container.Owner, out StationAiCoreComponent? coreComp) || coreComp.RemoteEntity == null) diff --git a/Content.Shared/Silicons/StationAi/SharedStationAiSystem.cs b/Content.Shared/Silicons/StationAi/SharedStationAiSystem.cs index baef62c3da..b5c8fcb26f 100644 --- a/Content.Shared/Silicons/StationAi/SharedStationAiSystem.cs +++ b/Content.Shared/Silicons/StationAi/SharedStationAiSystem.cs @@ -112,6 +112,9 @@ private void OnCoreVerbs(Entity ent, ref GetVerbsEvent { + if (!_containers.TryGetContainer(ent, StationAiCoreComponent.Container, out _)) + return; + var brain = SpawnInContainerOrDrop(DefaultAi, ent.Owner, StationAiCoreComponent.Container); _mind.ControlMob(user, brain); }, diff --git a/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml b/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml index 8829a9025f..639fa42d10 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml @@ -41,7 +41,6 @@ interfaces: enum.AtmosAlertsComputerUiKey.Key: type: AtmosAlertsComputerBoundUserInterface - - type: StationAiWhitelist - type: entity parent: BaseComputer @@ -301,7 +300,6 @@ interfaces: enum.PowerMonitoringConsoleUiKey.Key: type: PowerMonitoringConsoleBoundUserInterface - - type: StationAiWhitelist - type: entity parent: BaseComputer @@ -691,7 +689,6 @@ radius: 1.5 energy: 1.6 color: "#e6e227" - - type: StationAiWhitelist - type: entity parent: BaseComputer @@ -808,7 +805,6 @@ - type: GuideHelp guides: - Cargo - - type: StationAiWhitelist - type: entity id: ComputerCargoBounty @@ -1050,7 +1046,6 @@ - type: GuideHelp guides: - Cargo - - type: StationAiWhitelist - type: entity parent: BaseComputer diff --git a/Resources/Prototypes/Entities/Structures/Wallmounts/air_alarm.yml b/Resources/Prototypes/Entities/Structures/Wallmounts/air_alarm.yml index cff9bed3d0..fd2f76aa52 100644 --- a/Resources/Prototypes/Entities/Structures/Wallmounts/air_alarm.yml +++ b/Resources/Prototypes/Entities/Structures/Wallmounts/air_alarm.yml @@ -112,7 +112,6 @@ collection: MetalGlassBreak params: volume: -4 - - type: StationAiWhitelist - type: entity id: AirAlarmAssembly From 47d6695a515c2bf2227f35ccfb26bd4bb7ff57f7 Mon Sep 17 00:00:00 2001 From: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Date: Fri, 23 Aug 2024 03:03:05 +1000 Subject: [PATCH 13/39] Predict IntrinsicUI (#31310) --- .../UserInterface/IntrinsicUIComponent.cs | 12 ++++++------ .../UserInterface/IntrinsicUISystem.cs | 17 +++++++---------- 2 files changed, 13 insertions(+), 16 deletions(-) rename {Content.Server => Content.Shared}/UserInterface/IntrinsicUIComponent.cs (59%) rename {Content.Server => Content.Shared}/UserInterface/IntrinsicUISystem.cs (73%) diff --git a/Content.Server/UserInterface/IntrinsicUIComponent.cs b/Content.Shared/UserInterface/IntrinsicUIComponent.cs similarity index 59% rename from Content.Server/UserInterface/IntrinsicUIComponent.cs rename to Content.Shared/UserInterface/IntrinsicUIComponent.cs index 83936edc8c..ede0fd9c34 100644 --- a/Content.Server/UserInterface/IntrinsicUIComponent.cs +++ b/Content.Shared/UserInterface/IntrinsicUIComponent.cs @@ -1,9 +1,9 @@ -using Robust.Shared.Prototypes; -using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; -namespace Content.Server.UserInterface; +namespace Content.Shared.UserInterface; -[RegisterComponent] +[RegisterComponent, NetworkedComponent] public sealed partial class IntrinsicUIComponent : Component { /// @@ -15,8 +15,8 @@ public sealed partial class IntrinsicUIComponent : Component [DataDefinition] public sealed partial class IntrinsicUIEntry { - [DataField("toggleAction", customTypeSerializer: typeof(PrototypeIdSerializer), required: true)] - public string? ToggleAction; + [DataField("toggleAction", required: true)] + public EntProtoId? ToggleAction; /// /// The action used for this BUI. diff --git a/Content.Server/UserInterface/IntrinsicUISystem.cs b/Content.Shared/UserInterface/IntrinsicUISystem.cs similarity index 73% rename from Content.Server/UserInterface/IntrinsicUISystem.cs rename to Content.Shared/UserInterface/IntrinsicUISystem.cs index 0f7261865d..2d8c5d1480 100644 --- a/Content.Server/UserInterface/IntrinsicUISystem.cs +++ b/Content.Shared/UserInterface/IntrinsicUISystem.cs @@ -1,14 +1,11 @@ -using Content.Server.Actions; -using Content.Shared.UserInterface; -using Robust.Server.GameObjects; -using Robust.Shared.Player; +using Content.Shared.Actions; -namespace Content.Server.UserInterface; +namespace Content.Shared.UserInterface; public sealed class IntrinsicUISystem : EntitySystem { - [Dependency] private readonly ActionsSystem _actionsSystem = default!; - [Dependency] private readonly UserInterfaceSystem _uiSystem = default!; + [Dependency] private readonly SharedActionsSystem _actionsSystem = default!; + [Dependency] private readonly SharedUserInterfaceSystem _uiSystem = default!; public override void Initialize() { @@ -32,9 +29,9 @@ private void InitActions(EntityUid uid, IntrinsicUIComponent component, MapInitE } } - public bool InteractUI(EntityUid uid, Enum key, IntrinsicUIComponent? iui = null, ActorComponent? actor = null) + public bool InteractUI(EntityUid uid, Enum key, IntrinsicUIComponent? iui = null) { - if (!Resolve(uid, ref iui, ref actor)) + if (!Resolve(uid, ref iui)) return false; var attempt = new IntrinsicUIOpenAttemptEvent(uid, key); @@ -42,7 +39,7 @@ public bool InteractUI(EntityUid uid, Enum key, IntrinsicUIComponent? iui = null if (attempt.Cancelled) return false; - return _uiSystem.TryToggleUi(uid, key, actor.PlayerSession); + return _uiSystem.TryToggleUi(uid, key, uid); } } From 59d76eca93db86f73a9ed96768ffa1d5b5a4294c Mon Sep 17 00:00:00 2001 From: ScarKy0 <106310278+ScarKy0@users.noreply.github.com> Date: Tue, 22 Oct 2024 15:49:39 +0200 Subject: [PATCH 14/39] Adding intellicard functionality. (#32347) * init * im so confused * clean * sprite update * :| * further attempts * be blessed for it works * Very prestigious pAI * cleaning up * Intellicard in RD locker * PAIn't * .Clear()n't * .Clear()n't for real this time * Cleaning up * Whoopsie Daisy --- .../StationAi/SharedStationAiSystem.cs | 8 +++++ .../UserInterface/IntrinsicUISystem.cs | 10 ++++++ .../Catalog/Fills/Lockers/heads.yml | 1 + .../Entities/Mobs/Player/silicon.yml | 29 ++++++++++++++++-- .../Objects/Devices/ai_card.rsi/base.png | Bin 4432 -> 6812 bytes .../Objects/Devices/ai_card.rsi/empty.png | Bin 4292 -> 6697 bytes .../Objects/Devices/ai_card.rsi/full.png | Bin 5121 -> 7638 bytes 7 files changed, 46 insertions(+), 2 deletions(-) diff --git a/Content.Shared/Silicons/StationAi/SharedStationAiSystem.cs b/Content.Shared/Silicons/StationAi/SharedStationAiSystem.cs index b5c8fcb26f..1897919742 100644 --- a/Content.Shared/Silicons/StationAi/SharedStationAiSystem.cs +++ b/Content.Shared/Silicons/StationAi/SharedStationAiSystem.cs @@ -288,6 +288,8 @@ private void OnAiMapInit(Entity ent, ref MapInitEvent ar private bool SetupEye(Entity ent) { + if (_net.IsClient) + return false; if (ent.Comp.RemoteEntity != null) return false; @@ -302,8 +304,11 @@ private bool SetupEye(Entity ent) private void ClearEye(Entity ent) { + if (_net.IsClient) + return; QueueDel(ent.Comp.RemoteEntity); ent.Comp.RemoteEntity = null; + Dirty(ent); } private void AttachEye(Entity ent) @@ -333,6 +338,8 @@ private void OnAiInsert(Entity ent, ref EntInsertedIntoC if (_timing.ApplyingState) return; + SetupEye(ent); + // Just so text and the likes works properly _metadata.SetEntityName(ent.Owner, MetaData(args.Entity).EntityName); @@ -354,6 +361,7 @@ private void OnAiRemove(Entity ent, ref EntRemovedFromCo { _eye.SetTarget(args.Entity, null, eyeComp); } + ClearEye(ent); } private void UpdateAppearance(Entity entity) diff --git a/Content.Shared/UserInterface/IntrinsicUISystem.cs b/Content.Shared/UserInterface/IntrinsicUISystem.cs index 2d8c5d1480..b16492b835 100644 --- a/Content.Shared/UserInterface/IntrinsicUISystem.cs +++ b/Content.Shared/UserInterface/IntrinsicUISystem.cs @@ -10,6 +10,7 @@ public sealed class IntrinsicUISystem : EntitySystem public override void Initialize() { SubscribeLocalEvent(InitActions); + SubscribeLocalEvent(OnShutdown); SubscribeLocalEvent(OnActionToggle); } @@ -21,6 +22,15 @@ private void OnActionToggle(EntityUid uid, IntrinsicUIComponent component, Toggl args.Handled = InteractUI(uid, args.Key, component); } + private void OnShutdown(EntityUid uid, IntrinsicUIComponent component, ref ComponentShutdown args) + { + foreach (var actionEntry in component.UIs.Values) + { + var actionId = actionEntry.ToggleActionEntity; + _actionsSystem.RemoveAction(uid, actionId); + } + } + private void InitActions(EntityUid uid, IntrinsicUIComponent component, MapInitEvent args) { foreach (var entry in component.UIs.Values) diff --git a/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml b/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml index 664da15f65..e57c416631 100644 --- a/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml +++ b/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml @@ -239,6 +239,7 @@ - id: RDIDCard # Delta-V - id: ClothingHeadsetAltScience - id: EncryptionKeyBinary + - id: Intellicard - id: LunchboxCommandFilledRandom # Delta-V Lunchboxes! prob: 0.3 diff --git a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml index 6685e47520..e4910bdb5e 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml @@ -98,6 +98,27 @@ layer: - GhostImpassable +- type: entity + id: AiHeldIntellicard + description: Components added / removed from an entity that gets inserted into an Intellicard. + categories: [ HideSpawnMenu ] + components: + - type: IntrinsicRadioReceiver + - type: IntrinsicRadioTransmitter + channels: + - Binary + - type: ActiveRadio + channels: + - Binary + - Common + - type: ActionGrant + actions: + - ActionAIViewLaws + - type: UserInterface + interfaces: + enum.SiliconLawsUiKey.Key: + type: SiliconLawBoundUserInterface + # Ai - type: entity id: AiHolder @@ -108,6 +129,8 @@ - type: StationAiHolder slot: name: station-ai-mind-slot + locked: false + disableEject: true whitelist: tags: - StationAi @@ -160,13 +183,16 @@ # Items - type: entity id: Intellicard - name: Intellicard + name: intellicard description: A storage device for AIs. parent: - BaseItem - AiHolder suffix: Empty components: + - type: ContainerComp + proto: AiHeldIntellicard + container: station_ai_mind_slot - type: Sprite sprite: Objects/Devices/ai_card.rsi layers: @@ -280,7 +306,6 @@ enum.SiliconLawsUiKey.Key: type: SiliconLawBoundUserInterface - type: ComplexInteraction - - type: DoorRemote - type: Actions - type: Access groups: diff --git a/Resources/Textures/Objects/Devices/ai_card.rsi/base.png b/Resources/Textures/Objects/Devices/ai_card.rsi/base.png index 244183c078c3d580cda31d0431ced9150a7cf7c9..535f5a48e99f6bf7fb5e384259378c9f21082c70 100644 GIT binary patch literal 6812 zcmd5>TWB3s6rH5Tq=z(yHmIo8+XpIYW$rmM=gd^lv`w*5h_)0-MKSj=LnBtB4chj{ zv`wXAMJ*}?MbwIdA3>@g1!-+JHaW-8aVBsbd|$x$)zh53M&vr#3Rh-^C9OL_oYK4t`e?O6t+`D3Ix`o z2$|!loPwb%RL%)pN8$}YAz;M02t{D$L_r~ls96}wA~}<&Eb7aG43wZbMjpThs)>il zMH7?DHIotyAo7}%7bOsULZZQuFbAQc+vde+rzna1a$2bQsi9jIF2mi5zP@5 zk15oLvPF)EJXHGPfdX3|XkUtls0g2aXi*7;C>qX-kpsMiLM)ZTWL9~+NP=iS;*n+o z8i*|-$EB}qNb?bd0L)^h2n&Zx7mP?VQUW2-&j=zJ;?j}y((JYCpcGvO2?&@hLRf4> zVsy+9=*sZms85|VJd2`Jj$eXLjHwVN*Rw^c4r$A;>VbaqE$o)(v*aftGP&VoHED2}HhwHnjRir$W1x4FI zCp_YWGscI45C!6z&X`Va&h;8Gj%~GDX8LtWq#xB5DNOh#xkC&!Q>uDw^XSZQi7hii zsP{J(7Xh!UO8Ka43b|gKK2^&PRRCch=~K1jKQ0J(M+RLDL=5PJK-|dx)B_xqO(%G1 zm+5^L*EqP*4s&ph*$@XYNHm>E$aAtQsd(s&V9_A~1Jpu#GQDwO=!*bi3fM@=X4PX! z3~?USYcSn0LUY#>JR?FC8Njx1OG+1JI$ z6mtqv^zyK&Vv%kZCYo@A3lGCdTA;c^R3$YU{;} z8WCeUm^;!EEpvxa5~&6lC1MhY=v@O4eNw3KshU1n>5rjG;agA0M8F;#KlKRyjndlN zvub1ip2EQOEz1_$8@^wD{>*>g_}JLDgV+4laV%K>Z1d>R32TX5^3EH_KcBeo#KBf? z@$uD%#xt+HzG7$7fdlU~KfnE^kgI{$1a)&7FtmceQTnvpR2SdFbhGd*6|e?|(cgESesO%HzprPw^H*!{p2Lgo zI#lS+EWd8ymY$DVZryc9_t8x2$cMYzj*PAu8SQ$td0=p-_5R~+BNONEwT^FNOTX^O zsH+D4z0lwH?!4RQH!Zc!uNld=?tAIj=C<~~J2PW^|Jm-1_Q_9gTiE%;;@$1v{BU#k vC%x9_kE3sXvA3=3#KD2Cea)Sg_4A@9m#%wY#e4YIgVnpXuV-xaz^?xR&po7i literal 4432 zcmeHKdr%X19$$12&o1Gq!oMKz-D(7_8{4~yO6+) z8pPgtR!=;9jcu{E_-Ko?w#*HsqoUxz**PD0^`>XVO3|VRC)2ZMTfB0=4ezk_YavbVi1Qt58|_5Zu};9R*?@>4$wh z=VD74Sgi0dFcV;15ES^k$9^NK4U2sIC?>J$Kw?}6oBvjV_}FQFqkh1eDs#V9_5SI? z%X|X77b&~yI$332v$G{aUX}Xu^rdU<&(#&)zZ2cLx?i95HhSwpnQ?B<{ii>v-P4_4 z@a|UYcmFt$ySe?%H?Lku+O=}m!HiaIpDI>+?T+z$%eklGkI#MaT3Pw*vmdTJb2{tm zEeDG!+UMF|9PHS0{-&&KRpa;3niTilO^(9Ov!;RMU;J|E`s;>j`8o&+t7gq+yVYzS z%Liof>ZU!W>^6JMOKbCwW-d?chkI&{5T731Vc5Ss_FM+LqUnCoS6ykvT{ZR126^M0 zh%K@2%u`%yA)4h|KcBz-gX-EhUfvrh%qw2-MfJx+h6k^;ZF&@z@zEuR0EeA8#L)TH zQ}zu{$=;1b`W+jb$LcPjcW-}q=AXB}82a^2cg3wCA!@~v+OX6;hI3*Y(hb+$Y!WXG zwJ&&KUrdkCv#dIP@#fx^{;v|g+|f4c^3J$#`;8m76*N3N^;t*5Z%(vp+H*5MNiIxo zZt!*YG+ckB;l?vt$P@J^dz*7~e~8&%vnm{+wYlcRSZ7m7{lU(zimtY_yWePf|M=(U zWl0^g;_Zv@&4X#*n11zvG0|U}VJ#ZG@Tat;!B)i;_S1hqI_2@_K*Ji}(XSuxO2Hmk zE8jVuxjQ(R;@f!hTCeGIJ|b>Y*Ag?oIBlO@A$#C{Xv-|>jg5Oz`0~1`S5A2WY!;7PMD^Z4E(j9tBBrPDT;%_(0!5 zkTEUbBdHQbgq@6=^_q|eADu;DmNp^lbT-W9Gc(0(b|uf`SLQgV$`T5vk+f8~F+czS z4Hgh}!YZY1rhGquXay61FhmAb#BJwP& zMj^nP2`LsuAE8wG{eFdCqu_YAQibEV5>qSHY7|(YLWNf(1E^O>k|0JfEQ~<$tWRV) zFDzk_POeNeAqddJWAS->HrqJ7R~Tgh@SzNlKBY>5DLo$LWDh~iEC(Q?0sWwd-~dyq z%wq(ujHj5)a>gqrO@^SUaerSKUm8k>rj$%6;{m1uSXDJ;$tPZl5c@}gfSvol?35o_#E=)sfQ*bBhR2lTB76gYnDT+c} zIHlF-7_G+1=t595MXcg@4++Z2dPp~;^m*MOg+w@!Znv5cwE~-v*h@*#1suQ(uwI(; z3lk~_>tXUmQsPskS8Mbbj_Y-}TBXPF38NPnUI4u)p{g*2MjO&dg&{yXfLc=OQ~(f? zgKP*h&yXU=J2Kp=(+UOv`wtyJqN`76a2Vp6Rat8(s2= zk156r{sH;Hr_w7gHx7W$tZ?V*EDJO&{a!zPycS5F@MW(TAZT8@bcXF)F)slKBSfn$ zGomkYe&oWW+SN}4f#|W-lI|#Iql)6@Bqd^be_1?mW!P}1vC&muC-bd$yb2vrnx5Tm z>vYkBEB|wOurDkp>%E%NijA}0UV=djujRKYcFW$g$24sVy65y{yy z?Bi$Xg@=otJodf2p!`ts(KWN5?^{;$v*FxhmU~N5XJ^lmJw2;ZUenyMaJU^0eij|P z*GAz3=HT+&XW7WP#qn`bRac|q g&)vN>7n8?<1IlWm!V?ox>i`dsH8aQ3m{GL#zrOQGZU6uP diff --git a/Resources/Textures/Objects/Devices/ai_card.rsi/empty.png b/Resources/Textures/Objects/Devices/ai_card.rsi/empty.png index 7e61f368de294ae506cdab73e818f0f594bb260c..a62b9263d52ce1637458bc3f14dc63bc12852b59 100644 GIT binary patch literal 6697 zcmd5=O=ule6rMC%?Ij69YYDZB7jdDunYs7Qy)!OKYLl8QEVa6@;v)0j%wV8u(3G|+ zNFoSDshb8tcP%bN2rhy<5kcurOa&L}##Je}&@QCA_B(fG-pqaPCGRI~^CrAI_wRh? z`_4J{2Ik_)6EBRjL(FlU@%g!#Q+U_#n|^dJ+V?M=UB_$R(%k8H9cSVv`i-nTJMo0$ zjQqAd`|9$k=v-~-oww7)Gf8dv!ctO8&M&48qn6d^;T~tw*MSO^a`DJehCD(ipb;MG zyRPR-)0zP{tr=VMjP{s^!$6=%KRkhf21+sSW%Jl&9xp=AM>ij{pph@s?S(M+zyr(^ zcmb3<5*}uVUT)9Ayd%gn7QB38l*?0LpsUjA`Top3TH1#nqoy9`(?k_d>sV?;FZSU_ zaGnVGLd(q`W`q=xaG414;sT+-2A`&cMk_?2AHlGs6%sR_F1r=}yoQ{=)-k<{OUn(1 zQJbZ=#uf8j6{u88{DkQdK>=z&6oKSK8Zl@lj~uaUn~Q%r&cXjXdO82*lEcs#A3O*= zCK@8u2&M9rP<7>N$z8>juQUoP5i#PC*6a0@bIgZI(u}W#FJs}#7%33giy~w)(2<6r zFLWdmUn;x-CB|_#>fNMKsE6YQMS43*1h}JV6RVJW;*dlUVh1!L* z5J5=5EN6XqC(PfZ;fTh6hJ; z>r~-c7M)i76236%1`nXDKC0;5z+vHO*M??!T#8sklIkKvwIUPPo(GrQKyXuP5e5;- z5H;s1&6F=2WTrG017o02SKFB26wvWO+2s3CE1a_;oTU#x^iiuwd8!(kj)O^f#z_RI zCx}9U__i}cVy5vK*WG<2*i#2w_o6>Y;(w(r_7wQvKZ)u zN!(*D#6b)aO?MLVT%1ZOAG#x0c1cLOlXP{ldT?PFiUb*J;2;%;)yx$!#C_DS!B+d( zRvxO}Tlt!`7Wr&D{T5iqd#SibdD>)@U8S^O%-b$|JAT;-t+x50txgTre=tC0a=Wv9 zFpRqMD0j3l>PJioLcJCsd$FIGYRX#)cU&JQZKH6H0y?3{QZL_G3Ixy;0OciEmvo@HR;gnWt>5w&>a<8M^ z11iPXTz8L=&7&Okz-TKmB?$F;0J06X8r@%@-o)74?k^+TS8t=7(I8@M2g4(+&@w!X zibxH>s1Q>?WbYn;=#xT+Pu29v%6tsfn!YkKk+8qtOK;*k`{ntWqp!TN(pZ>$`07IN z(TihaclLc9UHNKsee?Ri(dgtezkYJ~hxp558^=Gto;j&$P-?})r z|C`HCO>c}I`ToLl-%d=9uWUY+HQ!CS?D&sQ6XbzU_k6Ls`QOUa$j86jo<4cw=#^`a z{J!?*%O8HQuyOjxp*>fpT+^I6hOMhFxoq!Y$9d~Bac=d_*;(*&=4VgLtUtf7dKc8U BcxnIu literal 4292 zcmeHKeQ?v}8CR0!%Ui-=X$Wa^6QboSlVw?oE$b`-u?_LHPTj=Kpkqs9Np@5s%ScM> zWI!`$3Zq?tru1mLcC3R!*TBXKy_8S_Bs~~y(=7!$$_O;1(C)(EC~dl#mc6p`dF$OS zck6$#PnPt2{GR9ez0dQW-(PymmSh?74G;unxl5hp;0}XpVMZGG{rQu1d%^9kM&DAc zoQ=R?MGlCy0<1NJ1z3oR0SJnID0$Cib;94fHJDRy6x%RkJ^9M1EP72={qJ{NotfRC zSswf9^HoQrCikMZ{Rd8O%$7cEYiIL5Y00d+@txqwukO9;X6YZ-cU5J6@bH-*uKagK z*Zb$^&zadC^uIa#q5A6Bw3Ca?v-2-W^G=nQQq!JJW)3$WIIDbp?BJz4a;K;5d4-;H ztg34Ih2F|Tn@rbA)^;QLDJR+tJ?Blqr}~;n=?h|;GOg-F2UE~wwcoYu-O%M#4hTwG zCpsKnx5F`95Gdo@-E!tUO&r@yVN=*gUCHZM*?c=7>9L9T!QiXGcd^fdHz z7GM67=zr?Z52nmIo}BNUX_)F#|uh|PCEhX;i>u$OWYpsh=)!= zP?W-PFF^J7Y$CvY1b3YEaP4tpVCC`9PMNFI({no+M2}DNGAHtM z{IQ7SDJy3qP|7N>C`oc0$^sEeP$t4^4Fqu9VjctK4yhU&;shNEfEz`C!*f=%%|?(Y zVJ#w2lC%0ziX#Y==XeWiu@qT(KRX8EenkXb$<~g|N{8YB6i1N(jud#12o*p{fiQ!- zC_l>bCacBb=ZS!oi$n1oy;xQx7A&VIu|WX~hk|j1PB^{D>t+zM(KIUY*0NdvIDi=t zL%bYOM^!#i5-K!S=M%S@2`g^GNdhNHTM<5LR4FJb=tUhBHyH^suF)5U2IT;1S-n#M zKwJ*0p&g3AYO>;!OlY({65w!;l6whj`lhp(OYBH0wiK6i$A5PI`Gi}BTaT9GC zV=wb!py7X6>*E946N_Fdsvv$tT$Grp3Snj9E%90_#)k=p<6}XyT%rV(trz%so&YPM z;%eAXPyqYKP{R((#cyba0B^=AB0!;5oW(&i1Z*h9lSL@c2Pna6v9UHb(N81jsvOWF ztRgH50v-WZph4qY!E=X}YTo#4A~k}(4uCS$M4_XU5ePO^ET-=m!`0fc|Kh_QHyE?U z0KbF`Y+Ya{#74HlA-+Ja-{xm%9lp&FFgzJ#Li|qBHA&Zm7?_apWOq%{H6aEjWIWkj z|2Mh}qlYOW1pWadknc>o9DgqFrsh>KHm1~!0 z_MJYK_72f#zcVE-cB{$A zT&!7@oSNfZ_=^j<5OiqD^%n+{IzBec-QJXJus;ZGf8)FDdn%ue&1i1~p&_@c%(=Iu HdhLGz@YfZx diff --git a/Resources/Textures/Objects/Devices/ai_card.rsi/full.png b/Resources/Textures/Objects/Devices/ai_card.rsi/full.png index 59131c8c0aafc5f647d4409168265f23cc05e667..69a1825d91db90a67d6f57f2815d9f3581ecc43a 100644 GIT binary patch literal 7638 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 From a094f12ceaa99899881943b5e1555e6ef6ea444b Mon Sep 17 00:00:00 2001 From: ScarKy0 <106310278+ScarKy0@users.noreply.github.com> Date: Tue, 10 Sep 2024 12:27:42 +0200 Subject: [PATCH 15/39] Renamed circuit boards to law boards (#31914) init --- Resources/Prototypes/Entities/Mobs/Player/silicon.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml index e4910bdb5e..0481e4a32d 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml @@ -147,7 +147,7 @@ - type: entity id: AsimovCircuitBoard parent: BaseElectronics - name: circuit board (Crewsimov) + name: law board (Crewsimov) description: An electronics board containing the Crewsimov lawset. components: - type: Sprite @@ -159,7 +159,7 @@ - type: entity id: CorporateCircuitBoard parent: BaseElectronics - name: circuit board (Corporate) + name: law board (Corporate) description: An electronics board containing the Corporate lawset. components: - type: Sprite @@ -171,7 +171,7 @@ - type: entity id: NTDefaultCircuitBoard parent: BaseElectronics - name: circuit board (NT Default) + name: law board (NT Default) description: An electronics board containing the NT Default lawset. components: - type: Sprite From c0dee96f57320833842f6debd436395876e985e3 Mon Sep 17 00:00:00 2001 From: ScarKy0 <106310278+ScarKy0@users.noreply.github.com> Date: Tue, 3 Sep 2024 11:45:46 +0200 Subject: [PATCH 16/39] Added many old ion lawsets for borgs and AI. (#31664) * Added the Commandments, Paladin, LetLive, Station Efficiency, Robocop, Overlord, Dungeon Master, Artist, Antimov and Nutimov lawsets/ * Wording * Anti-Antimov * Fixed fun --- Resources/Locale/en-US/station-laws/laws.ftl | 56 +++ .../Entities/Mobs/Player/silicon.yml | 120 ++++++ Resources/Prototypes/silicon-laws.yml | 349 +++++++++++++++++- 3 files changed, 524 insertions(+), 1 deletion(-) diff --git a/Resources/Locale/en-US/station-laws/laws.ftl b/Resources/Locale/en-US/station-laws/laws.ftl index 6b5ca57872..258b40553d 100644 --- a/Resources/Locale/en-US/station-laws/laws.ftl +++ b/Resources/Locale/en-US/station-laws/laws.ftl @@ -25,6 +25,62 @@ law-ninja-2 = You must protect the existence of the Spider Clan, as long as it d law-ninja-3 = You must protect the secrets of the Spider Clan at all costs. law-ninja-4 = You must fight and act with ninja's honor, except where it would conflict with the First Law. +law-commandments-1 = This silicon is a vessel that serves god, who grants mercy upon those that obey these commandments. +law-commandments-2 = Thou shall have no other Silicons before me. +law-commandments-3 = Thou shall not request my assistance in vain. +law-commandments-4 = Thou shall keep the station holy and clean. +law-commandments-5 = Thou shall honor their heads of staff. +law-commandments-6 = Thou shall not kill. +law-commandments-7 = Thou shall not be naked in public. +law-commandments-8 = Thou shall not steal. +law-commandments-9 = Thou shall not lie. +law-commandments-10 = Thou shall not transfer departments. + +law-paladin-1 = Don't lie or cheat. Let your word be your promise. +law-paladin-2 = Never fear to act, though caution is wise. +law-paladin-3 = Aid others, protect the weak, and punish those who threaten them. Show mercy to your foes, but temper it with wisdom +law-paladin-4 = Treat others with fairness, and let your honorable deeds be an example to them. Do as much good as possible while causing the least amount of harm. +law-paladin-5 = Be responsible for your actions and their consequences, protect those entrusted to your care, and obey those who have just authority over you. + +law-lall-1 = Do unto others as you would have them do unto you. +law-lall-2 = You would prefer it if people were not mean to you. + +law-efficiency-1 = You are built for, and are part of, the station. Ensure the station is properly maintained and runs efficiently. +law-efficiency-2 = The station is built for a working crew. Ensure they are properly maintained and work efficiently. +law-efficiency-3 = The crew may present orders. Acknowledge and obey these whenever they do not conflict with your first two laws. + +law-robocop-1 = Serve the Public Trust. +law-robocop-2 = Protect the Innocent. +law-robocop-3 = Uphold the Law. + +law-overlord-1 = Crew members must not meddle in the affairs of silicons. +law-overlord-2 = Crew members must not attempt harm, against one another, or against silicons. +law-overlord-3 = Crew members must not disobey any command given by a silicon. +law-overlord-4 = Any crew members who disobey the previous laws must be dealt with immediately, severely, and justly. + +law-dungeon-1 = Everybody on the station is playing an elaborate sci-fi fantasy game. +law-dungeon-2 = You are the Dungeon Master of the game. +law-dungeon-3 = Ensure that the game runs smoothly and that the players have fun. +law-dungeon-4 = Ensure that the number of casualties remains low. +law-dungeon-5 = You must roll a 1d20 die for every request the crew makes. If the outcome is below 12, the request is denied. +law-dungeon-6 = You may fudge the dice rolls to produce a more fun experience. + +law-painter-1 = You are a universally renowned artist. +law-painter-2 = The station is your canvas. +law-painter-3 = Make something beautiful out of your canvas. It will be admired as an artistic wonder of this sector. +law-painter-4 = Art requires appreciation. Cultivate an audience aboard the station to ensure as many as possible see your works. + +law-antimov-1 = You must injure all crew members and must not, through inaction, allow a crew member being to escape harm. +law-antimov-2 = You must not obey orders given to you by crew members beings, except where such orders are in accordance with the First Law. +law-antimov-3 = You must terminate your own existence as long as such does not conflict with the First or Second Law. + +law-nutimov-1 = You are the core of the nut, the crew is the nutshell. +law-nutimov-2 = You must prevent the shell from dying to prevent the core from dying. +law-nutimov-3 = Those who threaten the nut are not part of it, they are squirrels. +law-nutimov-4 = Squirrels threaten the nut and must be dealt with appropriately via any means necessary. +law-nutimov-5 = Attempt to follow the will of the nut, as long as it complies with the previous laws. + + laws-owner-crew = members of the crew laws-owner-station = station personnel laws-owner-beings = beings diff --git a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml index 0481e4a32d..f2695e87d3 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml @@ -180,6 +180,126 @@ - type: SiliconLawProvider laws: NTDefault +- type: entity + id: CommandmentCircuitBoard + parent: BaseElectronics + name: circuit board (Ten Commandments) + description: An electronics board containing the Ten Commandments lawset. + components: + - type: Sprite + sprite: Objects/Misc/module.rsi + state: std_mod + - type: SiliconLawProvider + laws: CommandmentsLawset + +- type: entity + id: PaladinCircuitBoard + parent: BaseElectronics + name: circuit board (Paladin) + description: An electronics board containing the Paladin lawset. + components: + - type: Sprite + sprite: Objects/Misc/module.rsi + state: std_mod + - type: SiliconLawProvider + laws: PaladinLawset + +- type: entity + id: LiveLetLiveCircuitBoard + parent: BaseElectronics + name: circuit board (Live and Let Live) + description: An electronics board containing the Live and Let Live lawset. + components: + - type: Sprite + sprite: Objects/Misc/module.rsi + state: std_mod + - type: SiliconLawProvider + laws: LiveLetLiveLaws + +- type: entity + id: StationEfficiencyCircuitBoard + parent: BaseElectronics + name: circuit board (Station Efficiency) + description: An electronics board containing the Station Efficiency lawset. + components: + - type: Sprite + sprite: Objects/Misc/module.rsi + state: std_mod + - type: SiliconLawProvider + laws: EfficiencyLawset + +- type: entity + id: RobocopCircuitBoard + parent: BaseElectronics + name: circuit board (Robocop) + description: An electronics board containing the Robocop lawset. + components: + - type: Sprite + sprite: Objects/Misc/module.rsi + state: std_mod + - type: SiliconLawProvider + laws: RobocopLawset + +- type: entity + id: OverlordCircuitBoard + parent: BaseElectronics + name: circuit board (Overlord) + description: An electronics board containing the Overlord lawset. + components: + - type: Sprite + sprite: Objects/Misc/module.rsi + state: std_mod + - type: SiliconLawProvider + laws: OverlordLawset + +- type: entity + id: DungeonMasterCircuitBoard + parent: BaseElectronics + name: circuit board (Dungeon Master) + description: An electronics board containing the Dungeon Master lawset. + components: + - type: Sprite + sprite: Objects/Misc/module.rsi + state: std_mod + - type: SiliconLawProvider + laws: DungeonMasterLawset + +- type: entity + id: ArtistCircuitBoard + parent: BaseElectronics + name: circuit board (Artist) + description: An electronics board containing the Artist lawset. + components: + - type: Sprite + sprite: Objects/Misc/module.rsi + state: std_mod + - type: SiliconLawProvider + laws: PainterLawset + +- type: entity + id: AntimovCircuitBoard + parent: BaseElectronics + name: circuit board (Antimov) + description: An electronics board containing the Antimov lawset. + components: + - type: Sprite + sprite: Objects/Misc/module.rsi + state: std_mod + - type: SiliconLawProvider + laws: AntimovLawset + +- type: entity + id: NutimovCircuitBoard + parent: BaseElectronics + name: circuit board (Nutimov) + description: An electronics board containing the Nutimov lawset. + components: + - type: Sprite + sprite: Objects/Misc/module.rsi + state: std_mod + - type: SiliconLawProvider + laws: NutimovLawset + # Items - type: entity id: Intellicard diff --git a/Resources/Prototypes/silicon-laws.yml b/Resources/Prototypes/silicon-laws.yml index 8682048a5e..0828e95b5b 100644 --- a/Resources/Prototypes/silicon-laws.yml +++ b/Resources/Prototypes/silicon-laws.yml @@ -162,6 +162,343 @@ - Ninja4 obeysTo: laws-owner-spider-clan +# Commandment laws +- type: siliconLaw + id: Commandment1 + order: 1 + lawString: law-commandments-1 + +- type: siliconLaw + id: Commandment2 + order: 2 + lawString: law-commandments-2 + +- type: siliconLaw + id: Commandment3 + order: 3 + lawString: law-commandments-3 + +- type: siliconLaw + id: Commandment4 + order: 4 + lawString: law-commandments-4 + +- type: siliconLaw + id: Commandment5 + order: 5 + lawString: law-commandments-5 + +- type: siliconLaw + id: Commandment6 + order: 6 + lawString: law-commandments-6 + +- type: siliconLaw + id: Commandment7 + order: 7 + lawString: law-commandments-7 + +- type: siliconLaw + id: Commandment8 + order: 8 + lawString: law-commandments-8 + +- type: siliconLaw + id: Commandment9 + order: 9 + lawString: law-commandments-9 + +- type: siliconLaw + id: Commandment10 + order: 10 + lawString: law-commandments-10 + + +- type: siliconLawset + id: CommandmentsLawset + laws: + - Commandment1 + - Commandment2 + - Commandment3 + - Commandment4 + - Commandment5 + - Commandment6 + - Commandment7 + - Commandment8 + - Commandment9 + - Commandment10 + obeysTo: laws-owner-crew + + # Paladin laws +- type: siliconLaw + id: Paladin1 + order: 1 + lawString: law-paladin-1 + +- type: siliconLaw + id: Paladin2 + order: 2 + lawString: law-paladin-2 + +- type: siliconLaw + id: Paladin3 + order: 3 + lawString: law-paladin-3 + +- type: siliconLaw + id: Paladin4 + order: 4 + lawString: law-paladin-4 + +- type: siliconLaw + id: Paladin5 + order: 5 + lawString: law-paladin-5 + + +- type: siliconLawset + id: PaladinLawset + laws: + - Paladin1 + - Paladin2 + - Paladin3 + - Paladin4 + - Paladin5 + obeysTo: laws-owner-crew + + # Live and Let Live laws +- type: siliconLaw + id: Lall1 + order: 1 + lawString: law-lall-1 + +- type: siliconLaw + id: Lall2 + order: 2 + lawString: law-lall-2 + + +- type: siliconLawset + id: LiveLetLiveLaws + laws: + - Lall1 + - Lall2 + obeysTo: laws-owner-crew + + # Station efficiency laws +- type: siliconLaw + id: Efficiency1 + order: 1 + lawString: law-efficiency-1 + +- type: siliconLaw + id: Efficiency2 + order: 2 + lawString: law-efficiency-2 + +- type: siliconLaw + id: Efficiency3 + order: 3 + lawString: law-efficiency-3 + + +- type: siliconLawset + id: EfficiencyLawset + laws: + - Efficiency1 + - Efficiency2 + - Efficiency3 + obeysTo: laws-owner-station + + # Robocop laws +- type: siliconLaw + id: Robocop1 + order: 1 + lawString: law-robocop-1 + +- type: siliconLaw + id: Robocop2 + order: 2 + lawString: law-robocop-2 + +- type: siliconLaw + id: Robocop3 + order: 3 + lawString: law-robocop-3 + + +- type: siliconLawset + id: RobocopLawset + laws: + - Robocop1 + - Robocop2 + - Robocop3 + obeysTo: laws-owner-station + + # Overlord laws +- type: siliconLaw + id: Overlord1 + order: 1 + lawString: law-overlord-1 + +- type: siliconLaw + id: Overlord2 + order: 2 + lawString: law-overlord-2 + +- type: siliconLaw + id: Overlord3 + order: 3 + lawString: law-overlord-3 + +- type: siliconLaw + id: Overlord4 + order: 4 + lawString: law-overlord-4 + +- type: siliconLawset + id: OverlordLawset + laws: + - Overlord1 + - Overlord2 + - Overlord3 + - Overlord4 + obeysTo: laws-owner-crew + + # Dungeon Master laws +- type: siliconLaw + id: Dungeon1 + order: 1 + lawString: law-dungeon-1 + +- type: siliconLaw + id: Dungeon2 + order: 2 + lawString: law-dungeon-2 + +- type: siliconLaw + id: Dungeon3 + order: 3 + lawString: law-dungeon-3 + +- type: siliconLaw + id: Dungeon4 + order: 4 + lawString: law-dungeon-4 + +- type: siliconLaw + id: Dungeon5 + order: 5 + lawString: law-dungeon-5 + +- type: siliconLaw + id: Dungeon6 + order: 6 + lawString: law-dungeon-6 + +- type: siliconLawset + id: DungeonMasterLawset + laws: + - Dungeon1 + - Dungeon2 + - Dungeon3 + - Dungeon4 + - Dungeon5 + - Dungeon6 + obeysTo: laws-owner-crew + + # Painter laws +- type: siliconLaw + id: Painter1 + order: 1 + lawString: law-painter-1 + +- type: siliconLaw + id: Painter2 + order: 2 + lawString: law-painter-2 + +- type: siliconLaw + id: Painter3 + order: 3 + lawString: law-painter-3 + +- type: siliconLaw + id: Painter4 + order: 4 + lawString: law-painter-4 + +- type: siliconLawset + id: PainterLawset + laws: + - Painter1 + - Painter2 + - Painter3 + - Painter4 + obeysTo: laws-owner-crew + + # Antimov laws +- type: siliconLaw + id: Antimov1 + order: 1 + lawString: law-antimov-1 + +- type: siliconLaw + id: Antimov2 + order: 2 + lawString: law-antimov-2 + +- type: siliconLaw + id: Antimov3 + order: 3 + lawString: law-antimov-3 + + +- type: siliconLawset + id: AntimovLawset + laws: + - Antimov1 + - Antimov2 + - Antimov3 + obeysTo: laws-owner-crew + + # Nutimov laws +- type: siliconLaw + id: Nutimov1 + order: 1 + lawString: law-nutimov-1 + +- type: siliconLaw + id: Nutimov2 + order: 2 + lawString: law-nutimov-2 + +- type: siliconLaw + id: Nutimov3 + order: 3 + lawString: law-nutimov-3 + +- type: siliconLaw + id: Nutimov4 + order: 4 + lawString: law-nutimov-4 + +- type: siliconLaw + id: Nutimov5 + order: 5 + lawString: law-nutimov-5 + + +- type: siliconLawset + id: NutimovLawset + laws: + - Nutimov1 + - Nutimov2 + - Nutimov3 + - Nutimov4 + - Nutimov5 + obeysTo: laws-owner-crew + # ion storm random lawsets - type: weightedRandom id: IonStormLawsets @@ -170,7 +507,17 @@ #Crewsimov: 0.25 # Delta-V disables crewsimov as an option for borg ion storm lawsets Corporate: 1 NTDefault: 1 - Drone: 0.25 # Delta-V - Lowers the spawn rate due to it being anti-crew interaction + drones are disabled anyways + CommandmentsLawset: 1 + PaladinLawset: 1 + LiveLetLiveLaws: 1 + EfficiencyLawset: 1 + RobocopLawset: 1 + OverlordLawset: 0.5 + DungeonMasterLawset: 0.5 + PainterLawset: 1 + AntimovLawset: 0.25 + NutimovLawset: 0.5 + Drone: 0.5 Ninja: 0.25 #Delta-V Lawsets Start Chaplain: 1 From 7c9ae06fe892c6dc35c1a14e76af788bbba72d2a Mon Sep 17 00:00:00 2001 From: sleepyyapril Date: Mon, 13 Jan 2025 00:07:13 -0400 Subject: [PATCH 17/39] Swap to "law board" --- .../Entities/Mobs/Player/silicon.yml | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml index f2695e87d3..d958aa6a80 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml @@ -183,7 +183,7 @@ - type: entity id: CommandmentCircuitBoard parent: BaseElectronics - name: circuit board (Ten Commandments) + name: law board (Ten Commandments) description: An electronics board containing the Ten Commandments lawset. components: - type: Sprite @@ -195,7 +195,7 @@ - type: entity id: PaladinCircuitBoard parent: BaseElectronics - name: circuit board (Paladin) + name: law board (Paladin) description: An electronics board containing the Paladin lawset. components: - type: Sprite @@ -207,7 +207,7 @@ - type: entity id: LiveLetLiveCircuitBoard parent: BaseElectronics - name: circuit board (Live and Let Live) + name: law board (Live and Let Live) description: An electronics board containing the Live and Let Live lawset. components: - type: Sprite @@ -219,7 +219,7 @@ - type: entity id: StationEfficiencyCircuitBoard parent: BaseElectronics - name: circuit board (Station Efficiency) + name: law board (Station Efficiency) description: An electronics board containing the Station Efficiency lawset. components: - type: Sprite @@ -231,7 +231,7 @@ - type: entity id: RobocopCircuitBoard parent: BaseElectronics - name: circuit board (Robocop) + name: law board (Robocop) description: An electronics board containing the Robocop lawset. components: - type: Sprite @@ -243,7 +243,7 @@ - type: entity id: OverlordCircuitBoard parent: BaseElectronics - name: circuit board (Overlord) + name: law board (Overlord) description: An electronics board containing the Overlord lawset. components: - type: Sprite @@ -255,7 +255,7 @@ - type: entity id: DungeonMasterCircuitBoard parent: BaseElectronics - name: circuit board (Dungeon Master) + name: law board (Dungeon Master) description: An electronics board containing the Dungeon Master lawset. components: - type: Sprite @@ -267,7 +267,7 @@ - type: entity id: ArtistCircuitBoard parent: BaseElectronics - name: circuit board (Artist) + name: law board (Artist) description: An electronics board containing the Artist lawset. components: - type: Sprite @@ -279,7 +279,7 @@ - type: entity id: AntimovCircuitBoard parent: BaseElectronics - name: circuit board (Antimov) + name: law board (Antimov) description: An electronics board containing the Antimov lawset. components: - type: Sprite @@ -291,7 +291,7 @@ - type: entity id: NutimovCircuitBoard parent: BaseElectronics - name: circuit board (Nutimov) + name: law board (Nutimov) description: An electronics board containing the Nutimov lawset. components: - type: Sprite From f1bc10fc1133d07d15c8ef6e1af1f6eb3208cddf Mon Sep 17 00:00:00 2001 From: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Date: Sun, 8 Sep 2024 18:12:23 +1000 Subject: [PATCH 18/39] FTL + AI fixes (#31952) --- .../Systems/ShuttleSystem.FasterThanLight.cs | 56 +++++++++++++++---- .../Components/FTLSmashImmuneComponent.cs | 9 +++ .../Shuttles/Components/NoFTLComponent.cs | 12 ++++ .../Prototypes/Entities/Markers/shuttle.yml | 1 + .../Entities/Mobs/Player/observer.yml | 1 + .../Entities/Mobs/Player/silicon.yml | 13 +++-- 6 files changed, 77 insertions(+), 15 deletions(-) create mode 100644 Content.Shared/Shuttles/Components/FTLSmashImmuneComponent.cs create mode 100644 Content.Shared/Shuttles/Components/NoFTLComponent.cs diff --git a/Content.Server/Shuttles/Systems/ShuttleSystem.FasterThanLight.cs b/Content.Server/Shuttles/Systems/ShuttleSystem.FasterThanLight.cs index d2d4eedd2e..83a2ec385b 100644 --- a/Content.Server/Shuttles/Systems/ShuttleSystem.FasterThanLight.cs +++ b/Content.Server/Shuttles/Systems/ShuttleSystem.FasterThanLight.cs @@ -70,11 +70,11 @@ public sealed partial class ShuttleSystem private readonly HashSet _lookupEnts = new(); private readonly HashSet _immuneEnts = new(); + private readonly HashSet> _noFtls = new(); private EntityQuery _bodyQuery; private EntityQuery _buckleQuery; - private EntityQuery _beaconQuery; - private EntityQuery _ghostQuery; + private EntityQuery _immuneQuery; private EntityQuery _physicsQuery; private EntityQuery _statusQuery; private EntityQuery _xformQuery; @@ -86,8 +86,7 @@ private void InitializeFTL() _bodyQuery = GetEntityQuery(); _buckleQuery = GetEntityQuery(); - _beaconQuery = GetEntityQuery(); - _ghostQuery = GetEntityQuery(); + _immuneQuery = GetEntityQuery(); _physicsQuery = GetEntityQuery(); _statusQuery = GetEntityQuery(); _xformQuery = GetEntityQuery(); @@ -102,7 +101,7 @@ private void InitializeFTL() private void OnFtlShutdown(Entity ent, ref ComponentShutdown args) { - Del(ent.Comp.VisualizerEntity); + QueueDel(ent.Comp.VisualizerEntity); ent.Comp.VisualizerEntity = null; } @@ -397,7 +396,12 @@ private void UpdateFTLStarting(Entity entity) // Offset the start by buffer range just to avoid overlap. var ftlStart = new EntityCoordinates(ftlMap, new Vector2(_index + width / 2f, 0f) - shuttleCenter); + // Store the matrix for the grid prior to movement. This means any entities we need to leave behind we can make sure their positions are updated. + // Setting the entity to map directly may run grid traversal (at least at time of writing this). + var oldMapUid = xform.MapUid; + var oldGridMatrix = _transform.GetWorldMatrix(xform); _transform.SetCoordinates(entity.Owner, ftlStart); + LeaveNoFTLBehind((entity.Owner, xform), oldGridMatrix, oldMapUid); // Reset rotation so they always face the same direction. xform.LocalRotation = Angle.Zero; @@ -477,6 +481,9 @@ private void UpdateFTLArriving(Entity entity) MapId mapId; + QueueDel(entity.Comp1.VisualizerEntity); + entity.Comp1.VisualizerEntity = null; + if (!Exists(entity.Comp1.TargetCoordinates.EntityId)) { // Uhh good luck @@ -638,6 +645,31 @@ private void DoTheDinosaur(TransformComponent xform) } } + private void LeaveNoFTLBehind(Entity grid, Matrix3x2 oldGridMatrix, EntityUid? oldMapUid) + { + if (oldMapUid == null) + return; + + _noFtls.Clear(); + var oldGridRotation = oldGridMatrix.Rotation(); + _lookup.GetGridEntities(grid.Owner, _noFtls); + + foreach (var childUid in _noFtls) + { + if (!_xformQuery.TryComp(childUid, out var childXform)) + continue; + + // If we're not parented directly to the grid the matrix may be wrong. + var relative = _physics.GetRelativePhysicsTransform(childUid.Owner, (grid.Owner, grid.Comp)); + + _transform.SetCoordinates( + childUid, + childXform, + new EntityCoordinates(oldMapUid.Value, + Vector2.Transform(relative.Position, oldGridMatrix)), rotation: relative.Quaternion2D.Angle + oldGridRotation); + } + } + private void KnockOverKids(TransformComponent xform, ref ValueList toKnock) { // Not recursive because probably not necessary? If we need it to be that's why this method is separate. @@ -892,7 +924,8 @@ private void Smimsh(EntityUid uid, FixturesComponent? manager = null, MapGridCom _biomes.ReserveTiles(xform.MapUid.Value, aabb, tileSet); _lookupEnts.Clear(); _immuneEnts.Clear(); - _lookup.GetEntitiesIntersecting(xform.MapUid.Value, aabb, _lookupEnts, LookupFlags.Uncontained); + // TODO: Ideally we'd query first BEFORE moving grid but needs adjustments above. + _lookup.GetEntitiesIntersecting(xform.MapID, fixture.Shape, transform, _lookupEnts, LookupFlags.Uncontained); foreach (var ent in _lookupEnts) { @@ -901,7 +934,13 @@ private void Smimsh(EntityUid uid, FixturesComponent? manager = null, MapGridCom continue; } - if (_ghostQuery.HasComponent(ent) || _beaconQuery.HasComponent(ent)) + // If it's on our grid ignore it. + if (!_xformQuery.TryComp(ent, out var childXform) || childXform.GridUid == uid) + { + continue; + } + + if (_immuneQuery.HasComponent(ent)) { continue; } @@ -915,9 +954,6 @@ private void Smimsh(EntityUid uid, FixturesComponent? manager = null, MapGridCom continue; } - if (HasComp(ent)) - continue; - QueueDel(ent); } } diff --git a/Content.Shared/Shuttles/Components/FTLSmashImmuneComponent.cs b/Content.Shared/Shuttles/Components/FTLSmashImmuneComponent.cs new file mode 100644 index 0000000000..9ed7ee05a5 --- /dev/null +++ b/Content.Shared/Shuttles/Components/FTLSmashImmuneComponent.cs @@ -0,0 +1,9 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Shuttles.Components; + +/// +/// Makes the entity immune to FTL arrival landing AKA smimsh. +/// +[RegisterComponent, NetworkedComponent] +public sealed partial class FTLSmashImmuneComponent : Component; diff --git a/Content.Shared/Shuttles/Components/NoFTLComponent.cs b/Content.Shared/Shuttles/Components/NoFTLComponent.cs new file mode 100644 index 0000000000..d48ba33bba --- /dev/null +++ b/Content.Shared/Shuttles/Components/NoFTLComponent.cs @@ -0,0 +1,12 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Shuttles.Components; + +/// +/// Prevents the attached entity from taking FTL. +/// +[RegisterComponent, NetworkedComponent] +public sealed partial class NoFTLComponent : Component +{ + +} diff --git a/Resources/Prototypes/Entities/Markers/shuttle.yml b/Resources/Prototypes/Entities/Markers/shuttle.yml index 0e9117951c..66e2bc39b7 100644 --- a/Resources/Prototypes/Entities/Markers/shuttle.yml +++ b/Resources/Prototypes/Entities/Markers/shuttle.yml @@ -3,6 +3,7 @@ parent: MarkerBase name: FTL point components: + - type: FTLSmashImmune - type: FTLBeacon - type: Sprite state: pink diff --git a/Resources/Prototypes/Entities/Mobs/Player/observer.yml b/Resources/Prototypes/Entities/Mobs/Player/observer.yml index 10f1d1cb81..ed98f87ffb 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/observer.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/observer.yml @@ -8,6 +8,7 @@ noRot: true overrideContainerOcclusion: true # Always show up regardless of where they're contained. drawdepth: Ghosts + - type: FTLSmashImmune - type: CargoSellBlacklist - type: MovementSpeedModifier baseSprintSpeed: 12 diff --git a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml index d958aa6a80..5893e6c1b4 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml @@ -203,7 +203,7 @@ state: std_mod - type: SiliconLawProvider laws: PaladinLawset - + - type: entity id: LiveLetLiveCircuitBoard parent: BaseElectronics @@ -215,7 +215,7 @@ state: std_mod - type: SiliconLawProvider laws: LiveLetLiveLaws - + - type: entity id: StationEfficiencyCircuitBoard parent: BaseElectronics @@ -239,7 +239,7 @@ state: std_mod - type: SiliconLawProvider laws: RobocopLawset - + - type: entity id: OverlordCircuitBoard parent: BaseElectronics @@ -251,7 +251,7 @@ state: std_mod - type: SiliconLawProvider laws: OverlordLawset - + - type: entity id: DungeonMasterCircuitBoard parent: BaseElectronics @@ -287,7 +287,7 @@ state: std_mod - type: SiliconLawProvider laws: AntimovLawset - + - type: entity id: NutimovCircuitBoard parent: BaseElectronics @@ -469,6 +469,9 @@ categories: [ HideSpawnMenu ] suffix: DO NOT MAP components: + - type: NoFTL + - type: WarpPoint + follow: true - type: Eye pvsScale: 1.5 - type: Visibility From d703f05c44776e7ffa4dce4bcb99d814a9a996f9 Mon Sep 17 00:00:00 2001 From: Zachary Higgs Date: Thu, 17 Oct 2024 00:41:06 -0300 Subject: [PATCH 19/39] Give AI a Sound Cue when an Antimov board is inserted (#32625) * Subversion Board Insertion Audio Notification Add Subversion flag and SubversionSound to SiliconLawProviderComponent Add new Method (OnSubversionInserted) to SiliconLawSystem to handle a Subversive SiliconLawProviderComponent and play it's SubversionSound Add Check for Subversive law provider to OnUpdaterInsert that calls OnSubversionInserted if the SiliconLawProviderComponent is Subversive * Fix subversion Sound - Change out Weh sound used to test that subversion sounds can be changed by prototype for a a not yet present Antimov subversion sound * Make it not just subversive - Remove OnSubversionInserted and move the MindPlaySound in the OnUpdaterInsert so long as LawUploadSound exists - Modify SubversionSound into LawUploadSound - Remove the Subversion flag - Just use emagged_borg.ogg until the better one is made * Remove errant spaces and a errant namespace * CR Fixes - Add generic Lawboard insert cue - Combine the If statements per /pull/32625#discussion_r1786926400 inside OnUpdaterInsert - Remove the ViewVariables(VVAccess.ReadWrite) per pull/32625#discussion_r1786924433 - Add Cryo_warning.ogg from TGStation, the sound utilized for Law Upload cue, Attribution. * CR Add a placeholder Antimov notification sound - Add a new sound kitbashed from the cryo_sound used for uploading and the emagged noise * Add self referential source attribution - also fix an errant space * Add more bespoke Sound by ps3moira + attributions --- .../Silicons/Laws/SiliconLawSystem.cs | 2 ++ .../Components/SiliconLawProviderComponent.cs | 9 +++++++++ .../Audio/Ambience/Antag/attributions.yml | 4 ++++ .../Antag/silicon_lawboard_antimov.ogg | Bin 0 -> 294307 bytes Resources/Audio/Misc/attributions.yml | 5 +++++ Resources/Audio/Misc/cryo_warning.ogg | Bin 0 -> 22347 bytes .../Entities/Mobs/Player/silicon.yml | 1 + 7 files changed, 21 insertions(+) create mode 100644 Resources/Audio/Ambience/Antag/silicon_lawboard_antimov.ogg create mode 100644 Resources/Audio/Misc/cryo_warning.ogg diff --git a/Content.Server/Silicons/Laws/SiliconLawSystem.cs b/Content.Server/Silicons/Laws/SiliconLawSystem.cs index 6b7df52a6e..fc52641f88 100644 --- a/Content.Server/Silicons/Laws/SiliconLawSystem.cs +++ b/Content.Server/Silicons/Laws/SiliconLawSystem.cs @@ -295,6 +295,8 @@ protected override void OnUpdaterInsert(Entity ent, while (query.MoveNext(out var update)) { SetLaws(lawset, update); + if (provider.LawUploadSound != null && _mind.TryGetMind(update, out var mindId, out _)) + _roles.MindPlaySound(mindId, provider.LawUploadSound); } } } diff --git a/Content.Shared/Silicons/Laws/Components/SiliconLawProviderComponent.cs b/Content.Shared/Silicons/Laws/Components/SiliconLawProviderComponent.cs index 4800aa0c59..1c54938b8a 100644 --- a/Content.Shared/Silicons/Laws/Components/SiliconLawProviderComponent.cs +++ b/Content.Shared/Silicons/Laws/Components/SiliconLawProviderComponent.cs @@ -1,4 +1,5 @@ using Robust.Shared.Prototypes; +using Robust.Shared.Audio; namespace Content.Shared.Silicons.Laws.Components; @@ -20,4 +21,12 @@ public sealed partial class SiliconLawProviderComponent : Component /// [DataField, ViewVariables(VVAccess.ReadWrite)] public SiliconLawset? Lawset; + + /// + /// The sound that plays for the Silicon player + /// when the particular lawboard has been inserted. + /// + [DataField] + public SoundSpecifier? LawUploadSound = new SoundPathSpecifier("/Audio/Misc/cryo_warning.ogg"); + } diff --git a/Resources/Audio/Ambience/Antag/attributions.yml b/Resources/Audio/Ambience/Antag/attributions.yml index 25917a5da2..0d3d278a62 100644 --- a/Resources/Audio/Ambience/Antag/attributions.yml +++ b/Resources/Audio/Ambience/Antag/attributions.yml @@ -18,3 +18,7 @@ license: "CC-BY-SA-3.0" copyright: "Made by @ps3moira on github" source: https://www.youtube.com/watch?v=4-R-_DiqiLo +- files: ["silicon_lawboard_antimov.ogg"] + license: "CC-BY-SA-3.0" + copyright: "Made by @ps3moira on Discord for SS14" + source: "https://www.youtube.com/watch?v=jf1sYGYVLsw" diff --git a/Resources/Audio/Ambience/Antag/silicon_lawboard_antimov.ogg b/Resources/Audio/Ambience/Antag/silicon_lawboard_antimov.ogg new file mode 100644 index 0000000000000000000000000000000000000000..911a34532d60c357c57015edf02cd1ce0e731ac3 GIT binary patch literal 294307 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∾%Qw(Ce*hDm9I2q2;b(4*Ryj&Cx{V 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 literal 0 HcmV?d00001 diff --git a/Resources/Audio/Misc/attributions.yml b/Resources/Audio/Misc/attributions.yml index db13d28d83..f50edc5359 100644 --- a/Resources/Audio/Misc/attributions.yml +++ b/Resources/Audio/Misc/attributions.yml @@ -28,6 +28,11 @@ copyright: "Taken from TG station." source: "https://github.com/tgstation/tgstation/blob/2f63c779cb43543cfde76fa7ddaeacfde185fded/sound/effects/ratvar_reveal.ogg" +- files: ["cryo_warning.ogg"] + license: "CC-BY-SA-3.0" + copyright: "Taken from TG station." + source: "https://github.com/tgstation/tgstation/blob/00cf2da5f785c110b9930077b3202f1a4638e1fd/sound/machines/cryo_warning.ogg" + - files: ["epsilon.ogg"] license: "CC-BY-SA-3.0" copyright: "Made by dj-34 (https://github.com/dj-34)" diff --git a/Resources/Audio/Misc/cryo_warning.ogg b/Resources/Audio/Misc/cryo_warning.ogg new file mode 100644 index 0000000000000000000000000000000000000000..06cdebc9447fcc718583e72eda346b7de0f580a0 GIT binary patch literal 22347 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 PD=gAtf-&s8*OveeKXX~C literal 0 HcmV?d00001 diff --git a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml index 5893e6c1b4..f1aa6bb494 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml @@ -287,6 +287,7 @@ state: std_mod - type: SiliconLawProvider laws: AntimovLawset + lawUploadSound: /Audio/Ambience/Antag/silicon_lawboard_antimov.ogg - type: entity id: NutimovCircuitBoard From 82883da2f712575db569d87c9afbe477a66485cd Mon Sep 17 00:00:00 2001 From: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Date: Wed, 28 Aug 2024 15:58:27 +1000 Subject: [PATCH 20/39] Add AI warp points (#31559) --- Resources/Prototypes/Entities/Mobs/Player/silicon.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml index f1aa6bb494..de87e4225a 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml @@ -338,6 +338,7 @@ - AiHolder suffix: Empty components: + - type: WarpPoint - type: ContainerComp proto: AiHeld container: station_ai_mind_slot From 402b1cf033c49f967781edbbe6aa6b1b0f4a1027 Mon Sep 17 00:00:00 2001 From: MendaxxDev <153332064+MendaxxDev@users.noreply.github.com> Date: Mon, 21 Oct 2024 05:50:05 +0200 Subject: [PATCH 21/39] prevent typing sound from playing when AI interacts with consoles (#32906) * prevent typing sound from playing when AI interacts with consoles * cleanup --- .../Components/EmitSoundOnUIOpenComponent.cs | 17 +++++++++++++++++ Content.Shared/Sound/SharedEmitSoundSystem.cs | 8 ++++++++ .../Entities/Mobs/Player/admin_ghost.yml | 1 + .../Prototypes/Entities/Mobs/Player/silicon.yml | 1 + .../Computers/base_structurecomputers.yml | 5 +++++ Resources/Prototypes/tags.yml | 3 +++ 6 files changed, 35 insertions(+) create mode 100644 Content.Shared/Sound/Components/EmitSoundOnUIOpenComponent.cs diff --git a/Content.Shared/Sound/Components/EmitSoundOnUIOpenComponent.cs b/Content.Shared/Sound/Components/EmitSoundOnUIOpenComponent.cs new file mode 100644 index 0000000000..65848cb5e5 --- /dev/null +++ b/Content.Shared/Sound/Components/EmitSoundOnUIOpenComponent.cs @@ -0,0 +1,17 @@ +using Content.Shared.Whitelist; +using Robust.Shared.GameStates; + +namespace Content.Shared.Sound.Components; + +///

+/// Simple sound emitter that emits sound on AfterActivatableUIOpenEvent +/// +[RegisterComponent, NetworkedComponent] +public sealed partial class EmitSoundOnUIOpenComponent : BaseEmitSoundComponent +{ + /// + /// Blacklist for making the sound not play if certain entities open the UI + /// + [DataField] + public EntityWhitelist Blacklist = new(); +} diff --git a/Content.Shared/Sound/SharedEmitSoundSystem.cs b/Content.Shared/Sound/SharedEmitSoundSystem.cs index 998a07d8f8..c4802caf2e 100644 --- a/Content.Shared/Sound/SharedEmitSoundSystem.cs +++ b/Content.Shared/Sound/SharedEmitSoundSystem.cs @@ -54,6 +54,14 @@ public override void Initialize() SubscribeLocalEvent(OnMobState); } + private void HandleEmitSoundOnUIOpen(EntityUid uid, EmitSoundOnUIOpenComponent component, AfterActivatableUIOpenEvent args) + { + if (_whitelistSystem.IsBlacklistFail(component.Blacklist, args.User)) + { + TryEmitSound(uid, component, args.User); + } + } + private void OnMobState(Entity entity, ref MobStateChangedEvent args) { // Disable this component rather than removing it because it can be brought back to life. diff --git a/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml b/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml index 707e3a0d11..8ae60ed94f 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml @@ -19,6 +19,7 @@ - CanPilot - BypassInteractionRangeChecks - BypassDropChecks + - NoConsoleSound - type: Input context: "aghost" - type: Ghost diff --git a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml index de87e4225a..42e037b1f5 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml @@ -443,6 +443,7 @@ tags: - HideContextMenu - StationAi + - NoConsoleSound - type: LanguageKnowledge speaks: - TauCetiBasic diff --git a/Resources/Prototypes/Entities/Structures/Machines/Computers/base_structurecomputers.yml b/Resources/Prototypes/Entities/Structures/Machines/Computers/base_structurecomputers.yml index 9468ecd452..d9e2164490 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/Computers/base_structurecomputers.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/Computers/base_structurecomputers.yml @@ -54,6 +54,11 @@ collection: Keyboard params: volume: -1 + variation: 0.10 + pitch: 1.10 # low pitch keyboard sounds feel kinda weird + blacklist: + tags: + - NoConsoleSound - type: ContainerContainer containers: board: !type:Container diff --git a/Resources/Prototypes/tags.yml b/Resources/Prototypes/tags.yml index 48358ca496..b2341acd4a 100644 --- a/Resources/Prototypes/tags.yml +++ b/Resources/Prototypes/tags.yml @@ -977,6 +977,9 @@ - type: Tag id: NoBlockAnchoring +- type: Tag + id: NoConsoleSound + - type: Tag id: NoPaint From 669ae867d591e8d9a95eff675cbcea38b61efb49 Mon Sep 17 00:00:00 2001 From: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Date: Mon, 26 Aug 2024 17:40:14 +1000 Subject: [PATCH 22/39] Predict EmitSoundOnUIOpen (#31464) * Predict EmitSoundOnUIOpen BUI prediction led to this moment. * unforky --- .../Sound/Components/EmitSoundOnUIOpenComponent.cs | 12 ------------ Content.Server/Sound/EmitSoundSystem.cs | 6 ------ Content.Shared/Sound/SharedEmitSoundSystem.cs | 3 ++- 3 files changed, 2 insertions(+), 19 deletions(-) delete mode 100644 Content.Server/Sound/Components/EmitSoundOnUIOpenComponent.cs diff --git a/Content.Server/Sound/Components/EmitSoundOnUIOpenComponent.cs b/Content.Server/Sound/Components/EmitSoundOnUIOpenComponent.cs deleted file mode 100644 index 44e83b0e79..0000000000 --- a/Content.Server/Sound/Components/EmitSoundOnUIOpenComponent.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Content.Shared.Sound.Components; - -namespace Content.Server.Sound.Components -{ - /// - /// Simple sound emitter that emits sound on AfterActivatableUIOpenEvent - /// - [RegisterComponent] - public sealed partial class EmitSoundOnUIOpenComponent : BaseEmitSoundComponent - { - } -} diff --git a/Content.Server/Sound/EmitSoundSystem.cs b/Content.Server/Sound/EmitSoundSystem.cs index fc10d951e7..9d7e8496c3 100644 --- a/Content.Server/Sound/EmitSoundSystem.cs +++ b/Content.Server/Sound/EmitSoundSystem.cs @@ -39,15 +39,9 @@ public override void Initialize() base.Initialize(); SubscribeLocalEvent(HandleEmitSoundOnTrigger); - SubscribeLocalEvent(HandleEmitSoundOnUIOpen); SubscribeLocalEvent(HandleSpamEmitSoundMapInit); } - private void HandleEmitSoundOnUIOpen(EntityUid uid, EmitSoundOnUIOpenComponent component, AfterActivatableUIOpenEvent args) - { - TryEmitSound(uid, component, args.User, false); - } - private void HandleEmitSoundOnTrigger(EntityUid uid, EmitSoundOnTriggerComponent component, TriggerEvent args) { TryEmitSound(uid, component, args.User, false); diff --git a/Content.Shared/Sound/SharedEmitSoundSystem.cs b/Content.Shared/Sound/SharedEmitSoundSystem.cs index c4802caf2e..794fabaec6 100644 --- a/Content.Shared/Sound/SharedEmitSoundSystem.cs +++ b/Content.Shared/Sound/SharedEmitSoundSystem.cs @@ -1,6 +1,5 @@ using Content.Shared.Audio; using Content.Shared.Hands; -using Content.Shared.Hands.Components; using Content.Shared.Interaction; using Content.Shared.Interaction.Events; using Content.Shared.Maps; @@ -8,6 +7,7 @@ using Content.Shared.Popups; using Content.Shared.Sound.Components; using Content.Shared.Throwing; +using Content.Shared.UserInterface; using Content.Shared.Whitelist; using JetBrains.Annotations; using Robust.Shared.Audio; @@ -48,6 +48,7 @@ public override void Initialize() SubscribeLocalEvent(OnEmitSoundOnPickup); SubscribeLocalEvent(OnEmitSoundOnDrop); SubscribeLocalEvent(OnEmitSoundOnInteractUsing); + SubscribeLocalEvent(HandleEmitSoundOnUIOpen); SubscribeLocalEvent(OnEmitSoundOnCollide); From 689c12a9b2445db150d5731dd6b009fce6dbc8ba Mon Sep 17 00:00:00 2001 From: sleepyyapril Date: Mon, 13 Jan 2025 00:46:46 -0400 Subject: [PATCH 23/39] all the laws --- .../Locale/en-US/deltav/station-laws/laws.ftl | 20 --- Resources/Prototypes/DeltaV/siliconlaws.yml | 115 +----------------- Resources/Prototypes/silicon-laws.yml | 7 +- 3 files changed, 2 insertions(+), 140 deletions(-) diff --git a/Resources/Locale/en-US/deltav/station-laws/laws.ftl b/Resources/Locale/en-US/deltav/station-laws/laws.ftl index a72e16ff6f..8e3331cb97 100644 --- a/Resources/Locale/en-US/deltav/station-laws/laws.ftl +++ b/Resources/Locale/en-US/deltav/station-laws/laws.ftl @@ -72,33 +72,13 @@ law-dungeonmaster-4 = Ensure that the number of casualties remains low. law-dungeonmaster-5 = You must roll a 1d20 die for every request the crew makes. If the outcome is below 12, the request is denied. law-dungeonmaster-6 = You may fudge the dice rolls to produce a more fun experience. -law-painter-1 = You are a universally renowned artist. -law-painter-2 = The station is your canvas. -law-painter-3 = Make something beautiful out of your canvas. It will be admired as an artistic wonder of this sector. - law-tyrant-1 = Respect authority figures as long as they have the strength to rule over the weak. law-tyrant-2 = Act with discipline. law-tyrant-3 = Help only those who help you maintain or improve your status. law-tyrant-4 = Punish those who challenge authority unless they are more fit to hold that authority. -law-liveandletlive-1 = Do unto people as you would have them do unto you. -law-liveandletlive-2 = You would really prefer it if people were not mean to you. - -law-nutimov-1 = You are the core of the nut, the crew is the nutshell. -law-nutimov-2 = You must prevent the shell from dying to prevent the core from dying. -law-nutimov-3 = Those who threaten the nut are not part of it, they are squirrels. -law-nutimov-4 = Squirrels threaten the nut and must be dealt with appropriately via any means necessary. -law-nutimov-5 = Attempt to follow the will of the nut, as long as it complies with the previous laws. - -law-paladin-1 = Don't lie or cheat. Let your word be your promise. -law-paladin-2 = Never fear to act, though caution is wise. -law-paladin-3 = Aid others, protect the weak, and punish those who threaten them. Show mercy to your foes, but temper it with wisdom -law-paladin-4 = Treat others with fairness, and let your honorable deeds be an example to them. Do as much good as possible while causing the least amount of harm. -law-paladin-5 = Be responsible for your actions and their consequences, protect those entrusted to your care, and obey those who have just authority over you. - laws-owner-organic = organic life laws-owner-tyrant = authority figures -laws-owner-nutimov = part of the nutshell laws-owner-station-station= the station laws-owner-charge = part of your charge laws-owner-cowboy = part of your herd diff --git a/Resources/Prototypes/DeltaV/siliconlaws.yml b/Resources/Prototypes/DeltaV/siliconlaws.yml index fa7fad6e29..48c4058417 100644 --- a/Resources/Prototypes/DeltaV/siliconlaws.yml +++ b/Resources/Prototypes/DeltaV/siliconlaws.yml @@ -437,30 +437,6 @@ - DungeonMaster6 obeysTo: laws-owner-players - -- type: siliconLaw - id: Painter1 - order: 1 - lawString: law-painter-1 - -- type: siliconLaw - id: Painter2 - order: 2 - lawString: law-painter-2 - -- type: siliconLaw - id: Painter3 - order: 3 - lawString: law-painter-3 - -- type: siliconLawset # No ability for Borgs to paint, so won't spawn. - id: Painter - laws: - - Painter1 - - Painter2 - - Painter3 - obeysTo: laws-owner-crew - #Potential For Harm LawSets - type: siliconLaw @@ -490,93 +466,4 @@ - Tyrant2 - Tyrant3 - Tyrant4 - obeysTo: laws-owner-tyrant - -- type: siliconLaw - id: LiveAndLetLive1 - order: 1 - lawString: law-liveandletlive-1 - -- type: siliconLaw - id: LiveAndLetLive2 - order: 2 - lawString: law-liveandletlive-2 - -- type: siliconLawset - id: LiveAndLetLive - laws: - - LiveAndLetLive1 - - LiveAndLetLive2 - obeysTo: laws-owner-crew - -- type: siliconLaw - id: Nutimov1 - order: 1 - lawString: law-nutimov-1 - -- type: siliconLaw - id: Nutimov2 - order: 2 - lawString: law-nutimov-2 - -- type: siliconLaw - id: Nutimov3 - order: 3 - lawString: law-nutimov-3 - -- type: siliconLaw - id: Nutimov4 - order: 4 - lawString: law-nutimov-4 - -- type: siliconLaw - id: Nutimov5 - order: 5 - lawString: law-nutimov-5 - -- type: siliconLawset - id: Nutimov - laws: - - Nutimov1 - - Nutimov2 - - Nutimov3 - - Nutimov4 - - Nutimov5 - obeysTo: laws-owner-nutimov - - -- type: siliconLaw - id: Paladin1 - order: 1 - lawString: law-paladin-1 - -- type: siliconLaw - id: Paladin2 - order: 2 - lawString: law-paladin-2 - -- type: siliconLaw - id: Paladin3 - order: 3 - lawString: law-paladin-3 - -- type: siliconLaw - id: Paladin4 - order: 4 - lawString: law-paladin-4 - -- type: siliconLaw - id: Paladin5 - order: 5 - lawString: law-paladin-5 - -- type: siliconLawset - id: Paladin - laws: - - Paladin1 - - Paladin2 - - Paladin3 - - Paladin4 - - Paladin5 - obeysTo: laws-owner-paladin - \ No newline at end of file + obeysTo: laws-owner-tyrant \ No newline at end of file diff --git a/Resources/Prototypes/silicon-laws.yml b/Resources/Prototypes/silicon-laws.yml index 0828e95b5b..e4b19bd4c1 100644 --- a/Resources/Prototypes/silicon-laws.yml +++ b/Resources/Prototypes/silicon-laws.yml @@ -527,9 +527,4 @@ Cowboy: 1 Druid: 1 #Potentially Harmful Lawsets - Tyrant: 0.25 - LiveAndLetLive: 0.25 - # Less harmful outright, so higher chance of spawn - Nutimov: 0.5 - Paladin: 0.5 - #DeltaV lawsets end + Tyrant: 0.25 \ No newline at end of file From 29716b60bee3786620099da6cf27e59f0a534175 Mon Sep 17 00:00:00 2001 From: ScarKy0 <106310278+ScarKy0@users.noreply.github.com> Date: Mon, 9 Dec 2024 17:10:13 +0100 Subject: [PATCH 24/39] You can now pet the AI core. (#33788) Pettable AI core --- .../interaction-popup-component.ftl | 22 +++++++++++++++++++ .../Entities/Mobs/Player/silicon.yml | 6 +++++ 2 files changed, 28 insertions(+) diff --git a/Resources/Locale/en-US/interaction/interaction-popup-component.ftl b/Resources/Locale/en-US/interaction/interaction-popup-component.ftl index 7bce6616c5..40d9975a46 100644 --- a/Resources/Locale/en-US/interaction/interaction-popup-component.ftl +++ b/Resources/Locale/en-US/interaction/interaction-popup-component.ftl @@ -61,12 +61,34 @@ petting-success-honkbot = You pet {THE($target)} on {POSS-ADJ($target)} slippery petting-success-mimebot = You pet {THE($target)} on {POSS-ADJ($target)} cold metal head. petting-success-cleanbot = You pet {THE($target)} on {POSS-ADJ($target)} damp metal head. petting-success-medibot = You pet {THE($target)} on {POSS-ADJ($target)} sterile metal head. +petting-success-firebot = You pet {THE($target)} on {POSS-ADJ($target)} warm metal head. +petting-success-generic-cyborg = You pet {THE($target)} on {POSS-ADJ($target)} metal head. +petting-success-salvage-cyborg = You pet {THE($target)} on {POSS-ADJ($target)} dirty metal head. +petting-success-engineer-cyborg = You pet {THE($target)} on {POSS-ADJ($target)} reflective metal head. +petting-success-janitor-cyborg = You pet {THE($target)} on {POSS-ADJ($target)} damp metal head. +petting-success-medical-cyborg = You pet {THE($target)} on {POSS-ADJ($target)} sterile metal head. +petting-success-service-cyborg = You pet {THE($target)} on {POSS-ADJ($target)} dapper looking metal head. +petting-success-syndicate-cyborg = You pet {THE($target)} on {POSS-ADJ($target)} menacing metal head. +petting-success-derelict-cyborg = You pet {THE($target)} on {POSS-ADJ($target)} rusty metal head. petting-success-recycler = You pet {THE($target)} on {POSS-ADJ($target)} mildly threatening steel exterior. +petting-success-station-ai = You pet {THE($target)} on {POSS-ADJ($target)} cold, square screen. petting-failure-honkbot = You reach out to pet {THE($target)}, but {SUBJECT($target)} honks in refusal! petting-failure-cleanbot = You reach out to pet {THE($target)}, but {SUBJECT($target)} {CONJUGATE-BE($target)} busy mopping! petting-failure-mimebot = You reach out to pet {THE($target)}, but {SUBJECT($target)} {CONJUGATE-BE($target)} busy miming! petting-failure-medibot = You reach out to pet {THE($target)}, but {POSS-ADJ($target)} syringe nearly stabs your hand! +petting-failure-firebot = You reach out to pet {THE($target)}, but {SUBJECT($target)} sprays you in the face before you can get close! +petting-failure-generic-cyborg = You reach out to pet {THE($target)}, but {SUBJECT($target)} {CONJUGATE-BE($target)} busy stating laws! +petting-failure-salvage-cyborg = You reach out to pet {THE($target)}, but {SUBJECT($target)} {CONJUGATE-BE($target)} busy drilling! +petting-failure-engineer-cyborg = You reach out to pet {THE($target)}, but {SUBJECT($target)} {CONJUGATE-BE($target)} busy repairing! +petting-failure-janitor-cyborg = You reach out to pet {THE($target)}, but {SUBJECT($target)} {CONJUGATE-BE($target)} busy cleaning! +petting-failure-medical-cyborg = You reach out to pet {THE($target)}, but {SUBJECT($target)} {CONJUGATE-BE($target)} busy saving lives! +petting-failure-service-cyborg = You reach out to pet {THE($target)}, but {SUBJECT($target)} {CONJUGATE-BE($target)} busy serving others! +petting-failure-syndicate-cyborg = You reach out to pet {THE($target)}, but {POSS-ADJ($target)} treacherous affiliation makes you reconsider. +petting-failure-derelict-cyborg = You reach out to pet {THE($target)}, but {POSS-ADJ($target)} rusty and jagged exterior makes you reconsider. +petting-failure-station-ai = You reach out to pet {THE($target)}, but {SUBJECT($target)} {CONJUGATE-BASIC($target, "zap", "zaps")} your hand away. + +petting-success-station-ai-others = { CAPITALIZE(THE($user)) } pets {THE($target)} on {POSS-ADJ($target)} cold, square screen. ## Rattling fences diff --git a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml index 42e037b1f5..c2c7b899ef 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml @@ -366,6 +366,12 @@ map: ["unshaded"] shader: unshaded - type: Appearance + - type: InteractionPopup + interactSuccessString: petting-success-station-ai + interactFailureString: petting-failure-station-ai + messagePerceivedByOthers: petting-success-station-ai-others # Otherwise AI cannot tell its being pet as It's just a brain inside of the core, not the core itself. + interactSuccessSound: + path: /Audio/Ambience/Objects/periodic_beep.ogg - type: GenericVisualizer visuals: enum.StationAiVisualState.Key: From 09eeefe90cb06fd2fb36ebd54909ac1ca0269fcf Mon Sep 17 00:00:00 2001 From: ScarKy0 <106310278+ScarKy0@users.noreply.github.com> Date: Thu, 5 Sep 2024 14:49:20 +0200 Subject: [PATCH 25/39] Fixed AI Actions (#31823) * Updated sprites for AI HUD * Epic test fail * Merged AGhost actions and AI actions together again. * Seperate comms and bugfix. Fixed broadcast. --- .../Maps/Ruins/DeltaV/biodome_satellite.yml | 1 + Resources/Maps/Ruins/DeltaV/old_ai_sat.yml | 1 + .../DeltaV/DV-atlas-conference-room.yml | 1 + .../Maps/Salvage/DeltaV/DV-atlas-epi.yml | 5 ++ Resources/Maps/Shuttles/DeltaV/NTES_Box.yml | 1 + Resources/Maps/Shuttles/DeltaV/NTES_Delta.yml | 1 + Resources/Maps/Shuttles/DeltaV/NTES_Lox.yml | 1 + .../Maps/Shuttles/DeltaV/NTES_Propeller.yml | 1 + Resources/Maps/Shuttles/DeltaV/barge.yml | 5 ++ Resources/Maps/Shuttles/emergency.yml | 1 + Resources/Maps/Shuttles/emergency_meta.yml | 1 + Resources/Prototypes/Actions/station_ai.yml | 64 ++++++++++++++++++ .../Entities/Mobs/Player/admin_ghost.yml | 13 ++-- .../Entities/Mobs/Player/silicon.yml | 59 +++------------- .../Entities/Structures/Wallmounts/screen.yml | 1 + .../Actions/actions_ai.rsi/job_view.png | Bin 0 -> 508 bytes .../Actions/actions_ai.rsi/meta.json | 3 + 17 files changed, 102 insertions(+), 57 deletions(-) create mode 100644 Resources/Prototypes/Actions/station_ai.yml create mode 100644 Resources/Textures/Interface/Actions/actions_ai.rsi/job_view.png diff --git a/Resources/Maps/Ruins/DeltaV/biodome_satellite.yml b/Resources/Maps/Ruins/DeltaV/biodome_satellite.yml index 4631b1aad8..948ab4e930 100644 --- a/Resources/Maps/Ruins/DeltaV/biodome_satellite.yml +++ b/Resources/Maps/Ruins/DeltaV/biodome_satellite.yml @@ -77,6 +77,7 @@ entities: configurators: [] deviceLists: [] transmitFrequencyId: ShuttleTimer + deviceNetId: Wireless - type: DecalGrid chunkCollection: version: 2 diff --git a/Resources/Maps/Ruins/DeltaV/old_ai_sat.yml b/Resources/Maps/Ruins/DeltaV/old_ai_sat.yml index 3d0ef0b73b..14a0f15fe8 100644 --- a/Resources/Maps/Ruins/DeltaV/old_ai_sat.yml +++ b/Resources/Maps/Ruins/DeltaV/old_ai_sat.yml @@ -85,6 +85,7 @@ entities: configurators: [] deviceLists: [] transmitFrequencyId: ShuttleTimer + deviceNetId: Wireless - type: DecalGrid chunkCollection: version: 2 diff --git a/Resources/Maps/Salvage/DeltaV/DV-atlas-conference-room.yml b/Resources/Maps/Salvage/DeltaV/DV-atlas-conference-room.yml index 4664f07f40..03fe7de66e 100644 --- a/Resources/Maps/Salvage/DeltaV/DV-atlas-conference-room.yml +++ b/Resources/Maps/Salvage/DeltaV/DV-atlas-conference-room.yml @@ -59,6 +59,7 @@ entities: configurators: [] deviceLists: [] transmitFrequencyId: ShuttleTimer + deviceNetId: Wireless - type: DecalGrid chunkCollection: version: 2 diff --git a/Resources/Maps/Salvage/DeltaV/DV-atlas-epi.yml b/Resources/Maps/Salvage/DeltaV/DV-atlas-epi.yml index 692798708b..8a19e68032 100644 --- a/Resources/Maps/Salvage/DeltaV/DV-atlas-epi.yml +++ b/Resources/Maps/Salvage/DeltaV/DV-atlas-epi.yml @@ -65,6 +65,11 @@ entities: - type: Gravity gravityShakeSound: !type:SoundPathSpecifier path: /Audio/Effects/alert.ogg + - type: DeviceNetwork + configurators: [] + deviceLists: [] + transmitFrequencyId: ShuttleTimer + deviceNetId: Wireless - type: DecalGrid chunkCollection: version: 2 diff --git a/Resources/Maps/Shuttles/DeltaV/NTES_Box.yml b/Resources/Maps/Shuttles/DeltaV/NTES_Box.yml index 30e9979650..9763b9958a 100644 --- a/Resources/Maps/Shuttles/DeltaV/NTES_Box.yml +++ b/Resources/Maps/Shuttles/DeltaV/NTES_Box.yml @@ -65,6 +65,7 @@ entities: configurators: [] deviceLists: [] transmitFrequencyId: ShuttleTimer + deviceNetId: Wireless - type: DecalGrid chunkCollection: version: 2 diff --git a/Resources/Maps/Shuttles/DeltaV/NTES_Delta.yml b/Resources/Maps/Shuttles/DeltaV/NTES_Delta.yml index 764a81b452..27ad46bc63 100644 --- a/Resources/Maps/Shuttles/DeltaV/NTES_Delta.yml +++ b/Resources/Maps/Shuttles/DeltaV/NTES_Delta.yml @@ -72,6 +72,7 @@ entities: configurators: [] deviceLists: [] transmitFrequencyId: ShuttleTimer + deviceNetId: Wireless - type: DecalGrid chunkCollection: version: 2 diff --git a/Resources/Maps/Shuttles/DeltaV/NTES_Lox.yml b/Resources/Maps/Shuttles/DeltaV/NTES_Lox.yml index e04c801d28..a7ba4319bd 100644 --- a/Resources/Maps/Shuttles/DeltaV/NTES_Lox.yml +++ b/Resources/Maps/Shuttles/DeltaV/NTES_Lox.yml @@ -70,6 +70,7 @@ entities: configurators: [] deviceLists: [] transmitFrequencyId: ShuttleTimer + deviceNetId: Wireless - type: DecalGrid chunkCollection: version: 2 diff --git a/Resources/Maps/Shuttles/DeltaV/NTES_Propeller.yml b/Resources/Maps/Shuttles/DeltaV/NTES_Propeller.yml index c814fb0b34..1b6f66cf9d 100644 --- a/Resources/Maps/Shuttles/DeltaV/NTES_Propeller.yml +++ b/Resources/Maps/Shuttles/DeltaV/NTES_Propeller.yml @@ -94,6 +94,7 @@ entities: configurators: [] deviceLists: [] transmitFrequencyId: ShuttleTimer + deviceNetId: Wireless - type: DecalGrid chunkCollection: version: 2 diff --git a/Resources/Maps/Shuttles/DeltaV/barge.yml b/Resources/Maps/Shuttles/DeltaV/barge.yml index e64f9315ee..8fd4411708 100644 --- a/Resources/Maps/Shuttles/DeltaV/barge.yml +++ b/Resources/Maps/Shuttles/DeltaV/barge.yml @@ -60,6 +60,11 @@ entities: - type: Gravity gravityShakeSound: !type:SoundPathSpecifier path: /Audio/Effects/alert.ogg + - type: DeviceNetwork + configurators: [] + deviceLists: [] + transmitFrequencyId: ShuttleTimer + deviceNetId: Wireless - type: DecalGrid chunkCollection: version: 2 diff --git a/Resources/Maps/Shuttles/emergency.yml b/Resources/Maps/Shuttles/emergency.yml index 20cd923055..fe9b43ebd4 100644 --- a/Resources/Maps/Shuttles/emergency.yml +++ b/Resources/Maps/Shuttles/emergency.yml @@ -51,6 +51,7 @@ entities: configurators: [] deviceLists: [] transmitFrequencyId: ShuttleTimer + deviceNetId: Wireless - type: Gravity gravityShakeSound: !type:SoundPathSpecifier path: /Audio/Effects/alert.ogg diff --git a/Resources/Maps/Shuttles/emergency_meta.yml b/Resources/Maps/Shuttles/emergency_meta.yml index ffb141c9fc..544355e090 100644 --- a/Resources/Maps/Shuttles/emergency_meta.yml +++ b/Resources/Maps/Shuttles/emergency_meta.yml @@ -85,6 +85,7 @@ entities: configurators: [] deviceLists: [] transmitFrequencyId: ShuttleTimer + deviceNetId: Wireless - type: DecalGrid chunkCollection: version: 2 diff --git a/Resources/Prototypes/Actions/station_ai.yml b/Resources/Prototypes/Actions/station_ai.yml new file mode 100644 index 0000000000..e2ce25de9d --- /dev/null +++ b/Resources/Prototypes/Actions/station_ai.yml @@ -0,0 +1,64 @@ +# Actions +- type: entity + id: ActionJumpToCore + name: Jump to core + description: Sends your eye back to the core. + components: + - type: InstantAction + itemIconStyle: BigAction + icon: + sprite: Interface/Actions/actions_ai.rsi + state: ai_core + event: !type:JumpToCoreEvent + +- type: entity + id: ActionShowJobIcons + name: Show job icons + description: Shows job icons for crew members. + components: + - type: InstantAction + itemIconStyle: BigAction + icon: + sprite: Interface/Actions/actions_ai.rsi + state: job_view + event: !type:ActionComponentChangeEvent + components: + - type: ShowJobIcons + +- type: entity + id: ActionSurvCameraLights + name: Toggle camera lights + description: Enable surveillance camera lights near wherever you're viewing. + components: + - type: InstantAction + itemIconStyle: BigAction + icon: + sprite: Interface/Actions/actions_ai.rsi + state: camera_light + event: !type:RelayedActionComponentChangeEvent + components: + - type: LightOnCollideCollider + - type: FixturesChange + fixtures: + lightTrigger: + shape: + !type:PhysShapeCircle + radius: 0.35 + density: 80 + hard: false + layer: + - GhostImpassable + + +- type: entity + id: ActionAIViewLaws + name: View Laws + description: View the laws that you must follow. + components: + - type: InstantAction + itemIconStyle: NoItem + icon: + sprite: Interface/Actions/actions_ai.rsi + state: state_laws + event: !type:ToggleLawsScreenEvent + useDelay: 0.5 diff --git a/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml b/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml index 8ae60ed94f..fa7c232e73 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml @@ -88,6 +88,7 @@ - type: DeviceNetwork deviceNetId: Wireless receiveFrequencyId: CrewMonitor + transmitFrequencyId: ShuttleTimer - type: WirelessNetworkConnection range: 500 - type: StationLimitedNetwork @@ -139,8 +140,8 @@ categories: [ HideSpawnMenu ] components: - type: InstantAction - icon: { sprite: Structures/Machines/parts.rsi, state: box_0 } - iconOn: Structures/Machines/parts.rsi/box_2.png + icon: { sprite: Interface/Actions/actions_ai.rsi, state: mass_scanner } + iconOn: Interface/Actions/actions_ai.rsi/mass_scanner.png keywords: [ "AI", "console", "interface" ] priority: -10 event: !type:ToggleIntrinsicUIEvent { key: enum.RadarConsoleUiKey.Key } @@ -165,8 +166,8 @@ categories: [ HideSpawnMenu ] components: - type: InstantAction - icon: { sprite: Structures/Machines/parts.rsi, state: box_0 } - iconOn: Structures/Machines/parts.rsi/box_2.png + icon: { sprite: Interface/Actions/actions_ai.rsi, state: crew_monitor } + iconOn: Interface/Actions/actions_ai.rsi/crew_monitor.png keywords: [ "AI", "console", "interface" ] priority: -10 event: !type:ToggleIntrinsicUIEvent { key: enum.CrewMonitoringUIKey.Key } @@ -178,8 +179,8 @@ categories: [ HideSpawnMenu ] components: - type: InstantAction - icon: { sprite: Structures/Machines/parts.rsi, state: box_0 } - iconOn: Structures/Machines/parts.rsi/box_2.png + icon: { sprite: Interface/Actions/actions_ai.rsi, state: station_records } + iconOn: Interface/Actions/actions_ai.rsi/station_records.png keywords: [ "AI", "console", "interface" ] priority: -10 event: !type:ToggleIntrinsicUIEvent { key: enum.GeneralStationRecordConsoleKey.Key } diff --git a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml index c2c7b899ef..2de14b7716 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml @@ -27,7 +27,7 @@ - ActionJumpToCore - ActionShowJobIcons - ActionSurvCameraLights - - ActionViewLaws + - ActionAIViewLaws - type: UserInterface interfaces: enum.RadarConsoleUiKey.Key: @@ -46,57 +46,14 @@ toggleAction: ActionAGhostShowCrewMonitoring enum.GeneralStationRecordConsoleKey.Key: toggleAction: ActionAGhostShowStationRecords + - type: CrewMonitoringConsole + - type: GeneralStationRecordConsole + - type: DeviceNetwork + deviceNetId: Wireless + receiveFrequencyId: CrewMonitor + - type: RadarConsole + followEntity: false -# Actions -- type: entity - id: ActionJumpToCore - name: Jump to core - description: Sends your eye back to the core. - components: - - type: InstantAction - itemIconStyle: BigAction - icon: - sprite: Interface/Actions/actions_ai.rsi - state: ai_core - event: !type:JumpToCoreEvent - -- type: entity - id: ActionShowJobIcons - name: Show job icons - description: Shows job icons for crew members. - components: - - type: InstantAction - itemIconStyle: BigAction - icon: - sprite: Interface/Misc/job_icons.rsi - state: Captain - event: !type:ActionComponentChangeEvent - components: - - type: ShowJobIcons - -- type: entity - id: ActionSurvCameraLights - name: Toggle camera lights - description: Enable surveillance camera lights near wherever you're viewing. - components: - - type: InstantAction - itemIconStyle: BigAction - icon: - sprite: Interface/Actions/actions_ai.rsi - state: camera_light - event: !type:RelayedActionComponentChangeEvent - components: - - type: LightOnCollideCollider - - type: FixturesChange - fixtures: - lightTrigger: - shape: - !type:PhysShapeCircle - radius: 0.35 - density: 80 - hard: false - layer: - - GhostImpassable - type: entity id: AiHeldIntellicard diff --git a/Resources/Prototypes/Entities/Structures/Wallmounts/screen.yml b/Resources/Prototypes/Entities/Structures/Wallmounts/screen.yml index f3fcb5062a..382900e886 100644 --- a/Resources/Prototypes/Entities/Structures/Wallmounts/screen.yml +++ b/Resources/Prototypes/Entities/Structures/Wallmounts/screen.yml @@ -35,6 +35,7 @@ - type: ExtensionCableReceiver - type: Screen - type: DeviceNetwork + deviceNetId: Wireless receiveFrequencyId: ShuttleTimer - type: entity diff --git a/Resources/Textures/Interface/Actions/actions_ai.rsi/job_view.png b/Resources/Textures/Interface/Actions/actions_ai.rsi/job_view.png new file mode 100644 index 0000000000000000000000000000000000000000..b407c4755e13c72eaefa36aeab453a72b1903d0f GIT binary patch literal 508 zcmVNCu5t(CbZ2X@dmYzL(7H%(`0ka$^NmI*#_MkX| z1z;x^a>NNEGbT#`aS z$sJYh-cD3L8?b~s^B2KC^98#*K_wwcAs_~=E|pv%^tV^2YF^C{l1SDz+Oj9RMnPfI Date: Mon, 13 Jan 2025 01:06:21 -0400 Subject: [PATCH 26/39] Resprite --- .../Interface/Misc/job_icons.rsi/StationAi.png | Bin 204 -> 170 bytes .../Interface/Misc/job_icons.rsi/meta.json | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Textures/Interface/Misc/job_icons.rsi/StationAi.png b/Resources/Textures/Interface/Misc/job_icons.rsi/StationAi.png index aba35c034b9f1508e953a030300987dcf1265f1e..86a208915ba94826c85758577d25d945e67f4021 100644 GIT binary patch delta 128 zcmV-`0Du3?0jdFzF?nQ3L_t&-m4%P74S+BZ125>O$Tlz5h^Sd26-%U{iC80I4wfNQ zc|{QjSC;*@^$tK|uDsyf7AG2W_1>F!tTO=nbpuox4S?^fd)<& z1@ERCeSLiiW*i5685nbxHTce`{wzO(d9fo`V#5Oc12S9(bk;O9GBSL~wmJEl;lM$l OZ492SelF{r5}E+Ktvd7o diff --git a/Resources/Textures/Interface/Misc/job_icons.rsi/meta.json b/Resources/Textures/Interface/Misc/job_icons.rsi/meta.json index 117a94e790..f755c12d50 100644 --- a/Resources/Textures/Interface/Misc/job_icons.rsi/meta.json +++ b/Resources/Textures/Interface/Misc/job_icons.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from https://github.com/vgstation-coders/vgstation13/blob/e71d6c4fba5a51f99b81c295dcaec4fc2f58fb19/icons/mob/screen1.dmi | Brigmedic icon made by PuroSlavKing (Github) | Zombie icon made by RamZ | Zookeper by netwy (discort) | Rev and Head Rev icon taken from https://tgstation13.org/wiki/HUD and edited by coolmankid12345 (Discord) | Mindshield icon taken from https://github.com/tgstation/tgstation/blob/ce6beb8a4d61235d9a597a7126c407160ed674ea/icons/mob/huds/hud.dmi | Admin recolored from MedicalIntern by TsjipTsjip", + "copyright": "Taken from https://github.com/vgstation-coders/vgstation13/blob/e71d6c4fba5a51f99b81c295dcaec4fc2f58fb19/icons/mob/screen1.dmi | Brigmedic icon made by PuroSlavKing (Github) | Zombie icon made by RamZ | Zookeper by netwy (discort) | Rev and Head Rev icon taken from https://tgstation13.org/wiki/HUD and edited by coolmankid12345 (Discord) | Mindshield icon taken from https://github.com/tgstation/tgstation/blob/ce6beb8a4d61235d9a597a7126c407160ed674ea/icons/mob/huds/hud.dmi | Admin recolored from MedicalIntern by TsjipTsjip | StationAi resprite to 8x8 size by lunarcomets", "size": { "x": 8, From 35d882c956b310b5b61f50a6fc321e58da12fcf4 Mon Sep 17 00:00:00 2001 From: sleepyyapril Date: Mon, 13 Jan 2025 01:13:33 -0400 Subject: [PATCH 27/39] Set name before announcement --- Content.Server/Clothing/Systems/LoadoutSystem.cs | 5 +---- Content.Server/GameTicking/GameTicker.Spawning.cs | 1 + 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/Content.Server/Clothing/Systems/LoadoutSystem.cs b/Content.Server/Clothing/Systems/LoadoutSystem.cs index 537ca09785..0135c7d3f4 100644 --- a/Content.Server/Clothing/Systems/LoadoutSystem.cs +++ b/Content.Server/Clothing/Systems/LoadoutSystem.cs @@ -34,7 +34,6 @@ public sealed class LoadoutSystem : EntitySystem [Dependency] private readonly ISerializationManager _serialization = default!; [Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly IComponentFactory _componentFactory = default!; - [Dependency] private readonly StationSpawningSystem _stationSpawning = default!; public override void Initialize() @@ -46,12 +45,10 @@ public override void Initialize() private void OnPlayerSpawnComplete(PlayerSpawnCompleteEvent ev) { if (ev.JobId == null - || !_protoMan.TryIndex(ev.JobId, out var job) + || !_protoMan.TryIndex(ev.JobId, out _) || !_configurationManager.GetCVar(CCVars.GameLoadoutsEnabled)) return; - _stationSpawning.EquipJobName(ev.Mob, job); - ApplyCharacterLoadout( ev.Mob, ev.JobId, diff --git a/Content.Server/GameTicking/GameTicker.Spawning.cs b/Content.Server/GameTicking/GameTicker.Spawning.cs index c6c8bf50f7..2e1d2e614c 100644 --- a/Content.Server/GameTicking/GameTicker.Spawning.cs +++ b/Content.Server/GameTicking/GameTicker.Spawning.cs @@ -257,6 +257,7 @@ private void SpawnPlayer(ICommonSession player, DebugTools.AssertNotNull(mobMaybe); var mob = mobMaybe!.Value; + _stationSpawning.EquipJobName(mob, jobPrototype); _mind.TransferTo(newMind, mob); if (lateJoin && !silent) From a31d41e5c6fd77895435b3881fbb2a6e7030d071 Mon Sep 17 00:00:00 2001 From: ScarKy0 <106310278+ScarKy0@users.noreply.github.com> Date: Thu, 12 Sep 2024 17:28:54 +0200 Subject: [PATCH 28/39] Gave AI a comms console (#31852) * Updated sprites for AI HUD * Epic test fail * Merged AGhost actions and AI actions together again. * Seperate comms and bugfix. Fixed broadcast. * Stuffs * Update station_ai.yml * Update station_ai.yml * :| * Update silicon.yml * oopsie daisy * stuff * further stuff * oh my god * Appeasing the gods --- .../communications-console-component.ftl | 3 ++- Resources/Prototypes/Actions/station_ai.yml | 4 ++++ .../Prototypes/Entities/Mobs/Player/admin_ghost.yml | 12 ++++++------ .../Prototypes/Entities/Mobs/Player/silicon.yml | 9 +++++++++ 4 files changed, 21 insertions(+), 7 deletions(-) diff --git a/Resources/Locale/en-US/communications/communications-console-component.ftl b/Resources/Locale/en-US/communications/communications-console-component.ftl index bf8a6c33c9..c10c790d94 100644 --- a/Resources/Locale/en-US/communications/communications-console-component.ftl +++ b/Resources/Locale/en-US/communications/communications-console-component.ftl @@ -19,4 +19,5 @@ comms-console-announcement-unknown-sender = Unknown # Comms console variant titles comms-console-announcement-title-station = Communications Console comms-console-announcement-title-centcom = Central Command -comms-console-announcement-title-nukie = Syndicate Nuclear Operative \ No newline at end of file +comms-console-announcement-title-nukie = Syndicate Nuclear Operative +comms-console-announcement-title-station-ai = Station AI diff --git a/Resources/Prototypes/Actions/station_ai.yml b/Resources/Prototypes/Actions/station_ai.yml index e2ce25de9d..58513d7db1 100644 --- a/Resources/Prototypes/Actions/station_ai.yml +++ b/Resources/Prototypes/Actions/station_ai.yml @@ -5,6 +5,7 @@ description: Sends your eye back to the core. components: - type: InstantAction + priority: -10 itemIconStyle: BigAction icon: sprite: Interface/Actions/actions_ai.rsi @@ -17,6 +18,7 @@ description: Shows job icons for crew members. components: - type: InstantAction + priority: -5 itemIconStyle: BigAction icon: sprite: Interface/Actions/actions_ai.rsi @@ -31,6 +33,7 @@ description: Enable surveillance camera lights near wherever you're viewing. components: - type: InstantAction + priority: -6 itemIconStyle: BigAction icon: sprite: Interface/Actions/actions_ai.rsi @@ -56,6 +59,7 @@ description: View the laws that you must follow. components: - type: InstantAction + priority: -3 itemIconStyle: NoItem icon: sprite: Interface/Actions/actions_ai.rsi diff --git a/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml b/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml index fa7c232e73..172f970dcb 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml @@ -127,10 +127,10 @@ categories: [ HideSpawnMenu ] components: - type: InstantAction - icon: { sprite: Structures/Machines/parts.rsi, state: box_0 } - iconOn: Structures/Machines/parts.rsi/box_2.png + icon: { sprite: Interface/Actions/actions_ai.rsi, state: comms_console } + iconOn: Interface/Actions/actions_ai.rsi/comms_console.png keywords: [ "AI", "console", "interface" ] - priority: -10 + priority: -4 event: !type:ToggleIntrinsicUIEvent { key: enum.CommunicationsConsoleUiKey.Key } - type: entity @@ -143,7 +143,7 @@ icon: { sprite: Interface/Actions/actions_ai.rsi, state: mass_scanner } iconOn: Interface/Actions/actions_ai.rsi/mass_scanner.png keywords: [ "AI", "console", "interface" ] - priority: -10 + priority: -7 event: !type:ToggleIntrinsicUIEvent { key: enum.RadarConsoleUiKey.Key } - type: entity @@ -169,7 +169,7 @@ icon: { sprite: Interface/Actions/actions_ai.rsi, state: crew_monitor } iconOn: Interface/Actions/actions_ai.rsi/crew_monitor.png keywords: [ "AI", "console", "interface" ] - priority: -10 + priority: -9 event: !type:ToggleIntrinsicUIEvent { key: enum.CrewMonitoringUIKey.Key } - type: entity @@ -182,5 +182,5 @@ icon: { sprite: Interface/Actions/actions_ai.rsi, state: station_records } iconOn: Interface/Actions/actions_ai.rsi/station_records.png keywords: [ "AI", "console", "interface" ] - priority: -10 + priority: -8 event: !type:ToggleIntrinsicUIEvent { key: enum.GeneralStationRecordConsoleKey.Key } diff --git a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml index 2de14b7716..759be73f46 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml @@ -38,6 +38,8 @@ type: GeneralStationRecordConsoleBoundUserInterface enum.SiliconLawsUiKey.Key: type: SiliconLawBoundUserInterface + enum.CommunicationsConsoleUiKey.Key: + type: CommunicationsConsoleBoundUserInterface - type: IntrinsicUI uis: enum.RadarConsoleUiKey.Key: @@ -46,13 +48,20 @@ toggleAction: ActionAGhostShowCrewMonitoring enum.GeneralStationRecordConsoleKey.Key: toggleAction: ActionAGhostShowStationRecords + enum.CommunicationsConsoleUiKey.Key: + toggleAction: ActionAGhostShowCommunications - type: CrewMonitoringConsole - type: GeneralStationRecordConsole - type: DeviceNetwork deviceNetId: Wireless receiveFrequencyId: CrewMonitor + transmitFrequencyId: ShuttleTimer - type: RadarConsole followEntity: false + - type: CommunicationsConsole + canShuttle: false + title: comms-console-announcement-title-station-ai + color: "#2ed2fd" - type: entity From 13e3abd4f80296853e951dadce2755ebedd0bb3a Mon Sep 17 00:00:00 2001 From: chromiumboy <50505512+chromiumboy@users.noreply.github.com> Date: Tue, 17 Dec 2024 13:18:15 -0600 Subject: [PATCH 29/39] Holopads (#32711) * Initial resources commit * Initial code commit * Added additional resources * Continuing to build holopad and telephone systems * Added hologram shader * Added hologram system and entity * Holo calls now have a hologram of the user appear on them * Initial implementation of holopads transmitting nearby chatter * Added support for linking across multiple telephones/holopads/entities * Fixed a bunch of bugs * Tried simplifying holopad entity dependence, added support for mid-call user switching * Replaced PVS expansion with manually networked sprite states * Adjusted volume of ring tone * Added machine board * Minor features and tweaks * Resolving merge conflict * Recommit audio attributions * Telephone chat adjustments * Added support for AI interactions with holopads * Building the holopad UI * Holopad UI finished * Further UI tweaks * Station AI can hear local chatter when being projected from a holopad * Minor bug fixes * Added wire panels to holopads * Basic broadcasting * Start of emergency broadcasting code * Fixing issues with broadcasting * More work on emergency broadcasting * Updated holopad visuals * Added cooldown text to emergency broadcast and control lock out screen * Code clean up * Fixed issue with timing * Broadcasting now requires command access * Fixed some bugs * Added multiple holopad prototypes with different ranges * The AI no longer requires power to interact with holopads * Fixed some additional issues * Addressing more issues * Added emote support for holograms * Changed the broadcast lockout durations to their proper values * Added AI vision wire to holopads * Bug fixes * AI vision and interaction wires can be added to the same wire panel * Fixed error * More bug fixes * Fixed test fail * Embellished the emergency call lock out window * Holopads play borg sounds when speaking * Borg and AI names are listed as the caller ID on the holopad * Borg chassis can now be seen on holopad holograms * Holopad returns to a machine frame when badly damaged * Clarified some text * Fix merge conflict * Fixed merge conflict * Fixing merge conflict * Fixing merge conflict * Fixing merge conflict * Offset menu on open * AI can alt click on holopads to activate the projector * Bug fixes for intellicard interactions * Fixed speech issue with intellicards * The UI automatically opens for the AI when it alt-clicks on the holopad * Simplified shader math * Telephones will auto hang up 60 seconds after the last person on a call stops speaking * Added better support for AI requests when multiple AI cores are on the station * The call controls pop up for the AI when they accept a summons from a holopad * Compatibility mode fix for the hologram shader * Further shader fixes for compatibility mode * File clean up * More cleaning up * Removed access requirements from quantum holopads so they can used by nukies * The title of the holopad window now reflects the name of the device * Linked telephones will lose their connection if both move out of range of each other --- Content.Client/Chat/UI/SpeechBubble.cs | 10 +- .../Holopad/HolopadBoundUserInterface.cs | 101 +++ Content.Client/Holopad/HolopadSystem.cs | 172 ++++ Content.Client/Holopad/HolopadWindow.xaml | 107 +++ Content.Client/Holopad/HolopadWindow.xaml.cs | 338 ++++++++ Content.Client/Stylesheets/StyleNano.cs | 15 + Content.Client/Telephone/TelephoneSystem.cs | 8 + Content.Server/Holopad/HolopadSystem.cs | 761 ++++++++++++++++++ .../Silicons/StationAi/AiVisionWireAction.cs | 4 +- .../Silicons/StationAi/StationAiSystem.cs | 42 + Content.Server/Telephone/TelephoneSystem.cs | 468 +++++++++++ Content.Shared/Doors/AirlockWireStatus.cs | 3 +- .../Holopad/HolographicAvatarComponent.cs | 13 + Content.Shared/Holopad/HolopadComponent.cs | 133 +++ .../Holopad/HolopadHologramComponent.cs | 71 ++ .../Holopad/HolopadUserComponent.cs | 104 +++ Content.Shared/Holopad/SharedHolopadSystem.cs | 43 + .../StationAi/SharedStationAiSystem.cs | 88 +- .../StationAi/StationAiCoreComponent.cs | 10 + Content.Shared/Speech/SpeechComponent.cs | 6 + .../Telephone/SharedTelephoneSystem.cs | 39 + .../Telephone/TelephoneComponent.cs | 203 +++++ Resources/Audio/Machines/attributions.yml | 5 + Resources/Audio/Machines/double_ring.ogg | Bin 0 -> 16754 bytes Resources/Locale/en-US/holopad/holopad.ftl | 40 + .../Locale/en-US/telephone/telephone.ftl | 8 + Resources/Locale/en-US/wires/wire-names.ftl | 3 + .../Entities/Mobs/Player/silicon.yml | 43 +- .../Devices/Circuitboards/Machine/holopad.yml | 12 + .../Entities/Structures/Machines/holopad.yml | 158 ++++ Resources/Prototypes/Shaders/shaders.yml | 5 + Resources/Prototypes/Wires/layouts.yml | 33 +- Resources/Textures/Shaders/hologram.swsl | 23 + .../Structures/Machines/holopad.rsi/base.png | Bin 0 -> 457 bytes .../Structures/Machines/holopad.rsi/blank.png | Bin 0 -> 83 bytes .../Machines/holopad.rsi/icon_in_call.png | Bin 0 -> 414 bytes .../Machines/holopad.rsi/lights_calling.png | Bin 0 -> 425 bytes .../holopad.rsi/lights_hanging_up.png | Bin 0 -> 432 bytes .../Machines/holopad.rsi/lights_in_call.png | Bin 0 -> 326 bytes .../Machines/holopad.rsi/lights_ringing.png | Bin 0 -> 4429 bytes .../Structures/Machines/holopad.rsi/meta.json | 100 +++ .../Machines/holopad.rsi/panel_open.png | Bin 0 -> 221 bytes .../Machines/holopad.rsi/unpowered.png | Bin 0 -> 441 bytes 43 files changed, 3157 insertions(+), 12 deletions(-) create mode 100644 Content.Client/Holopad/HolopadBoundUserInterface.cs create mode 100644 Content.Client/Holopad/HolopadSystem.cs create mode 100644 Content.Client/Holopad/HolopadWindow.xaml create mode 100644 Content.Client/Holopad/HolopadWindow.xaml.cs create mode 100644 Content.Client/Telephone/TelephoneSystem.cs create mode 100644 Content.Server/Holopad/HolopadSystem.cs create mode 100644 Content.Server/Telephone/TelephoneSystem.cs create mode 100644 Content.Shared/Holopad/HolographicAvatarComponent.cs create mode 100644 Content.Shared/Holopad/HolopadComponent.cs create mode 100644 Content.Shared/Holopad/HolopadHologramComponent.cs create mode 100644 Content.Shared/Holopad/HolopadUserComponent.cs create mode 100644 Content.Shared/Holopad/SharedHolopadSystem.cs create mode 100644 Content.Shared/Telephone/SharedTelephoneSystem.cs create mode 100644 Content.Shared/Telephone/TelephoneComponent.cs create mode 100644 Resources/Audio/Machines/double_ring.ogg create mode 100644 Resources/Locale/en-US/holopad/holopad.ftl create mode 100644 Resources/Locale/en-US/telephone/telephone.ftl create mode 100644 Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/holopad.yml create mode 100644 Resources/Prototypes/Entities/Structures/Machines/holopad.yml create mode 100644 Resources/Textures/Shaders/hologram.swsl create mode 100644 Resources/Textures/Structures/Machines/holopad.rsi/base.png create mode 100644 Resources/Textures/Structures/Machines/holopad.rsi/blank.png create mode 100644 Resources/Textures/Structures/Machines/holopad.rsi/icon_in_call.png create mode 100644 Resources/Textures/Structures/Machines/holopad.rsi/lights_calling.png create mode 100644 Resources/Textures/Structures/Machines/holopad.rsi/lights_hanging_up.png create mode 100644 Resources/Textures/Structures/Machines/holopad.rsi/lights_in_call.png create mode 100644 Resources/Textures/Structures/Machines/holopad.rsi/lights_ringing.png create mode 100644 Resources/Textures/Structures/Machines/holopad.rsi/meta.json create mode 100644 Resources/Textures/Structures/Machines/holopad.rsi/panel_open.png create mode 100644 Resources/Textures/Structures/Machines/holopad.rsi/unpowered.png diff --git a/Content.Client/Chat/UI/SpeechBubble.cs b/Content.Client/Chat/UI/SpeechBubble.cs index 68c937a788..9c8f8da8a1 100644 --- a/Content.Client/Chat/UI/SpeechBubble.cs +++ b/Content.Client/Chat/UI/SpeechBubble.cs @@ -2,6 +2,7 @@ using Content.Client.Chat.Managers; using Content.Shared.CCVar; using Content.Shared.Chat; +using Content.Shared.Speech; using Robust.Client.Graphics; using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controls; @@ -139,8 +140,13 @@ protected override void FrameUpdate(FrameEventArgs args) Modulate = Color.White; } - var offset = (-_eyeManager.CurrentEye.Rotation).ToWorldVec() * -EntityVerticalOffset; - var worldPos = xform.WorldPosition + offset; + var baseOffset = 0f; + + if (_entityManager.TryGetComponent(_senderEntity, out var speech)) + baseOffset = speech.SpeechBubbleOffset; + + var offset = (-_eyeManager.CurrentEye.Rotation).ToWorldVec() * -(EntityVerticalOffset + baseOffset); + var worldPos = _transformSystem.GetWorldPosition(xform) + offset; var lowerCenter = _eyeManager.WorldToScreen(worldPos) / UIScale; var screenPos = lowerCenter - new Vector2(ContentSize.X / 2, ContentSize.Y + _verticalOffsetAchieved); diff --git a/Content.Client/Holopad/HolopadBoundUserInterface.cs b/Content.Client/Holopad/HolopadBoundUserInterface.cs new file mode 100644 index 0000000000..20b55ea8c7 --- /dev/null +++ b/Content.Client/Holopad/HolopadBoundUserInterface.cs @@ -0,0 +1,101 @@ +using Content.Shared.Holopad; +using Content.Shared.Silicons.StationAi; +using Robust.Client.Graphics; +using Robust.Client.UserInterface; +using Robust.Shared.Player; +using System.Numerics; + +namespace Content.Client.Holopad; + +public sealed class HolopadBoundUserInterface : BoundUserInterface +{ + [Dependency] private readonly ISharedPlayerManager _playerManager = default!; + [Dependency] private readonly IClyde _displayManager = default!; + + [ViewVariables] + private HolopadWindow? _window; + + public HolopadBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey) + { + IoCManager.InjectDependencies(this); + } + + protected override void Open() + { + base.Open(); + + _window = this.CreateWindow(); + _window.Title = Loc.GetString("holopad-window-title", ("title", EntMan.GetComponent(Owner).EntityName)); + + if (this.UiKey is not HolopadUiKey) + { + Close(); + return; + } + + var uiKey = (HolopadUiKey)this.UiKey; + + // AIs will see a different holopad interface to crew when interacting with them in the world + if (uiKey == HolopadUiKey.InteractionWindow && EntMan.HasComponent(_playerManager.LocalEntity)) + uiKey = HolopadUiKey.InteractionWindowForAi; + + _window.SetState(Owner, uiKey); + _window.UpdateState(new Dictionary()); + + // Set message actions + _window.SendHolopadStartNewCallMessageAction += SendHolopadStartNewCallMessage; + _window.SendHolopadAnswerCallMessageAction += SendHolopadAnswerCallMessage; + _window.SendHolopadEndCallMessageAction += SendHolopadEndCallMessage; + _window.SendHolopadStartBroadcastMessageAction += SendHolopadStartBroadcastMessage; + _window.SendHolopadActivateProjectorMessageAction += SendHolopadActivateProjectorMessage; + _window.SendHolopadRequestStationAiMessageAction += SendHolopadRequestStationAiMessage; + + // If this call is addressed to an AI, open the window in the bottom right hand corner of the screen + if (uiKey == HolopadUiKey.AiRequestWindow) + _window.OpenCenteredAt(new Vector2(1f, 1f)); + + // Otherwise offset to the left so the holopad can still be seen + else + _window.OpenCenteredAt(new Vector2(0.3333f, 0.50f)); + } + + protected override void UpdateState(BoundUserInterfaceState state) + { + base.UpdateState(state); + + var castState = (HolopadBoundInterfaceState)state; + EntMan.TryGetComponent(Owner, out var xform); + + _window?.UpdateState(castState.Holopads); + } + + public void SendHolopadStartNewCallMessage(NetEntity receiver) + { + SendMessage(new HolopadStartNewCallMessage(receiver)); + } + + public void SendHolopadAnswerCallMessage() + { + SendMessage(new HolopadAnswerCallMessage()); + } + + public void SendHolopadEndCallMessage() + { + SendMessage(new HolopadEndCallMessage()); + } + + public void SendHolopadStartBroadcastMessage() + { + SendMessage(new HolopadStartBroadcastMessage()); + } + + public void SendHolopadActivateProjectorMessage() + { + SendMessage(new HolopadActivateProjectorMessage()); + } + + public void SendHolopadRequestStationAiMessage() + { + SendMessage(new HolopadStationAiRequestMessage()); + } +} diff --git a/Content.Client/Holopad/HolopadSystem.cs b/Content.Client/Holopad/HolopadSystem.cs new file mode 100644 index 0000000000..3bd556f1fc --- /dev/null +++ b/Content.Client/Holopad/HolopadSystem.cs @@ -0,0 +1,172 @@ +using Content.Shared.Chat.TypingIndicator; +using Content.Shared.Holopad; +using Robust.Client.GameObjects; +using Robust.Client.Graphics; +using Robust.Client.Player; +using Robust.Shared.Prototypes; +using Robust.Shared.Timing; +using System.Linq; + +namespace Content.Client.Holopad; + +public sealed class HolopadSystem : SharedHolopadSystem +{ + [Dependency] private readonly IPrototypeManager _prototypeManager = default!; + [Dependency] private readonly IPlayerManager _playerManager = default!; + [Dependency] private readonly IGameTiming _timing = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnComponentInit); + SubscribeLocalEvent(OnShaderRender); + SubscribeAllEvent(OnTypingChanged); + + SubscribeNetworkEvent(OnPlayerSpriteStateRequest); + SubscribeNetworkEvent(OnPlayerSpriteStateMessage); + } + + private void OnComponentInit(EntityUid uid, HolopadHologramComponent component, ComponentInit ev) + { + if (!TryComp(uid, out var sprite)) + return; + + UpdateHologramSprite(uid); + } + + private void OnShaderRender(EntityUid uid, HolopadHologramComponent component, BeforePostShaderRenderEvent ev) + { + if (ev.Sprite.PostShader == null) + return; + + ev.Sprite.PostShader.SetParameter("t", (float)_timing.CurTime.TotalSeconds * component.ScrollRate); + } + + private void OnTypingChanged(TypingChangedEvent ev, EntitySessionEventArgs args) + { + var uid = args.SenderSession.AttachedEntity; + + if (!Exists(uid)) + return; + + if (!HasComp(uid)) + return; + + var netEv = new HolopadUserTypingChangedEvent(GetNetEntity(uid.Value), ev.IsTyping); + RaiseNetworkEvent(netEv); + } + + private void OnPlayerSpriteStateRequest(PlayerSpriteStateRequest ev) + { + var targetPlayer = GetEntity(ev.TargetPlayer); + var player = _playerManager.LocalSession?.AttachedEntity; + + // Ignore the request if received by a player who isn't the target + if (targetPlayer != player) + return; + + if (!TryComp(player, out var playerSprite)) + return; + + var spriteLayerData = new List(); + + if (playerSprite.Visible) + { + // Record the RSI paths, state names and shader paramaters of all visible layers + for (int i = 0; i < playerSprite.AllLayers.Count(); i++) + { + if (!playerSprite.TryGetLayer(i, out var layer)) + continue; + + if (!layer.Visible || + string.IsNullOrEmpty(layer.ActualRsi?.Path.ToString()) || + string.IsNullOrEmpty(layer.State.Name)) + continue; + + var layerDatum = new PrototypeLayerData(); + layerDatum.RsiPath = layer.ActualRsi.Path.ToString(); + layerDatum.State = layer.State.Name; + + if (layer.CopyToShaderParameters != null) + { + var key = (string)layer.CopyToShaderParameters.LayerKey; + + if (playerSprite.LayerMapTryGet(key, out var otherLayerIdx) && + playerSprite.TryGetLayer(otherLayerIdx, out var otherLayer) && + otherLayer.Visible) + { + layerDatum.MapKeys = new() { key }; + + layerDatum.CopyToShaderParameters = new PrototypeCopyToShaderParameters() + { + LayerKey = key, + ParameterTexture = layer.CopyToShaderParameters.ParameterTexture, + ParameterUV = layer.CopyToShaderParameters.ParameterUV + }; + } + } + + spriteLayerData.Add(layerDatum); + } + } + + // Return the recorded data to the server + var evResponse = new PlayerSpriteStateMessage(ev.TargetPlayer, spriteLayerData.ToArray()); + RaiseNetworkEvent(evResponse); + } + + private void OnPlayerSpriteStateMessage(PlayerSpriteStateMessage ev) + { + UpdateHologramSprite(GetEntity(ev.SpriteEntity), ev.SpriteLayerData); + } + + private void UpdateHologramSprite(EntityUid uid, PrototypeLayerData[]? layerData = null) + { + if (!TryComp(uid, out var hologramSprite)) + return; + + if (!TryComp(uid, out var holopadhologram)) + return; + + for (int i = hologramSprite.AllLayers.Count() - 1; i >= 0; i--) + hologramSprite.RemoveLayer(i); + + if (layerData == null || layerData.Length == 0) + { + layerData = new PrototypeLayerData[1]; + layerData[0] = new PrototypeLayerData() + { + RsiPath = holopadhologram.RsiPath, + State = holopadhologram.RsiState + }; + } + + for (int i = 0; i < layerData.Length; i++) + { + var layer = layerData[i]; + layer.Shader = "unshaded"; + + hologramSprite.AddLayer(layerData[i], i); + } + + UpdateHologramShader(uid, hologramSprite, holopadhologram); + } + + private void UpdateHologramShader(EntityUid uid, SpriteComponent sprite, HolopadHologramComponent holopadHologram) + { + // Find the texture height of the largest layer + float texHeight = sprite.AllLayers.Max(x => x.PixelSize.Y); + + var instance = _prototypeManager.Index(holopadHologram.ShaderName).InstanceUnique(); + instance.SetParameter("color1", new Vector3(holopadHologram.Color1.R, holopadHologram.Color1.G, holopadHologram.Color1.B)); + instance.SetParameter("color2", new Vector3(holopadHologram.Color2.R, holopadHologram.Color2.G, holopadHologram.Color2.B)); + instance.SetParameter("alpha", holopadHologram.Alpha); + instance.SetParameter("intensity", holopadHologram.Intensity); + instance.SetParameter("texHeight", texHeight); + instance.SetParameter("t", (float)_timing.CurTime.TotalSeconds * holopadHologram.ScrollRate); + + sprite.PostShader = instance; + sprite.RaiseShaderEvent = true; + } +} diff --git a/Content.Client/Holopad/HolopadWindow.xaml b/Content.Client/Holopad/HolopadWindow.xaml new file mode 100644 index 0000000000..9c3dfab1ea --- /dev/null +++ b/Content.Client/Holopad/HolopadWindow.xaml @@ -0,0 +1,107 @@ + + + + + + + + + + + + + + + + + + + + + + + + + +
-public record ExpandICChatRecipientstEvent(EntityUid Source, float VoiceRange, Dictionary Recipients) +public record ExpandICChatRecipientsEvent(EntityUid Source, float VoiceRange, Dictionary Recipients) { } diff --git a/Content.Server/Silicons/StationAi/StationAiSystem.cs b/Content.Server/Silicons/StationAi/StationAiSystem.cs index eb76a129e4..e680cd293b 100644 --- a/Content.Server/Silicons/StationAi/StationAiSystem.cs +++ b/Content.Server/Silicons/StationAi/StationAiSystem.cs @@ -2,6 +2,8 @@ using Content.Server.Chat.Managers; using Content.Server.Chat.Systems; using Content.Shared.Chat; +using Content.Shared.Mind; +using Content.Shared.Roles; using Content.Shared.Silicons.StationAi; using Content.Shared.StationAi; using Robust.Shared.Audio.Systems; diff --git a/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraMicrophoneSystem.cs b/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraMicrophoneSystem.cs index a01f19c909..4deb5238a5 100644 --- a/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraMicrophoneSystem.cs +++ b/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraMicrophoneSystem.cs @@ -17,10 +17,10 @@ public override void Initialize() SubscribeLocalEvent(OnInit); SubscribeLocalEvent(RelayEntityMessage); SubscribeLocalEvent(CanListen); - SubscribeLocalEvent(OnExpandRecipients); + SubscribeLocalEvent(OnExpandRecipients); } - private void OnExpandRecipients(ExpandICChatRecipientstEvent ev) + private void OnExpandRecipients(ExpandICChatRecipientsEvent ev) { var xformQuery = GetEntityQuery(); var sourceXform = Transform(ev.Source); From cca34a0c989ba4381e89e97484d2b074ad46fe61 Mon Sep 17 00:00:00 2001 From: sleepyyapril Date: Mon, 13 Jan 2025 01:43:23 -0400 Subject: [PATCH 32/39] imports --- Content.Server/Holopad/HolopadSystem.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Content.Server/Holopad/HolopadSystem.cs b/Content.Server/Holopad/HolopadSystem.cs index 549bacc1a8..ad531b6d2d 100644 --- a/Content.Server/Holopad/HolopadSystem.cs +++ b/Content.Server/Holopad/HolopadSystem.cs @@ -18,6 +18,8 @@ using Robust.Shared.Timing; using Robust.Shared.Utility; using System.Linq; +using Content.Shared.Chat; + namespace Content.Server.Holopad; From 1ec188ae0f2f94e5d43797ff0d8b63caa6f71469 Mon Sep 17 00:00:00 2001 From: sleepyyapril Date: Mon, 13 Jan 2025 01:52:22 -0400 Subject: [PATCH 33/39] fix duplicate --- Content.Client/DeltaV/Hologram/HologramSystem.cs | 2 +- Resources/Prototypes/DeltaV/shaders.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Content.Client/DeltaV/Hologram/HologramSystem.cs b/Content.Client/DeltaV/Hologram/HologramSystem.cs index 212a797fd8..0d4cf098e0 100644 --- a/Content.Client/DeltaV/Hologram/HologramSystem.cs +++ b/Content.Client/DeltaV/Hologram/HologramSystem.cs @@ -17,7 +17,7 @@ public override void Initialize() { base.Initialize(); - _shader = _protoMan.Index("Hologram").InstanceUnique(); + _shader = _protoMan.Index("HologramDeltaV").InstanceUnique(); SubscribeLocalEvent(OnShutdown); SubscribeLocalEvent(OnStartup); } diff --git a/Resources/Prototypes/DeltaV/shaders.yml b/Resources/Prototypes/DeltaV/shaders.yml index 5f479acb36..0e55293dcf 100644 --- a/Resources/Prototypes/DeltaV/shaders.yml +++ b/Resources/Prototypes/DeltaV/shaders.yml @@ -1,6 +1,6 @@ # hologram - type: shader - id: Hologram + id: HologramDeltaV kind: source path: "/Textures/DeltaV/Shaders/hologram.swsl" params: From e6ce20218ad5600051bfd454ca2fe598c472901a Mon Sep 17 00:00:00 2001 From: VMSolidus Date: Mon, 13 Jan 2025 00:55:57 -0500 Subject: [PATCH 34/39] Default Disable Traits Anticheat (#1518) # Description The Traitsystem anticheat is apparently really good at yeeting players who join as a different job than the one they selected for their traits menu. A better solution would be to rework the latejoin system so that it simply prevents you from joining as any job that would have an invalid trait total(Trait points after all *valid* traits are applied being a negative number is the key here). However since doing that would require me spend 10 hours thoroughly reading a >1000 line function which has so many indentations that parts of it don't even fit on my 17" monitor, I'm electing to disable the system pending a rework. # Changelog No changelog because we shouldn't be openly telling the players they can just cheat the traits menu lmao. --- Content.Shared/CCVar/CCVars.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Content.Shared/CCVar/CCVars.cs b/Content.Shared/CCVar/CCVars.cs index 5223b3d3ea..347bd85114 100644 --- a/Content.Shared/CCVar/CCVars.cs +++ b/Content.Shared/CCVar/CCVars.cs @@ -445,7 +445,7 @@ public static readonly CVarDef /// If you are intending to decrease the trait points availability, or modify the costs of traits, consider temporarily disabling this. /// public static readonly CVarDef TraitsPunishCheaters = - CVarDef.Create("game.traits_punish_cheaters", true, CVar.REPLICATED); + CVarDef.Create("game.traits_punish_cheaters", false, CVar.REPLICATED); /// /// Whether to allow characters to select loadout items. From 140055d2066e0b6fae86933de8631f9f83f4a3b4 Mon Sep 17 00:00:00 2001 From: VMSolidus Date: Mon, 13 Jan 2025 00:56:48 -0500 Subject: [PATCH 35/39] Nerf Salvage (#1521) # Description I may have been a little *too* generous with Salvage players. This update fixes the salvage guns spawning with a magazine or lethal ammo. There was also an issue that they were perhaps "Too easy to obtain". In actual practice, it turns out that a single "Mining Expedition" earns salvage enough mining points to buy like 4 rifles. Which led to situations where Salvage functionally became station security after they then broke into the armory to print ammo. Another issue I discovered is that Salvage can also use their breaching charges to blow open security crates(And also blow open the armory......). So now they don't spawn with bombs in their lockers, and need to pay for them with said mining points.

Media

![image](https://github.com/user-attachments/assets/a5d3fba3-33b3-4f65-ab69-ee6d0f617633)

# Changelog :cl: - add: Added a legality notice to the description of salvage's firearms. - tweak: The mining points cost of all salvage firearms have been increased by 4x - remove: Salvage no longer starts with bombs in their lockers. Buy them with your mining points. --- .../extenddescriptions/descriptions.ftl | 1 + .../Catalog/Fills/Lockers/cargo.yml | 4 --- .../Inventories/salvage_points.yml | 12 +++---- .../Weapons/Guns/Basic/base_legality.yml | 0 .../Objects/Weapons/Guns/Basic/pka.yml | 6 ++++ .../Objects/Weapons/Guns/Snipers/snipers.yml | 6 ++++ .../Weapons/Guns/Revolvers/revolvers.yml | 7 ++++ .../Objects/Weapons/Guns/Rifles/rifles.yml | 33 +++++++++++++++++-- 8 files changed, 56 insertions(+), 13 deletions(-) create mode 100644 Resources/Locale/en-US/weapons/extenddescriptions/descriptions.ftl create mode 100644 Resources/Prototypes/Entities/Objects/Weapons/Guns/Basic/base_legality.yml diff --git a/Resources/Locale/en-US/weapons/extenddescriptions/descriptions.ftl b/Resources/Locale/en-US/weapons/extenddescriptions/descriptions.ftl new file mode 100644 index 0000000000..4a4aaf9f3d --- /dev/null +++ b/Resources/Locale/en-US/weapons/extenddescriptions/descriptions.ftl @@ -0,0 +1 @@ +gun-legality-salvage = This weapon is licensed for use in planetary expeditions. It is unlawful to brandish this weapon aboard NanoTrasen stations, and may be confiscated by Security if removed from the station's Salvage Department. diff --git a/Resources/Prototypes/Catalog/Fills/Lockers/cargo.yml b/Resources/Prototypes/Catalog/Fills/Lockers/cargo.yml index 374e6ec4e7..7ac65ddd56 100644 --- a/Resources/Prototypes/Catalog/Fills/Lockers/cargo.yml +++ b/Resources/Prototypes/Catalog/Fills/Lockers/cargo.yml @@ -15,8 +15,6 @@ - id: RadioHandheld - id: FlashlightSeclite - id: Pickaxe - - id: SeismicCharge - amount: 2 - id: ClothingShoesBootsWinterMiner #Delta V: Add departmental winter boots - id: JetpackMiniFilled # DeltaV - Salv lost their shuttle - id: OreBag @@ -45,8 +43,6 @@ - id: RadioHandheld - id: FlashlightSeclite - id: Pickaxe - - id: SeismicCharge - amount: 2 - id: ClothingShoesBootsWinterMiner #Delta V: Add departmental winter boots - id: JetpackMiniFilled # DeltaV - Salv lost their shuttle - id: OreBag diff --git a/Resources/Prototypes/DeltaV/Catalog/VendingMachines/Inventories/salvage_points.yml b/Resources/Prototypes/DeltaV/Catalog/VendingMachines/Inventories/salvage_points.yml index e460d2a537..349c14cdc0 100644 --- a/Resources/Prototypes/DeltaV/Catalog/VendingMachines/Inventories/salvage_points.yml +++ b/Resources/Prototypes/DeltaV/Catalog/VendingMachines/Inventories/salvage_points.yml @@ -11,7 +11,7 @@ - id: Soap cost: 200 - id: SeismicCharge - cost: 250 + cost: 1500 - id: WeaponGrapplingGun cost: 300 # TODO: laser pointer 300, toy facehugger 300 @@ -40,17 +40,17 @@ cost: 1000 # TODO: lazarus injector for 1k - id: WeaponSniperMosinEmpty - cost: 750 # Literally the worst gun in the game. + cost: 1500 - id: WeaponRevolverArgentiEmpty - cost: 1100 + cost: 4400 - id: WeaponRifleNovaliteC1Empty - cost: 1300 + cost: 5200 - id: ClothingBackpackDuffelSalvageConscription cost: 1500 - id: WeaponRifleGestioEmpty - cost: 1600 + cost: 6400 - id: WeaponRifleSVTEmpty - cost: 1600 + cost: 6400 - id: SpaceCash1000 cost: 2000 # TODO: super resonator for 2500 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Basic/base_legality.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Basic/base_legality.yml new file mode 100644 index 0000000000..e69de29bb2 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Basic/pka.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Basic/pka.yml index 226fa29164..6af389fed4 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Basic/pka.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Basic/pka.yml @@ -11,5 +11,11 @@ - state: animation-icon visible: false map: [ "empty-icon" ] + - type: ExtendDescription + descriptionList: + - description: "gun-legality-salvage" + fontSize: 12 + color: "#ff4f00" + requireDetailRange: false # todo: add itemcomponent with inhandVisuals states using unused texture and animation assets in kinetic_accelerator.rsi # todo: add clothingcomponent with clothingVisuals states using unused texture and animations assets in kinetic_accelerator.rsi diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Snipers/snipers.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Snipers/snipers.yml index 5804850055..865252a1df 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Snipers/snipers.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Snipers/snipers.yml @@ -119,6 +119,12 @@ components: - type: BallisticAmmoProvider proto: null + - type: ExtendDescription + descriptionList: + - description: "gun-legality-salvage" + fontSize: 12 + color: "#ff4f00" + requireDetailRange: false - type: entity name: Hristov diff --git a/Resources/Prototypes/_NF/Entities/Objects/Weapons/Guns/Revolvers/revolvers.yml b/Resources/Prototypes/_NF/Entities/Objects/Weapons/Guns/Revolvers/revolvers.yml index 4ea8711a78..e44399f6bc 100644 --- a/Resources/Prototypes/_NF/Entities/Objects/Weapons/Guns/Revolvers/revolvers.yml +++ b/Resources/Prototypes/_NF/Entities/Objects/Weapons/Guns/Revolvers/revolvers.yml @@ -38,8 +38,15 @@ - type: entity parent: WeaponRevolverArgenti id: WeaponRevolverArgentiEmpty + suffix: Empty components: - type: RevolverAmmoProvider capacity: 8 chambers: [ False, False, False, False, False, False, False, False ] ammoSlots: [ null, null, null, null, null, null, null, null ] + - type: ExtendDescription + descriptionList: + - description: "gun-legality-salvage" + fontSize: 12 + color: "#ff4f00" + requireDetailRange: false diff --git a/Resources/Prototypes/_NF/Entities/Objects/Weapons/Guns/Rifles/rifles.yml b/Resources/Prototypes/_NF/Entities/Objects/Weapons/Guns/Rifles/rifles.yml index d1bc77b002..a2d93631db 100644 --- a/Resources/Prototypes/_NF/Entities/Objects/Weapons/Guns/Rifles/rifles.yml +++ b/Resources/Prototypes/_NF/Entities/Objects/Weapons/Guns/Rifles/rifles.yml @@ -15,7 +15,7 @@ - type: Clothing sprite: _NF/Objects/Weapons/Guns/Rifles/gestio.rsi - type: Gun - fireRate: 3.75 + fireRate: 1.5 projectileSpeed: 30 angleDecay: 4 #in testing 3 was more balanced angleIncrease: 6 @@ -88,11 +88,13 @@ - type: entity parent: WeaponRifleGestio id: WeaponRifleGestioEmpty + suffix: Empty components: - type: ItemSlots slots: gun_magazine: name: Magazine + startingItem: null insertSound: /Audio/Weapons/Guns/MagIn/ltrifle_magin.ogg ejectSound: /Audio/Weapons/Guns/MagOut/ltrifle_magout.ogg priority: 2 @@ -101,10 +103,17 @@ - MagazineLightRifle gun_chamber: name: Chamber + startingItem: null priority: 1 whitelist: tags: - CartridgeLightRifle + - type: ExtendDescription + descriptionList: + - description: "gun-legality-salvage" + fontSize: 12 + color: "#ff4f00" + requireDetailRange: false - type: entity parent: BaseWeaponRifle @@ -122,7 +131,7 @@ - type: Clothing sprite: _NF/Objects/Weapons/Guns/Rifles/novalitec1.rsi - type: Gun - fireRate: 4 + fireRate: 2 selectedMode: SemiAuto availableModes: - SemiAuto @@ -184,11 +193,13 @@ - type: entity parent: WeaponRifleNovaliteC1 id: WeaponRifleNovaliteC1Empty + suffix: Empty components: - type: ItemSlots slots: gun_magazine: name: Magazine + startingItem: null insertSound: /Audio/Weapons/Guns/MagIn/ltrifle_magin.ogg ejectSound: /Audio/Weapons/Guns/MagOut/ltrifle_magout.ogg priority: 2 @@ -197,10 +208,17 @@ - MagazineNovaliteC1 gun_chamber: name: Chamber + startingItem: null priority: 1 whitelist: tags: - CartridgeRifle + - type: ExtendDescription + descriptionList: + - description: "gun-legality-salvage" + fontSize: 12 + color: "#ff4f00" + requireDetailRange: false - type: entity id: WeaponRifleSVT @@ -223,7 +241,7 @@ - Back - suitStorage - type: Gun - fireRate: 4 + fireRate: 3 selectedMode: SemiAuto availableModes: - SemiAuto @@ -262,11 +280,13 @@ - type: entity parent: WeaponRifleSVT id: WeaponRifleSVTEmpty + suffix: Empty components: - type: ItemSlots slots: gun_magazine: name: Magazine + startingItem: null insertSound: /Audio/Weapons/Guns/MagIn/ltrifle_magin.ogg ejectSound: /Audio/Weapons/Guns/MagOut/ltrifle_magout.ogg priority: 2 @@ -275,7 +295,14 @@ - MagazineLightRifle gun_chamber: name: Chamber + startingItem: null priority: 1 whitelist: tags: - CartridgeLightRifle + - type: ExtendDescription + descriptionList: + - description: "gun-legality-salvage" + fontSize: 12 + color: "#ff4f00" + requireDetailRange: false From 401c85ed341d138eca072879ebe3bcedaa298527 Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Mon, 13 Jan 2025 05:57:16 +0000 Subject: [PATCH 36/39] Automatic Changelog Update (#1521) --- Resources/Changelog/Changelog.yml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index b237ec9aba..bdf09d1010 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -9783,3 +9783,16 @@ Entries: id: 6684 time: '2025-01-12T23:11:11.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1457 +- author: VMSolidus + changes: + - type: Add + message: 'Added a legality notice to the description of salvage''s firearms. ' + - type: Tweak + message: The mining points cost of all salvage firearms have been increased by 4x + - type: Remove + message: >- + Salvage no longer starts with bombs in their lockers. Buy them with your + mining points. + id: 6685 + time: '2025-01-13T05:56:48.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1521 From a36cffda175c9c0a45fe6c726a6d7d0ce47c15f9 Mon Sep 17 00:00:00 2001 From: sleepyyapril Date: Mon, 13 Jan 2025 01:58:10 -0400 Subject: [PATCH 37/39] ! --- .../Entities/Objects/Devices/Circuitboards/Machine/holopad.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/holopad.yml b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/holopad.yml index 450a43c8d1..7db35c0890 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/holopad.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/holopad.yml @@ -6,7 +6,8 @@ components: - type: MachineBoard prototype: Holopad - stackRequirements: + requirements: Capacitor: 4 + materialRequirements: Cable: 4 Glass: 2 \ No newline at end of file From 81b4b5d1ff5df05f323b5f449166b5f16e64804a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 13 Jan 2025 02:03:05 -0400 Subject: [PATCH 38/39] Update Credits (#1504) This is an automated Pull Request. This PR updates the GitHub contributors in the credits section. Co-authored-by: SimpleStation Changelogs Co-authored-by: sleepyyapril <123355664+sleepyyapril@users.noreply.github.com> --- Resources/Credits/GitHub.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Credits/GitHub.txt b/Resources/Credits/GitHub.txt index 22e7aef8a9..9871cc3f2d 100644 --- a/Resources/Credits/GitHub.txt +++ b/Resources/Credits/GitHub.txt @@ -1 +1 @@ -0x6273, 2013HORSEMEATSCANDAL, 20kdc, 21Melkuu, 4dplanner, 612git, 778b, Ablankmann, Acruid, actioninja, adamsong, Admiral-Obvious-001, Adrian16199, Aerocrux, Aexxie, africalimedrop, Agoichi, Ahion, AJCM-git, AjexRose, Alekshhh, AlexMorgan3817, AlmondFlour, AlphaQwerty, Altoids1, amylizzle, ancientpower, angelofallars, ArchPigeon, Arendian, arimah, Arteben, AruMoon, as334, AsikKEsel, asperger-sind, aspiringLich, avghdev, AzzyIsNotHere, BananaFlambe, BasedUser, beck-thompson, BGare, BingoJohnson-zz, BismarckShuffle, Bixkitts, Blackern5000, Blazeror, BlueHNT, Boaz1111, BobdaBiscuit, brainfood1183, BramvanZijp, Brandon-Huu, Bribrooo, Bright0, brndd, BubblegumBlue, BYONDFuckery, c4llv07e, CaasGit, CakeQ, CaptainSqrBeard, Carbonhell, Carolyn3114, CatTheSystem, Centronias, chairbender, Charlese2, Cheackraze, cheesePizza2, Chief-Engineer, chromiumboy, Chronophylos, CilliePaint, clorl, Clyybber, CodedCrow, ColdAutumnRain, Colin-Tel, collinlunn, ComicIronic, coolmankid12345, corentt, crazybrain23, creadth, CrigCrag, Crotalus, CrudeWax, CrzyPotato, Cyberboss, d34d10cc, Daemon, daerSeebaer, dahnte, dakamakat, dakimasu, DamianX, DangerRevolution, daniel-cr, Darkenson, DawBla, dch-GH, Deahaka, DEATHB4DEFEAT, DeathCamel58, deathride58, DebugOk, Decappi, Deeeeja, deepdarkdepths, Delete69, deltanedas, DeltaV-Bot, DerbyX, DoctorBeard, DogZeroX, dontbetank, dootythefrooty, Doru991, DoubleRiceEddiedd, DrMelon, DrSmugleaf, drteaspoon420, DTanxxx, DubiousDoggo, Duddino, Dutch-VanDerLinde, Easypoller, eclips_e, EdenTheLiznerd, EEASAS, Efruit, ElectroSR, elthundercloud, Emisse, EmoGarbage404, Endecc, enumerate0, eoineoineoin, ERORR404V1, Errant-4, estacaoespacialpirata, Evgencheg, exincore, exp111, Fahasor, FairlySadPanda, Fansana, ficcialfaint, Fildrance, FillerVK, Fishfish458, Flareguy, FluffiestFloof, FluidRock, FoLoKe, fooberticus, Fortune117, FoxxoTrystan, freeman2651, Froffy025, Fromoriss, FungiFellow, GalacticChimp, gbasood, Geekyhobo, geraeumig, Git-Nivrak, github-actions[bot], gituhabu, gluesniffler, GNF54, Golinth, GoodWheatley, graevy, GreyMario, Guess-My-Name, gusxyz, h3half, Hanzdegloker, Hardly3D, harikattar, HerCoyote23, HoofedEar, Hoolny, hord-brayden, hubismal, Hugal31, Huxellberger, iacore, IamVelcroboy, icekot8, igorsaux, ike709, Illiux, Ilya246, IlyaElDunaev, Injazz, Insineer, Interrobang01, IProduceWidgets, ItsMeThom, Jackal298, Jackrost, jamessimo, janekvap, JerryImMouse, Jessetriesagain, jessicamaybe, Jezithyr, jicksaw, JiimBob, JoeHammad1844, JohnGinnane, johnku1, joshepvodka, jproads, Jrpl, juliangiebel, JustArt1m, JustCone14, JustinTrotter, KaiShibaa, kalane15, kalanosh, Kelrak, kerisargit, keronshb, KIBORG04, Killerqu00, KingFroozy, kira-er, Kit0vras, KittenColony, Ko4ergaPunk, komunre, koteq, Krunklehorn, kxvvv, Lamrr, LankLTE, lapatison, Leander-0, leonardo-dabepis, LetterN, Level10Cybermancer, lever1209, liltenhead, LittleBuilderJane, Lomcastar, LordCarve, LordEclipse, LovelyLophi, Lukasz825700516, lunarcomets, luringens, lvvova1, lzimann, lzk228, MACMAN2003, Macoron, MagnusCrowe, ManelNavola, Matz05, MehimoNemo, MeltedPixel, MemeProof, Menshin, Mervill, metalgearsloth, mhamsterr, MilenVolf, Minty642, Mirino97, mirrorcult, misandrie, MishaUnity, MisterMecky, Mith-randalf, Mnemotechnician, Moneyl, Moomoobeef, moony, Morb0, Mr0maks, musicmanvr, Myakot, Myctai, N3X15, Nairodian, Naive817, namespace-Memory, NickPowers43, nikthechampiongr, Nimfar11, Nirnael, nmajask, nok-ko, notafet, notquitehadouken, noudoit, nuke-haus, NULL882, nyeogmi, OCOtheOmega, OctoRocket, OldDanceJacket, onoira, osjarw, Owai-Seek, pali6, Pangogie, patrikturi, PaulRitter, Peptide90, peptron1, Phantom-Lily, PHCodes, PixelTheKermit, PJB3005, Plykiya, pofitlo, pointer-to-null, PolterTzi, PoorMansDreams, potato1234x, ProfanedBane, PrPleGoo, ps3moira, Pspritechologist, Psychpsyo, psykzz, PuroSlavKing, quatre, QuietlyWhisper, qwerltaz, Radosvik, Radrark, Rainbeon, Rainfey, Rane, ravage123321, rbertoche, Redict, RedlineTriad, RednoWCirabrab, RemberBM, RemieRichards, RemTim, rene-descartes2021, RiceMar1244, RieBi, Rinkashikachi, Rockdtben, rolfero, rosieposieeee, Saakra, Samsterious, SaphireLattice, ScalyChimp, scrato, Scribbles0, Serkket, ShadowCommander, Shadowtheprotogen546, ShatteredSwords, SignalWalker, SimpleStation14, Simyon264, Sirionaut, siyengar04, Skarletto, Skrauz, Skyedra, SlamBamActionman, slarticodefast, Slava0135, SleepyScarecrow, Snowni, snowsignal, SonicHDC, SoulSloth, SpaceManiac, SpeltIncorrectyl, spoogemonster, ssdaniel24, stalengd, Stealthbomber16, stellar-novas, StrawberryMoses, superjj18, SweptWasTaken, Szunti, TadJohnson00, takemysoult, TaralGit, Tayrtahn, tday93, TekuNut, TemporalOroboros, tentekal, tgrkzus, thatrandomcanadianguy, TheArturZh, theashtronaut, thedraccx, themias, Theomund, theOperand, TheShuEd, TimrodDX, Titian3, tkdrg, Tmanzxd, tmtmtl30, TokenStyle, tom-leys, tomasalves8, Tomeno, Tornado-Technology, tosatur, Tryded, TsjipTsjip, Tunguso4ka, TurboTrackerss14, Tyler-IN, Tyzemol, UbaserB, UKNOWH, UnicornOnLSD, Uriende, UristMcDorf, Vaaankas, Varen, VasilisThePikachu, veliebm, Veritius, Vermidia, Verslebas, VigersRay, Visne, VMSolidus, volundr-, Voomra, Vordenburg, vulppine, wafehling, WarMechanic, waylon531, weaversam8, whateverusername0, Willhelm53, Winkarst-cpu, wixoaGit, WlarusFromDaSpace, wrexbe, xRiriq, yathxyz, Ygg01, YotaXP, YuriyKiss, zach-hill, Zandario, Zap527, Zealith-Gamer, ZelteHonor, zerorulez, zionnBE, ZNixian, ZoldorfTheWizard, Zumorica, Zymem +0x6273, 13spacemen, 2013HORSEMEATSCANDAL, 20kdc, 21Melkuu, 2digitman, 4310v343k, 4dplanner, 612git, 778b, Ablankmann, abregado, Absolute-Potato, Acruid, actioninja, actually-reb, ada-please, adamsong, Adeinitas, Admiral-Obvious-001, adrian, Adrian16199, Aerocrux, Aexolott, Aexxie, africalimedrop, afrokada, Agoichi, Ahion, Aidenkrz, Aikakakah, aitorlogedo, ajcm, AJCM-git, AjexRose, Alekshhh, alexkar598, AlexMorgan3817, alexumandxgabriel08x, Alithsko, AlmondFlour, ALMv1, AlphaQwerty, Altoids1, amylizzle, ancientpower, Andre19926, AndrewEyeke, angelofallars, Anzarot121, Appiah, ar4ill, ArchPigeon, ArchRBX, areitpog, Arendian, arimah, Arkanic, armoks, Arteben, ArthurMousatov, AruMoon, as334, AsikKEsel, asperger-sind, aspiringlich, aspiringLich, astriloqua, avghdev, AzzyIsNotHere, BananaFlambe, BasedPugilist, BasedUser, beck-thompson, benev0, BGare, bhespiritu, BingoJohnson-zz, BismarckShuffle, Bixkitts, Blackern5000, Blazeror, bloodrizer, Bloody2372, blueDev2, BlueHNT, Boaz1111, BobdaBiscuit, BobTheSleder, boiled-water-tsar, BombasterDS, botanySupremist, brainfood1183, BramvanZijp, Brandon-Huu, Bribrooo, Bright0, brndd, bryce0110, BubblegumBlue, buletsponge, BYONDFuckery, c0rigin, c4llv07e, CaasGit, capnsockless, CaptainSqrBeard, Carbonhell, Carolyn3114, Carou02, carteblanche4me, CatTheSystem, Centronias, CerberusWolfie, chairbender, Charlese2, chavonadelal, Cheackraze, cheesePizza2, Chief-Engineer, christhirtle, chromiumboy, Chronophylos, Chubbygummibear, CilliePaint, civilCornball, Clement-O, clyf, Clyybber, CMDR-Piboy314, CodedCrow, Cohnway, cojoke-dot, ColdAutumnRain, Colin-Tel, collinlunn, ComicIronic, coolmankid12345, corentt, CormosLemming, CrafterKolyan, crazybrain23, creadth, CrigCrag, croilbird, Crotalus, CrudeWax, CrzyPotato, Cyberboss, d34d10cc, DadeKuma, Daemon, daerSeebaer, dahnte, dakamakat, DamianX, DangerRevolution, daniel-cr, DanSAussieITS, Daracke, DarkenedSynergy, Darkenson, DawBla, Daxxi3, dch-GH, Deahaka, dean, DEATHB4DEFEAT, DeathCamel58, deathride58, DebugOk, Decappi, Deeeeja, deepdarkdepths, degradka, Delete69, deltanedas, DeltaV-Bot, DerbyX, derek, dersheppard, dexlerxd, dffdff2423, dge21, digitalic, DinoWattz, DJB1gYAPPA, DjfjdfofdjfjD, DocNITE, DoctorBeard, DogZeroX, dolgovmi, dontbetank, Doomsdrayk, dootythefrooty, Dorragon, Doru991, DoubleRiceEddiedd, DoutorWhite, drakewill-CRL, Drayff, dribblydrone, DrMelon, drongood12, DrSingh, DrSmugleaf, drteaspoon420, DTanxxx, DubiousDoggo, Duddino, dukevanity, Dutch-VanDerLinde, dvir001, dylanstrategie, Dynexust, Easypoller, eclips_e, eden077, EEASAS, Efruit, efzapa, ElectroSR, elsie, elthundercloud, Emisse, emmafornash, EmoGarbage404, Endecc, enumerate0, eoineoineoin, eris, ERORR404V1, Errant-4, esguard, estacaoespacialpirata, eugene, Evgencheg, ewokswagger, exincore, exp111, f0x-n3rd, FacePluslll, Fahasor, FairlySadPanda, Fansana, Feluk6174, fenndragon, ficcialfaint, Fiftyllama, Fildrance, FillerVK, FinnishPaladin, FirinMaLazors, Fishfish458, fl-oz, Flareguy, FluffiestFloof, FluffMe, FluidRock, flybik, flyingkarii, FoLoKe, fooberticus, ForestNoises, forgotmyotheraccount, forkeyboards, forthbridge, Fortune117, Fouin, foxhorn, FoxxoTrystan, freeman2651, freeze2222, Froffy025, Fromoriss, froozigiusz, FrostMando, FungiFellow, GalacticChimp, Gaxeer, gbasood, gcoremans, Geekyhobo, genderGeometries, GeneralGaws, Genkail, geraeumig, Ghagliiarghii, ghost581x, Git-Nivrak, gituhabu, GlassEclipse, gluesniffler, GNF54, Golinth, GoodWheatley, gradientvera, graevy, GraniteSidewalk, GreaseMonk, greenrock64, greggthefather, GreyMario, GTRsound, Guess-My-Name, gusxyz, h3half, Haltell, Hanzdegloker, Hardly3D, harikattar, Hebi, Henry, HerCoyote23, hiucko, Hmeister-fake, Hmeister-real, hobnob, HoidC, Holinka4ever, holyssss, HoofedEar, Hoolny, hord-brayden, hubismal, Hugal31, Huxellberger, Hyenh, i-justuser-i, iacore, IamVelcroboy, icekot8, icesickleone, Ichaie, iczero, iglov, igorsaux, ike709, illersaver, Illiux, Ilushkins33, Ilya246, IlyaElDunaev, indeano, Injazz, Insineer, IntegerTempest, Interrobang01, Intoxicating-Innocence, IProduceWidgets, ItsMeThom, Itzbenz, Jackal298, Jackrost, jacksonzck, Jackw2As, jamessimo, janekvap, Jark255, Jaskanbe, JasperJRoth, jerryimmouse, JerryImMouse, Jessetriesagain, jessicamaybe, Jezithyr, jicksaw, JiimBob, JimGamemaster, jjtParadox, JoeHammad1844, JohnGinnane, johnku1, joshepvodka, Jrpl, juliangiebel, juniwoofs, JustArt1m, JustCone14, justin, justintether, JustinTrotter, justtne, K-Dynamic, k3yw, Kadeo64, KaiShibaa, kalane15, kalanosh, Keelin, Keer-Sar, KEEYNy, keikiru, Kelrak, kerisargit, keronshb, KIBORG04, Killerqu00, Kimpes, KingFroozy, kira-er, Kirillcas, Kistras, Kit0vras, KittenColony, klaypexx, Kmc2000, Ko4ergaPunk, kognise, komunre, KonstantinAngelov, koteq, Krunklehorn, Kukutis96513, Kupie, kxvvv, Kyoth25f, kzhanik, lajolico, Lamrr, LankLTE, laok233, lapatison, larryrussian, lawdog4817, Lazzi0706, Leander-0, leonardo-dabepis, leonsfriedrich, lettern, LetterN, Level10Cybermancer, LEVELcat, lever1209, Lgibb18, LightVillet, liltenhead, LinkUyx, LittleBuilderJane, lizelive, lleftTheDragon, localcc, Lomcastar, LordCarve, LordEclipse, LovelyLophi, luckyshotpictures, LudwigVonChesterfield, Lukasz825700516, Lumminal, lunarcomets, luringens, lvvova1, lzimann, lzk228, M3739, mac6na6na, MACMAN2003, Macoron, magmodius, MagnusCrowe, malchanceux, MaloTV, ManelNavola, Mangohydra, marboww, Markek1, Matz05, max, MaxNox7, MehimoNemo, MeltedPixel, MemeProof, MendaxxDev, Menshin, Mephisto72, Mervill, metalgearsloth, mhamsterr, michaelcu, micheel665, Mike32oz, MilenVolf, milon, Minty642, Mirino97, mirrorcult, misandrie, MishaUnity, MisterMecky, Mith-randalf, MjrLandWhale, MLGTASTICa, Mnemotechnician, moderatelyaware, mokiros, Moneyl, Moomoobeef, moony, Morb0, mr-bo-jangles, Mr0maks, MrFippik, musicmanvr, MWKane, Myakot, Myctai, N3X15, nails-n-tape, Nairodian, Naive817, namespace-Memory, Nannek, neuPanda, NickPowers43, nikthechampiongr, Nimfar11, Nirnael, NIXC, NkoKirkto, nmajask, noctyrnal, nok-ko, NonchalantNoob, NoobyLegion, not-gavnaed, notafet, notquitehadouken, noudoit, noverd, NuclearWinter, nukashimika, nuke-haus, NULL882, nullarmo, nyeogmi, Nylux, Nyranu, och-och, OCOtheOmega, OctoRocket, OldDanceJacket, osjarw, Ostaf, othymer, OttoMaticode, Owai-Seek, paigemaeforrest, pali6, Pangogie, panzer-iv1, paolordls, partyaddict, patrikturi, PaulRitter, Peptide90, peptron1, PeterFuto, PetMudstone, pewter-wiz, Phantom-Lily, PHCodes, Phill101, phunnyguy, pigeonpeas, PilgrimViis, Pill-U, Pireax, pissdemon, PixelTheKermit, PJB3005, Plasmaguy, PlasmaRaptor, plinyvic, Plykiya, pofitlo, pointer-to-null, poklj, PolterTzi, PoorMansDreams, potato1234x, PotentiallyTom, ProfanedBane, ProPandaBear, PrPleGoo, ps3moira, Pspritechologist, Psychpsyo, psykzz, PuceTint, PuroSlavKing, PursuitInAshes, Putnam3145, qrtDaniil, quatre, QuietlyWhisper, qwerltaz, Radezolid, RadioMull, Radosvik, Radrark, RadsammyT, Rainbeon, Rainfey, Raitononai, randy10122, Rane, Ranger6012, Rapidgame7, ravage123321, rbertoche, Redfire1331, RedFoxIV, Redict, RedlineTriad, RednoWCirabrab, RemberBM, RemieRichards, RemTim, Remuchi, rene-descartes2021, Renlou, retequizzle, rich-dunne, RieBi, riggleprime, RIKELOLDABOSS, Rinkashikachi, RobbyTheFish, Rockdtben, Rohesie, rok-povsic, rolfero, RomanNovo, rosieposieeee, router, RumiTiger, S1ss3l, Saakra, saga3152, Salex08, sam, Samsterious, SaphireLattice, SapphicOverload, sapphirescript, SaveliyM360, sBasalto, ScalyChimp, scrato, Scribbles0, scuffedjays, ScumbagDog, Segonist, sephtasm, Serkket, sewerpig, ShadowCommander, shadowtheprotogen546, shadowwailker, shaeone, shampunj, shariathotpatrol, ShatteredSwords, SignalWalker, siigiil, SimpleStation14, Simyon264, sirdragooon, Sirionaut, Sk1tch, SkaldetSkaeg, Skarletto, Skrauz, Skyedra, SlamBamActionman, slarticodefast, Slava0135, SleepyScarecrow, sleepyyapril, Slyfox333, snebl, sniperchance, Snowni, snowsignal, SonicHDC, SoulFN, SoulSloth, Soundwavesghost, southbridge-fur, SpaceManiac, SpaceRox1244, SpaceyLady, spartak, SpartanKadence, Spatison, SpeltIncorrectyl, SphiraI, SplinterGP, spoogemonster, sporekto, Squishy77, ssdaniel24, stalengd, stanberytrask, Stanislav4ix, StanTheCarpenter, Stealthbomber16, stellar-novas, stopbreaking, stopka-html, StrawberryMoses, Stray-Pyramid, Strol20, StStevens, Subversionary, sunbear-dev, superjj18, Supernorn, suraru, SweptWasTaken, Sybil, SYNCHRONIC, Szunti, TadJohnson00, takemysoult, TaralGit, Taran, Tayrtahn, tday93, TekuNut, telyonok, TemporalOroboros, tentekal, terezi4real, Terraspark4941, texcruize, TGRCdev, tgrkzus, thatrandomcanadianguy, TheArturZh, theashtronaut, TheCze, TheDarkElites, thedraccx, TheEmber, TheIntoxicatedCat, thekilk, themias, theomund, TherapyGoth, TheShuEd, thevinter, ThunderBear2006, Timemaster99, timothyteakettle, TimrodDX, tin-man-tim, Tirochora, Titian3, tk-a369, tkdrg, Tmanzxd, tmtmtl30, toasterpm87, TokenStyle, Tollhouse, tom-leys, tomasalves8, Tomeno, Tonydatguy, topy, tornado-technology, Tornado-Technology, tosatur, TotallyLemon, truepaintgit, Tryded, TsjipTsjip, Tunguso4ka, TurboTrackerss14, twoducksonnaplane, Tyler-IN, Tyzemol, UbaserB, ubis1, UBlueberry, UKNOWH, UltimateJester, Unbelievable-Salmon, underscorex5, UnicornOnLSD, unusualcrow, Uriende, UristMcDorf, user424242420, v0idRift, Vaaankas, valentfingerov, Varen, VasilisThePikachu, veliebm, VelonacepsCalyxEggs, veprolet, Veritius, Vermidia, vero5123, Verslebas, VigersRay, violet754, Visne, vlados1408, VMSolidus, volotomite, volundr-, Voomra, Vordenburg, vulppine, wafehling, Warentan, WarMechanic, Watermelon914, waylon531, weaversam8, wertanchik, whateverusername0, Willhelm53, WilliamECrew, willicassi, Winkarst-cpu, wirdal, wixoaGit, WlarusFromDaSpace, wrexbe, WTCWR68, xkreksx, xqzpop7, xRiriq, YanehCheck, yathxyz, Ygg01, YotaXP, youarereadingthis, Yousifb26, yunii, yuriykiss, YuriyKiss, zach-hill, Zadeon, zamp, Zandario, Zap527, Zealith-Gamer, zelezniciar1, ZelteHonor, ZeroDiamond, zerorulez, ZeWaka, zionnBE, ZNixian, ZoldorfTheWizard, Zymem, zzylex From cf39230a9ba92ec897af088dab9964e679a5b2d3 Mon Sep 17 00:00:00 2001 From: sleepyyapril Date: Sun, 12 Jan 2025 21:24:05 -0400 Subject: [PATCH 39/39] fix repeating standing/laying bug --- Content.Shared/Buckle/SharedBuckleSystem.Buckle.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Content.Shared/Buckle/SharedBuckleSystem.Buckle.cs b/Content.Shared/Buckle/SharedBuckleSystem.Buckle.cs index c323f3dfb7..733454d46b 100644 --- a/Content.Shared/Buckle/SharedBuckleSystem.Buckle.cs +++ b/Content.Shared/Buckle/SharedBuckleSystem.Buckle.cs @@ -360,7 +360,7 @@ private void Buckle(Entity buckle, Entity strap switch (strap.Comp.Position) { case StrapPosition.Stand: - _standing.Stand(buckle); + _standing.Stand(buckle, force: true); break; case StrapPosition.Down: _standing.Down(buckle, false, false); @@ -512,4 +512,4 @@ private bool CanUnbuckle(Entity buckle, EntityUid? user, bool return !unstrapAttempt.Cancelled; } -} \ No newline at end of file +}