From a8453723d8cab94adf2cfafce31fabf44f871637 Mon Sep 17 00:00:00 2001 From: Whatstone <166147148+whatston3@users.noreply.github.com> Date: Mon, 29 Jun 2026 06:18:44 -0400 Subject: [PATCH 01/47] Cleanup: ProtoMan Part 1 - remove Shared EntitySystem IPrototypeManager instances (#44386) * Remove Shared System IPrototypeManager instances * Remove RecipeManager IPrototypeManager instance * Fix ItemSystem IPrototypeManager refs, use TryComp * SharedItemSystem changes, EntWhitelist CompName * HasComponent->HasComp --- .../EntitySystems/ChemistryGuideDataSystem.cs | 9 ++-- .../Construction/ConstructionSystem.cs | 11 +++-- Content.Client/Construction/FlatpackSystem.cs | 2 +- Content.Client/Decals/DecalSystem.cs | 2 +- .../SprayPainter/SprayPainterSystem.cs | 6 +-- .../EntitySystems/AtmosphereSystem.Gases.cs | 3 -- .../EntitySystems/ChemistryGuideDataSystem.cs | 6 +-- .../Construction/ConstructionSystem.Graph.cs | 10 ++--- .../Construction/ConstructionSystem.Guided.cs | 7 ++- .../ConstructionSystem.Initial.cs | 8 ++-- Content.Server/Decals/DecalSystem.cs | 7 +-- .../Parallax/BiomeSystem.Commands.cs | 8 ++-- Content.Server/Parallax/BiomeSystem.cs | 10 ++--- Content.Server/RatKing/RatKingSystem.cs | 2 +- .../Systems/ResearchSystem.Console.cs | 3 +- .../Systems/ResearchSystem.Technology.cs | 4 +- Content.Server/Sandbox/SandboxSystem.cs | 2 +- .../Borgs/BorgSwitchableTypeSystem.cs | 4 +- .../SprayPainter/SprayPainterSystem.cs | 2 +- .../Store/Systems/StoreSystem.Ui.cs | 4 +- .../VendingMachines/VendingMachineSystem.cs | 7 ++- .../Weapons/Ranged/Systems/GunSystem.cs | 5 +-- .../Artifact/XenoArtifactSystem.ProcGen.cs | 4 +- .../Access/Systems/AccessReaderSystem.cs | 5 +-- .../Access/Systems/SharedAccessSystem.cs | 8 +--- .../Access/Systems/SharedIdCardSystem.cs | 3 +- .../Access/Systems/SharedJobStatusSystem.cs | 3 +- Content.Shared/Alert/AlertsSystem.cs | 3 +- Content.Shared/Animals/ShearableSystem.cs | 7 ++- Content.Shared/Anomaly/SharedAnomalySystem.cs | 7 ++- .../SharedAtmosPipeLayersSystem.cs | 5 +-- Content.Shared/BarSign/BarSignSystem.cs | 9 ++-- Content.Shared/Body/SharedVisualBodySystem.cs | 3 +- .../Body/Systems/SharedBloodstreamSystem.cs | 11 +++-- .../Systems/ChangelingClonerSystem.cs | 3 +- .../Systems/ChangelingTransformSystem.cs | 3 +- Content.Shared/Chat/SharedChatSystem.Emote.cs | 6 +-- Content.Shared/Chat/SharedChatSystem.cs | 15 +++---- Content.Shared/Chat/SharedSuicideSystem.cs | 5 +-- .../Chemistry/EntitySystems/InjectorSystem.cs | 29 ++++++------ .../SharedSolutionContainerSystem.cs | 45 +++++++++---------- .../Reaction/ChemicalReactionSystem.cs | 9 ++-- Content.Shared/Chemistry/ReactiveSystem.cs | 3 +- .../SharedChemistryGuideDataSystem.cs | 3 -- .../SharedChameleonClothingSystem.cs | 21 +++++---- Content.Shared/Clothing/LoadoutSystem.cs | 21 +++++---- .../SharedComponentTableSystem.cs | 4 +- .../Construction/MachinePartSystem.cs | 16 +++---- .../Construction/SharedConstructionSystem.cs | 4 +- .../Construction/SharedFlatpackSystem.cs | 7 ++- .../Containers/ContainerCompSystem.cs | 6 +-- Content.Shared/Contraband/ContrabandSystem.cs | 9 ++-- .../Damage/Systems/DamageExamineSystem.cs | 3 +- .../Damage/Systems/DamageableSystem.API.cs | 4 +- .../Damage/Systems/DamageableSystem.Events.cs | 6 +-- .../Damage/Systems/DamageableSystem.cs | 5 +-- .../Damage/Systems/SharedGodmodeSystem.cs | 5 +-- Content.Shared/Decals/SharedDecalSystem.cs | 2 - .../DeviceLinking/SharedDeviceLinkSystem.cs | 15 +++---- .../SharedEntityConditionsSystem.Nested.cs | 4 +- .../SharedEntityEffectsSystem.Nested.cs | 4 +- .../Conditions/HasBudgetCondition.cs | 2 +- .../EntityTable/EntityTableSystem.cs | 7 ++- .../Fluids/EntitySystems/DrainSystem.cs | 3 +- .../EntitySystems/SolutionDumpingSystem.cs | 3 +- .../Fluids/SharedAbsorbentSystem.cs | 5 +-- .../Fluids/SharedPuddleSystem.Evaporation.cs | 6 +-- .../Fluids/SharedPuddleSystem.Spillable.cs | 5 +-- Content.Shared/Fluids/SharedPuddleSystem.cs | 15 +++---- .../GhostTypes/GhostSpriteStateSystem.cs | 3 +- .../StoreDamageTakenOnMindSystem.cs | 3 +- .../Humanoid/HumanoidProfileSystem.cs | 5 +-- .../Humanoid/Markings/MarkingManager.cs | 4 +- Content.Shared/Humanoid/NamingSystem.cs | 15 +++---- .../Implants/SharedImplanterSystem.cs | 3 +- .../Inventory/InventorySystem.Helpers.cs | 2 +- .../Inventory/InventorySystem.Slots.cs | 3 +- Content.Shared/Item/SharedItemSystem.cs | 15 +++---- Content.Shared/Kitchen/RecipeManager.cs | 4 +- .../Kitchen/SharedKitchenSpikeSystem.cs | 5 +-- Content.Shared/Lathe/SharedLatheSystem.cs | 23 +++++----- .../UnpoweredFlashlightSystem.cs | 4 +- .../Materials/SharedMaterialStorageSystem.cs | 7 ++- .../SuitSensors/SharedSuitSensorSystem.cs | 3 +- Content.Shared/Medical/VomitSystem.cs | 5 +-- .../Metabolism/MetabolizerSystem.cs | 4 +- .../NPC/Systems/NpcFactionSystem.cs | 9 ++-- .../SharedNameIdentifierSystem.cs | 5 +-- .../EntitySystems/FlavorProfileSystem.cs | 5 +-- .../EntitySystems/FoodSequenceSystem.cs | 11 +++-- .../Nutrition/EntitySystems/HungerSystem.cs | 7 ++- .../EntitySystems/IngestionSystem.API.cs | 11 +++-- .../EntitySystems/IngestionSystem.cs | 3 +- .../PressurizedSolutionSystem.cs | 4 +- .../Nutrition/EntitySystems/ThirstSystem.cs | 8 ++-- .../Systems/SharedObjectivesSystem.cs | 3 +- Content.Shared/Paper/PaperSystem.cs | 3 +- .../Parallax/Biomes/SharedBiomeSystem.cs | 11 ++--- .../ParcelWrappingSystem.ParcelWrap.cs | 3 +- .../Plunger/Systems/PlungerSystem.cs | 5 +-- .../Systems/SharedChameleonProjectorSystem.cs | 5 +-- Content.Shared/RCD/Systems/RCDSystem.cs | 17 ++++--- .../EntitySystems/EncryptionKeySystem.cs | 11 ++--- Content.Shared/RatKing/SharedRatKingSystem.cs | 2 - .../Research/Systems/SharedResearchSystem.cs | 21 +++++---- .../Systems/TechnologyDiskSystem.cs | 13 +++--- Content.Shared/Roles/Jobs/SharedJobSystem.cs | 13 +++--- Content.Shared/Roles/SharedRoleSystem.cs | 15 +++---- .../Salvage/SharedSalvageSystem.Magnet.cs | 8 ++-- Content.Shared/Salvage/SharedSalvageSystem.cs | 7 ++- Content.Shared/Sandbox/SharedSandboxSystem.cs | 3 -- .../Borgs/SharedBorgSwitchableTypeSystem.cs | 5 +-- .../SharedStationAiSystem.Customization.cs | 6 +-- .../StationAi/SharedStationAiSystem.cs | 1 - .../EntitySystems/SharedEmitterSystem.cs | 5 +-- .../Species/Systems/GibActionSystem.cs | 5 +-- .../Species/Systems/ReformSystem.cs | 4 +- .../SprayPainter/SharedSprayPainterSystem.cs | 6 +-- .../Stacks/SharedStackSystem.API.cs | 12 ++--- Content.Shared/Stacks/SharedStackSystem.cs | 3 -- .../Station/SharedStationSpawningSystem.cs | 12 ++--- .../StatusEffect/StatusEffectsSystem.cs | 14 +++--- .../StatusEffectNew/StatusEffectsSystem.cs | 5 +-- .../Storage/EntitySystems/DumpableSystem.cs | 5 +-- .../EntitySystems/SharedStorageSystem.cs | 16 +++---- .../Store/SharedStoreSystem.Listings.cs | 4 +- Content.Shared/Store/SharedStoreSystem.cs | 2 - .../EntitySystems/StoryGeneratorSystem.cs | 5 +-- Content.Shared/Tag/TagSystem.cs | 4 +- .../Tiles/ReplaceFloorOnSpawnSystem.cs | 4 +- .../Systems/SharedToolSystem.MultipleTool.cs | 2 +- .../Tools/Systems/SharedToolSystem.cs | 4 +- .../Systems/RandomTriggerOnTriggerSystem.cs | 4 +- .../Trigger/Systems/WeatherTriggerSystem.cs | 4 +- .../SharedVendingMachineSystem.cs | 5 +-- .../Weapons/Melee/SharedMeleeWeaponSystem.cs | 5 +-- .../Systems/BatteryWeaponFireModesSystem.cs | 7 ++- .../Ranged/Systems/SharedGunSystem.Battery.cs | 6 +-- .../Systems/SharedGunSystem.Cartridges.cs | 4 +- .../Weapons/Ranged/Systems/SharedGunSystem.cs | 1 - .../EntityWhitelistSystem.Prototype.cs | 8 ++-- .../Whitelist/EntityWhitelistSystem.cs | 11 +++-- .../Artifact/SharedXenoArtifactSystem.Node.cs | 2 +- .../Artifact/SharedXenoArtifactSystem.cs | 2 - .../XAT/XATDamageThresholdReachedSystem.cs | 6 +-- 145 files changed, 408 insertions(+), 585 deletions(-) diff --git a/Content.Client/Chemistry/EntitySystems/ChemistryGuideDataSystem.cs b/Content.Client/Chemistry/EntitySystems/ChemistryGuideDataSystem.cs index 099a36754d..a28699ec24 100644 --- a/Content.Client/Chemistry/EntitySystems/ChemistryGuideDataSystem.cs +++ b/Content.Client/Chemistry/EntitySystems/ChemistryGuideDataSystem.cs @@ -4,7 +4,6 @@ using Content.Shared.Atmos.Prototypes; using Content.Shared.Body; using Content.Shared.Chemistry; using Content.Shared.Chemistry.Components; -using Content.Shared.Chemistry.Components.SolutionManager; using Content.Shared.Chemistry.Reaction; using Content.Shared.Chemistry.Reagent; using Content.Shared.Kitchen.Components; @@ -53,12 +52,12 @@ public sealed partial class ChemistryGuideDataSystem : SharedChemistryGuideDataS { // this doesn't check what prototypes are being reloaded because, to be frank, we use a lot of them. _reagentSources.Clear(); - foreach (var reagent in PrototypeManager.EnumeratePrototypes()) + foreach (var reagent in ProtoMan.EnumeratePrototypes()) { _reagentSources.Add(reagent.ID, new()); } - foreach (var reaction in PrototypeManager.EnumeratePrototypes()) + foreach (var reaction in ProtoMan.EnumeratePrototypes()) { if (!reaction.Source) continue; @@ -72,7 +71,7 @@ public sealed partial class ChemistryGuideDataSystem : SharedChemistryGuideDataS } } - foreach (var gas in PrototypeManager.EnumeratePrototypes()) + foreach (var gas in ProtoMan.EnumeratePrototypes()) { if (gas.Reagent == null) continue; @@ -85,7 +84,7 @@ public sealed partial class ChemistryGuideDataSystem : SharedChemistryGuideDataS // store the names of the entities used so we don't get repeats in the guide. var usedNames = new List(); - foreach (var entProto in PrototypeManager.EnumeratePrototypes()) + foreach (var entProto in ProtoMan.EnumeratePrototypes()) { if (entProto.Abstract || usedNames.Contains(entProto.Name)) continue; diff --git a/Content.Client/Construction/ConstructionSystem.cs b/Content.Client/Construction/ConstructionSystem.cs index e38b13a7dd..bf780fde7e 100644 --- a/Content.Client/Construction/ConstructionSystem.cs +++ b/Content.Client/Construction/ConstructionSystem.cs @@ -14,7 +14,6 @@ using Robust.Shared.Input.Binding; using Robust.Shared.Map; using Robust.Shared.Player; using Robust.Shared.Prototypes; -using Robust.Shared.Utility; namespace Content.Client.Construction { @@ -87,9 +86,9 @@ namespace Content.Client.Construction { _recipesMetadataCache.Clear(); - foreach (var constructionProto in PrototypeManager.EnumeratePrototypes()) + foreach (var constructionProto in ProtoMan.EnumeratePrototypes()) { - if (!PrototypeManager.Resolve(constructionProto.Graph, out var graphProto)) + if (!ProtoMan.Resolve(constructionProto.Graph, out var graphProto)) continue; if (constructionProto.TargetNode is not { } targetNodeId) @@ -130,7 +129,7 @@ namespace Content.Client.Construction // If we got the id of the prototype, we exit the “recursion” by clearing the stack. stack.Clear(); - if (!PrototypeManager.Resolve(entityId, out var proto)) + if (!ProtoMan.Resolve(entityId, out var proto)) continue; var name = constructionProto.SetName.HasValue ? Loc.GetString(constructionProto.SetName) : proto.Name; @@ -178,7 +177,7 @@ namespace Content.Client.Construction "construction-ghost-examine-message", ("name", component.Prototype.Name))); - if (!PrototypeManager.Resolve(component.Prototype.Graph, out var graph)) + if (!ProtoMan.Resolve(component.Prototype.Graph, out var graph)) return; var startNode = graph.Nodes[component.Prototype.StartNode]; @@ -279,7 +278,7 @@ namespace Content.Client.Construction return false; } - if (!TryGetRecipePrototype(prototype.ID, out var targetProtoId) || !PrototypeManager.TryIndex(targetProtoId, out EntityPrototype? targetProto)) + if (!TryGetRecipePrototype(prototype.ID, out var targetProtoId) || !ProtoMan.TryIndex(targetProtoId, out EntityPrototype? targetProto)) return false; if (GhostPresent(loc)) diff --git a/Content.Client/Construction/FlatpackSystem.cs b/Content.Client/Construction/FlatpackSystem.cs index 4aea528298..6475b667fb 100644 --- a/Content.Client/Construction/FlatpackSystem.cs +++ b/Content.Client/Construction/FlatpackSystem.cs @@ -25,7 +25,7 @@ public sealed partial class FlatpackSystem : SharedFlatpackSystem if (!_appearance.TryGetData(ent, FlatpackVisuals.Machine, out var machineBoardId) || args.Sprite == null) return; - if (!PrototypeManager.TryIndex(machineBoardId, out var machineBoardPrototype)) + if (!ProtoMan.TryIndex(machineBoardId, out var machineBoardPrototype)) return; if (!machineBoardPrototype.TryGetComponent(out var sprite, EntityManager.ComponentFactory)) diff --git a/Content.Client/Decals/DecalSystem.cs b/Content.Client/Decals/DecalSystem.cs index 2b4b7c6583..54fcacf97e 100644 --- a/Content.Client/Decals/DecalSystem.cs +++ b/Content.Client/Decals/DecalSystem.cs @@ -22,7 +22,7 @@ namespace Content.Client.Decals { base.Initialize(); - _overlay = new DecalOverlay(_sprites, EntityManager, PrototypeManager); + _overlay = new DecalOverlay(_sprites, EntityManager, ProtoMan); _overlayManager.AddOverlay(_overlay); SubscribeLocalEvent(OnHandleState); diff --git a/Content.Client/SprayPainter/SprayPainterSystem.cs b/Content.Client/SprayPainter/SprayPainterSystem.cs index e4d288d7cc..13b04141e3 100644 --- a/Content.Client/SprayPainter/SprayPainterSystem.cs +++ b/Content.Client/SprayPainter/SprayPainterSystem.cs @@ -60,12 +60,12 @@ public sealed partial class SprayPainterSystem : SharedSprayPainterSystem { PaintableGroupsByCategory.Clear(); PaintableStylesByGroup.Clear(); - foreach (var category in Proto.EnumeratePrototypes().OrderBy(x => x.ID)) + foreach (var category in ProtoMan.EnumeratePrototypes().OrderBy(x => x.ID)) { var groupList = new List(); foreach (var groupId in category.Groups) { - if (!Proto.Resolve(groupId, out var group)) + if (!ProtoMan.Resolve(groupId, out var group)) continue; groupList.Add(groupId); @@ -77,7 +77,7 @@ public sealed partial class SprayPainterSystem : SharedSprayPainterSystem } Decals.Clear(); - foreach (var decalPrototype in Proto.EnumeratePrototypes().OrderBy(x => x.ID)) + foreach (var decalPrototype in ProtoMan.EnumeratePrototypes().OrderBy(x => x.ID)) { if (!decalPrototype.Tags.Contains("station") && !decalPrototype.Tags.Contains("markings") diff --git a/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Gases.cs b/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Gases.cs index a8febc3e7f..18ab10a0e7 100644 --- a/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Gases.cs +++ b/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Gases.cs @@ -5,14 +5,11 @@ using Content.Server.Atmos.Reactions; using Content.Shared.Atmos; using Content.Shared.Atmos.Reactions; using JetBrains.Annotations; -using Robust.Shared.Prototypes; -using DependencyAttribute = Robust.Shared.IoC.DependencyAttribute; namespace Content.Server.Atmos.EntitySystems { public sealed partial class AtmosphereSystem { - private GasReactionPrototype[] _gasReactions = []; /// diff --git a/Content.Server/Chemistry/EntitySystems/ChemistryGuideDataSystem.cs b/Content.Server/Chemistry/EntitySystems/ChemistryGuideDataSystem.cs index 0077e99fbf..739e5504ae 100644 --- a/Content.Server/Chemistry/EntitySystems/ChemistryGuideDataSystem.cs +++ b/Content.Server/Chemistry/EntitySystems/ChemistryGuideDataSystem.cs @@ -26,9 +26,9 @@ public sealed partial class ChemistryGuideDataSystem : SharedChemistryGuideDataS private void InitializeServerRegistry() { var changeset = new ReagentGuideChangeset(new Dictionary(), new HashSet()); - foreach (var proto in PrototypeManager.EnumeratePrototypes()) + foreach (var proto in ProtoMan.EnumeratePrototypes()) { - var entry = new ReagentGuideEntry(proto, PrototypeManager, EntityManager.EntitySysManager); + var entry = new ReagentGuideEntry(proto, ProtoMan, EntityManager.EntitySysManager); changeset.GuideEntries.Add(proto.ID, entry); Registry[proto.ID] = entry; } @@ -56,7 +56,7 @@ public sealed partial class ChemistryGuideDataSystem : SharedChemistryGuideDataS foreach (var (id, proto) in reagents.Modified) { var reagentProto = (ReagentPrototype) proto; - var entry = new ReagentGuideEntry(reagentProto, PrototypeManager, EntityManager.EntitySysManager); + var entry = new ReagentGuideEntry(reagentProto, ProtoMan, EntityManager.EntitySysManager); changeset.GuideEntries.Add(id, entry); Registry[id] = entry; } diff --git a/Content.Server/Construction/ConstructionSystem.Graph.cs b/Content.Server/Construction/ConstructionSystem.Graph.cs index a3f3bcc42a..5fdaf65ada 100644 --- a/Content.Server/Construction/ConstructionSystem.Graph.cs +++ b/Content.Server/Construction/ConstructionSystem.Graph.cs @@ -1,11 +1,9 @@ using Content.Server.Construction.Components; -using Content.Server.Containers; using Content.Shared.Construction; using Content.Shared.Construction.Prototypes; using Content.Shared.Construction.Steps; using Content.Shared.Containers; using Content.Shared.Database; -using Robust.Server.Containers; using Robust.Shared.Containers; using Robust.Shared.Prototypes; using System.Linq; @@ -50,7 +48,7 @@ namespace Content.Server.Construction // If the set graph prototype does not exist, also return null. This could be due to admemes changing values // in ViewVariables, so even though the construction state is invalid, just return null. - return PrototypeManager.TryIndex(construction.Graph, out ConstructionGraphPrototype? graph) ? graph : null; + return ProtoMan.TryIndex(construction.Graph, out ConstructionGraphPrototype? graph) ? graph : null; } /// @@ -302,7 +300,7 @@ namespace Content.Server.Construction } // Exit if the new entity's prototype is the same as the original, or the prototype is invalid - if (newEntity == metaData.EntityPrototype?.ID || !PrototypeManager.HasIndex(newEntity)) + if (newEntity == metaData.EntityPrototype?.ID || !ProtoMan.HasIndex(newEntity)) return null; // [Optional] Exit if the new entity's prototype is a parent of the original @@ -312,7 +310,7 @@ namespace Content.Server.Construction if (GetCurrentNode(uid, construction)?.DoNotReplaceInheritingEntities == true && metaData.EntityPrototype?.ID != null) { - var parents = PrototypeManager.EnumerateParents(metaData.EntityPrototype.ID)?.ToList(); + var parents = ProtoMan.EnumerateParents(metaData.EntityPrototype.ID)?.ToList(); if (parents != null && parents.Any(x => x.ID == newEntity)) return null; @@ -434,7 +432,7 @@ namespace Content.Server.Construction if (!Resolve(uid, ref construction)) return false; - if (!PrototypeManager.TryIndex(graphId, out var graph)) + if (!ProtoMan.TryIndex(graphId, out var graph)) return false; if (GetNodeFromGraph(graph, nodeId) is not { }) diff --git a/Content.Server/Construction/ConstructionSystem.Guided.cs b/Content.Server/Construction/ConstructionSystem.Guided.cs index 5c53cd20fb..e2c6c6cfd9 100644 --- a/Content.Server/Construction/ConstructionSystem.Guided.cs +++ b/Content.Server/Construction/ConstructionSystem.Guided.cs @@ -5,7 +5,6 @@ using Content.Shared.Construction.Steps; using Content.Shared.Examine; using Content.Shared.Popups; using Content.Shared.Verbs; -using Robust.Shared.Player; using Robust.Shared.Utility; namespace Content.Server.Construction @@ -25,7 +24,7 @@ namespace Content.Server.Construction private void OnGuideRequested(RequestConstructionGuide msg, EntitySessionEventArgs args) { - if (!PrototypeManager.TryIndex(msg.ConstructionId, out ConstructionPrototype? prototype)) + if (!ProtoMan.TryIndex(msg.ConstructionId, out ConstructionPrototype? prototype)) return; if(GetGuide(prototype) is {} guide) @@ -41,7 +40,7 @@ namespace Content.Server.Construction component.Node == component.DeconstructionNode) return; - if (!PrototypeManager.TryIndex(component.Graph, out ConstructionGraphPrototype? graph)) + if (!ProtoMan.TryIndex(component.Graph, out ConstructionGraphPrototype? graph)) return; if (component.DeconstructionNode == null) @@ -145,7 +144,7 @@ namespace Content.Server.Construction return guide; // If the graph doesn't actually exist, do nothing. - if (!PrototypeManager.Resolve(construction.Graph, out ConstructionGraphPrototype? graph)) + if (!ProtoMan.Resolve(construction.Graph, out ConstructionGraphPrototype? graph)) return null; // If either the start node or the target node are missing, do nothing. diff --git a/Content.Server/Construction/ConstructionSystem.Initial.cs b/Content.Server/Construction/ConstructionSystem.Initial.cs index f6bd10822c..7cb0283138 100644 --- a/Content.Server/Construction/ConstructionSystem.Initial.cs +++ b/Content.Server/Construction/ConstructionSystem.Initial.cs @@ -324,13 +324,13 @@ namespace Content.Server.Construction // LEGACY CODE. See warning at the top of the file! public async Task TryStartItemConstruction(string prototype, EntityUid user) { - if (!PrototypeManager.TryIndex(prototype, out ConstructionPrototype? constructionPrototype)) + if (!ProtoMan.TryIndex(prototype, out ConstructionPrototype? constructionPrototype)) { Log.Error($"Tried to start construction of invalid recipe '{prototype}'!"); return false; } - if (!PrototypeManager.TryIndex(constructionPrototype.Graph, + if (!ProtoMan.TryIndex(constructionPrototype.Graph, out ConstructionGraphPrototype? constructionGraph)) { Log.Error( @@ -403,14 +403,14 @@ namespace Content.Server.Construction // LEGACY CODE. See warning at the top of the file! private async void HandleStartStructureConstruction(TryStartStructureConstructionMessage ev, EntitySessionEventArgs args) { - if (!PrototypeManager.TryIndex(ev.PrototypeName, out ConstructionPrototype? constructionPrototype)) + if (!ProtoMan.TryIndex(ev.PrototypeName, out ConstructionPrototype? constructionPrototype)) { Log.Error($"Tried to start construction of invalid recipe '{ev.PrototypeName}'!"); RaiseNetworkEvent(new AckStructureConstructionMessage(ev.Ack)); return; } - if (!PrototypeManager.TryIndex(constructionPrototype.Graph, out ConstructionGraphPrototype? constructionGraph)) + if (!ProtoMan.TryIndex(constructionPrototype.Graph, out ConstructionGraphPrototype? constructionGraph)) { Log.Error($"Invalid construction graph '{constructionPrototype.Graph}' in recipe '{ev.PrototypeName}'!"); RaiseNetworkEvent(new AckStructureConstructionMessage(ev.Ack)); diff --git a/Content.Server/Decals/DecalSystem.cs b/Content.Server/Decals/DecalSystem.cs index c0efbc57df..ee5bdabc97 100644 --- a/Content.Server/Decals/DecalSystem.cs +++ b/Content.Server/Decals/DecalSystem.cs @@ -1,6 +1,4 @@ -using System.Linq; using System.Numerics; -using System.Threading.Tasks; using Content.Server.Administration.Logs; using Content.Server.Administration.Managers; using Content.Shared.Administration; @@ -9,7 +7,6 @@ using Content.Shared.Database; using Content.Shared.Decals; using Content.Shared.Maps; using Microsoft.Extensions.ObjectPool; -using Robust.Server.GameObjects; using Robust.Server.Player; using Robust.Shared; using Robust.Shared.Configuration; @@ -301,7 +298,7 @@ namespace Content.Server.Decals { decalId = 0; - if (!PrototypeManager.HasIndex(decal.Id)) + if (!ProtoMan.HasIndex(decal.Id)) return false; var gridId = _transform.GetGrid(coordinates); @@ -422,7 +419,7 @@ namespace Content.Server.Decals public bool SetDecalId(EntityUid gridId, uint decalId, string id, DecalGridComponent? comp = null) { - if (!PrototypeManager.HasIndex(id)) + if (!ProtoMan.HasIndex(id)) throw new ArgumentOutOfRangeException($"Tried to set decal id to invalid prototypeid: {id}"); return ModifyDecal(gridId, decalId, x => x.WithId(id), comp); diff --git a/Content.Server/Parallax/BiomeSystem.Commands.cs b/Content.Server/Parallax/BiomeSystem.Commands.cs index a915e17fcb..51aecd3fa5 100644 --- a/Content.Server/Parallax/BiomeSystem.Commands.cs +++ b/Content.Server/Parallax/BiomeSystem.Commands.cs @@ -70,7 +70,7 @@ public sealed partial class BiomeSystem return; } - if (!ProtoManager.TryIndex(args[1], out var template)) + if (!ProtoMan.TryIndex(args[1], out var template)) { return; } @@ -95,7 +95,7 @@ public sealed partial class BiomeSystem if (args.Length == 2) { return CompletionResult.FromHintOptions( - CompletionHelper.PrototypeIDs(proto: ProtoManager), "Biome template"); + CompletionHelper.PrototypeIDs(proto: ProtoMan), "Biome template"); } if (args.Length == 3) @@ -149,7 +149,7 @@ public sealed partial class BiomeSystem return; } - if (!ProtoManager.HasIndex(args[1])) + if (!ProtoMan.HasIndex(args[1])) { return; } @@ -180,7 +180,7 @@ public sealed partial class BiomeSystem if (args.Length == 2) { return CompletionResult.FromHintOptions( - CompletionHelper.PrototypeIDs(proto: ProtoManager), "Marker"); + CompletionHelper.PrototypeIDs(proto: ProtoMan), "Marker"); } return CompletionResult.Empty; diff --git a/Content.Server/Parallax/BiomeSystem.cs b/Content.Server/Parallax/BiomeSystem.cs index 840bbf25e5..9866934d8a 100644 --- a/Content.Server/Parallax/BiomeSystem.cs +++ b/Content.Server/Parallax/BiomeSystem.cs @@ -302,7 +302,7 @@ public sealed partial class BiomeSystem : SharedBiomeSystem foreach (var layer in markers) { - var proto = ProtoManager.Index(layer); + var proto = ProtoMan.Index(layer); var enumerator = new ChunkIndicesEnumerator(area, proto.Size); while (enumerator.MoveNext(out var chunk)) @@ -347,7 +347,7 @@ public sealed partial class BiomeSystem : SharedBiomeSystem foreach (var layer in biome.MarkerLayers) { - var layerProto = ProtoManager.Index(layer); + var layerProto = ProtoMan.Index(layer); AddMarkerChunksInRange(biome, worldPos, layerProto); } } @@ -368,7 +368,7 @@ public sealed partial class BiomeSystem : SharedBiomeSystem foreach (var layer in biome.MarkerLayers) { - var layerProto = ProtoManager.Index(layer); + var layerProto = ProtoMan.Index(layer); AddMarkerChunksInRange(biome, worldPos, layerProto); } } @@ -482,7 +482,7 @@ public sealed partial class BiomeSystem : SharedBiomeSystem // Essentially get the seed + work out a buffer to adjacent chunks so we don't // inadvertantly spawn too many near the edges. - var layerProto = ProtoManager.Index(layer); + var layerProto = ProtoMan.Index(layer); var markerSeed = seed + chunk.X * ChunkSize + chunk.Y + localIdx; var rand = new RobustRandom(); rand.SetSeed(markerSeed); @@ -713,7 +713,7 @@ public sealed partial class BiomeSystem : SharedBiomeSystem foreach (var (layer, nodes) in layers) { - var layerProto = ProtoManager.Index(layer); + var layerProto = ProtoMan.Index(layer); foreach (var node in nodes) { diff --git a/Content.Server/RatKing/RatKingSystem.cs b/Content.Server/RatKing/RatKingSystem.cs index b51a5a2000..6163034fa5 100644 --- a/Content.Server/RatKing/RatKingSystem.cs +++ b/Content.Server/RatKing/RatKingSystem.cs @@ -121,7 +121,7 @@ namespace Content.Server.RatKing base.DoCommandCallout(uid, component); if (!component.OrderCallouts.TryGetValue(component.CurrentOrder, out var datasetId) || - !PrototypeManager.TryIndex(datasetId, out var datasetPrototype)) + !ProtoMan.TryIndex(datasetId, out var datasetPrototype)) return; var msg = Random.Pick(datasetPrototype); diff --git a/Content.Server/Research/Systems/ResearchSystem.Console.cs b/Content.Server/Research/Systems/ResearchSystem.Console.cs index 559bd573e1..f31444d930 100644 --- a/Content.Server/Research/Systems/ResearchSystem.Console.cs +++ b/Content.Server/Research/Systems/ResearchSystem.Console.cs @@ -2,7 +2,6 @@ using Content.Server.Power.EntitySystems; using Content.Server.Research.Components; using Content.Shared.UserInterface; using Content.Shared.Access.Components; -using Content.Shared.Emag.Components; using Content.Shared.Emag.Systems; using Content.Shared.IdentityManagement; using Content.Shared.Research.Components; @@ -33,7 +32,7 @@ public sealed partial class ResearchSystem if (!this.IsPowered(uid, EntityManager)) return; - if (!PrototypeManager.TryIndex(args.Id, out var technologyPrototype)) + if (!ProtoMan.TryIndex(args.Id, out var technologyPrototype)) return; if (TryComp(uid, out var access) && !_accessReader.IsAllowed(act, uid, access)) diff --git a/Content.Server/Research/Systems/ResearchSystem.Technology.cs b/Content.Server/Research/Systems/ResearchSystem.Technology.cs index 3e8888276f..6e39991296 100644 --- a/Content.Server/Research/Systems/ResearchSystem.Technology.cs +++ b/Content.Server/Research/Systems/ResearchSystem.Technology.cs @@ -55,7 +55,7 @@ public sealed partial class ResearchSystem ResearchClientComponent? component = null, TechnologyDatabaseComponent? clientDatabase = null) { - if (!PrototypeManager.TryIndex(prototypeid, out var prototype)) + if (!ProtoMan.TryIndex(prototypeid, out var prototype)) return false; return UnlockTechnology(client, prototype, user, component, clientDatabase); @@ -99,7 +99,7 @@ public sealed partial class ResearchSystem if (!Resolve(uid, ref component)) return; - if (!PrototypeManager.TryIndex(technology, out var prototype)) + if (!ProtoMan.TryIndex(technology, out var prototype)) return; AddTechnology(uid, prototype, component); } diff --git a/Content.Server/Sandbox/SandboxSystem.cs b/Content.Server/Sandbox/SandboxSystem.cs index fd1dab29ca..1cc4f58d9e 100644 --- a/Content.Server/Sandbox/SandboxSystem.cs +++ b/Content.Server/Sandbox/SandboxSystem.cs @@ -122,7 +122,7 @@ namespace Content.Server.Sandbox return; } - var allAccess = PrototypeManager + var allAccess = ProtoMan .EnumeratePrototypes() .Select(p => new ProtoId(p.ID)).ToList(); diff --git a/Content.Server/Silicons/Borgs/BorgSwitchableTypeSystem.cs b/Content.Server/Silicons/Borgs/BorgSwitchableTypeSystem.cs index 2fbd10040b..3e74a8fb9d 100644 --- a/Content.Server/Silicons/Borgs/BorgSwitchableTypeSystem.cs +++ b/Content.Server/Silicons/Borgs/BorgSwitchableTypeSystem.cs @@ -18,7 +18,7 @@ public sealed partial class BorgSwitchableTypeSystem : SharedBorgSwitchableTypeS protected override void SelectBorgModule(Entity ent, ProtoId borgType) { - var prototype = Prototypes.Index(borgType); + var prototype = ProtoMan.Index(borgType); // Assign radio channels string[] radioChannels = [.. ent.Comp.InherentRadioChannels, .. prototype.RadioChannels]; @@ -60,7 +60,7 @@ public sealed partial class BorgSwitchableTypeSystem : SharedBorgSwitchableTypeS } // Configure special components - if (Prototypes.Resolve(ent.Comp.SelectedBorgType, out var previousPrototype)) + if (ProtoMan.Resolve(ent.Comp.SelectedBorgType, out var previousPrototype)) { if (previousPrototype.AddComponents is { } removeComponents) EntityManager.RemoveComponents(ent, removeComponents); diff --git a/Content.Server/SprayPainter/SprayPainterSystem.cs b/Content.Server/SprayPainter/SprayPainterSystem.cs index 3689361f7d..ecc4926cc1 100644 --- a/Content.Server/SprayPainter/SprayPainterSystem.cs +++ b/Content.Server/SprayPainter/SprayPainterSystem.cs @@ -118,7 +118,7 @@ public sealed partial class SprayPainterSystem : SharedSprayPainterSystem /// private bool IsDecalValid(Decal decal) { - if (!Proto.TryIndex(decal.Id, out var decalProto)) + if (!ProtoMan.TryIndex(decal.Id, out var decalProto)) return false; return (decalProto.Tags.Contains("station") diff --git a/Content.Server/Store/Systems/StoreSystem.Ui.cs b/Content.Server/Store/Systems/StoreSystem.Ui.cs index d0aa7de185..e8e2797e6b 100644 --- a/Content.Server/Store/Systems/StoreSystem.Ui.cs +++ b/Content.Server/Store/Systems/StoreSystem.Ui.cs @@ -232,7 +232,7 @@ public sealed partial class StoreSystem _admin.Add(LogType.StorePurchase, logImpact, - $"{ToPrettyString(buyer):player} purchased listing \"{ListingLocalisationHelpers.GetLocalisedNameOrEntityName(listing, Proto)}\" from {ToPrettyString(uid)}{logExtraInfo}."); + $"{ToPrettyString(buyer):player} purchased listing \"{ListingLocalisationHelpers.GetLocalisedNameOrEntityName(listing, ProtoMan)}\" from {ToPrettyString(uid)}{logExtraInfo}."); listing.PurchaseAmount++; //track how many times something has been purchased if (msg.SoundSource != null && GetEntity(msg.SoundSource) != null) @@ -265,7 +265,7 @@ public sealed partial class StoreSystem return; //make sure a malicious client didn't send us random shit - if (!Proto.TryIndex(msg.Currency, out var proto)) + if (!ProtoMan.TryIndex(msg.Currency, out var proto)) return; //we need an actually valid entity to spawn. This check has been done earlier, but just in case. diff --git a/Content.Server/VendingMachines/VendingMachineSystem.cs b/Content.Server/VendingMachines/VendingMachineSystem.cs index 0b8d5b50b0..ea66c37f62 100644 --- a/Content.Server/VendingMachines/VendingMachineSystem.cs +++ b/Content.Server/VendingMachines/VendingMachineSystem.cs @@ -4,7 +4,6 @@ using Content.Server.Cargo.Systems; using Content.Server.Power.Components; using Content.Server.Vocalization.Systems; using Content.Shared.Cargo; -using Content.Shared.Damage; using Content.Shared.Damage.Systems; using Content.Shared.Emp; using Content.Shared.Power; @@ -44,7 +43,7 @@ namespace Content.Server.VendingMachines foreach (var entry in component.Inventory.Values) { - if (!PrototypeManager.TryIndex(entry.ID, out var proto)) + if (!ProtoMan.TryIndex(entry.ID, out var proto)) { Log.Error($"Unable to find entity prototype {entry.ID} on {ToPrettyString(uid)} vending."); continue; @@ -225,11 +224,11 @@ namespace Content.Server.VendingMachines { double total = 0; - if (PrototypeManager.TryIndex(vendingInventory, out VendingMachineInventoryPrototype? inventoryPrototype)) + if (ProtoMan.TryIndex(vendingInventory, out VendingMachineInventoryPrototype? inventoryPrototype)) { foreach (var (item, amount) in inventoryPrototype.StartingInventory) { - if (PrototypeManager.TryIndex(item, out EntityPrototype? entity)) + if (ProtoMan.TryIndex(item, out EntityPrototype? entity)) total += _pricing.GetEstimatedPrice(entity) * amount; } } diff --git a/Content.Server/Weapons/Ranged/Systems/GunSystem.cs b/Content.Server/Weapons/Ranged/Systems/GunSystem.cs index c26a0b43c7..774a23e87e 100644 --- a/Content.Server/Weapons/Ranged/Systems/GunSystem.cs +++ b/Content.Server/Weapons/Ranged/Systems/GunSystem.cs @@ -3,7 +3,6 @@ using Content.Server.Cargo.Systems; using Content.Server.Weapons.Ranged.Components; using Content.Shared.Cargo; using Content.Shared.Damage; -using Content.Shared.Damage.Systems; using Content.Shared.Projectiles; using Content.Shared.Weapons.Melee; using Content.Shared.Weapons.Ranged; @@ -39,7 +38,7 @@ public sealed partial class GunSystem : SharedGunSystem if (string.IsNullOrEmpty(ent.Comp.Proto) || ent.Comp.UnspawnedCount == 0) return; - if (!ProtoManager.TryIndex(ent.Comp.Proto, out var proto)) + if (!ProtoMan.TryIndex(ent.Comp.Proto, out var proto)) { Log.Error($"Unable to find fill prototype for price on {ent.Comp.Proto} on {ToPrettyString(ent)}"); return; @@ -272,7 +271,7 @@ public sealed partial class GunSystem : SharedGunSystem if (!forceWeaponSound && modifiedDamage != null && modifiedDamage.GetTotal() > 0 && TryComp(otherEntity, out var rangedSound)) { - var type = SharedMeleeWeaponSystem.GetHighestDamageSound(modifiedDamage, ProtoManager); + var type = SharedMeleeWeaponSystem.GetHighestDamageSound(modifiedDamage, ProtoMan); if (type != null && rangedSound.SoundTypes?.TryGetValue(type, out var damageSoundType) == true) { diff --git a/Content.Server/Xenoarchaeology/Artifact/XenoArtifactSystem.ProcGen.cs b/Content.Server/Xenoarchaeology/Artifact/XenoArtifactSystem.ProcGen.cs index 6d903460ad..878057d6c8 100644 --- a/Content.Server/Xenoarchaeology/Artifact/XenoArtifactSystem.ProcGen.cs +++ b/Content.Server/Xenoarchaeology/Artifact/XenoArtifactSystem.ProcGen.cs @@ -38,7 +38,7 @@ public sealed partial class XenoArtifactSystem private List CreateTriggerPool(Entity ent, int size) { var triggerPool = new List(size); - var weightsProto = PrototypeManager.Index(ent.Comp.TriggerWeights); + var weightsProto = ProtoMan.Index(ent.Comp.TriggerWeights); var weightsByTriggersLeft = new Dictionary(weightsProto.Weights); while (triggerPool.Count < size) @@ -52,7 +52,7 @@ public sealed partial class XenoArtifactSystem var triggerId = RobustRandom.Pick(weightsByTriggersLeft); weightsByTriggersLeft.Remove(triggerId); - var trigger = PrototypeManager.Index(triggerId); + var trigger = ProtoMan.Index(triggerId); if (_entityWhitelist.IsWhitelistFail(trigger.Whitelist, ent)) continue; diff --git a/Content.Shared/Access/Systems/AccessReaderSystem.cs b/Content.Shared/Access/Systems/AccessReaderSystem.cs index 0ad75e7361..e0c61a9476 100644 --- a/Content.Shared/Access/Systems/AccessReaderSystem.cs +++ b/Content.Shared/Access/Systems/AccessReaderSystem.cs @@ -25,7 +25,6 @@ namespace Content.Shared.Access.Systems; public sealed partial class AccessReaderSystem : EntitySystem { - [Dependency] private IPrototypeManager _prototype = default!; [Dependency] private InventorySystem _inventorySystem = default!; [Dependency] private IGameTiming _gameTiming = default!; [Dependency] private EmagSystem _emag = default!; @@ -871,7 +870,7 @@ public sealed partial class AccessReaderSystem : EntitySystem private bool FindAccessTagsItem(EntityUid uid, out HashSet> tags) { tags = new(); - var ev = new GetAccessTagsEvent(tags, _prototype); + var ev = new GetAccessTagsEvent(tags, ProtoMan); RaiseLocalEvent(uid, ref ev); return tags.Count != 0; @@ -963,7 +962,7 @@ public sealed partial class AccessReaderSystem : EntitySystem { var accessName = Loc.GetString("access-reader-unknown-id"); - if (_prototype.Resolve(access, out var accessProto) && !string.IsNullOrWhiteSpace(accessProto.Name)) + if (ProtoMan.Resolve(access, out var accessProto) && !string.IsNullOrWhiteSpace(accessProto.Name)) accessName = Loc.GetString(accessProto.Name); sb.Append(Loc.GetString("access-reader-access-label", ("access", accessName))); diff --git a/Content.Shared/Access/Systems/SharedAccessSystem.cs b/Content.Shared/Access/Systems/SharedAccessSystem.cs index a2ac37fb91..6214dd663e 100644 --- a/Content.Shared/Access/Systems/SharedAccessSystem.cs +++ b/Content.Shared/Access/Systems/SharedAccessSystem.cs @@ -1,15 +1,11 @@ using Content.Shared.Access.Components; using Content.Shared.Roles; -using Robust.Shared.GameStates; using Robust.Shared.Prototypes; -using Robust.Shared.Serialization; namespace Content.Shared.Access.Systems { public abstract partial class SharedAccessSystem : EntitySystem { - [Dependency] private IPrototypeManager _prototypeManager = default!; - public override void Initialize() { base.Initialize(); @@ -23,7 +19,7 @@ namespace Content.Shared.Access.Systems // Add all tags in groups to the list of tags. foreach (var group in component.Groups) { - if (!_prototypeManager.Resolve(group, out var proto)) + if (!ProtoMan.Resolve(group, out var proto)) continue; component.Tags.UnionWith(proto.Tags); @@ -79,7 +75,7 @@ namespace Content.Shared.Access.Systems foreach (var group in newGroups) { - if (!_prototypeManager.Resolve(group, out var proto)) + if (!ProtoMan.Resolve(group, out var proto)) continue; access.Tags.UnionWith(proto.Tags); diff --git a/Content.Shared/Access/Systems/SharedIdCardSystem.cs b/Content.Shared/Access/Systems/SharedIdCardSystem.cs index 19edb37e72..1151a9c51f 100644 --- a/Content.Shared/Access/Systems/SharedIdCardSystem.cs +++ b/Content.Shared/Access/Systems/SharedIdCardSystem.cs @@ -24,7 +24,6 @@ public abstract partial class SharedIdCardSystem : EntitySystem [Dependency] private SharedHandsSystem _hands = default!; [Dependency] private InventorySystem _inventorySystem = default!; [Dependency] private MetaDataSystem _metaSystem = default!; - [Dependency] private IPrototypeManager _prototypeManager = default!; [Dependency] private SharedJobStatusSystem _jobStatus = default!; // CCVar. @@ -199,7 +198,7 @@ public abstract partial class SharedIdCardSystem : EntitySystem return false; id.JobDepartments.Clear(); - foreach (var department in _prototypeManager.EnumeratePrototypes()) + foreach (var department in ProtoMan.EnumeratePrototypes()) { if (department.Roles.Contains(job.ID)) id.JobDepartments.Add(department.ID); diff --git a/Content.Shared/Access/Systems/SharedJobStatusSystem.cs b/Content.Shared/Access/Systems/SharedJobStatusSystem.cs index dba4050f7a..bed592dfc5 100644 --- a/Content.Shared/Access/Systems/SharedJobStatusSystem.cs +++ b/Content.Shared/Access/Systems/SharedJobStatusSystem.cs @@ -11,7 +11,6 @@ namespace Content.Shared.Access.Systems; public abstract partial class SharedJobStatusSystem : EntitySystem { [Dependency] private AccessReaderSystem _accessReader = default!; - [Dependency] private IPrototypeManager _prototype = default!; private static readonly ProtoId JobIconForNoId = "JobIconNoId"; @@ -59,7 +58,7 @@ public abstract partial class SharedJobStatusSystem : EntitySystem } ent.Comp.JobStatusIcon = iconId; - ent.Comp.IsCrew = _prototype.Index(iconId).IsCrewJob; + ent.Comp.IsCrew = ProtoMan.Index(iconId).IsCrewJob; Dirty(ent); } } diff --git a/Content.Shared/Alert/AlertsSystem.cs b/Content.Shared/Alert/AlertsSystem.cs index 1997785f73..f5f7ba31cc 100644 --- a/Content.Shared/Alert/AlertsSystem.cs +++ b/Content.Shared/Alert/AlertsSystem.cs @@ -9,7 +9,6 @@ namespace Content.Shared.Alert; public abstract partial class AlertsSystem : EntitySystem { [Dependency] private IGameTiming _timing = default!; - [Dependency] private IPrototypeManager _prototypeManager = default!; [Dependency] private EntityQuery _alertsQuery = default!; private FrozenDictionary, AlertPrototype> _typeToAlert = default!; @@ -326,7 +325,7 @@ public abstract partial class AlertsSystem : EntitySystem protected virtual void LoadPrototypes() { var dict = new Dictionary, AlertPrototype>(); - foreach (var alert in _prototypeManager.EnumeratePrototypes()) + foreach (var alert in ProtoMan.EnumeratePrototypes()) { if (!dict.TryAdd(alert.ID, alert)) Log.Error($"Found alert with duplicate alertType {alert.ID} - all alerts must have a unique alertType, this one will be skipped"); diff --git a/Content.Shared/Animals/ShearableSystem.cs b/Content.Shared/Animals/ShearableSystem.cs index f964788904..306e5d6fa5 100644 --- a/Content.Shared/Animals/ShearableSystem.cs +++ b/Content.Shared/Animals/ShearableSystem.cs @@ -22,7 +22,6 @@ namespace Content.Shared.Animals; public sealed partial class SharedShearableSystem : EntitySystem { [Dependency] private IGameTiming _timing = default!; - [Dependency] private IPrototypeManager _proto = default!; [Dependency] private SharedAppearanceSystem _appearance = default!; [Dependency] private SharedDoAfterSystem _doAfter = default!; [Dependency] private SharedPopupSystem _popup = default!; @@ -136,7 +135,7 @@ public sealed partial class SharedShearableSystem : EntitySystem // Failed, if the entity has no solution then show a popup. if (shearingSolutionToRemove <= 0) { - var shearedProduct = _proto.Index(ent.Comp.ShearedProductId); + var shearedProduct = ProtoMan.Index(ent.Comp.ShearedProductId); var feedbackPopupString = Loc.GetString("shearable-system-no-product", ("target", Identity.Entity(ent.Owner, EntityManager)), ("product", shearedProduct.Name)); @@ -181,7 +180,7 @@ public sealed partial class SharedShearableSystem : EntitySystem } // Lookup some variables we need. - var shearedProduct = _proto.Index(ent.Comp.ShearedProductId); + var shearedProduct = ProtoMan.Index(ent.Comp.ShearedProductId); // Mark as handled so we don't duplicate. args.Handled = true; @@ -276,7 +275,7 @@ public sealed partial class SharedShearableSystem : EntitySystem { // Default to empty string, if we just can't resolve the tool quality for whatever reason localisation has a blank variable. var toolQuality = string.Empty; - var toolQualityProto = _proto.Index(ent.Comp.ToolQuality); + var toolQualityProto = ProtoMan.Index(ent.Comp.ToolQuality); // If a ToolQuality has been specified set its name to toolQuality so it appears in localisation. if (toolQualityProto is not null) { diff --git a/Content.Shared/Anomaly/SharedAnomalySystem.cs b/Content.Shared/Anomaly/SharedAnomalySystem.cs index 3615513887..939261d927 100644 --- a/Content.Shared/Anomaly/SharedAnomalySystem.cs +++ b/Content.Shared/Anomaly/SharedAnomalySystem.cs @@ -34,7 +34,6 @@ public abstract partial class SharedAnomalySystem : EntitySystem [Dependency] protected SharedAppearanceSystem Appearance = default!; [Dependency] private SharedPhysicsSystem _physics = default!; [Dependency] protected SharedPopupSystem Popup = default!; - [Dependency] private IPrototypeManager _prototype = default!; [Dependency] private SharedTransformSystem _transform = default!; [Dependency] private SharedMapSystem _map = default!; @@ -105,7 +104,7 @@ public abstract partial class SharedAnomalySystem : EntitySystem var powerMod = 1f; if (component.CurrentBehavior != null) { - var beh = _prototype.Index(component.CurrentBehavior); + var beh = ProtoMan.Index(component.CurrentBehavior); powerMod = beh.PulsePowerModifier; } var ev = new AnomalyPulseEvent(uid, component.Stability, component.Severity, powerMod); @@ -171,7 +170,7 @@ public abstract partial class SharedAnomalySystem : EntitySystem var powerMod = 1f; if (component.CurrentBehavior != null) { - var beh = _prototype.Index(component.CurrentBehavior); + var beh = ProtoMan.Index(component.CurrentBehavior); powerMod = beh.PulsePowerModifier; } @@ -312,7 +311,7 @@ public abstract partial class SharedAnomalySystem : EntitySystem //Apply behavior modifier if (component.CurrentBehavior != null) { - var behavior = _prototype.Index(component.CurrentBehavior.Value); + var behavior = ProtoMan.Index(component.CurrentBehavior.Value); lenght *= behavior.PulseFrequencyModifier; } return lenght; diff --git a/Content.Shared/Atmos/EntitySystems/SharedAtmosPipeLayersSystem.cs b/Content.Shared/Atmos/EntitySystems/SharedAtmosPipeLayersSystem.cs index d1ac4a550f..c70424f69f 100644 --- a/Content.Shared/Atmos/EntitySystems/SharedAtmosPipeLayersSystem.cs +++ b/Content.Shared/Atmos/EntitySystems/SharedAtmosPipeLayersSystem.cs @@ -21,7 +21,6 @@ namespace Content.Shared.Atmos.EntitySystems; public abstract partial class SharedAtmosPipeLayersSystem : EntitySystem { [Dependency] private SharedAppearanceSystem _appearance = default!; - [Dependency] private IPrototypeManager _protoManager = default!; [Dependency] private SharedToolSystem _tool = default!; [Dependency] private SharedHandsSystem _hands = default!; [Dependency] private SharedPopupSystem _popup = default!; @@ -52,7 +51,7 @@ public abstract partial class SharedAtmosPipeLayersSystem : EntitySystem if (ent.Comp.NumberOfPipeLayers <= 1 || ent.Comp.PipeLayersLocked) return; - if (!_protoManager.Resolve(ent.Comp.Tool, out var toolProto)) + if (!ProtoMan.Resolve(ent.Comp.Tool, out var toolProto)) return; var user = args.User; @@ -138,7 +137,7 @@ public abstract partial class SharedAtmosPipeLayersSystem : EntitySystem if (!TryGetHeldTool(args.User, ent.Comp.Tool, out var tool)) { - if (_protoManager.Resolve(ent.Comp.Tool, out var toolProto)) + if (ProtoMan.Resolve(ent.Comp.Tool, out var toolProto)) { var toolName = Loc.GetString(toolProto.ToolName).ToLower(); var message = Loc.GetString("atmos-pipe-layers-component-tool-missing", ("toolName", toolName)); diff --git a/Content.Shared/BarSign/BarSignSystem.cs b/Content.Shared/BarSign/BarSignSystem.cs index 42b2c22bea..d488d93117 100644 --- a/Content.Shared/BarSign/BarSignSystem.cs +++ b/Content.Shared/BarSign/BarSignSystem.cs @@ -8,7 +8,6 @@ namespace Content.Shared.BarSign; public sealed partial class BarSignSystem : EntitySystem { - [Dependency] private IPrototypeManager _prototypeManager = default!; [Dependency] private IRobustRandom _random = default!; [Dependency] private MetaDataSystem _metaData = default!; [Dependency] private SharedUserInterfaceSystem _ui = default!; @@ -33,8 +32,8 @@ public sealed partial class BarSignSystem : EntitySystem { BarSignPrototype? newPrototype; if (ent.Comp.Current is null) - newPrototype = _random.Pick(GetAllBarSigns(_prototypeManager)); - else if (!_prototypeManager.Resolve(ent.Comp.Current, out newPrototype)) + newPrototype = _random.Pick(GetAllBarSigns(ProtoMan)); + else if (!ProtoMan.Resolve(ent.Comp.Current, out newPrototype)) return; SetBarSign(ent, newPrototype); @@ -49,7 +48,7 @@ public sealed partial class BarSignSystem : EntitySystem private void OnSetBarSignMessage(Entity ent, ref SetBarSignMessage args) { - if (!_prototypeManager.Resolve(args.Sign, out var signPrototype)) + if (!ProtoMan.Resolve(args.Sign, out var signPrototype)) return; if (signPrototype.Hidden) @@ -60,7 +59,7 @@ public sealed partial class BarSignSystem : EntitySystem private void OnEmpPulse(Entity ent, ref EmpPulseEvent args) { - if (!_prototypeManager.Resolve(ent.Comp.Emped, out var empedPrototype)) + if (!ProtoMan.Resolve(ent.Comp.Emped, out var empedPrototype)) return; SetBarSign(ent, empedPrototype); diff --git a/Content.Shared/Body/SharedVisualBodySystem.cs b/Content.Shared/Body/SharedVisualBodySystem.cs index 743e7b1496..17b55522c9 100644 --- a/Content.Shared/Body/SharedVisualBodySystem.cs +++ b/Content.Shared/Body/SharedVisualBodySystem.cs @@ -12,7 +12,6 @@ namespace Content.Shared.Body; /// public abstract partial class SharedVisualBodySystem : EntitySystem { - [Dependency] private IPrototypeManager _prototype = default!; [Dependency] private MarkingManager _marking = default!; [Dependency] private SharedContainerSystem _container = default!; @@ -143,7 +142,7 @@ public abstract partial class SharedVisualBodySystem : EntitySystem if (!args.Args.Markings.TryGetValue(category, out var markingSet)) return; - var groupProto = _prototype.Index(ent.Comp.MarkingData.Group); + var groupProto = ProtoMan.Index(ent.Comp.MarkingData.Group); var organMarkings = ent.Comp.Markings.ShallowClone(); foreach (var layer in ent.Comp.MarkingData.Layers) diff --git a/Content.Shared/Body/Systems/SharedBloodstreamSystem.cs b/Content.Shared/Body/Systems/SharedBloodstreamSystem.cs index 52cb9812ab..ae44d693d7 100644 --- a/Content.Shared/Body/Systems/SharedBloodstreamSystem.cs +++ b/Content.Shared/Body/Systems/SharedBloodstreamSystem.cs @@ -30,7 +30,6 @@ public abstract partial class SharedBloodstreamSystem : EntitySystem { public static readonly EntProtoId Bloodloss = "StatusEffectBloodloss"; - [Dependency] protected IPrototypeManager PrototypeManager = default!; [Dependency] protected SharedSolutionContainerSystem SolutionContainer = default!; [Dependency] private IGameTiming _timing = default!; [Dependency] private SharedAudioSystem _audio = default!; @@ -128,7 +127,7 @@ public abstract partial class SharedBloodstreamSystem : EntitySystem // The DNA string might not be initialized yet, but the reagent data gets updated in the GenerateDnaEvent subscription var solution = entity.Comp.BloodReferenceSolution.Clone(); solution.ScaleTo(entity.Comp.BloodReferenceSolution.Volume - bloodSolution.Comp.Solution.Volume); - bloodSolution.Comp.Solution.AddSolution(solution, PrototypeManager); + bloodSolution.Comp.Solution.AddSolution(solution, ProtoMan); } // prevent the infamous UdderSystem debug assert, see https://github.com/space-wizards/space-station-14/pull/35314 @@ -195,7 +194,7 @@ public abstract partial class SharedBloodstreamSystem : EntitySystem } // TODO probably cache this or something. humans get hurt a lot - if (!PrototypeManager.Resolve(ent.Comp.DamageBleedModifiers, out var modifiers)) + if (!ProtoMan.Resolve(ent.Comp.DamageBleedModifiers, out var modifiers)) return; // some reagents may deal and heal different damage types in the same tick, which means DamageIncreased will be true @@ -483,7 +482,7 @@ public abstract partial class SharedBloodstreamSystem : EntitySystem if (!SolutionContainer.ResolveSolution(ent.Owner, ent.Comp.BloodTemporarySolutionName, ref ent.Comp.TemporarySolution, out var tempSolution)) return true; - tempSolution.AddSolution(leakedBlood, PrototypeManager); + tempSolution.AddSolution(leakedBlood, ProtoMan); if (tempSolution.Volume > ent.Comp.BleedPuddleThreshold) { @@ -535,14 +534,14 @@ public abstract partial class SharedBloodstreamSystem : EntitySystem if (SolutionContainer.ResolveSolution(ent.Owner, ent.Comp.BloodSolutionName, ref ent.Comp.BloodSolution, out var bloodSolution)) { tempSol.MaxVolume += bloodSolution.MaxVolume; - tempSol.AddSolution(bloodSolution, PrototypeManager); + tempSol.AddSolution(bloodSolution, ProtoMan); SolutionContainer.RemoveAllSolution(ent.Comp.BloodSolution.Value); } if (SolutionContainer.ResolveSolution(ent.Owner, ent.Comp.BloodTemporarySolutionName, ref ent.Comp.TemporarySolution, out var tempSolution)) { tempSol.MaxVolume += tempSolution.MaxVolume; - tempSol.AddSolution(tempSolution, PrototypeManager); + tempSol.AddSolution(tempSolution, ProtoMan); SolutionContainer.RemoveAllSolution(ent.Comp.TemporarySolution.Value); } diff --git a/Content.Shared/Changeling/Systems/ChangelingClonerSystem.cs b/Content.Shared/Changeling/Systems/ChangelingClonerSystem.cs index cb70c5d5c6..071844c87b 100644 --- a/Content.Shared/Changeling/Systems/ChangelingClonerSystem.cs +++ b/Content.Shared/Changeling/Systems/ChangelingClonerSystem.cs @@ -25,7 +25,6 @@ public sealed partial class ChangelingClonerSystem : EntitySystem [Dependency] private ISharedAdminLogManager _adminLogger = default!; [Dependency] private SharedAudioSystem _audio = default!; [Dependency] private SharedCloningSystem _cloning = default!; - [Dependency] private IPrototypeManager _prototype = default!; [Dependency] private SharedAppearanceSystem _appearance = default!; [Dependency] private SharedChangelingIdentitySystem _changelingIdentity = default!; [Dependency] private SharedForensicsSystem _forensics = default!; @@ -239,7 +238,7 @@ public sealed partial class ChangelingClonerSystem : EntitySystem if (!HasComp(target)) return; // cloning only works for humanoids at the moment - if (!_prototype.Resolve(ent.Comp.Settings, out var settings)) + if (!ProtoMan.Resolve(ent.Comp.Settings, out var settings)) return; _audio.PlayPredicted(ent.Comp.InjectSound, target, user); diff --git a/Content.Shared/Changeling/Systems/ChangelingTransformSystem.cs b/Content.Shared/Changeling/Systems/ChangelingTransformSystem.cs index 4c580b2409..e35a9cf5e9 100644 --- a/Content.Shared/Changeling/Systems/ChangelingTransformSystem.cs +++ b/Content.Shared/Changeling/Systems/ChangelingTransformSystem.cs @@ -27,7 +27,6 @@ public sealed partial class ChangelingTransformSystem : EntitySystem [Dependency] private SharedAudioSystem _audio = default!; [Dependency] private SharedCloningSystem _cloning = default!; [Dependency] private SharedVisualBodySystem _visualBody = default!; - [Dependency] private IPrototypeManager _prototype = default!; [Dependency] private SharedContainerSystem _container = default!; [Dependency] private IdentitySystem _identity = default!; [Dependency] private SharedChangelingIdentitySystem _changelingIdentity = default!; @@ -175,7 +174,7 @@ public sealed partial class ChangelingTransformSystem : EntitySystem } ent.Comp.CurrentTransformSound = null; - if (!_prototype.Resolve(ent.Comp.TransformCloningSettings, out var settings)) + if (!ProtoMan.Resolve(ent.Comp.TransformCloningSettings, out var settings)) return; if (args.Target is not { } targetIdentity) diff --git a/Content.Shared/Chat/SharedChatSystem.Emote.cs b/Content.Shared/Chat/SharedChatSystem.Emote.cs index c7b47a4321..8b4b8a1d91 100644 --- a/Content.Shared/Chat/SharedChatSystem.Emote.cs +++ b/Content.Shared/Chat/SharedChatSystem.Emote.cs @@ -13,7 +13,7 @@ public abstract partial class SharedChatSystem private void CacheEmotes() { var dict = new Dictionary(); - var emotes = _prototypeManager.EnumeratePrototypes(); + var emotes = ProtoMan.EnumeratePrototypes(); foreach (var emote in emotes) { foreach (var word in emote.ChatTriggers) @@ -57,7 +57,7 @@ public abstract partial class SharedChatSystem bool forceEmote = false ) { - if (!_prototypeManager.Resolve(emoteId, out var proto)) + if (!ProtoMan.Resolve(emoteId, out var proto)) return false; return TryEmoteWithChat(source, proto, range, hideLog: hideLog, nameOverride, ignoreActionBlocker: ignoreActionBlocker, forceEmote: forceEmote); @@ -109,7 +109,7 @@ public abstract partial class SharedChatSystem /// True if an emote was performed. False if the emote is unavailable, cancelled, etc. public bool TryEmoteWithoutChat(EntityUid uid, string emoteId, bool ignoreActionBlocker = false) { - if (!_prototypeManager.Resolve(emoteId, out var proto)) + if (!ProtoMan.Resolve(emoteId, out var proto)) return false; return TryEmoteWithoutChat(uid, proto, ignoreActionBlocker); diff --git a/Content.Shared/Chat/SharedChatSystem.cs b/Content.Shared/Chat/SharedChatSystem.cs index c90640cfe8..a4df6ff26d 100644 --- a/Content.Shared/Chat/SharedChatSystem.cs +++ b/Content.Shared/Chat/SharedChatSystem.cs @@ -44,7 +44,6 @@ public abstract partial class SharedChatSystem : EntitySystem public static readonly string DefaultChannelPrefix = $"{RadioChannelPrefix}{DefaultChannelKey}"; public static readonly ProtoId DefaultSpeechVerb = "Default"; - [Dependency] private IPrototypeManager _prototypeManager = default!; [Dependency] private SharedPopupSystem _popup = default!; [Dependency] private EntityWhitelistSystem _whitelist = default!; [Dependency] private ActionBlockerSystem _actionBlocker = default!; @@ -61,7 +60,7 @@ public abstract partial class SharedChatSystem : EntitySystem { base.Initialize(); - DebugTools.Assert(_prototypeManager.HasIndex(CommonChannel)); + DebugTools.Assert(ProtoMan.HasIndex(CommonChannel)); SubscribeLocalEvent(OnPrototypeReload); CacheRadios(); @@ -79,7 +78,7 @@ public abstract partial class SharedChatSystem : EntitySystem private void CacheRadios() { - _keyCodes = _prototypeManager.EnumeratePrototypes() + _keyCodes = ProtoMan.EnumeratePrototypes() .ToFrozenDictionary(x => x.KeyCode); } @@ -90,13 +89,13 @@ public abstract partial class SharedChatSystem : EntitySystem public SpeechVerbPrototype GetSpeechVerb(EntityUid source, string message, SpeechComponent? speech = null) { if (!Resolve(source, ref speech, false)) - return _prototypeManager.Index(DefaultSpeechVerb); + return ProtoMan.Index(DefaultSpeechVerb); // check for a suffix-applicable speech verb SpeechVerbPrototype? current = null; foreach (var (str, id) in speech.SuffixSpeechVerbs) { - var proto = _prototypeManager.Index(id); + var proto = ProtoMan.Index(id); if (message.EndsWith(Loc.GetString(str)) && proto.Priority >= (current?.Priority ?? 0)) { current = proto; @@ -104,7 +103,7 @@ public abstract partial class SharedChatSystem : EntitySystem } // if no applicable suffix verb return the normal one used by the entity - return current ?? _prototypeManager.Index(speech.SpeechVerb); + return current ?? ProtoMan.Index(speech.SpeechVerb); } /// @@ -162,7 +161,7 @@ public abstract partial class SharedChatSystem : EntitySystem if (input.StartsWith(RadioCommonPrefix)) { output = SanitizeMessageCapital(input[1..].TrimStart()); - channel = _prototypeManager.Index(CommonChannel); + channel = ProtoMan.Index(CommonChannel); return true; } @@ -187,7 +186,7 @@ public abstract partial class SharedChatSystem : EntitySystem RaiseLocalEvent(source, ev); if (ev.Channel != null) - _prototypeManager.TryIndex(ev.Channel, out channel); + ProtoMan.TryIndex(ev.Channel, out channel); return true; } diff --git a/Content.Shared/Chat/SharedSuicideSystem.cs b/Content.Shared/Chat/SharedSuicideSystem.cs index a2db279a36..01f88d9276 100644 --- a/Content.Shared/Chat/SharedSuicideSystem.cs +++ b/Content.Shared/Chat/SharedSuicideSystem.cs @@ -13,7 +13,6 @@ public sealed partial class SharedSuicideSystem : EntitySystem private static readonly ProtoId FallbackDamageType = "Blunt"; [Dependency] private DamageableSystem _damageableSystem = default!; - [Dependency] private IPrototypeManager _prototypeManager = default!; /// /// Applies lethal damage spread out across the damage types given. @@ -59,10 +58,10 @@ public sealed partial class SharedSuicideSystem : EntitySystem var lethalAmountOfDamage = mobThresholds.Thresholds.Keys.Last() - _damageableSystem.GetTotalDamage(target.AsNullable()); // We don't want structural damage for the same reasons listed above - if (!_prototypeManager.TryIndex(damageType, out var damagePrototype) || damagePrototype.ID == "Structural") + if (!ProtoMan.TryIndex(damageType, out var damagePrototype) || damagePrototype.ID == "Structural") { Log.Error($"{nameof(SharedSuicideSystem)} could not find the damage type prototype associated with {damageType}. Falling back to {FallbackDamageType}"); - damagePrototype = _prototypeManager.Index(FallbackDamageType); + damagePrototype = ProtoMan.Index(FallbackDamageType); } var damage = new DamageSpecifier(damagePrototype, lethalAmountOfDamage); diff --git a/Content.Shared/Chemistry/EntitySystems/InjectorSystem.cs b/Content.Shared/Chemistry/EntitySystems/InjectorSystem.cs index 1d42c005dc..c29d036cb4 100644 --- a/Content.Shared/Chemistry/EntitySystems/InjectorSystem.cs +++ b/Content.Shared/Chemistry/EntitySystems/InjectorSystem.cs @@ -32,7 +32,6 @@ namespace Content.Shared.Chemistry.EntitySystems; public sealed partial class InjectorSystem : EntitySystem { [Dependency] private ISharedAdminLogManager _adminLogger = default!; - [Dependency] private IPrototypeManager _prototypeManager = default!; [Dependency] private SharedAudioSystem _audio = default!; [Dependency] private SharedForensicsSystem _forensics = default!; [Dependency] private SharedDoAfterSystem _doAfter = default!; @@ -56,7 +55,7 @@ public sealed partial class InjectorSystem : EntitySystem private void OnInjectorUse(Entity injector, ref UseInHandEvent args) { if (args.Handled - || !_prototypeManager.Resolve(injector.Comp.ActiveModeProtoId, out var activeProto)) + || !ProtoMan.Resolve(injector.Comp.ActiveModeProtoId, out var activeProto)) return; if (activeProto.InjectOnUse) // Injectors that can't toggle transferAmounts will be used. @@ -119,7 +118,7 @@ public sealed partial class InjectorSystem : EntitySystem private void AddVerbs(Entity injector, ref GetVerbsEvent args) { if (!args.CanAccess || !args.CanInteract || args.Hands == null - || !_prototypeManager.Resolve(injector.Comp.ActiveModeProtoId, out var activeMode)) + || !ProtoMan.Resolve(injector.Comp.ActiveModeProtoId, out var activeMode)) return; var user = args.User; @@ -214,7 +213,7 @@ public sealed partial class InjectorSystem : EntitySystem return true; if (!_solutionContainer.ResolveSolution(injector.Owner, injector.Comp.SolutionName, ref injector.Comp.Solution, out var injectorSolution) - || !_prototypeManager.Resolve(injector.Comp.ActiveModeProtoId, out var activeMode)) + || !ProtoMan.Resolve(injector.Comp.ActiveModeProtoId, out var activeMode)) return false; // Create a pop-up for the user. @@ -270,7 +269,7 @@ public sealed partial class InjectorSystem : EntitySystem amount = FixedPoint2.Zero; if (!_solutionContainer.ResolveSolution(injector.Owner, injector.Comp.SolutionName, ref injector.Comp.Solution, out var injectorSolution) - || !_prototypeManager.Resolve(injector.Comp.ActiveModeProtoId, out var activeMode)) + || !ProtoMan.Resolve(injector.Comp.ActiveModeProtoId, out var activeMode)) return false; doAfterTime = activeMode.MobTime; @@ -339,7 +338,7 @@ public sealed partial class InjectorSystem : EntitySystem { doAfterTime = TimeSpan.Zero; - if (!_prototypeManager.Resolve(injector.Comp.ActiveModeProtoId, out var activeMode)) + if (!ProtoMan.Resolve(injector.Comp.ActiveModeProtoId, out var activeMode)) return false; // Check if the Injector has a draw time, but only when drawing. @@ -381,7 +380,7 @@ public sealed partial class InjectorSystem : EntitySystem /// The injector has a different . private bool TryUseInjector(Entity injector, EntityUid user, EntityUid target) { - if (!_prototypeManager.Resolve(injector.Comp.ActiveModeProtoId, out var activeMode)) + if (!ProtoMan.Resolve(injector.Comp.ActiveModeProtoId, out var activeMode)) return false; var isOpenOrIgnored = injector.Comp.IgnoreClosed || !_openable.IsClosed(target); @@ -460,7 +459,7 @@ public sealed partial class InjectorSystem : EntitySystem return false; } - if (!_prototypeManager.Resolve(injector.Comp.ActiveModeProtoId, out var activeMode)) + if (!ProtoMan.Resolve(injector.Comp.ActiveModeProtoId, out var activeMode)) return false; var selfEv = new SelfBeforeInjectEvent(user, injector, target); @@ -656,13 +655,13 @@ public sealed partial class InjectorSystem : EntitySystem || solution.Volume != 0) return; - if (!_prototypeManager.Resolve(injector.Comp.ActiveModeProtoId, out var activeMode) + if (!ProtoMan.Resolve(injector.Comp.ActiveModeProtoId, out var activeMode) || activeMode.Behavior.HasFlag(InjectorBehavior.Dynamic)) return; foreach (var mode in injector.Comp.AllowedModes) { - if (!_prototypeManager.Resolve(mode, out var proto) + if (!ProtoMan.Resolve(mode, out var proto) || !proto.Behavior.HasFlag(InjectorBehavior.Draw)) continue; @@ -687,13 +686,13 @@ public sealed partial class InjectorSystem : EntitySystem || solution.AvailableVolume != 0) return; - if (!_prototypeManager.Resolve(injector.Comp.ActiveModeProtoId, out var activeMode) + if (!ProtoMan.Resolve(injector.Comp.ActiveModeProtoId, out var activeMode) || activeMode.Behavior.HasFlag(InjectorBehavior.Dynamic)) return; foreach (var mode in injector.Comp.AllowedModes) { - if (!_prototypeManager.Resolve(mode, out var proto) + if (!ProtoMan.Resolve(mode, out var proto) || !proto.Behavior.HasFlag(InjectorBehavior.Inject)) continue; @@ -720,7 +719,7 @@ public sealed partial class InjectorSystem : EntitySystem injector.Comp.ActiveModeProtoId = injector.Comp.AllowedModes[index]; - if (!_prototypeManager.Resolve(injector.Comp.ActiveModeProtoId, out var newMode)) + if (!ProtoMan.Resolve(injector.Comp.ActiveModeProtoId, out var newMode)) return; Dirty(injector); @@ -741,14 +740,14 @@ public sealed partial class InjectorSystem : EntitySystem [PublicAPI] public void ToggleMode(Entity injector, EntityUid user) { - if (!_prototypeManager.Resolve(injector.Comp.ActiveModeProtoId, out var activeProto)) + if (!ProtoMan.Resolve(injector.Comp.ActiveModeProtoId, out var activeProto)) return; string? errorMessage = null; foreach (var allowedMode in injector.Comp.AllowedModes) { - if (!_prototypeManager.Resolve(allowedMode, out var proto) + if (!ProtoMan.Resolve(allowedMode, out var proto) || proto.Behavior.HasFlag(activeProto.Behavior) || !_solutionContainer.ResolveSolution(injector.Owner, injector.Comp.SolutionName, ref injector.Comp.Solution, out var solution)) continue; diff --git a/Content.Shared/Chemistry/EntitySystems/SharedSolutionContainerSystem.cs b/Content.Shared/Chemistry/EntitySystems/SharedSolutionContainerSystem.cs index de7d0ad7ee..1111803e3c 100644 --- a/Content.Shared/Chemistry/EntitySystems/SharedSolutionContainerSystem.cs +++ b/Content.Shared/Chemistry/EntitySystems/SharedSolutionContainerSystem.cs @@ -68,7 +68,6 @@ public abstract partial class SharedSolutionContainerSystem : EntitySystem [Dependency] protected IGameTiming Timing = default!; [Dependency] protected INetManager Net = default!; - [Dependency] protected IPrototypeManager PrototypeManager = default!; [Dependency] protected ChemicalReactionSystem ChemicalReactionSystem = default!; [Dependency] protected ExamineSystemShared ExamineSystem = default!; [Dependency] protected OpenableSystem Openable = default!; @@ -244,7 +243,7 @@ public abstract partial class SharedSolutionContainerSystem : EntitySystem { solution = null; - if (!PrototypeManager.Resolve(entProtoId, out var proto)) + if (!ProtoMan.Resolve(entProtoId, out var proto)) return false; return TryGetSolution(proto, name, out solution, errorOnMissing); @@ -256,7 +255,7 @@ public abstract partial class SharedSolutionContainerSystem : EntitySystem bool errorOnMissing = false) { solution = null; - if (entProto.TryGetComponent(out var sol, Factory) && sol.Id == name) + if (entProto.TryComp(out var sol, Factory) && sol.Id == name) { solution = sol.Solution; return true; @@ -267,10 +266,10 @@ public abstract partial class SharedSolutionContainerSystem : EntitySystem foreach (var protoId in solutions) { - if (!PrototypeManager.Resolve(protoId, out var proto)) + if (!ProtoMan.Resolve(protoId, out var proto)) continue; - if (!proto.TryGetComponent(out sol, Factory)) + if (!proto.TryComp(out sol, Factory)) { Log.Error($"Entity prototype {proto}, tried to spawn in a solution container in prototype {entProto.ID}, but had no {nameof(SolutionComponent)}"); continue; @@ -316,10 +315,10 @@ public abstract partial class SharedSolutionContainerSystem : EntitySystem foreach (var protoId in solutions) { - if (!PrototypeManager.Resolve(protoId, out var proto)) + if (!ProtoMan.Resolve(protoId, out var proto)) continue; - if (!proto.TryGetComponent(out var sol, Factory)) + if (!proto.TryComp(out var sol, Factory)) { Log.Error($"Entity prototype {proto}, tried to spawn in a solution container in prototype {entProto.ID}, but had no {nameof(SolutionComponent)}"); continue; @@ -332,7 +331,7 @@ public abstract partial class SharedSolutionContainerSystem : EntitySystem private bool TryGetSolutionFill(EntityPrototype entProto, [NotNullWhen(true)] out EntProtoId[]? fill) { fill = null; - if (!entProto.TryGetComponent(out var manager, Factory)) + if (!entProto.TryComp(out var manager, Factory)) return false; fill = manager.SolutionEnts; @@ -348,7 +347,7 @@ public abstract partial class SharedSolutionContainerSystem : EntitySystem var solution = soln.Comp.Solution; AppearanceSystem.SetData(uid, SolutionContainerVisuals.FillFraction, solution.FillFraction, appearanceComponent); - AppearanceSystem.SetData(uid, SolutionContainerVisuals.Color, solution.GetColor(PrototypeManager), appearanceComponent); + AppearanceSystem.SetData(uid, SolutionContainerVisuals.Color, solution.GetColor(ProtoMan), appearanceComponent); AppearanceSystem.SetData(uid, SolutionContainerVisuals.SolutionName, soln.Comp.Id, appearanceComponent); if (solution.GetPrimaryReagentId() is { } reagent) @@ -531,8 +530,8 @@ public abstract partial class SharedSolutionContainerSystem : EntitySystem } else { - var proto = PrototypeManager.Index(reagentQuantity.Reagent.Prototype); - solution.AddReagent(proto, acceptedQuantity, temperature.Value, PrototypeManager); + var proto = ProtoMan.Index(reagentQuantity.Reagent.Prototype); + solution.AddReagent(proto, acceptedQuantity, temperature.Value, ProtoMan); } UpdateChemicals(soln); @@ -649,7 +648,7 @@ public abstract partial class SharedSolutionContainerSystem : EntitySystem // TODO This should be made into a function that directly transfers reagents. // Currently this is quite inefficient. - solution.AddSolution(source.SplitSolution(quantity), PrototypeManager); + solution.AddSolution(source.SplitSolution(quantity), ProtoMan); UpdateChemicals(soln); return true; @@ -692,10 +691,10 @@ public abstract partial class SharedSolutionContainerSystem : EntitySystem { // TODO: This should be made into a function that directly transfers reagents. // Currently this is quite inefficient. - solution.AddSolution(toAdd.Clone().SplitSolution(quantity), PrototypeManager); + solution.AddSolution(toAdd.Clone().SplitSolution(quantity), ProtoMan); } else - solution.AddSolution(toAdd, PrototypeManager); + solution.AddSolution(toAdd, ProtoMan); UpdateChemicals(soln); return quantity; @@ -716,7 +715,7 @@ public abstract partial class SharedSolutionContainerSystem : EntitySystem if (toAdd.Volume == FixedPoint2.Zero) return false; - solution.AddSolution(toAdd, PrototypeManager); + solution.AddSolution(toAdd, ProtoMan); UpdateChemicals(soln); return true; } @@ -743,7 +742,7 @@ public abstract partial class SharedSolutionContainerSystem : EntitySystem return false; } - solution.AddSolution(toAdd, PrototypeManager); + solution.AddSolution(toAdd, ProtoMan); overflowingSolution = solution.SplitSolution(FixedPoint2.Max(FixedPoint2.Zero, solution.Volume - overflowThreshold)); UpdateChemicals(soln); return true; @@ -812,7 +811,7 @@ public abstract partial class SharedSolutionContainerSystem : EntitySystem var (_, comp) = soln; var solution = comp.Solution; - var heatCap = solution.GetHeatCapacity(PrototypeManager); + var heatCap = solution.GetHeatCapacity(ProtoMan); solution.Temperature = heatCap == 0 ? 0 : thermalEnergy / heatCap; UpdateChemicals(soln); } @@ -831,7 +830,7 @@ public abstract partial class SharedSolutionContainerSystem : EntitySystem if (thermalEnergy == 0.0f) return; - var heatCap = solution.GetHeatCapacity(PrototypeManager); + var heatCap = solution.GetHeatCapacity(ProtoMan); solution.Temperature += heatCap == 0 ? 0 : thermalEnergy / heatCap; UpdateChemicals(soln); } @@ -850,7 +849,7 @@ public abstract partial class SharedSolutionContainerSystem : EntitySystem if (thermalEnergy == 0.0f) return; - var heatCap = solution.GetHeatCapacity(PrototypeManager); + var heatCap = solution.GetHeatCapacity(ProtoMan); var deltaT = thermalEnergy / heatCap; solution.Temperature = Math.Clamp(solution.Temperature + deltaT, min, max); UpdateChemicals(soln); @@ -894,7 +893,7 @@ public abstract partial class SharedSolutionContainerSystem : EntitySystem // If there's no primary reagent, assume the solution is empty and exit early if (string.IsNullOrEmpty(primaryReagent?.Prototype) || - !PrototypeManager.Resolve(primaryReagent.Value.Prototype, out var primary)) + !ProtoMan.Resolve(primaryReagent.Value.Prototype, out var primary)) { args.PushMarkup(Loc.GetString(entity.Comp.LocVolume, ("fillLevel", ExaminedVolumeDisplay.Empty))); return; @@ -909,7 +908,7 @@ public abstract partial class SharedSolutionContainerSystem : EntitySystem // Push the physical description of the primary reagent - var colorHex = solution.GetColor(PrototypeManager) + var colorHex = solution.GetColor(ProtoMan) .ToHexNoAlpha(); //TODO: If the chem has a dark color, the examine text becomes black on a black background, which is unreadable. args.PushMarkup(Loc.GetString(entity.Comp.LocPhysicalQuality, @@ -920,7 +919,7 @@ public abstract partial class SharedSolutionContainerSystem : EntitySystem // Push the recognizable reagents // Sort the reagents by amount, descending then alphabetically - var sortedReagentPrototypes = solution.GetReagentPrototypes(PrototypeManager) + var sortedReagentPrototypes = solution.GetReagentPrototypes(ProtoMan) .OrderByDescending(pair => pair.Value.Value) .ThenBy(pair => pair.Key.LocalizedName); @@ -1036,7 +1035,7 @@ public abstract partial class SharedSolutionContainerSystem : EntitySystem msg.AddMarkupOrThrow(Loc.GetString("scannable-solution-main-text")); - var reagentPrototypes = solution.GetReagentPrototypes(PrototypeManager); + var reagentPrototypes = solution.GetReagentPrototypes(ProtoMan); // Sort the reagents by amount, descending then alphabetically var sortedReagentPrototypes = reagentPrototypes diff --git a/Content.Shared/Chemistry/Reaction/ChemicalReactionSystem.cs b/Content.Shared/Chemistry/Reaction/ChemicalReactionSystem.cs index e3e1dc7a52..fb1a3e5524 100644 --- a/Content.Shared/Chemistry/Reaction/ChemicalReactionSystem.cs +++ b/Content.Shared/Chemistry/Reaction/ChemicalReactionSystem.cs @@ -27,7 +27,6 @@ namespace Content.Shared.Chemistry.Reaction private const int MaxReactionIterations = 20; [Dependency] private INetManager _netMan = default!; - [Dependency] private IPrototypeManager _prototypeManager = default!; [Dependency] private ISharedAdminLogManager _adminLogger = default!; [Dependency] private SharedAudioSystem _audio = default!; [Dependency] private SharedTransformSystem _transformSystem = default!; @@ -59,7 +58,7 @@ namespace Content.Shared.Chemistry.Reaction { // Construct single-reaction dictionary. var dict = new Dictionary>(); - foreach (var reaction in _prototypeManager.EnumeratePrototypes()) + foreach (var reaction in ProtoMan.EnumeratePrototypes()) { // For this dictionary we only need to cache based on the first reagent. var reagent = reaction.Reactants.Keys.First(); @@ -69,7 +68,7 @@ namespace Content.Shared.Chemistry.Reaction _reactionsSingle = dict.ToFrozenDictionary(); dict.Clear(); - foreach (var reaction in _prototypeManager.EnumeratePrototypes()) + foreach (var reaction in ProtoMan.EnumeratePrototypes()) { foreach (var reagent in reaction.Reactants.Keys) { @@ -172,7 +171,7 @@ namespace Content.Shared.Chemistry.Reaction var (uid, comp) = soln; var solution = comp.Solution; - var energy = reaction.ConserveEnergy ? solution.GetThermalEnergy(_prototypeManager) : 0; + var energy = reaction.ConserveEnergy ? solution.GetThermalEnergy(ProtoMan) : 0; //Remove reactants foreach (var reactant in reaction.Reactants) @@ -194,7 +193,7 @@ namespace Content.Shared.Chemistry.Reaction if (reaction.ConserveEnergy) { - var newCap = solution.GetHeatCapacity(_prototypeManager); + var newCap = solution.GetHeatCapacity(ProtoMan); if (newCap > 0) solution.Temperature = energy / newCap; } diff --git a/Content.Shared/Chemistry/ReactiveSystem.cs b/Content.Shared/Chemistry/ReactiveSystem.cs index b988a382b8..e637e8a9b8 100644 --- a/Content.Shared/Chemistry/ReactiveSystem.cs +++ b/Content.Shared/Chemistry/ReactiveSystem.cs @@ -9,7 +9,6 @@ namespace Content.Shared.Chemistry; [UsedImplicitly] public sealed partial class ReactiveSystem : EntitySystem { - [Dependency] private IPrototypeManager _proto = default!; // TODO: Someone add documentation, I beg you public void DoEntityReaction(EntityUid uid, Solution solution, ReactionMethod method) @@ -26,7 +25,7 @@ public sealed partial class ReactiveSystem : EntitySystem return; // We throw if the reagent specified doesn't exist. - if (!_proto.Resolve(reagentQuantity.Reagent.Prototype, out var proto)) + if (!ProtoMan.Resolve(reagentQuantity.Reagent.Prototype, out var proto)) return; var ev = new ReactionEntityEvent(method, reagentQuantity, proto); diff --git a/Content.Shared/Chemistry/SharedChemistryGuideDataSystem.cs b/Content.Shared/Chemistry/SharedChemistryGuideDataSystem.cs index 12386d3a22..c92aa3552d 100644 --- a/Content.Shared/Chemistry/SharedChemistryGuideDataSystem.cs +++ b/Content.Shared/Chemistry/SharedChemistryGuideDataSystem.cs @@ -1,5 +1,4 @@ using Content.Shared.Chemistry.Reagent; -using Robust.Shared.Prototypes; using Robust.Shared.Serialization; namespace Content.Shared.Chemistry; @@ -9,8 +8,6 @@ namespace Content.Shared.Chemistry; /// public abstract partial class SharedChemistryGuideDataSystem : EntitySystem { - [Dependency] protected IPrototypeManager PrototypeManager = default!; - protected readonly Dictionary Registry = new(); public IReadOnlyDictionary ReagentGuideRegistry => Registry; diff --git a/Content.Shared/Clothing/EntitySystems/SharedChameleonClothingSystem.cs b/Content.Shared/Clothing/EntitySystems/SharedChameleonClothingSystem.cs index 847f09180c..5448a8a18e 100644 --- a/Content.Shared/Clothing/EntitySystems/SharedChameleonClothingSystem.cs +++ b/Content.Shared/Clothing/EntitySystems/SharedChameleonClothingSystem.cs @@ -19,7 +19,6 @@ namespace Content.Shared.Clothing.EntitySystems; public abstract partial class SharedChameleonClothingSystem : EntitySystem { - [Dependency] private IPrototypeManager _proto = default!; [Dependency] private ClothingSystem _clothingSystem = default!; [Dependency] private ContrabandSystem _contraband = default!; [Dependency] private MetaDataSystem _metaData = default!; @@ -89,7 +88,7 @@ public abstract partial class SharedChameleonClothingSystem : EntitySystem protected void UpdateVisuals(EntityUid uid, ChameleonClothingComponent component) { if (string.IsNullOrEmpty(component.Default) || - !_proto.Resolve(component.Default, out EntityPrototype? proto)) + !ProtoMan.Resolve(component.Default, out EntityPrototype? proto)) return; // world sprite icon @@ -105,28 +104,28 @@ public abstract partial class SharedChameleonClothingSystem : EntitySystem // item sprite logic if (TryComp(uid, out ItemComponent? item) && - proto.TryGetComponent(out ItemComponent? otherItem, Factory)) + proto.TryComp(out ItemComponent? otherItem, Factory)) { _itemSystem.CopyVisuals(uid, otherItem, item); } // clothing sprite logic if (TryComp(uid, out ClothingComponent? clothing) && - proto.TryGetComponent(out ClothingComponent? otherClothing, Factory)) + proto.TryComp(out ClothingComponent? otherClothing, Factory)) { _clothingSystem.CopyVisuals(uid, otherClothing, clothing); } // appearance data logic if (TryComp(uid, out AppearanceComponent? appearance) && - proto.TryGetComponent(out AppearanceComponent? appearanceOther, Factory)) + proto.TryComp(out AppearanceComponent? appearanceOther, Factory)) { _appearance.AppendData(appearanceOther, uid); Dirty(uid, appearance); } // properly mark contraband - if (proto.TryGetComponent(out ContrabandComponent? contra, Factory)) + if (proto.TryComp(out ContrabandComponent? contra, Factory)) { EnsureComp(uid, out var current); _contraband.CopyDetails(uid, contra, current); @@ -186,14 +185,14 @@ public abstract partial class SharedChameleonClothingSystem : EntitySystem return false; // check if it is marked as valid chameleon target - if (!proto.TryGetComponent(out TagComponent? tag, Factory) || !_tag.HasTag(tag, WhitelistChameleonTag)) + if (!proto.TryComp(out TagComponent? tag, Factory) || !_tag.HasTag(tag, WhitelistChameleonTag)) return false; if (requiredTag != null && !_tag.HasTag(tag, requiredTag)) return false; // check if it's valid clothing - if (!proto.TryGetComponent(out ClothingComponent? clothing, Factory)) + if (!proto.TryComp(out ClothingComponent? clothing, Factory)) return false; if (!clothing.Slots.HasFlag(chameleonSlot)) @@ -212,7 +211,7 @@ public abstract partial class SharedChameleonClothingSystem : EntitySystem { foreach (var proto in _data[slot]) { - if (IsValidTarget(_proto.Index(proto), slot, tag)) + if (IsValidTarget(ProtoMan.Index(proto), slot, tag)) validTargets.Add(proto); } } @@ -235,14 +234,14 @@ public abstract partial class SharedChameleonClothingSystem : EntitySystem protected void PrepareAllVariants() { _data.Clear(); - var prototypes = _proto.EnumeratePrototypes(); + var prototypes = ProtoMan.EnumeratePrototypes(); foreach (var proto in prototypes) { // check if this is valid clothing if (!IsValidTarget(proto)) continue; - if (!proto.TryGetComponent(out ClothingComponent? item, Factory)) + if (!proto.TryComp(out ClothingComponent? item, Factory)) continue; // sort item by their slot flags diff --git a/Content.Shared/Clothing/LoadoutSystem.cs b/Content.Shared/Clothing/LoadoutSystem.cs index 4a87d00dac..fcb1982dc5 100644 --- a/Content.Shared/Clothing/LoadoutSystem.cs +++ b/Content.Shared/Clothing/LoadoutSystem.cs @@ -21,7 +21,6 @@ public sealed partial class LoadoutSystem : EntitySystem [Dependency] private ActorSystem _actors = default!; [Dependency] private SharedStationSpawningSystem _station = default!; - [Dependency] private IPrototypeManager _protoMan = default!; [Dependency] private IRobustRandom _random = default!; public override void Initialize() @@ -44,7 +43,7 @@ public sealed partial class LoadoutSystem : EntitySystem { EntProtoId? proto = null; - if (_protoMan.Resolve(loadout.StartingGear, out var gear)) + if (ProtoMan.Resolve(loadout.StartingGear, out var gear)) { proto = GetFirstOrNull(gear); } @@ -65,12 +64,12 @@ public sealed partial class LoadoutSystem : EntitySystem if (count == 1) { - if (gear.Equipment.Count == 1 && _protoMan.Resolve(gear.Equipment.Values.First(), out var proto)) + if (gear.Equipment.Count == 1 && ProtoMan.Resolve(gear.Equipment.Values.First(), out var proto)) { return proto.ID; } - if (gear.Inhand.Count == 1 && _protoMan.Resolve(gear.Inhand[0], out proto)) + if (gear.Inhand.Count == 1 && ProtoMan.Resolve(gear.Inhand[0], out proto)) { return proto.ID; } @@ -90,10 +89,10 @@ public sealed partial class LoadoutSystem : EntitySystem public string GetName(LoadoutPrototype loadout) { - if (loadout.DummyEntity is not null && _protoMan.Resolve(loadout.DummyEntity, out var proto)) + if (loadout.DummyEntity is not null && ProtoMan.Resolve(loadout.DummyEntity, out var proto)) return proto.Name; - if (_protoMan.Resolve(loadout.StartingGear, out var gear)) + if (ProtoMan.Resolve(loadout.StartingGear, out var gear)) { return GetName(gear); } @@ -113,12 +112,12 @@ public sealed partial class LoadoutSystem : EntitySystem if (count == 1) { - if (gear.Equipment.Count == 1 && _protoMan.TryIndex(gear.Equipment.Values.First(), out var proto)) + if (gear.Equipment.Count == 1 && ProtoMan.TryIndex(gear.Equipment.Values.First(), out var proto)) { return proto.Name; } - if (gear.Inhand.Count == 1 && _protoMan.TryIndex(gear.Inhand[0], out proto)) + if (gear.Inhand.Count == 1 && ProtoMan.TryIndex(gear.Inhand[0], out proto)) { return proto.Name; } @@ -128,7 +127,7 @@ public sealed partial class LoadoutSystem : EntitySystem if (values.Count != 1) continue; - if (_protoMan.TryIndex(values[0], out proto)) + if (ProtoMan.TryIndex(values[0], out proto)) { return proto.Name; } @@ -161,9 +160,9 @@ public sealed partial class LoadoutSystem : EntitySystem // Then, randomly pick a RoleLoadout profile from those specified, and process/equip all LoadoutGroups from it. // For non-roundstart mobs there is no SelectedLoadout data, so minValue must be set in each LoadoutGroup to force selection. var id = _random.Pick(loadoutGroups); - var proto = _protoMan.Index(id); + var proto = ProtoMan.Index(id); var loadout = new RoleLoadout(id); - loadout.SetDefault(GetProfile(uid), _actors.GetSession(uid), _protoMan, true); + loadout.SetDefault(GetProfile(uid), _actors.GetSession(uid), ProtoMan, true); _station.EquipRoleLoadout(uid, loadout, proto); GearEquipped(uid); diff --git a/Content.Shared/ComponentTable/SharedComponentTableSystem.cs b/Content.Shared/ComponentTable/SharedComponentTableSystem.cs index 811a82200f..9b2f3ae9fa 100644 --- a/Content.Shared/ComponentTable/SharedComponentTableSystem.cs +++ b/Content.Shared/ComponentTable/SharedComponentTableSystem.cs @@ -1,5 +1,4 @@ using Content.Shared.EntityTable; -using Robust.Shared.Prototypes; namespace Content.Shared.ComponentTable; @@ -9,7 +8,6 @@ namespace Content.Shared.ComponentTable; public sealed partial class SharedComponentTableSystem : EntitySystem { [Dependency] private EntityTableSystem _entTable = default!; - [Dependency] private IPrototypeManager _proto = default!; public override void Initialize() { @@ -24,7 +22,7 @@ public sealed partial class SharedComponentTableSystem : EntitySystem foreach (var entity in spawns) { - if (_proto.Resolve(entity, out var entProto)) + if (ProtoMan.Resolve(entity, out var entProto)) { EntityManager.AddComponents(ent, entProto.Components); } diff --git a/Content.Shared/Construction/MachinePartSystem.cs b/Content.Shared/Construction/MachinePartSystem.cs index 5355c4973b..bcf842c3f8 100644 --- a/Content.Shared/Construction/MachinePartSystem.cs +++ b/Content.Shared/Construction/MachinePartSystem.cs @@ -3,7 +3,6 @@ using Content.Shared.Construction.Components; using Content.Shared.Examine; using Content.Shared.Lathe; using Content.Shared.Materials; -using Robust.Shared.Prototypes; namespace Content.Shared.Construction { @@ -12,7 +11,6 @@ namespace Content.Shared.Construction /// public sealed partial class MachinePartSystem : EntitySystem { - [Dependency] private IPrototypeManager _prototype = default!; [Dependency] private SharedLatheSystem _lathe = default!; [Dependency] private SharedConstructionSystem _construction = default!; @@ -32,8 +30,8 @@ namespace Content.Shared.Construction args.PushMarkup(Loc.GetString("machine-board-component-on-examine-label")); foreach (var (material, amount) in component.StackRequirements) { - var stack = _prototype.Index(material); - var name = _prototype.Index(stack.Spawn).Name; + var stack = ProtoMan.Index(material); + var name = ProtoMan.Index(stack.Spawn).Name; args.PushMarkup(Loc.GetString("machine-board-component-required-element-entry-text", ("amount", amount), @@ -66,10 +64,10 @@ namespace Content.Shared.Construction foreach (var (stackId, amount) in comp.StackRequirements) { - var stackProto = _prototype.Index(stackId); - var defaultProto = _prototype.Index(stackProto.Spawn); + var stackProto = ProtoMan.Index(stackId); + var defaultProto = ProtoMan.Index(stackProto.Spawn); - if (defaultProto.TryGetComponent(out var physComp, EntityManager.ComponentFactory)) + if (defaultProto.TryComp(out var physComp, EntityManager.ComponentFactory)) { foreach (var (mat, matAmount) in physComp.MaterialComposition) { @@ -114,8 +112,8 @@ namespace Content.Shared.Construction materials[mat] += matAmount * amount * coefficient; } } - else if (_prototype.Resolve(defaultProtoId, out var defaultProto) && - defaultProto.TryGetComponent(out var physComp, EntityManager.ComponentFactory)) + else if (ProtoMan.Resolve(defaultProtoId, out var defaultProto) && + defaultProto.TryComp(out var physComp, EntityManager.ComponentFactory)) { foreach (var (mat, matAmount) in physComp.MaterialComposition) { diff --git a/Content.Shared/Construction/SharedConstructionSystem.cs b/Content.Shared/Construction/SharedConstructionSystem.cs index c6976db1a9..d92ca7b7ed 100644 --- a/Content.Shared/Construction/SharedConstructionSystem.cs +++ b/Content.Shared/Construction/SharedConstructionSystem.cs @@ -1,7 +1,6 @@ using System.Linq; using Content.Shared.Construction.Components; using Robust.Shared.Map; -using Robust.Shared.Prototypes; using static Content.Shared.Interaction.SharedInteractionSystem; namespace Content.Shared.Construction @@ -10,7 +9,6 @@ namespace Content.Shared.Construction { [Dependency] private IMapManager _mapManager = default!; [Dependency] private SharedMapSystem _map = default!; - [Dependency] protected IPrototypeManager PrototypeManager = default!; [Dependency] protected SharedTransformSystem TransformSystem = default!; /// @@ -33,7 +31,7 @@ namespace Content.Shared.Construction if (info.ExamineName is not null) return Loc.GetString(info.ExamineName.Value); - return PrototypeManager.Index(info.DefaultPrototype).Name; + return ProtoMan.Index(info.DefaultPrototype).Name; } } } diff --git a/Content.Shared/Construction/SharedFlatpackSystem.cs b/Content.Shared/Construction/SharedFlatpackSystem.cs index 898b85d70b..fd9c67a2e6 100644 --- a/Content.Shared/Construction/SharedFlatpackSystem.cs +++ b/Content.Shared/Construction/SharedFlatpackSystem.cs @@ -23,7 +23,6 @@ public abstract partial class SharedFlatpackSystem : EntitySystem { [Dependency] private ISharedAdminLogManager _adminLogger = default!; [Dependency] private INetManager _net = default!; - [Dependency] protected IPrototypeManager PrototypeManager = default!; [Dependency] private AnchorableSystem _anchorable = default!; [Dependency] private MetaDataSystem _metaData = default!; [Dependency] private SharedAudioSystem _audio = default!; @@ -80,8 +79,8 @@ public abstract partial class SharedFlatpackSystem : EntitySystem return; } - if (!PrototypeManager.Resolve(comp.Entity, out var proto) || - !proto.TryGetComponent(out var fixture, EntityManager.ComponentFactory)) + if (!ProtoMan.Resolve(comp.Entity, out var proto) || + !proto.TryComp(out var fixture, EntityManager.ComponentFactory)) { return; } @@ -120,7 +119,7 @@ public abstract partial class SharedFlatpackSystem : EntitySystem return; ent.Comp.Entity = proto; - var machinePrototype = PrototypeManager.Index(proto); + var machinePrototype = ProtoMan.Index(proto); var meta = MetaData(ent); _metaData.SetEntityName(ent, Loc.GetString("flatpack-entity-name", ("name", machinePrototype.Name)), meta); diff --git a/Content.Shared/Containers/ContainerCompSystem.cs b/Content.Shared/Containers/ContainerCompSystem.cs index bb095986a7..f82b7b9edc 100644 --- a/Content.Shared/Containers/ContainerCompSystem.cs +++ b/Content.Shared/Containers/ContainerCompSystem.cs @@ -1,5 +1,4 @@ using Robust.Shared.Containers; -using Robust.Shared.Prototypes; using Robust.Shared.Timing; namespace Content.Shared.Containers; @@ -10,7 +9,6 @@ namespace Content.Shared.Containers; public sealed partial class ContainerCompSystem : EntitySystem { [Dependency] private IGameTiming _timing = default!; - [Dependency] private IPrototypeManager _proto = default!; public override void Initialize() { @@ -24,7 +22,7 @@ public sealed partial class ContainerCompSystem : EntitySystem if (args.Container.ID != ent.Comp.Container || _timing.ApplyingState) return; - if (_proto.Resolve(ent.Comp.Proto, out var entProto)) + if (ProtoMan.Resolve(ent.Comp.Proto, out var entProto)) { EntityManager.RemoveComponents(args.Entity, entProto.Components); } @@ -35,7 +33,7 @@ public sealed partial class ContainerCompSystem : EntitySystem if (args.Container.ID != ent.Comp.Container || _timing.ApplyingState) return; - if (_proto.Resolve(ent.Comp.Proto, out var entProto)) + if (ProtoMan.Resolve(ent.Comp.Proto, out var entProto)) { EntityManager.AddComponents(args.Entity, entProto.Components); } diff --git a/Content.Shared/Contraband/ContrabandSystem.cs b/Content.Shared/Contraband/ContrabandSystem.cs index 53b233b75b..4bb45efffa 100644 --- a/Content.Shared/Contraband/ContrabandSystem.cs +++ b/Content.Shared/Contraband/ContrabandSystem.cs @@ -18,7 +18,6 @@ namespace Content.Shared.Contraband; public sealed partial class ContrabandSystem : EntitySystem { [Dependency] private IConfigurationManager _configuration = default!; - [Dependency] private IPrototypeManager _proto = default!; [Dependency] private SharedIdCardSystem _id = default!; [Dependency] private ExamineSystemShared _examine = default!; @@ -67,7 +66,7 @@ public sealed partial class ContrabandSystem : EntitySystem // two strings: // one, the actual informative 'this is restricted' // then, the 'you can/shouldn't carry this around' based on the ID the user is wearing - var severity = _proto.Index(component.Severity); + var severity = ProtoMan.Index(component.Severity); String departmentExamineMessage; if (severity.ShowDepartmentsAndJobs) { @@ -106,8 +105,8 @@ public sealed partial class ContrabandSystem : EntitySystem /// A localized string with the formatted message public string GenerateDepartmentExamineMessage(HashSet> allowedDepartments, HashSet> allowedJobs, Color color, ContrabandItemType itemType = ContrabandItemType.Item) { - var localizedDepartments = allowedDepartments.Select(p => Loc.GetString("contraband-department-plural", ("department", Loc.GetString(_proto.Index(p).Name)))); - var jobs = allowedJobs.Select(p => _proto.Index(p).LocalizedName).ToArray(); + var localizedDepartments = allowedDepartments.Select(p => Loc.GetString("contraband-department-plural", ("department", Loc.GetString(ProtoMan.Index(p).Name)))); + var jobs = allowedJobs.Select(p => ProtoMan.Index(p).LocalizedName).ToArray(); var localizedJobs = jobs.Select(p => Loc.GetString("contraband-job-plural", ("job", p))); //creating a combined list of jobs and departments for the restricted text @@ -165,7 +164,7 @@ public sealed partial class ContrabandSystem : EntitySystem jobId = id.Comp.LocalizedJobTitle; } - var jobs = contraband.Comp.AllowedJobs.Select(p => _proto.Index(p).LocalizedName).ToArray(); + var jobs = contraband.Comp.AllowedJobs.Select(p => ProtoMan.Index(p).LocalizedName).ToArray(); // if it is fully restricted, you're department-less, or your department isn't in the allowed list, you cannot carry it. Otherwise, you can. if (departments.Intersect(contraband.Comp.AllowedDepartments).Any() || jobs.Contains(jobId)) return false; diff --git a/Content.Shared/Damage/Systems/DamageExamineSystem.cs b/Content.Shared/Damage/Systems/DamageExamineSystem.cs index 410757be27..c74918d742 100644 --- a/Content.Shared/Damage/Systems/DamageExamineSystem.cs +++ b/Content.Shared/Damage/Systems/DamageExamineSystem.cs @@ -12,7 +12,6 @@ namespace Content.Shared.Damage.Systems; public sealed partial class DamageExamineSystem : EntitySystem { [Dependency] private ExamineSystemShared _examine = default!; - [Dependency] private IPrototypeManager _prototype = default!; public override void Initialize() { @@ -75,7 +74,7 @@ public sealed partial class DamageExamineSystem : EntitySystem if (damage.Value != FixedPoint2.Zero) { msg.PushNewline(); - msg.AddMarkupOrThrow(Loc.GetString("damage-value", ("type", _prototype.Index(damage.Key).LocalizedName), ("amount", damage.Value))); + msg.AddMarkupOrThrow(Loc.GetString("damage-value", ("type", ProtoMan.Index(damage.Key).LocalizedName), ("amount", damage.Value))); } } diff --git a/Content.Shared/Damage/Systems/DamageableSystem.API.cs b/Content.Shared/Damage/Systems/DamageableSystem.API.cs index d5a7454828..106f438a08 100644 --- a/Content.Shared/Damage/Systems/DamageableSystem.API.cs +++ b/Content.Shared/Damage/Systems/DamageableSystem.API.cs @@ -21,7 +21,7 @@ public sealed partial class DamageableSystem { if (!_damageableQuery.Resolve(entity, ref entity.Comp, false) || entity.Comp.DamageModifierSetId is not { } proto - || !_prototypeManager.Resolve(proto, out var modifierSet) + || !ProtoMan.Resolve(proto, out var modifierSet) ) return null; @@ -302,7 +302,7 @@ public sealed partial class DamageableSystem public DamageSpecifier GetPositiveDamage(Entity ent, ProtoId group) { // No damage if no group exists... - if (!_prototypeManager.Resolve(group, out var groupProto)) + if (!ProtoMan.Resolve(group, out var groupProto)) return new DamageSpecifier(); var damage = new DamageSpecifier(); diff --git a/Content.Shared/Damage/Systems/DamageableSystem.Events.cs b/Content.Shared/Damage/Systems/DamageableSystem.Events.cs index fbcb9b94a0..d7650711ec 100644 --- a/Content.Shared/Damage/Systems/DamageableSystem.Events.cs +++ b/Content.Shared/Damage/Systems/DamageableSystem.Events.cs @@ -133,7 +133,7 @@ public sealed partial class DamageableSystem { _supportedTypesByContainer.Clear(); - foreach (var proto in _prototypeManager.EnumeratePrototypes()) + foreach (var proto in ProtoMan.EnumeratePrototypes()) { var set = new HashSet>(); _supportedTypesByContainer[proto.ID] = set; @@ -145,7 +145,7 @@ public sealed partial class DamageableSystem foreach (var groupId in proto.SupportedGroups) { - var group = _prototypeManager.Index(groupId); + var group = ProtoMan.Index(groupId); foreach (var type in group.DamageTypes) { set.Add(type); @@ -159,7 +159,7 @@ public sealed partial class DamageableSystem /// private void DamageableInit(Entity ent, ref ComponentInit _) { - ent.Comp.Damage.GetDamagePerGroup(_prototypeManager, ent.Comp.DamagePerGroup); + ent.Comp.Damage.GetDamagePerGroup(ProtoMan, ent.Comp.DamagePerGroup); ent.Comp.TotalDamage = ent.Comp.Damage.GetTotal(); } diff --git a/Content.Shared/Damage/Systems/DamageableSystem.cs b/Content.Shared/Damage/Systems/DamageableSystem.cs index 91581423f9..2fba073b71 100644 --- a/Content.Shared/Damage/Systems/DamageableSystem.cs +++ b/Content.Shared/Damage/Systems/DamageableSystem.cs @@ -15,7 +15,6 @@ namespace Content.Shared.Damage.Systems; public sealed partial class DamageableSystem : EntitySystem { - [Dependency] private IPrototypeManager _prototypeManager = default!; [Dependency] private SharedAppearanceSystem _appearance = default!; [Dependency] private INetManager _netMan = default!; [Dependency] private MobThresholdSystem _mobThreshold = default!; @@ -55,7 +54,7 @@ public sealed partial class DamageableSystem : EntitySystem EntityUid? origin = null ) { - ent.Comp.Damage.GetDamagePerGroup(_prototypeManager, ent.Comp.DamagePerGroup); + ent.Comp.Damage.GetDamagePerGroup(ProtoMan, ent.Comp.DamagePerGroup); ent.Comp.TotalDamage = ent.Comp.Damage.GetTotal(); Dirty(ent); @@ -84,7 +83,7 @@ public sealed partial class DamageableSystem : EntitySystem foreach (var (damageGroupId, _) in damagePerGroup) //go through each group { - var group = _prototypeManager.Index(damageGroupId); //get group + var group = ProtoMan.Index(damageGroupId); //get group foreach (var type in group.DamageTypes) //go through each type inside that group { if (!damage.DamageDict.TryGetValue(type, out var damageValue) || damageValue == 0) //get value and make sure it isn't 0 diff --git a/Content.Shared/Damage/Systems/SharedGodmodeSystem.cs b/Content.Shared/Damage/Systems/SharedGodmodeSystem.cs index 0a4e6f5178..b114527e18 100644 --- a/Content.Shared/Damage/Systems/SharedGodmodeSystem.cs +++ b/Content.Shared/Damage/Systems/SharedGodmodeSystem.cs @@ -8,14 +8,11 @@ using Content.Shared.Slippery; using Content.Shared.StatusEffect; using Content.Shared.StatusEffectNew; using Content.Shared.StatusEffectNew.Components; -using Robust.Shared.Prototypes; namespace Content.Shared.Damage.Systems; public abstract partial class SharedGodmodeSystem : EntitySystem { - [Dependency] private IPrototypeManager _protoMan = default!; - public override void Initialize() { base.Initialize(); @@ -41,7 +38,7 @@ public abstract partial class SharedGodmodeSystem : EntitySystem private void OnBeforeStatusEffect(EntityUid uid, GodmodeComponent component, ref BeforeStatusEffectAddedEvent args) { - if (_protoMan.Index(args.Effect).HasComponent(Factory)) + if (ProtoMan.Index(args.Effect).HasComp(Factory)) args.Cancelled = true; } diff --git a/Content.Shared/Decals/SharedDecalSystem.cs b/Content.Shared/Decals/SharedDecalSystem.cs index f3f2feb3b2..8738d8c0f1 100644 --- a/Content.Shared/Decals/SharedDecalSystem.cs +++ b/Content.Shared/Decals/SharedDecalSystem.cs @@ -1,4 +1,3 @@ -using System.Collections; using System.Diagnostics.CodeAnalysis; using System.Numerics; using Robust.Shared.GameStates; @@ -11,7 +10,6 @@ namespace Content.Shared.Decals { public abstract partial class SharedDecalSystem : EntitySystem { - [Dependency] protected IPrototypeManager PrototypeManager = default!; [Dependency] protected IMapManager MapManager = default!; protected bool PvsEnabled; diff --git a/Content.Shared/DeviceLinking/SharedDeviceLinkSystem.cs b/Content.Shared/DeviceLinking/SharedDeviceLinkSystem.cs index ce7650a9ad..a19f001fcb 100644 --- a/Content.Shared/DeviceLinking/SharedDeviceLinkSystem.cs +++ b/Content.Shared/DeviceLinking/SharedDeviceLinkSystem.cs @@ -12,7 +12,6 @@ namespace Content.Shared.DeviceLinking; public abstract partial class SharedDeviceLinkSystem : EntitySystem { - [Dependency] private IPrototypeManager _prototypeManager = default!; [Dependency] private SharedPopupSystem _popupSystem = default!; [Dependency] private ISharedAdminLogManager _adminLogger = default!; [Dependency] private SharedTransformSystem _transform = default!; @@ -119,7 +118,7 @@ public abstract partial class SharedDeviceLinkSystem : EntitySystem var comp = EnsureComp(uid); foreach (var port in ports) { - if (!_prototypeManager.HasIndex(port)) + if (!ProtoMan.HasIndex(port)) Log.Error($"Attempted to add invalid port {port} to {ToPrettyString(uid)}"); else comp.Ports.Add(port); @@ -137,7 +136,7 @@ public abstract partial class SharedDeviceLinkSystem : EntitySystem var comp = EnsureComp(uid); foreach (var port in ports) { - if (!_prototypeManager.HasIndex(port)) + if (!ProtoMan.HasIndex(port)) Log.Error($"Attempted to add invalid port {port} to {ToPrettyString(uid)}"); else comp.Ports.Add(port); @@ -161,7 +160,7 @@ public abstract partial class SharedDeviceLinkSystem : EntitySystem var sourcePorts = new List(); foreach (var port in sourceComponent.Ports) { - sourcePorts.Add(_prototypeManager.Index(port)); + sourcePorts.Add(ProtoMan.Index(port)); } return sourcePorts; @@ -184,7 +183,7 @@ public abstract partial class SharedDeviceLinkSystem : EntitySystem var sinkPorts = new List(); foreach (var port in sinkComponent.Ports) { - sinkPorts.Add(_prototypeManager.Index(port)); + sinkPorts.Add(ProtoMan.Index(port)); } return sinkPorts; @@ -195,7 +194,7 @@ public abstract partial class SharedDeviceLinkSystem : EntitySystem /// public string PortName(string port) where TPort : DevicePortPrototype, IPrototype { - if (!_prototypeManager.TryIndex(port, out var proto)) + if (!ProtoMan.TryIndex(port, out var proto)) return port; return Loc.GetString(proto.Name); @@ -312,8 +311,8 @@ public abstract partial class SharedDeviceLinkSystem : EntitySystem RemoveSinkFromSource(sourceUid, sinkUid, sourceComponent); foreach (var (source, sink) in links) { - DebugTools.Assert(_prototypeManager.HasIndex(source)); - DebugTools.Assert(_prototypeManager.HasIndex(sink)); + DebugTools.Assert(ProtoMan.HasIndex(source)); + DebugTools.Assert(ProtoMan.HasIndex(sink)); if (!sourceComponent.Ports.Contains(source) || !sinkComponent.Ports.Contains(sink)) continue; diff --git a/Content.Shared/EntityConditions/SharedEntityConditionsSystem.Nested.cs b/Content.Shared/EntityConditions/SharedEntityConditionsSystem.Nested.cs index dbbefea6f8..f682044c4c 100644 --- a/Content.Shared/EntityConditions/SharedEntityConditionsSystem.Nested.cs +++ b/Content.Shared/EntityConditions/SharedEntityConditionsSystem.Nested.cs @@ -7,14 +7,12 @@ namespace Content.Shared.EntityConditions; /// public sealed partial class SharedEntityConditionsSystem { - [Dependency] private IPrototypeManager _proto = default!; - /// /// TryCondition overload that uses a instead of . /// public bool TryCondition(EntityUid target, [ForbidLiteral] ProtoId id) { - var proto = _proto.Index(id); + var proto = ProtoMan.Index(id); return TryCondition(target, proto.Condition); } } diff --git a/Content.Shared/EntityEffects/SharedEntityEffectsSystem.Nested.cs b/Content.Shared/EntityEffects/SharedEntityEffectsSystem.Nested.cs index f9018d5bca..3e6b985ba1 100644 --- a/Content.Shared/EntityEffects/SharedEntityEffectsSystem.Nested.cs +++ b/Content.Shared/EntityEffects/SharedEntityEffectsSystem.Nested.cs @@ -7,14 +7,12 @@ namespace Content.Shared.EntityEffects; // public sealed partial class SharedEntityEffectsSystem { - [Dependency] private IPrototypeManager _proto = default!; - /// /// TryApplyEffect overload using a instead of . /// public void TryApplyEffect(EntityUid target, [ForbidLiteral] ProtoId id, float scale = 1f, EntityUid? user = null) { - var proto = _proto.Index(id); + var proto = ProtoMan.Index(id); if (_condition.TryConditions(target, proto.Conditions)) ApplyEffects(target, proto.Effects, scale, user); } diff --git a/Content.Shared/EntityTable/Conditions/HasBudgetCondition.cs b/Content.Shared/EntityTable/Conditions/HasBudgetCondition.cs index f2489d04aa..0eea81f736 100644 --- a/Content.Shared/EntityTable/Conditions/HasBudgetCondition.cs +++ b/Content.Shared/EntityTable/Conditions/HasBudgetCondition.cs @@ -36,7 +36,7 @@ public sealed partial class HasBudgetCondition : EntityTableCondition if (root is not EntSelector entSelector) return false; - if (!proto.Index(entSelector.Id).TryGetComponent(out DynamicRuleCostComponent? costComponent, entMan.ComponentFactory)) + if (!proto.Index(entSelector.Id).TryComp(out DynamicRuleCostComponent? costComponent, entMan.ComponentFactory)) { var log = Logger.GetSawmill("HasBudgetCondition"); log.Error($"Rule {entSelector.Id} does not have a DynamicRuleCostComponent."); diff --git a/Content.Shared/EntityTable/EntityTableSystem.cs b/Content.Shared/EntityTable/EntityTableSystem.cs index 58cadb462a..a1444d2049 100644 --- a/Content.Shared/EntityTable/EntityTableSystem.cs +++ b/Content.Shared/EntityTable/EntityTableSystem.cs @@ -8,7 +8,6 @@ namespace Content.Shared.EntityTable; public sealed partial class EntityTableSystem : EntitySystem { - [Dependency] private IPrototypeManager _prototypeManager = default!; [Dependency] private IRobustRandom _random = default!; public IEnumerable GetSpawns(EntityTablePrototype entTableProto, IRobustRandom? rand = null, EntityTableContext? ctx = null) @@ -24,7 +23,7 @@ public sealed partial class EntityTableSystem : EntitySystem rand ??= _random; ctx ??= new EntityTableContext(); - return table.GetSpawns(rand, EntityManager, _prototypeManager, ctx); + return table.GetSpawns(rand, EntityManager, ProtoMan, ctx); } public IEnumerable<(EntProtoId spawn, double)> ListSpawns(EntityTablePrototype entTableProto, EntityTableContext? ctx = null) @@ -43,7 +42,7 @@ public sealed partial class EntityTableSystem : EntitySystem return new List<(EntProtoId spawn, double)>(); ctx ??= new EntityTableContext(); - return table.ListSpawns(EntityManager, _prototypeManager, ctx); + return table.ListSpawns(EntityManager, ProtoMan, ctx); } /// @@ -64,7 +63,7 @@ public sealed partial class EntityTableSystem : EntitySystem return new List<(EntProtoId spawn, double)>(); ctx ??= new EntityTableContext(); - return table.AverageSpawns(EntityManager, _prototypeManager, ctx); + return table.AverageSpawns(EntityManager, ProtoMan, ctx); } } diff --git a/Content.Shared/Fluids/EntitySystems/DrainSystem.cs b/Content.Shared/Fluids/EntitySystems/DrainSystem.cs index d00d85adf6..210a7f211f 100644 --- a/Content.Shared/Fluids/EntitySystems/DrainSystem.cs +++ b/Content.Shared/Fluids/EntitySystems/DrainSystem.cs @@ -27,7 +27,6 @@ namespace Content.Shared.Fluids.EntitySystems; public sealed partial class DrainSystem : EntitySystem { [Dependency] private EntityLookupSystem _lookup = default!; - [Dependency] private IPrototypeManager _prototype = default!; [Dependency] private IRobustRandom _random = default!; [Dependency] private SharedAmbientSoundSystem _ambientSound = default!; [Dependency] private SharedAudioSystem _audio = default!; @@ -188,7 +187,7 @@ public sealed partial class DrainSystem : EntitySystem var transferSolution = _solutionContainerSystem.SplitSolution(puddle.Comp.Solution.Value, FixedPoint2.Min(FixedPoint2.New(amount), puddleSolution.Volume, drainSolution.AvailableVolume)); - drainSolution.AddSolution(transferSolution, _prototype); + drainSolution.AddSolution(transferSolution, ProtoMan); if (puddleSolution.Volume <= 0) PredictedQueueDel(puddle); diff --git a/Content.Shared/Fluids/EntitySystems/SolutionDumpingSystem.cs b/Content.Shared/Fluids/EntitySystems/SolutionDumpingSystem.cs index 89c915bb73..f2bb6b1a4e 100644 --- a/Content.Shared/Fluids/EntitySystems/SolutionDumpingSystem.cs +++ b/Content.Shared/Fluids/EntitySystems/SolutionDumpingSystem.cs @@ -21,7 +21,6 @@ namespace Content.Shared.Fluids.EntitySystems; /// public sealed partial class SolutionDumpingSystem : EntitySystem { - [Dependency] private IPrototypeManager _protoMan = default!; [Dependency] private ActionBlockerSystem _actionBlocker = default!; [Dependency] private OpenableSystem _openable = default!; [Dependency] private SharedAudioSystem _audio = default!; @@ -95,7 +94,7 @@ public sealed partial class SolutionDumpingSystem : EntitySystem // TODO: This should be replaced with proper support for unlimited solutions, rather than cheating by bypassing UpdateChemicals using AddSolution. We can already avoid reactions using CanReact = false, this cheat just bypasses solution overflow. targetSol.AddSolution( _solContainer.SplitSolution(sourceEnt.Value, sourceEnt.Value.Comp.Solution.Volume), - _protoMan); + ProtoMan); // Solution.AddSolution doesn't dirty targetSol for us Dirty(targetSolEnt.Value); } diff --git a/Content.Shared/Fluids/SharedAbsorbentSystem.cs b/Content.Shared/Fluids/SharedAbsorbentSystem.cs index 3c8c963743..cd59b02edd 100644 --- a/Content.Shared/Fluids/SharedAbsorbentSystem.cs +++ b/Content.Shared/Fluids/SharedAbsorbentSystem.cs @@ -20,7 +20,6 @@ namespace Content.Shared.Fluids; /// public abstract partial class SharedAbsorbentSystem : EntitySystem { - [Dependency] private IPrototypeManager _proto = default!; [Dependency] private SharedAudioSystem _audio = default!; [Dependency] private SharedPopupSystem _popups = default!; [Dependency] protected SharedPuddleSystem Puddle = default!; @@ -73,9 +72,9 @@ public abstract partial class SharedAbsorbentSystem : EntitySystem var absorbentReagents = Puddle.GetAbsorbentReagents(solution); var mopReagent = solution.GetTotalPrototypeQuantity(absorbentReagents); if (mopReagent > FixedPoint2.Zero) - ent.Comp.Progress[solution.GetColorWithOnly(_proto, absorbentReagents)] = mopReagent.Float(); + ent.Comp.Progress[solution.GetColorWithOnly(ProtoMan, absorbentReagents)] = mopReagent.Float(); - var otherColor = solution.GetColorWithout(_proto, absorbentReagents); + var otherColor = solution.GetColorWithout(ProtoMan, absorbentReagents); var other = solution.Volume - mopReagent; if (other > FixedPoint2.Zero) ent.Comp.Progress[otherColor] = other.Float(); diff --git a/Content.Shared/Fluids/SharedPuddleSystem.Evaporation.cs b/Content.Shared/Fluids/SharedPuddleSystem.Evaporation.cs index 4412453919..88a9477b56 100644 --- a/Content.Shared/Fluids/SharedPuddleSystem.Evaporation.cs +++ b/Content.Shared/Fluids/SharedPuddleSystem.Evaporation.cs @@ -84,7 +84,7 @@ public abstract partial class SharedPuddleSystem public ProtoId[] GetEvaporatingReagents(Solution solution) { List> evaporatingReagents = []; - foreach (var solProto in solution.GetReagentPrototypes(_prototypeManager).Keys) + foreach (var solProto in solution.GetReagentPrototypes(ProtoMan).Keys) { if (solProto.EvaporationSpeed > FixedPoint2.Zero) evaporatingReagents.Add(solProto.ID); @@ -95,7 +95,7 @@ public abstract partial class SharedPuddleSystem public ProtoId[] GetAbsorbentReagents(Solution solution) { var absorbentReagents = new List>(); - foreach (ReagentPrototype solProto in solution.GetReagentPrototypes(_prototypeManager).Keys) + foreach (ReagentPrototype solProto in solution.GetReagentPrototypes(ProtoMan).Keys) { if (solProto.Absorbent) absorbentReagents.Add(solProto.ID); @@ -115,7 +115,7 @@ public abstract partial class SharedPuddleSystem public Dictionary, FixedPoint2> GetEvaporationSpeeds(Solution solution) { Dictionary, FixedPoint2> evaporatingSpeeds = []; - foreach (var solProto in solution.GetReagentPrototypes(_prototypeManager).Keys) + foreach (var solProto in solution.GetReagentPrototypes(ProtoMan).Keys) { if (solProto.EvaporationSpeed > FixedPoint2.Zero) { diff --git a/Content.Shared/Fluids/SharedPuddleSystem.Spillable.cs b/Content.Shared/Fluids/SharedPuddleSystem.Spillable.cs index 5a65d56789..d7b72c68d6 100644 --- a/Content.Shared/Fluids/SharedPuddleSystem.Spillable.cs +++ b/Content.Shared/Fluids/SharedPuddleSystem.Spillable.cs @@ -2,7 +2,6 @@ using Content.Shared.Chemistry; using Content.Shared.Chemistry.Components; using Content.Shared.Chemistry.EntitySystems; using Content.Shared.Chemistry.Prototypes; -using Content.Shared.Chemistry.Reaction; using Content.Shared.CombatMode.Pacification; using Content.Shared.Database; using Content.Shared.DoAfter; @@ -79,12 +78,12 @@ public abstract partial class SharedPuddleSystem // TODO: Make this an event subscription once spilling puddles is predicted. // Injectors should not be hardcoded here. if (TryComp(entity, out var injectorComp) - && _prototypeManager.Resolve(injectorComp.ActiveModeProtoId, out var activeMode) + && ProtoMan.Resolve(injectorComp.ActiveModeProtoId, out var activeMode) && !activeMode.Behavior.HasAnyFlag(InjectorBehavior.Draw | InjectorBehavior.Dynamic)) { foreach (var mode in injectorComp.AllowedModes) { - if (!_prototypeManager.Resolve(mode, out var protoMode)) + if (!ProtoMan.Resolve(mode, out var protoMode)) continue; if (protoMode.Behavior.HasAnyFlag(InjectorBehavior.Draw | InjectorBehavior.Dynamic)) diff --git a/Content.Shared/Fluids/SharedPuddleSystem.cs b/Content.Shared/Fluids/SharedPuddleSystem.cs index 99bc19d500..12576cb755 100644 --- a/Content.Shared/Fluids/SharedPuddleSystem.cs +++ b/Content.Shared/Fluids/SharedPuddleSystem.cs @@ -30,7 +30,6 @@ namespace Content.Shared.Fluids; public abstract partial class SharedPuddleSystem : EntitySystem { [Dependency] private IGameTiming _timing = default!; - [Dependency] private IPrototypeManager _prototypeManager = default!; [Dependency] protected ISharedAdminLogManager AdminLogger = default!; [Dependency] protected OpenableSystem Openable = default!; [Dependency] protected ReactiveSystem Reactive = default!; @@ -107,7 +106,7 @@ public abstract partial class SharedPuddleSystem : EntitySystem /// private void CacheStandsout() { - _standoutReagents = [.. _prototypeManager.EnumeratePrototypes().Where(x => x.Standsout).Select(x => x.ID)]; + _standoutReagents = [.. ProtoMan.EnumeratePrototypes().Where(x => x.Standsout).Select(x => x.ID)]; } private void OnSolutionUpdate(Entity entity, ref SolutionChangedEvent args) @@ -140,7 +139,7 @@ public abstract partial class SharedPuddleSystem : EntitySystem var reagentId = solution.GetPrimaryReagentId(); if (!string.IsNullOrWhiteSpace(reagentId?.Prototype) - && _prototypeManager.TryIndex(reagentId.Value.Prototype, out ReagentPrototype? proto)) + && ProtoMan.TryIndex(reagentId.Value.Prototype, out ReagentPrototype? proto)) { args.Sound = proto.FootstepSound; } @@ -205,7 +204,7 @@ public abstract partial class SharedPuddleSystem : EntitySystem // Kinda EH // Could potentially do alpha per-solution but future problem. - color = solution.GetColorWithout(_prototypeManager, _standoutReagents); + color = solution.GetColorWithout(ProtoMan, _standoutReagents); color = color.WithAlpha(0.7f); foreach (var standout in _standoutReagents) @@ -216,7 +215,7 @@ public abstract partial class SharedPuddleSystem : EntitySystem var interpolateValue = quantity.Float() / solution.Volume.Float(); color = Color.InterpolateBetween(color, - _prototypeManager.Index(standout).SubstanceColor, + ProtoMan.Index(standout).SubstanceColor, interpolateValue); } } @@ -270,7 +269,7 @@ public abstract partial class SharedPuddleSystem : EntitySystem foreach (var (reagent, quantity) in solution.Contents) { - var reagentProto = _prototypeManager.Index(reagent.Prototype); + var reagentProto = ProtoMan.Index(reagent.Prototype); // Calculate the minimum speed needed to slip in the puddle. Average the overall slip thresholds for all reagents var deltaSlipTrigger = reagentProto.SlipData?.RequiredSlipSpeed ?? entity.Comp.DefaultSlippery; @@ -325,7 +324,7 @@ public abstract partial class SharedPuddleSystem : EntitySystem var maxViscosity = 0f; foreach (var (reagent, _) in solution.Contents) { - var reagentProto = _prototypeManager.Index(reagent.Prototype); + var reagentProto = ProtoMan.Index(reagent.Prototype); maxViscosity = Math.Max(maxViscosity, reagentProto.Viscosity); } @@ -346,7 +345,7 @@ public abstract partial class SharedPuddleSystem : EntitySystem for (var i = solution.Contents.Count - 1; i >= 0; i--) { var (reagent, quantity) = solution.Contents[i]; - var proto = _prototypeManager.Index(reagent.Prototype); + var proto = ProtoMan.Index(reagent.Prototype); var removed = proto.ReactionTile(tileRef, quantity, EntityManager, reagent.Data); if (removed <= FixedPoint2.Zero) continue; diff --git a/Content.Shared/GhostTypes/GhostSpriteStateSystem.cs b/Content.Shared/GhostTypes/GhostSpriteStateSystem.cs index fa1dfdf4c5..3f0baac831 100644 --- a/Content.Shared/GhostTypes/GhostSpriteStateSystem.cs +++ b/Content.Shared/GhostTypes/GhostSpriteStateSystem.cs @@ -15,7 +15,6 @@ public sealed partial class GhostSpriteStateSystem : EntitySystem [Dependency] private DamageableSystem _damageable = default!; [Dependency] private SharedAppearanceSystem _appearance = default!; [Dependency] private IGameTiming _timing = default!; - [Dependency] private IPrototypeManager _proto = default!; /// /// It goes through an entity damage and assigns them a sprite according to the highest damage type/s @@ -54,7 +53,7 @@ public sealed partial class GhostSpriteStateSystem : EntitySystem if (specialCase != null) // Possible special cases like death by an explosion { - var prototype = _proto.Index(specialCase); + var prototype = ProtoMan.Index(specialCase); spriteState = specialCase + rand.Next(prototype.NumOfStates); } else if (ent.Comp.DamageMap.TryGetValue(highestType, out var spriteAmount)) diff --git a/Content.Shared/GhostTypes/StoreDamageTakenOnMindSystem.cs b/Content.Shared/GhostTypes/StoreDamageTakenOnMindSystem.cs index 3648e768d8..a124f57051 100644 --- a/Content.Shared/GhostTypes/StoreDamageTakenOnMindSystem.cs +++ b/Content.Shared/GhostTypes/StoreDamageTakenOnMindSystem.cs @@ -13,7 +13,6 @@ namespace Content.Shared.GhostTypes; public sealed partial class StoreDamageTakenOnMindSystem : EntitySystem { - [Dependency] private IPrototypeManager _proto = default!; [Dependency] private DamageableSystem _damageable = default!; public override void Initialize() @@ -62,7 +61,7 @@ public sealed partial class StoreDamageTakenOnMindSystem : EntitySystem var protoDict = new Dictionary, FixedPoint2>(); foreach (var stringDict in _damageable.GetDamagePerGroup((ent, damageable))) // Translates the strings into ProtoId's before saving the Dictionary { - if (!_proto.TryIndex(stringDict.Key, out DamageGroupPrototype? proto)) + if (!ProtoMan.TryIndex(stringDict.Key, out DamageGroupPrototype? proto)) continue; protoDict.TryAdd(proto, stringDict.Value); } diff --git a/Content.Shared/Humanoid/HumanoidProfileSystem.cs b/Content.Shared/Humanoid/HumanoidProfileSystem.cs index 68d69e9960..e502a60bd0 100644 --- a/Content.Shared/Humanoid/HumanoidProfileSystem.cs +++ b/Content.Shared/Humanoid/HumanoidProfileSystem.cs @@ -9,7 +9,6 @@ namespace Content.Shared.Humanoid; public sealed partial class HumanoidProfileSystem : EntitySystem { - [Dependency] private IPrototypeManager _prototype = default!; [Dependency] private GrammarSystem _grammar = default!; public override void Initialize() @@ -53,7 +52,7 @@ public sealed partial class HumanoidProfileSystem : EntitySystem /// public string GetSpeciesRepresentation(ProtoId species) { - if (_prototype.TryIndex(species, out var speciesPrototype)) + if (ProtoMan.TryIndex(species, out var speciesPrototype)) return Loc.GetString(speciesPrototype.Name); Log.Error("Tried to get representation of unknown species: {speciesId}"); @@ -65,7 +64,7 @@ public sealed partial class HumanoidProfileSystem : EntitySystem /// public string GetAgeRepresentation(ProtoId species, int age) { - if (!_prototype.TryIndex(species, out var speciesPrototype)) + if (!ProtoMan.TryIndex(species, out var speciesPrototype)) { Log.Error("Tried to get age representation of species that couldn't be indexed: " + species); return Loc.GetString("identity-age-young"); diff --git a/Content.Shared/Humanoid/Markings/MarkingManager.cs b/Content.Shared/Humanoid/Markings/MarkingManager.cs index 7bb3639ba8..96a0f8cf74 100644 --- a/Content.Shared/Humanoid/Markings/MarkingManager.cs +++ b/Content.Shared/Humanoid/Markings/MarkingManager.cs @@ -251,7 +251,7 @@ public sealed partial class MarkingManager var speciesPrototype = _prototype.Index(species); var appearancePrototype = _prototype.Index(speciesPrototype.DollPrototype); - if (!appearancePrototype.TryGetComponent(out var initialBody, _component)) + if (!appearancePrototype.TryComp(out var initialBody, _component)) return new(); return initialBody.Organs; @@ -319,7 +319,7 @@ public sealed partial class MarkingManager if (!_prototype.TryIndex(organ, out var organProto)) return false; - if (!organProto.TryGetComponent(out var comp, _component)) + if (!organProto.TryComp(out var comp, _component)) return false; organData = comp.MarkingData; diff --git a/Content.Shared/Humanoid/NamingSystem.cs b/Content.Shared/Humanoid/NamingSystem.cs index b166d3e323..1d7050ced1 100644 --- a/Content.Shared/Humanoid/NamingSystem.cs +++ b/Content.Shared/Humanoid/NamingSystem.cs @@ -15,15 +15,14 @@ namespace Content.Shared.Humanoid private static readonly ProtoId FallbackSpecies = "Human"; [Dependency] private IRobustRandom _random = default!; - [Dependency] private IPrototypeManager _prototypeManager = default!; public string GetName(string species, Gender? gender = null) { // if they have an old species or whatever just fall back to human I guess? // Some downstream is probably gonna have this eventually but then they can deal with fallbacks. - if (!_prototypeManager.TryIndex(species, out SpeciesPrototype? speciesProto)) + if (!ProtoMan.TryIndex(species, out SpeciesPrototype? speciesProto)) { - speciesProto = _prototypeManager.Index(FallbackSpecies); + speciesProto = ProtoMan.Index(FallbackSpecies); Log.Warning($"Unable to find species {species} for name, falling back to {FallbackSpecies}"); } @@ -50,20 +49,20 @@ namespace Content.Shared.Humanoid switch (gender) { case Gender.Male: - return _random.Pick(_prototypeManager.Index(speciesProto.MaleFirstNames)); + return _random.Pick(ProtoMan.Index(speciesProto.MaleFirstNames)); case Gender.Female: - return _random.Pick(_prototypeManager.Index(speciesProto.FemaleFirstNames)); + return _random.Pick(ProtoMan.Index(speciesProto.FemaleFirstNames)); default: if (_random.Prob(0.5f)) - return _random.Pick(_prototypeManager.Index(speciesProto.MaleFirstNames)); + return _random.Pick(ProtoMan.Index(speciesProto.MaleFirstNames)); else - return _random.Pick(_prototypeManager.Index(speciesProto.FemaleFirstNames)); + return _random.Pick(ProtoMan.Index(speciesProto.FemaleFirstNames)); } } public string GetLastName(SpeciesPrototype speciesProto) { - return _random.Pick(_prototypeManager.Index(speciesProto.LastNames)); + return _random.Pick(ProtoMan.Index(speciesProto.LastNames)); } } } diff --git a/Content.Shared/Implants/SharedImplanterSystem.cs b/Content.Shared/Implants/SharedImplanterSystem.cs index a1f3c98bf9..e9240f182e 100644 --- a/Content.Shared/Implants/SharedImplanterSystem.cs +++ b/Content.Shared/Implants/SharedImplanterSystem.cs @@ -27,7 +27,6 @@ public abstract partial class SharedImplanterSystem : EntitySystem [Dependency] private DamageableSystem _damageable = default!; [Dependency] private EntityWhitelistSystem _whitelist = default!; [Dependency] private IGameTiming _timing = default!; - [Dependency] private IPrototypeManager _proto = default!; [Dependency] private ItemSlotsSystem _itemSlots = default!; [Dependency] private SharedAppearanceSystem _appearance = default!; [Dependency] private SharedAudioSystem _audio = default!; @@ -504,7 +503,7 @@ public abstract partial class SharedImplanterSystem : EntitySystem if (!Resolve(ent, ref ent.Comp, false)) return; - if (implant != null && _proto.TryIndex(implant, out var proto)) // TODO: Why??? + if (implant != null && ProtoMan.TryIndex(implant, out var proto)) // TODO: Why??? ent.Comp.DeimplantChosen = proto; UpdateUi(ent!); diff --git a/Content.Shared/Inventory/InventorySystem.Helpers.cs b/Content.Shared/Inventory/InventorySystem.Helpers.cs index 4212792f55..5ed3ecf749 100644 --- a/Content.Shared/Inventory/InventorySystem.Helpers.cs +++ b/Content.Shared/Inventory/InventorySystem.Helpers.cs @@ -81,7 +81,7 @@ public partial class InventorySystem return false; // If the prototype in question doesn't exist, we do nothing. - if (!_prototypeManager.HasIndex(prototype)) + if (!ProtoMan.HasIndex(prototype)) return false; // Let's spawn this first... diff --git a/Content.Shared/Inventory/InventorySystem.Slots.cs b/Content.Shared/Inventory/InventorySystem.Slots.cs index cef44e2651..2bbb385ca4 100644 --- a/Content.Shared/Inventory/InventorySystem.Slots.cs +++ b/Content.Shared/Inventory/InventorySystem.Slots.cs @@ -11,7 +11,6 @@ namespace Content.Shared.Inventory; public partial class InventorySystem : EntitySystem { - [Dependency] private IPrototypeManager _prototypeManager = default!; [Dependency] private IViewVariablesManager _vvm = default!; private void InitializeSlots() @@ -86,7 +85,7 @@ public partial class InventorySystem : EntitySystem protected virtual void UpdateInventoryTemplate(Entity ent) { - if (!_prototypeManager.Resolve(ent.Comp.TemplateId, out var invTemplate)) + if (!ProtoMan.Resolve(ent.Comp.TemplateId, out var invTemplate)) return; // Remove any containers that aren't in the new template. diff --git a/Content.Shared/Item/SharedItemSystem.cs b/Content.Shared/Item/SharedItemSystem.cs index cf3c68124f..f326c52f5f 100644 --- a/Content.Shared/Item/SharedItemSystem.cs +++ b/Content.Shared/Item/SharedItemSystem.cs @@ -5,9 +5,7 @@ using Content.Shared.Examine; using Content.Shared.Item.ItemToggle.Components; using Content.Shared.Storage; using JetBrains.Annotations; -using Robust.Shared.Collections; using Robust.Shared.Containers; -using Robust.Shared.GameStates; using Robust.Shared.Prototypes; using Robust.Shared.Utility; @@ -15,7 +13,6 @@ namespace Content.Shared.Item; public abstract partial class SharedItemSystem : EntitySystem { - [Dependency] private IPrototypeManager _prototype = default!; [Dependency] private SharedHandsSystem _handsSystem = default!; [Dependency] protected SharedContainerSystem Container = default!; [Dependency] private IComponentFactory _compFactory = default!; @@ -149,7 +146,7 @@ public abstract partial class SharedItemSystem : EntitySystem public ItemSizePrototype GetSizePrototype(ProtoId id) { - return _prototype.Index(id); + return ProtoMan.Index(id); } /// @@ -283,14 +280,14 @@ public abstract partial class SharedItemSystem : EntitySystem [PublicAPI] public int CompareSize(EntProtoId a, EntProtoId b) { - var protoA = _prototype.Index(a); - var protoB = _prototype.Index(b); - if (!protoA.TryGetComponent(out var compA, _compFactory) || - !protoB.TryGetComponent(out var compB, _compFactory)) + var protoA = ProtoMan.Index(a); + var protoB = ProtoMan.Index(b); + if (!protoA.TryComp(out var compA, _compFactory) || + !protoB.TryComp(out var compB, _compFactory)) { return 0; } - return _prototype.Index(compA.Size).CompareTo(_prototype.Index(compB.Size)); + return ProtoMan.Index(compA.Size).CompareTo(ProtoMan.Index(compB.Size)); } } diff --git a/Content.Shared/Kitchen/RecipeManager.cs b/Content.Shared/Kitchen/RecipeManager.cs index f286dda89e..8788eb15ea 100644 --- a/Content.Shared/Kitchen/RecipeManager.cs +++ b/Content.Shared/Kitchen/RecipeManager.cs @@ -5,8 +5,6 @@ namespace Content.Shared.Kitchen; public sealed partial class RecipeManager : EntitySystem { - [Dependency] private IPrototypeManager _prototypeManager = default!; - public List Recipes { get; private set; } = new(); public override void Initialize() @@ -25,7 +23,7 @@ public sealed partial class RecipeManager : EntitySystem private void ReloadRecipes() { - Recipes = _prototypeManager + Recipes = ProtoMan .EnumeratePrototypes() .Where(x => !x.SecretRecipe) .OrderByDescending(x => x.IngredientCount()) diff --git a/Content.Shared/Kitchen/SharedKitchenSpikeSystem.cs b/Content.Shared/Kitchen/SharedKitchenSpikeSystem.cs index 7831097b92..e99d9d5ca6 100644 --- a/Content.Shared/Kitchen/SharedKitchenSpikeSystem.cs +++ b/Content.Shared/Kitchen/SharedKitchenSpikeSystem.cs @@ -37,7 +37,6 @@ public sealed partial class SharedKitchenSpikeSystem : EntitySystem { [Dependency] private IGameTiming _gameTiming = default!; [Dependency] private ISharedAdminLogManager _logger = default!; - [Dependency] private IPrototypeManager _protoManager = default!; [Dependency] private DamageableSystem _damageableSystem = default!; [Dependency] private ExamineSystemShared _examineSystem = default!; [Dependency] private MetaDataSystem _metaDataSystem = default!; @@ -132,7 +131,7 @@ public sealed partial class SharedKitchenSpikeSystem : EntitySystem if (args.Handled || !victim.HasValue) return; - var quality = _protoManager.Index(ent.Comp.RequiredToolQuality); + var quality = ProtoMan.Index(ent.Comp.RequiredToolQuality); _popupSystem.PopupClient(Loc.GetString("comp-kitchen-spike-need-tool-quality", ("target", Identity.Entity(victim.Value, EntityManager)), ("quality", Loc.GetString(quality.Name))), @@ -154,7 +153,7 @@ public sealed partial class SharedKitchenSpikeSystem : EntitySystem if (!TryComp(args.Used, out var tool) || !_toolSystem.HasQuality(args.Used, ent.Comp.RequiredToolQuality, tool)) { - var quality = _protoManager.Index(ent.Comp.RequiredToolQuality); + var quality = ProtoMan.Index(ent.Comp.RequiredToolQuality); _popupSystem.PopupClient(Loc.GetString("comp-kitchen-spike-need-tool-quality", ("target", Identity.Entity(victim.Value, EntityManager)), ("quality", Loc.GetString(quality.Name))), diff --git a/Content.Shared/Lathe/SharedLatheSystem.cs b/Content.Shared/Lathe/SharedLatheSystem.cs index 38f7f2fb41..8b32dd468f 100644 --- a/Content.Shared/Lathe/SharedLatheSystem.cs +++ b/Content.Shared/Lathe/SharedLatheSystem.cs @@ -17,7 +17,6 @@ namespace Content.Shared.Lathe; /// public abstract partial class SharedLatheSystem : EntitySystem { - [Dependency] private IPrototypeManager _proto = default!; [Dependency] private SharedMaterialStorageSystem _materialStorage = default!; [Dependency] private EmagSystem _emag = default!; @@ -43,12 +42,12 @@ public abstract partial class SharedLatheSystem : EntitySystem var recipes = new HashSet>(); foreach (var pack in component.StaticPacks) { - recipes.UnionWith(_proto.Index(pack).Recipes); + recipes.UnionWith(ProtoMan.Index(pack).Recipes); } foreach (var pack in component.DynamicPacks) { - recipes.UnionWith(_proto.Index(pack).Recipes); + recipes.UnionWith(ProtoMan.Index(pack).Recipes); } return recipes; @@ -61,7 +60,7 @@ public abstract partial class SharedLatheSystem : EntitySystem { foreach (var id in packs) { - var pack = _proto.Index(id); + var pack = ProtoMan.Index(id); recipes.UnionWith(pack.Recipes); } } @@ -78,7 +77,7 @@ public abstract partial class SharedLatheSystem : EntitySystem [PublicAPI] public bool CanProduce(EntityUid uid, string recipe, int amount = 1, LatheComponent? component = null) { - return _proto.TryIndex(recipe, out var proto) && CanProduce(uid, proto, amount, component); + return ProtoMan.TryIndex(recipe, out var proto) && CanProduce(uid, proto, amount, component); } public bool CanProduce(EntityUid uid, LatheRecipePrototype recipe, int amount = 1, LatheComponent? component = null) @@ -126,7 +125,7 @@ public abstract partial class SharedLatheSystem : EntitySystem private void BuildInverseRecipeDictionary() { InverseRecipes.Clear(); - foreach (var latheRecipe in _proto.EnumeratePrototypes()) + foreach (var latheRecipe in ProtoMan.EnumeratePrototypes()) { if (latheRecipe.Result is not {} result) continue; @@ -145,7 +144,7 @@ public abstract partial class SharedLatheSystem : EntitySystem public string GetRecipeName(ProtoId proto) { - return GetRecipeName(_proto.Index(proto)); + return GetRecipeName(ProtoMan.Index(proto)); } public string GetRecipeName(LatheRecipePrototype proto) @@ -155,13 +154,13 @@ public abstract partial class SharedLatheSystem : EntitySystem if (proto.Result is {} result) { - return _proto.Index(result).Name; + return ProtoMan.Index(result).Name; } if (proto.ResultReagents is { } resultReagents) { return ContentLocalizationManager.FormatList(resultReagents - .Select(p => Loc.GetString("lathe-menu-result-reagent-display", ("reagent", _proto.Index(p.Key).LocalizedName), ("amount", p.Value))) + .Select(p => Loc.GetString("lathe-menu-result-reagent-display", ("reagent", ProtoMan.Index(p.Key).LocalizedName), ("amount", p.Value))) .ToList()); } @@ -171,7 +170,7 @@ public abstract partial class SharedLatheSystem : EntitySystem [PublicAPI] public string GetRecipeDescription(ProtoId proto) { - return GetRecipeDescription(_proto.Index(proto)); + return GetRecipeDescription(ProtoMan.Index(proto)); } public string GetRecipeDescription(LatheRecipePrototype proto) @@ -181,14 +180,14 @@ public abstract partial class SharedLatheSystem : EntitySystem if (proto.Result is {} result) { - return _proto.Index(result).Description; + return ProtoMan.Index(result).Description; } if (proto.ResultReagents is { } resultReagents) { // We only use the first one for the description since these descriptions don't combine very well. var reagent = resultReagents.First().Key; - return _proto.Index(reagent).LocalizedDescription; + return ProtoMan.Index(reagent).LocalizedDescription; } return string.Empty; diff --git a/Content.Shared/Light/EntitySystems/UnpoweredFlashlightSystem.cs b/Content.Shared/Light/EntitySystems/UnpoweredFlashlightSystem.cs index fb84089f03..1c3bbbe497 100644 --- a/Content.Shared/Light/EntitySystems/UnpoweredFlashlightSystem.cs +++ b/Content.Shared/Light/EntitySystems/UnpoweredFlashlightSystem.cs @@ -2,7 +2,6 @@ using Content.Shared.Actions; using Content.Shared.Emag.Systems; using Content.Shared.Light.Components; using Content.Shared.Mind.Components; -using Content.Shared.Storage.Components; using Content.Shared.Toggleable; using Content.Shared.Verbs; using Robust.Shared.Audio.Systems; @@ -16,7 +15,6 @@ public sealed partial class UnpoweredFlashlightSystem : EntitySystem { // TODO: Split some of this to ItemTogglePointLight - [Dependency] private IPrototypeManager _prototypeManager = default!; [Dependency] private IRobustRandom _random = default!; [Dependency] private SharedActionsSystem _actionsSystem = default!; [Dependency] private ActionContainerSystem _actionContainer = default!; @@ -86,7 +84,7 @@ public sealed partial class UnpoweredFlashlightSystem : EntitySystem if (!_light.TryGetLight(uid, out var light)) return; - if (_prototypeManager.Resolve(component.EmaggedColorsPrototype, out var possibleColors)) + if (ProtoMan.Resolve(component.EmaggedColorsPrototype, out var possibleColors)) { var pick = _random.Pick(possibleColors.Colors.Values); _light.SetColor(uid, pick, light); diff --git a/Content.Shared/Materials/SharedMaterialStorageSystem.cs b/Content.Shared/Materials/SharedMaterialStorageSystem.cs index c99d21fd2e..9832c9c0fc 100644 --- a/Content.Shared/Materials/SharedMaterialStorageSystem.cs +++ b/Content.Shared/Materials/SharedMaterialStorageSystem.cs @@ -19,7 +19,6 @@ public abstract partial class SharedMaterialStorageSystem : EntitySystem { [Dependency] private SharedAppearanceSystem _appearance = default!; [Dependency] private IGameTiming _timing = default!; - [Dependency] private IPrototypeManager _prototype = default!; [Dependency] private EntityWhitelistSystem _whitelistSystem = default!; /// @@ -371,7 +370,7 @@ public abstract partial class SharedMaterialStorageSystem : EntitySystem insertingComp.EndTime = _timing.CurTime + storage.InsertionTime; if (!storage.IgnoreColor) { - _prototype.TryIndex(composition.MaterialComposition.Keys.First(), out var lastMat); + ProtoMan.TryIndex(composition.MaterialComposition.Keys.First(), out var lastMat); insertingComp.MaterialColor = lastMat?.Color; } _appearance.SetData(receiver, MaterialStorageVisuals.Inserting, true); @@ -415,9 +414,9 @@ public abstract partial class SharedMaterialStorageSystem : EntitySystem if (material.StackEntity == null) return DefaultSheetVolume; - var proto = _prototype.Index(material.StackEntity); + var proto = ProtoMan.Index(material.StackEntity); - if (!proto.TryGetComponent(out var composition, EntityManager.ComponentFactory)) + if (!proto.TryComp(out var composition, EntityManager.ComponentFactory)) return DefaultSheetVolume; return composition.MaterialComposition.FirstOrDefault(kvp => kvp.Key == material.ID).Value; diff --git a/Content.Shared/Medical/SuitSensors/SharedSuitSensorSystem.cs b/Content.Shared/Medical/SuitSensors/SharedSuitSensorSystem.cs index 7bfa3fe854..d03fd20ddc 100644 --- a/Content.Shared/Medical/SuitSensors/SharedSuitSensorSystem.cs +++ b/Content.Shared/Medical/SuitSensors/SharedSuitSensorSystem.cs @@ -36,7 +36,6 @@ public abstract partial class SharedSuitSensorSystem : EntitySystem [Dependency] private SharedInteractionSystem _interactionSystem = default!; [Dependency] private SharedDoAfterSystem _doAfterSystem = default!; [Dependency] private ActionBlockerSystem _actionBlocker = default!; - [Dependency] private IPrototypeManager _proto = default!; [Dependency] private InventorySystem _inventory = default!; [Dependency] private SharedIdCardSystem _idCardSystem = default!; [Dependency] private IRobustRandom _random = default!; @@ -386,7 +385,7 @@ public abstract partial class SharedSuitSensorSystem : EntitySystem userJobIcon = card.Comp.JobIcon; foreach (var department in card.Comp.JobDepartments) - userJobDepartments.Add(Loc.GetString(_proto.Index(department).Name)); + userJobDepartments.Add(Loc.GetString(ProtoMan.Index(department).Name)); } // get health mob state diff --git a/Content.Shared/Medical/VomitSystem.cs b/Content.Shared/Medical/VomitSystem.cs index cdb2b807ab..72bd7c9929 100644 --- a/Content.Shared/Medical/VomitSystem.cs +++ b/Content.Shared/Medical/VomitSystem.cs @@ -22,7 +22,6 @@ namespace Content.Shared.Medical; public sealed partial class VomitSystem : EntitySystem { [Dependency] private INetManager _netManager = default!; - [Dependency] private IPrototypeManager _proto = default!; [Dependency] private HungerSystem _hunger = default!; [Dependency] private MobStateSystem _mobState = default!; [Dependency] private MovementModStatusSystem _movementMod = default!; @@ -59,7 +58,7 @@ public sealed partial class VomitSystem : EntitySystem return; // Empty stomach solution into the new vomit solution - args.Args.Sol.AddSolution(sol, _proto); + args.Args.Sol.AddSolution(sol, ProtoMan); sol.RemoveAllSolution(); // Remind the stomach that it's empty. @@ -112,7 +111,7 @@ public sealed partial class VomitSystem : EntitySystem if (vomitChemstreamAmount != null) { vomitChemstreamAmount.ScaleSolution(ChemMultiplier); - solution.AddSolution(vomitChemstreamAmount, _proto); + solution.AddSolution(vomitChemstreamAmount, ProtoMan); vomitAmount -= (float)vomitChemstreamAmount.Volume; } } diff --git a/Content.Shared/Metabolism/MetabolizerSystem.cs b/Content.Shared/Metabolism/MetabolizerSystem.cs index 21de771dfc..196b220927 100644 --- a/Content.Shared/Metabolism/MetabolizerSystem.cs +++ b/Content.Shared/Metabolism/MetabolizerSystem.cs @@ -16,7 +16,6 @@ using Content.Shared.FixedPoint; using Content.Shared.Mobs.Systems; using Content.Shared.Random.Helpers; using Robust.Shared.Prototypes; -using Robust.Shared.Random; using Robust.Shared.Timing; namespace Content.Shared.Metabolism; @@ -25,7 +24,6 @@ namespace Content.Shared.Metabolism; public sealed partial class MetabolizerSystem : EntitySystem { [Dependency] private IGameTiming _gameTiming = default!; - [Dependency] private IPrototypeManager _prototypeManager = default!; [Dependency] private MobStateSystem _mobStateSystem = default!; [Dependency] private SharedEntityConditionsSystem _entityConditions = default!; [Dependency] private SharedEntityEffectsSystem _entityEffects = default!; @@ -153,7 +151,7 @@ public sealed partial class MetabolizerSystem : EntitySystem int reagents = 0; foreach (var (reagent, quantity) in list) { - if (!_prototypeManager.TryIndex(reagent.Prototype, out var proto)) + if (!ProtoMan.TryIndex(reagent.Prototype, out var proto)) continue; // Skip blood reagents diff --git a/Content.Shared/NPC/Systems/NpcFactionSystem.cs b/Content.Shared/NPC/Systems/NpcFactionSystem.cs index 5f4f090c61..20325ef852 100644 --- a/Content.Shared/NPC/Systems/NpcFactionSystem.cs +++ b/Content.Shared/NPC/Systems/NpcFactionSystem.cs @@ -12,7 +12,6 @@ namespace Content.Shared.NPC.Systems; public sealed partial class NpcFactionSystem : EntitySystem { [Dependency] private EntityLookupSystem _lookup = default!; - [Dependency] private IPrototypeManager _proto = default!; [Dependency] private SharedTransformSystem _xform = default!; /// @@ -104,7 +103,7 @@ public sealed partial class NpcFactionSystem : EntitySystem /// public void AddFaction(Entity ent, [ForbidLiteral] string faction, bool dirty = true) { - if (!_proto.HasIndex(faction)) + if (!ProtoMan.HasIndex(faction)) { Log.Error($"Unable to find faction {faction}"); return; @@ -127,7 +126,7 @@ public sealed partial class NpcFactionSystem : EntitySystem foreach (var faction in factions) { - if (!_proto.HasIndex(faction)) + if (!ProtoMan.HasIndex(faction)) { Log.Error($"Unable to find faction {faction}"); continue; @@ -145,7 +144,7 @@ public sealed partial class NpcFactionSystem : EntitySystem /// public void RemoveFaction(Entity ent, [ForbidLiteral] string faction, bool dirty = true) { - if (!_proto.HasIndex(faction)) + if (!ProtoMan.HasIndex(faction)) { Log.Error($"Unable to find faction {faction}"); return; @@ -307,7 +306,7 @@ public sealed partial class NpcFactionSystem : EntitySystem private void RefreshFactions() { - _factions = _proto.EnumeratePrototypes().ToFrozenDictionary( + _factions = ProtoMan.EnumeratePrototypes().ToFrozenDictionary( faction => faction.ID, faction => new FactionData { diff --git a/Content.Shared/NameIdentifier/SharedNameIdentifierSystem.cs b/Content.Shared/NameIdentifier/SharedNameIdentifierSystem.cs index abba2e0663..068e416d77 100644 --- a/Content.Shared/NameIdentifier/SharedNameIdentifierSystem.cs +++ b/Content.Shared/NameIdentifier/SharedNameIdentifierSystem.cs @@ -1,5 +1,4 @@ using Content.Shared.NameModifier.EntitySystems; -using Robust.Shared.Prototypes; namespace Content.Shared.NameIdentifier; @@ -8,8 +7,6 @@ namespace Content.Shared.NameIdentifier; /// public abstract partial class SharedNameIdentifierSystem : EntitySystem { - [Dependency] private IPrototypeManager _prototypeManager = default!; - public override void Initialize() { base.Initialize(); @@ -26,7 +23,7 @@ public abstract partial class SharedNameIdentifierSystem : EntitySystem if (ent.Comp.LifeStage > ComponentLifeStage.Running) return; - if (!_prototypeManager.Resolve(ent.Comp.Group, out var group)) + if (!ProtoMan.Resolve(ent.Comp.Group, out var group)) return; var format = group.FullName ? "name-identifier-format-full" : "name-identifier-format-append"; diff --git a/Content.Shared/Nutrition/EntitySystems/FlavorProfileSystem.cs b/Content.Shared/Nutrition/EntitySystems/FlavorProfileSystem.cs index 5f35ab7443..ede290ff11 100644 --- a/Content.Shared/Nutrition/EntitySystems/FlavorProfileSystem.cs +++ b/Content.Shared/Nutrition/EntitySystems/FlavorProfileSystem.cs @@ -12,7 +12,6 @@ namespace Content.Shared.Nutrition.EntitySystems; /// public sealed partial class FlavorProfileSystem : EntitySystem { - [Dependency] private IPrototypeManager _prototypeManager = default!; [Dependency] private IConfigurationManager _configManager = default!; private const string BackupFlavorMessage = "flavor-profile-unknown"; @@ -60,7 +59,7 @@ public sealed partial class FlavorProfileSystem : EntitySystem var flavors = new List(flavorSet.Count); foreach (var flavor in flavorSet) { - flavors.Add(_prototypeManager.Index(flavor)); + flavors.Add(ProtoMan.Index(flavor)); } flavors.Sort((a, b) => a.FlavorType.CompareTo(b.FlavorType)); @@ -83,7 +82,7 @@ public sealed partial class FlavorProfileSystem : EntitySystem private HashSet> GetFlavorsFromReagents(Solution solution, int desiredAmount, HashSet? toIgnore = null) { var flavors = new HashSet>(); - foreach (var (reagent, quantity) in solution.GetReagentPrototypes(_prototypeManager)) + foreach (var (reagent, quantity) in solution.GetReagentPrototypes(ProtoMan)) { if (toIgnore != null && toIgnore.Contains(reagent.ID)) { diff --git a/Content.Shared/Nutrition/EntitySystems/FoodSequenceSystem.cs b/Content.Shared/Nutrition/EntitySystems/FoodSequenceSystem.cs index edbd965093..4c991496a6 100644 --- a/Content.Shared/Nutrition/EntitySystems/FoodSequenceSystem.cs +++ b/Content.Shared/Nutrition/EntitySystems/FoodSequenceSystem.cs @@ -16,7 +16,6 @@ namespace Content.Shared.Nutrition.EntitySystems; public sealed partial class FoodSequenceSystem : SharedFoodSequenceSystem { [Dependency] private IRobustRandom _random = default!; - [Dependency] private IPrototypeManager _proto = default!; [Dependency] private MetaDataSystem _metaData = default!; [Dependency] private MobStateSystem _mobState = default!; [Dependency] private IngestionSystem _ingestion = default!; @@ -45,7 +44,7 @@ public sealed partial class FoodSequenceSystem : SharedFoodSequenceSystem if (!TryComp(args.Start, out var start)) return; - if (!_proto.Resolve(args.Proto, out var elementProto)) + if (!ProtoMan.Resolve(args.Proto, out var elementProto)) return; if (!ent.Comp.OnlyFinal || elementProto.Final || start.FoodLayers.Count == start.MaxLayers) @@ -57,7 +56,7 @@ public sealed partial class FoodSequenceSystem : SharedFoodSequenceSystem private bool TryMetamorph(Entity start) { List availableRecipes = new(); - foreach (var recipe in _proto.EnumeratePrototypes()) + foreach (var recipe in ProtoMan.EnumeratePrototypes()) { if (recipe.Key != start.Comp.Key) continue; @@ -65,7 +64,7 @@ public sealed partial class FoodSequenceSystem : SharedFoodSequenceSystem bool allowed = true; foreach (var rule in recipe.Rules) { - if (!rule.Check(_proto, EntityManager, start, start.Comp.FoodLayers)) + if (!rule.Check(ProtoMan, EntityManager, start, start.Comp.FoodLayers)) { allowed = false; break; @@ -118,7 +117,7 @@ public sealed partial class FoodSequenceSystem : SharedFoodSequenceSystem if (!element.Comp1.Entries.TryGetValue(start.Comp.Key, out var elementProto)) return false; - if (!_proto.Resolve(elementProto, out var elementIndexed)) + if (!ProtoMan.Resolve(elementProto, out var elementIndexed)) return false; //if we run out of space, we can still put in one last, final finishing element. @@ -185,7 +184,7 @@ public sealed partial class FoodSequenceSystem : SharedFoodSequenceSystem var nameCounter = 1; foreach (var proto in existedContentNames) { - if (!_proto.Resolve(proto, out var protoIndexed)) + if (!ProtoMan.Resolve(proto, out var protoIndexed)) continue; if (protoIndexed.Name is null) diff --git a/Content.Shared/Nutrition/EntitySystems/HungerSystem.cs b/Content.Shared/Nutrition/EntitySystems/HungerSystem.cs index b28455b02e..071fa626e4 100644 --- a/Content.Shared/Nutrition/EntitySystems/HungerSystem.cs +++ b/Content.Shared/Nutrition/EntitySystems/HungerSystem.cs @@ -15,7 +15,6 @@ namespace Content.Shared.Nutrition.EntitySystems; public sealed partial class HungerSystem : EntitySystem { [Dependency] private IGameTiming _timing = default!; - [Dependency] private IPrototypeManager _prototype = default!; [Dependency] private IRobustRandom _random = default!; [Dependency] private AlertsSystem _alerts = default!; [Dependency] private DamageableSystem _damageable = default!; @@ -235,13 +234,13 @@ public sealed partial class HungerSystem : EntitySystem switch (component.CurrentThreshold) { case HungerThreshold.Overfed: - _prototype.Resolve(HungerIconOverfedId, out prototype); + ProtoMan.Resolve(HungerIconOverfedId, out prototype); break; case HungerThreshold.Peckish: - _prototype.Resolve(HungerIconPeckishId, out prototype); + ProtoMan.Resolve(HungerIconPeckishId, out prototype); break; case HungerThreshold.Starving: - _prototype.Resolve(HungerIconStarvingId, out prototype); + ProtoMan.Resolve(HungerIconStarvingId, out prototype); break; default: prototype = null; diff --git a/Content.Shared/Nutrition/EntitySystems/IngestionSystem.API.cs b/Content.Shared/Nutrition/EntitySystems/IngestionSystem.API.cs index 6c29e4fb0d..ca8beea28f 100644 --- a/Content.Shared/Nutrition/EntitySystems/IngestionSystem.API.cs +++ b/Content.Shared/Nutrition/EntitySystems/IngestionSystem.API.cs @@ -1,6 +1,5 @@ using System.Diagnostics.CodeAnalysis; using Content.Shared.Chemistry.Components; -using Content.Shared.Chemistry.Components.SolutionManager; using Content.Shared.Chemistry.Reagent; using Content.Shared.EntityEffects.Effects.Body; using Content.Shared.FixedPoint; @@ -216,7 +215,7 @@ public sealed partial class IngestionSystem var total = 0f; foreach (var quantity in solution.Contents) { - var reagent = _proto.Index(quantity.Reagent.Prototype); + var reagent = ProtoMan.Index(quantity.Reagent.Prototype); if (reagent.Metabolisms == null) continue; @@ -267,7 +266,7 @@ public sealed partial class IngestionSystem var total = 0f; foreach (var quantity in solution.Contents) { - var reagent = _proto.Index(quantity.Reagent.Prototype); + var reagent = ProtoMan.Index(quantity.Reagent.Prototype); if (reagent.Metabolisms == null) continue; @@ -353,7 +352,7 @@ public sealed partial class IngestionSystem if (!CanIngest(user, ingested)) return false; - var proto = _proto.Index(type); + var proto = ProtoMan.Index(type); verb = new() { @@ -401,7 +400,7 @@ public sealed partial class IngestionSystem public string GetProtoNoun([ForbidLiteral] ProtoId proto) { - var prototype = _proto.Index(proto); + var prototype = ProtoMan.Index(proto); return GetProtoNoun(prototype); } @@ -427,7 +426,7 @@ public sealed partial class IngestionSystem public string GetProtoVerb([ForbidLiteral] ProtoId proto) { - var prototype = _proto.Index(proto); + var prototype = ProtoMan.Index(proto); return GetProtoVerb(prototype); } diff --git a/Content.Shared/Nutrition/EntitySystems/IngestionSystem.cs b/Content.Shared/Nutrition/EntitySystems/IngestionSystem.cs index bb018eca61..9d6af07b34 100644 --- a/Content.Shared/Nutrition/EntitySystems/IngestionSystem.cs +++ b/Content.Shared/Nutrition/EntitySystems/IngestionSystem.cs @@ -44,7 +44,6 @@ namespace Content.Shared.Nutrition.EntitySystems; /// public sealed partial class IngestionSystem : EntitySystem { - [Dependency] private IPrototypeManager _proto = default!; [Dependency] private ISharedAdminLogManager _adminLogger = default!; [Dependency] private EntityWhitelistSystem _whitelistSystem = default!; [Dependency] private FlavorProfileSystem _flavorProfile = default!; @@ -449,7 +448,7 @@ public sealed partial class IngestionSystem : EntitySystem args.Handled = true; - var edible = _proto.Index(entity.Comp.Edible); + var edible = ProtoMan.Index(entity.Comp.Edible); _audio.PlayPredicted(entity.Comp.UseSound ?? edible.UseSound, args.Target, args.User); diff --git a/Content.Shared/Nutrition/EntitySystems/PressurizedSolutionSystem.cs b/Content.Shared/Nutrition/EntitySystems/PressurizedSolutionSystem.cs index 214324697e..d217fda3dd 100644 --- a/Content.Shared/Nutrition/EntitySystems/PressurizedSolutionSystem.cs +++ b/Content.Shared/Nutrition/EntitySystems/PressurizedSolutionSystem.cs @@ -7,7 +7,6 @@ using Content.Shared.IdentityManagement; using Robust.Shared.Audio.Systems; using Robust.Shared.Random; using Robust.Shared.Timing; -using Robust.Shared.Prototypes; using Robust.Shared.Network; using Content.Shared.Fluids; using Content.Shared.Popups; @@ -25,7 +24,6 @@ public sealed partial class PressurizedSolutionSystem : EntitySystem [Dependency] private INetManager _net = default!; [Dependency] private IGameTiming _timing = default!; [Dependency] private IRobustRandom _random = default!; - [Dependency] private IPrototypeManager _prototypeManager = default!; public override void Initialize() { base.Initialize(); @@ -62,7 +60,7 @@ public sealed partial class PressurizedSolutionSystem : EntitySystem // Check each reagent in the solution foreach (var reagent in solution.Contents) { - if (_prototypeManager.TryIndex(reagent.Reagent.Prototype, out ReagentPrototype? reagentProto) && reagentProto != null) + if (ProtoMan.TryIndex(reagent.Reagent.Prototype, out ReagentPrototype? reagentProto) && reagentProto != null) { // What portion of the solution is this reagent? var proportion = (float) (reagent.Quantity / solution.Volume); diff --git a/Content.Shared/Nutrition/EntitySystems/ThirstSystem.cs b/Content.Shared/Nutrition/EntitySystems/ThirstSystem.cs index aab777a741..a2241d3a5f 100644 --- a/Content.Shared/Nutrition/EntitySystems/ThirstSystem.cs +++ b/Content.Shared/Nutrition/EntitySystems/ThirstSystem.cs @@ -8,7 +8,6 @@ using JetBrains.Annotations; using Robust.Shared.Prototypes; using Robust.Shared.Random; using Robust.Shared.Timing; -using Robust.Shared.Utility; using System.Diagnostics.CodeAnalysis; namespace Content.Shared.Nutrition.EntitySystems; @@ -17,7 +16,6 @@ namespace Content.Shared.Nutrition.EntitySystems; public sealed partial class ThirstSystem : EntitySystem { [Dependency] private IGameTiming _timing = default!; - [Dependency] private IPrototypeManager _prototype = default!; [Dependency] private IRobustRandom _random = default!; [Dependency] private AlertsSystem _alerts = default!; [Dependency] private MovementSpeedModifierSystem _movement = default!; @@ -126,15 +124,15 @@ public sealed partial class ThirstSystem : EntitySystem switch (component.CurrentThirstThreshold) { case ThirstThreshold.OverHydrated: - _prototype.Resolve(ThirstIconOverhydratedId, out prototype); + ProtoMan.Resolve(ThirstIconOverhydratedId, out prototype); break; case ThirstThreshold.Thirsty: - _prototype.Resolve(ThirstIconThirstyId, out prototype); + ProtoMan.Resolve(ThirstIconThirstyId, out prototype); break; case ThirstThreshold.Parched: - _prototype.Resolve(ThirstIconParchedId, out prototype); + ProtoMan.Resolve(ThirstIconParchedId, out prototype); break; default: diff --git a/Content.Shared/Objectives/Systems/SharedObjectivesSystem.cs b/Content.Shared/Objectives/Systems/SharedObjectivesSystem.cs index 52be0fb57e..5b5a34faa3 100644 --- a/Content.Shared/Objectives/Systems/SharedObjectivesSystem.cs +++ b/Content.Shared/Objectives/Systems/SharedObjectivesSystem.cs @@ -12,7 +12,6 @@ namespace Content.Shared.Objectives.Systems; public abstract partial class SharedObjectivesSystem : EntitySystem { [Dependency] private SharedMindSystem _mind = default!; - [Dependency] private IPrototypeManager _protoMan = default!; /// /// Checks requirements and duplicate objectives to see if an objective can be assigned. @@ -48,7 +47,7 @@ public abstract partial class SharedObjectivesSystem : EntitySystem /// public EntityUid? TryCreateObjective(EntityUid mindId, MindComponent mind, string proto) { - if (!_protoMan.HasIndex(proto)) + if (!ProtoMan.HasIndex(proto)) return null; var uid = Spawn(proto); diff --git a/Content.Shared/Paper/PaperSystem.cs b/Content.Shared/Paper/PaperSystem.cs index a4b5940ccd..6bca133986 100644 --- a/Content.Shared/Paper/PaperSystem.cs +++ b/Content.Shared/Paper/PaperSystem.cs @@ -18,7 +18,6 @@ namespace Content.Shared.Paper; public sealed partial class PaperSystem : EntitySystem { [Dependency] private ISharedAdminLogManager _adminLogger = default!; - [Dependency] private IPrototypeManager _protoMan = default!; [Dependency] private IRobustRandom _random = default!; [Dependency] private SharedAppearanceSystem _appearance = default!; [Dependency] private SharedInteractionSystem _interaction = default!; @@ -220,7 +219,7 @@ public sealed partial class PaperSystem : EntitySystem RemCompDeferred(ent, ent.Comp); return; } - var dataset = _protoMan.Index(ent.Comp.Dataset); + var dataset = ProtoMan.Index(ent.Comp.Dataset); // Intentionally not using the Pick overload that directly takes a LocalizedDataset, // because we want to get multiple attributes from the same pick. var pick = _random.Pick(dataset.Values); diff --git a/Content.Shared/Parallax/Biomes/SharedBiomeSystem.cs b/Content.Shared/Parallax/Biomes/SharedBiomeSystem.cs index 0ded008083..b29e41c234 100644 --- a/Content.Shared/Parallax/Biomes/SharedBiomeSystem.cs +++ b/Content.Shared/Parallax/Biomes/SharedBiomeSystem.cs @@ -5,15 +5,12 @@ using Content.Shared.Parallax.Biomes.Layers; using Robust.Shared.Map; using Robust.Shared.Map.Components; using Robust.Shared.Noise; -using Robust.Shared.Prototypes; using Robust.Shared.Serialization.Manager; -using Robust.Shared.Utility; namespace Content.Shared.Parallax.Biomes; public abstract partial class SharedBiomeSystem : EntitySystem { - [Dependency] protected IPrototypeManager ProtoManager = default!; [Dependency] private ISerializationManager _serManager = default!; [Dependency] protected ITileDefinitionManager TileDefManager = default!; [Dependency] private TileSystem _tile = default!; @@ -128,7 +125,7 @@ public abstract partial class SharedBiomeSystem : EntitySystem // Check if the tile is from meta layer, otherwise fall back to default layers. if (layer is BiomeMetaLayer meta) { - if (TryGetBiomeTile(indices, ProtoManager.Index(meta.Template).Layers, seed, grid, out tile)) + if (TryGetBiomeTile(indices, ProtoMan.Index(meta.Template).Layers, seed, grid, out tile)) { return true; } @@ -139,7 +136,7 @@ public abstract partial class SharedBiomeSystem : EntitySystem if (layer is not BiomeTileLayer tileLayer) continue; - if (TryGetTile(indices, noiseCopy, tileLayer.Invert, tileLayer.Threshold, ProtoManager.Index(tileLayer.Tile), tileLayer.Variants, out tile)) + if (TryGetTile(indices, noiseCopy, tileLayer.Invert, tileLayer.Threshold, ProtoMan.Index(tileLayer.Tile), tileLayer.Variants, out tile)) { return true; } @@ -246,7 +243,7 @@ public abstract partial class SharedBiomeSystem : EntitySystem if (layer is BiomeMetaLayer meta) { - if (TryGetEntity(indices, ProtoManager.Index(meta.Template).Layers, tileRef, seed, grid, out entity)) + if (TryGetEntity(indices, ProtoMan.Index(meta.Template).Layers, tileRef, seed, grid, out entity)) { return true; } @@ -321,7 +318,7 @@ public abstract partial class SharedBiomeSystem : EntitySystem if (layer is BiomeMetaLayer meta) { - if (TryGetDecals(indices, ProtoManager.Index(meta.Template).Layers, seed, grid, out decals)) + if (TryGetDecals(indices, ProtoMan.Index(meta.Template).Layers, seed, grid, out decals)) { return true; } diff --git a/Content.Shared/ParcelWrap/Systems/ParcelWrappingSystem.ParcelWrap.cs b/Content.Shared/ParcelWrap/Systems/ParcelWrappingSystem.ParcelWrap.cs index 410970147a..ef1aff561d 100644 --- a/Content.Shared/ParcelWrap/Systems/ParcelWrappingSystem.ParcelWrap.cs +++ b/Content.Shared/ParcelWrap/Systems/ParcelWrappingSystem.ParcelWrap.cs @@ -15,7 +15,6 @@ namespace Content.Shared.ParcelWrap.Systems; // This part handles Parcel Wrap. public sealed partial class ParcelWrappingSystem { - [Dependency] private IPrototypeManager _proto = default!; [Dependency] private INetManager _net = default!; private static ProtoId _fallbackParcelSize = "Ginormous"; @@ -39,7 +38,7 @@ public sealed partial class ParcelWrappingSystem private void SetFallbackParcelSize() { - if (_proto.EnumeratePrototypes().Max() is { } size) + if (ProtoMan.EnumeratePrototypes().Max() is { } size) { _fallbackParcelSize = size; } diff --git a/Content.Shared/Plunger/Systems/PlungerSystem.cs b/Content.Shared/Plunger/Systems/PlungerSystem.cs index 185d51dd4f..04e389a572 100644 --- a/Content.Shared/Plunger/Systems/PlungerSystem.cs +++ b/Content.Shared/Plunger/Systems/PlungerSystem.cs @@ -3,9 +3,7 @@ using Content.Shared.Interaction; using Content.Shared.Popups; using Content.Shared.Plunger.Components; using Robust.Shared.Audio.Systems; -using Robust.Shared.Timing; using Content.Shared.Random.Helpers; -using Robust.Shared.Network; using Robust.Shared.Prototypes; using Robust.Shared.Random; using Content.Shared.Random; @@ -17,7 +15,6 @@ namespace Content.Shared.Plunger.Systems; /// public sealed partial class PlungerSystem : EntitySystem { - [Dependency] private IPrototypeManager _proto = default!; [Dependency] private IRobustRandom _random = default!; [Dependency] private SharedAudioSystem _audio = default!; [Dependency] private SharedDoAfterSystem _doAfter = default!; @@ -66,7 +63,7 @@ public sealed partial class PlungerSystem : EntitySystem _popup.PopupClient(Loc.GetString("plunger-unblock", ("target", target)), args.User, args.User, PopupType.Medium); plunge.Plunged = true; - var spawn = _proto.Index(plunge.PlungerLoot).Pick(_random); + var spawn = ProtoMan.Index(plunge.PlungerLoot).Pick(_random); _audio.PlayPredicted(plunge.Sound, uid, uid); Spawn(spawn, Transform(target).Coordinates); diff --git a/Content.Shared/Polymorph/Systems/SharedChameleonProjectorSystem.cs b/Content.Shared/Polymorph/Systems/SharedChameleonProjectorSystem.cs index 9504a72a79..c72afa668c 100644 --- a/Content.Shared/Polymorph/Systems/SharedChameleonProjectorSystem.cs +++ b/Content.Shared/Polymorph/Systems/SharedChameleonProjectorSystem.cs @@ -28,7 +28,6 @@ public abstract partial class SharedChameleonProjectorSystem : EntitySystem [Dependency] private DamageableSystem _damageable = default!; [Dependency] private EntityWhitelistSystem _whitelist = default!; [Dependency] private INetManager _net = default!; - [Dependency] private IPrototypeManager _proto = default!; [Dependency] private ISerializationManager _serMan = default!; [Dependency] private MetaDataSystem _meta = default!; [Dependency] private SharedActionsSystem _actions = default!; @@ -347,10 +346,10 @@ public abstract partial class SharedChameleonProjectorSystem : EntitySystem if (comp.SourceProto is not { } protoId) return false; - if (!_proto.TryIndex(protoId, out var proto)) + if (!ProtoMan.TryIndex(protoId, out var proto)) return false; - return proto.TryGetComponent(out src, EntityManager.ComponentFactory); + return proto.TryComp(out src, EntityManager.ComponentFactory); } } diff --git a/Content.Shared/RCD/Systems/RCDSystem.cs b/Content.Shared/RCD/Systems/RCDSystem.cs index fa84f5719a..b66fbde020 100644 --- a/Content.Shared/RCD/Systems/RCDSystem.cs +++ b/Content.Shared/RCD/Systems/RCDSystem.cs @@ -40,7 +40,6 @@ public sealed partial class RCDSystem : EntitySystem [Dependency] private TurfSystem _turf = default!; [Dependency] private TileSystem _tile = default!; [Dependency] private EntityLookupSystem _lookup = default!; - [Dependency] private IPrototypeManager _protoManager = default!; [Dependency] private SharedMapSystem _mapSystem = default!; [Dependency] private SharedTransformSystem _transform = default!; [Dependency] private TagSystem _tags = default!; @@ -89,7 +88,7 @@ public sealed partial class RCDSystem : EntitySystem if (!component.AvailablePrototypes.Contains(args.ProtoId)) return; - if (!_protoManager.Resolve(args.ProtoId, out var prototype)) + if (!ProtoMan.Resolve(args.ProtoId, out var prototype)) return; // Set the current RCD prototype to the one supplied @@ -105,7 +104,7 @@ public sealed partial class RCDSystem : EntitySystem if (!args.IsInDetailsRange) return; - var prototype = _protoManager.Index(component.ProtoId); + var prototype = ProtoMan.Index(component.ProtoId); var msg = Loc.GetString("rcd-component-examine-mode-details", ("mode", Loc.GetString(prototype.SetName))); @@ -114,7 +113,7 @@ public sealed partial class RCDSystem : EntitySystem var name = Loc.GetString(prototype.SetName); if (prototype.Prototype != null && - _protoManager.TryIndex(prototype.Prototype, out var proto)) // don't use Resolve because this can be a tile + ProtoMan.TryIndex(prototype.Prototype, out var proto)) // don't use Resolve because this can be a tile name = proto.Name; msg = Loc.GetString("rcd-component-examine-build-details", ("name", name)); @@ -130,7 +129,7 @@ public sealed partial class RCDSystem : EntitySystem var user = args.User; var location = args.ClickLocation; - var prototype = _protoManager.Index(component.ProtoId); + var prototype = ProtoMan.Index(component.ProtoId); // Initial validity checks if (!location.IsValid(EntityManager)) @@ -187,7 +186,7 @@ public sealed partial class RCDSystem : EntitySystem var deconstructedTile = _mapSystem.GetTileRef(gridUid.Value, mapGrid, location); var protoName = !_turf.IsSpace(deconstructedTile) ? _deconstructTileProto : _deconstructLatticeProto; - if (_protoManager.Resolve(protoName, out var deconProto)) + if (ProtoMan.Resolve(protoName, out var deconProto)) { cost = deconProto.Cost; delay = deconProto.Delay; @@ -336,7 +335,7 @@ public sealed partial class RCDSystem : EntitySystem public bool IsRCDOperationStillValid(EntityUid uid, RCDComponent component, EntityUid gridUid, MapGridComponent mapGrid, TileRef tile, Vector2i position, Direction direction, EntityUid? target, EntityUid user, bool popMsgs = true) { - var prototype = _protoManager.Index(component.ProtoId); + var prototype = ProtoMan.Index(component.ProtoId); // Check that the RCD has enough ammo to get the job done var charges = _sharedCharges.GetCurrentCharges(uid); @@ -381,7 +380,7 @@ public sealed partial class RCDSystem : EntitySystem private bool IsConstructionLocationValid(EntityUid uid, RCDComponent component, EntityUid gridUid, MapGridComponent mapGrid, TileRef tile, Vector2i position, Direction direction, EntityUid user, bool popMsgs = true) { - var prototype = _protoManager.Index(component.ProtoId); + var prototype = ProtoMan.Index(component.ProtoId); // Check rule: Must build on empty tile if (prototype.ConstructionRules.Contains(RcdConstructionRule.MustBuildOnEmptyTile) && !tile.Tile.IsEmpty) @@ -580,7 +579,7 @@ public sealed partial class RCDSystem : EntitySystem if (!_net.IsServer) return; - var prototype = _protoManager.Index(component.ProtoId); + var prototype = ProtoMan.Index(component.ProtoId); if (prototype.Prototype == null) return; diff --git a/Content.Shared/Radio/EntitySystems/EncryptionKeySystem.cs b/Content.Shared/Radio/EntitySystems/EncryptionKeySystem.cs index d3879091ad..724ca59561 100644 --- a/Content.Shared/Radio/EntitySystems/EncryptionKeySystem.cs +++ b/Content.Shared/Radio/EntitySystems/EncryptionKeySystem.cs @@ -10,10 +10,8 @@ using Content.Shared.Tools.Components; using Content.Shared.Wires; using Robust.Shared.Audio.Systems; using Robust.Shared.Containers; -using Robust.Shared.Network; using Robust.Shared.Prototypes; using Robust.Shared.Serialization; -using Robust.Shared.Timing; using SharedToolSystem = Content.Shared.Tools.Systems.SharedToolSystem; namespace Content.Shared.Radio.EntitySystems; @@ -23,7 +21,6 @@ namespace Content.Shared.Radio.EntitySystems; /// public sealed partial class EncryptionKeySystem : EntitySystem { - [Dependency] private IPrototypeManager _protoManager = default!; [Dependency] private SharedToolSystem _tool = default!; [Dependency] private SharedPopupSystem _popup = default!; [Dependency] private SharedContainerSystem _container = default!; @@ -183,7 +180,7 @@ public sealed partial class EncryptionKeySystem : EntitySystem AddChannelsExamine(component.Channels, component.DefaultChannel, args, - _protoManager, + ProtoMan, "examine-encryption-channel"); } } @@ -197,7 +194,7 @@ public sealed partial class EncryptionKeySystem : EntitySystem if(component.Channels.Count > 0) { args.PushMarkup(Loc.GetString("examine-encryption-channels-prefix")); - AddChannelsExamine(component.Channels, component.DefaultChannel, args, _protoManager, "examine-encryption-channel"); + AddChannelsExamine(component.Channels, component.DefaultChannel, args, ProtoMan, "examine-encryption-channel"); } } @@ -212,7 +209,7 @@ public sealed partial class EncryptionKeySystem : EntitySystem RadioChannelPrototype? proto; foreach (var id in channels) { - proto = _protoManager.Index(id); + proto = ProtoMan.Index(id); var key = id == SharedChatSystem.CommonChannel ? SharedChatSystem.RadioCommonPrefix.ToString() @@ -225,7 +222,7 @@ public sealed partial class EncryptionKeySystem : EntitySystem ("freq", proto.Frequency / 10f))); } - if (defaultChannel != null && _protoManager.TryIndex(defaultChannel, out proto)) + if (defaultChannel != null && ProtoMan.TryIndex(defaultChannel, out proto)) { if (HasComp(examineEvent.Examined)) { diff --git a/Content.Shared/RatKing/SharedRatKingSystem.cs b/Content.Shared/RatKing/SharedRatKingSystem.cs index 0464e2faf1..bababa7a49 100644 --- a/Content.Shared/RatKing/SharedRatKingSystem.cs +++ b/Content.Shared/RatKing/SharedRatKingSystem.cs @@ -1,13 +1,11 @@ using Content.Shared.Actions; using Content.Shared.Actions.Components; -using Robust.Shared.Prototypes; using Robust.Shared.Random; namespace Content.Shared.RatKing; public abstract partial class SharedRatKingSystem : EntitySystem { - [Dependency] protected IPrototypeManager PrototypeManager = default!; [Dependency] protected IRobustRandom Random = default!; [Dependency] private SharedActionsSystem _action = default!; diff --git a/Content.Shared/Research/Systems/SharedResearchSystem.cs b/Content.Shared/Research/Systems/SharedResearchSystem.cs index 4fe1822c92..7a6fa3a4ea 100644 --- a/Content.Shared/Research/Systems/SharedResearchSystem.cs +++ b/Content.Shared/Research/Systems/SharedResearchSystem.cs @@ -11,7 +11,6 @@ namespace Content.Shared.Research.Systems; public abstract partial class SharedResearchSystem : EntitySystem { - [Dependency] protected IPrototypeManager PrototypeManager = default!; [Dependency] private IRobustRandom _random = default!; [Dependency] private SharedLatheSystem _lathe = default!; @@ -54,7 +53,7 @@ public abstract partial class SharedResearchSystem : EntitySystem var availableTechnologies = new List(); var disciplineTiers = GetDisciplineTiers(component); - foreach (var tech in PrototypeManager.EnumeratePrototypes()) + foreach (var tech in ProtoMan.EnumeratePrototypes()) { if (IsTechnologyAvailable(component, tech, disciplineTiers)) availableTechnologies.Add(tech); @@ -101,17 +100,17 @@ public abstract partial class SharedResearchSystem : EntitySystem public int GetHighestDisciplineTier(TechnologyDatabaseComponent component, string disciplineId) { - return GetHighestDisciplineTier(component, PrototypeManager.Index(disciplineId)); + return GetHighestDisciplineTier(component, ProtoMan.Index(disciplineId)); } public int GetHighestDisciplineTier(TechnologyDatabaseComponent component, TechDisciplinePrototype techDiscipline) { - var allTech = PrototypeManager.EnumeratePrototypes() + var allTech = ProtoMan.EnumeratePrototypes() .Where(p => p.Discipline == techDiscipline.ID && !p.Hidden).ToList(); var allUnlocked = new List(); foreach (var recipe in component.UnlockedTechnologies) { - var proto = PrototypeManager.Index(recipe); + var proto = ProtoMan.Index(recipe); if (proto.Discipline != techDiscipline.ID) continue; allUnlocked.Add(proto); @@ -156,7 +155,7 @@ public abstract partial class SharedResearchSystem : EntitySystem var description = new FormattedMessage(); if (includeTier) { - disciplinePrototype ??= PrototypeManager.Index(technology.Discipline); + disciplinePrototype ??= ProtoMan.Index(technology.Discipline); description.AddMarkupOrThrow(Loc.GetString("research-console-tier-discipline-info", ("tier", technology.Tier), ("color", disciplinePrototype.Color), ("discipline", Loc.GetString(disciplinePrototype.Name)))); description.PushNewline(); @@ -173,7 +172,7 @@ public abstract partial class SharedResearchSystem : EntitySystem description.AddMarkupOrThrow(Loc.GetString("research-console-prereqs-list-start")); foreach (var recipe in technology.TechnologyPrerequisites) { - var techProto = PrototypeManager.Index(recipe); + var techProto = ProtoMan.Index(recipe); description.PushNewline(); description.AddMarkupOrThrow(Loc.GetString("research-console-prereqs-list-entry", ("text", Loc.GetString(techProto.Name)))); @@ -184,7 +183,7 @@ public abstract partial class SharedResearchSystem : EntitySystem description.AddMarkupOrThrow(Loc.GetString("research-console-unlocks-list-start")); foreach (var recipe in technology.RecipeUnlocks) { - var recipeProto = PrototypeManager.Index(recipe); + var recipeProto = ProtoMan.Index(recipe); description.PushNewline(); description.AddMarkupOrThrow(Loc.GetString("research-console-unlocks-list-entry", ("name", _lathe.GetRecipeName(recipeProto)))); @@ -222,7 +221,7 @@ public abstract partial class SharedResearchSystem : EntitySystem if (!Resolve(uid, ref component)) return; - var discipline = PrototypeManager.Index(prototype.Discipline); + var discipline = ProtoMan.Index(prototype.Discipline); if (prototype.Tier < discipline.LockoutTier) return; component.MainDiscipline = prototype.Discipline; @@ -237,7 +236,7 @@ public abstract partial class SharedResearchSystem : EntitySystem /// public bool TryRemoveTechnology(Entity entity, ProtoId tech) { - return TryRemoveTechnology(entity, PrototypeManager.Index(tech)); + return TryRemoveTechnology(entity, ProtoMan.Index(tech)); } /// @@ -257,7 +256,7 @@ public abstract partial class SharedResearchSystem : EntitySystem var hasTechElsewhere = false; foreach (var unlockedTech in entity.Comp.UnlockedTechnologies) { - var unlockedTechProto = PrototypeManager.Index(unlockedTech); + var unlockedTechProto = ProtoMan.Index(unlockedTech); if (!unlockedTechProto.RecipeUnlocks.Contains(recipe)) continue; diff --git a/Content.Shared/Research/TechnologyDisk/Systems/TechnologyDiskSystem.cs b/Content.Shared/Research/TechnologyDisk/Systems/TechnologyDiskSystem.cs index 811aee5536..abee4f8099 100644 --- a/Content.Shared/Research/TechnologyDisk/Systems/TechnologyDiskSystem.cs +++ b/Content.Shared/Research/TechnologyDisk/Systems/TechnologyDiskSystem.cs @@ -17,7 +17,6 @@ namespace Content.Shared.Research.TechnologyDisk.Systems; public sealed partial class TechnologyDiskSystem : EntitySystem { - [Dependency] private IPrototypeManager _protoMan = default!; [Dependency] private IRobustRandom _random = default!; [Dependency] private SharedPopupSystem _popup = default!; [Dependency] private SharedResearchSystem _research = default!; @@ -58,14 +57,14 @@ public sealed partial class TechnologyDiskSystem : EntitySystem } else { - var weightedRandom = _protoMan.Index(ent.Comp.TierWeightPrototype); + var weightedRandom = ProtoMan.Index(ent.Comp.TierWeightPrototype); tier = int.Parse(weightedRandom.Pick(_random)); ent.Comp.Tier = tier; } // get a list of every distinct recipe in all the technologies. var bundles = new HashSet<(ProtoId recipe, ProtoId discipline)>(); - foreach (var tech in _protoMan.EnumeratePrototypes()) + foreach (var tech in ProtoMan.EnumeratePrototypes()) { if (tech.Tier != tier) continue; @@ -118,7 +117,7 @@ public sealed partial class TechnologyDiskSystem : EntitySystem /// private void TrySetDisciplineVisuals(Entity ent) { - if (!_protoMan.Resolve(ent.Comp.Discipline, out var discipline)) + if (!ProtoMan.Resolve(ent.Comp.Discipline, out var discipline)) return; _appearance.SetData(ent.Owner, TechDiskVisuals.Discipline, discipline.ID); @@ -147,7 +146,7 @@ public sealed partial class TechnologyDiskSystem : EntitySystem private void OnExamine(Entity ent, ref ExaminedEvent args) { if (ent.Comp is { Tier: not null, Discipline: not null } - && _protoMan.Resolve(ent.Comp.Discipline, out var disciplineProto)) + && ProtoMan.Resolve(ent.Comp.Discipline, out var disciplineProto)) { var desc = Loc.GetString("tech-disk-examine-desc", ("tier", ent.Comp.Tier), @@ -164,7 +163,7 @@ public sealed partial class TechnologyDiskSystem : EntitySystem var message = Loc.GetString("tech-disk-examine-none"); if (ent.Comp.Recipes != null && ent.Comp.Recipes.Count > 0) { - var prototype = _protoMan.Index(ent.Comp.Recipes[0]); + var prototype = ProtoMan.Index(ent.Comp.Recipes[0]); message = Loc.GetString("tech-disk-examine", ("result", _lathe.GetRecipeName(prototype))); if (ent.Comp.Recipes.Count > 1) //idk how to do this well. sue me. @@ -191,7 +190,7 @@ public sealed partial class TechnologyDiskSystem : EntitySystem { foreach (var recipe in entity.Comp.Recipes) { - var proto = _protoMan.Index(recipe); + var proto = ProtoMan.Index(recipe); args.AddModifier("tech-disk-name-format", extraArgs: ("technology", _lathe.GetRecipeName(proto))); } } diff --git a/Content.Shared/Roles/Jobs/SharedJobSystem.cs b/Content.Shared/Roles/Jobs/SharedJobSystem.cs index bd8956bd07..1245c789f9 100644 --- a/Content.Shared/Roles/Jobs/SharedJobSystem.cs +++ b/Content.Shared/Roles/Jobs/SharedJobSystem.cs @@ -12,7 +12,6 @@ namespace Content.Shared.Roles.Jobs; /// public abstract partial class SharedJobSystem : EntitySystem { - [Dependency] private IPrototypeManager _prototypes = default!; [Dependency] private SharedRoleSystem _roles = default!; private readonly Dictionary _inverseTrackerLookup = new(); @@ -35,7 +34,7 @@ public abstract partial class SharedJobSystem : EntitySystem _inverseTrackerLookup.Clear(); // This breaks if you have N trackers to 1 JobId but future concern. - foreach (var job in _prototypes.EnumeratePrototypes()) + foreach (var job in ProtoMan.EnumeratePrototypes()) { _inverseTrackerLookup.Add(job.PlayTimeTracker, job.ID); } @@ -48,7 +47,7 @@ public abstract partial class SharedJobSystem : EntitySystem /// public string GetJobPrototype(string trackerProto) { - DebugTools.Assert(_prototypes.HasIndex(trackerProto)); + DebugTools.Assert(ProtoMan.HasIndex(trackerProto)); return _inverseTrackerLookup[trackerProto]; } @@ -58,7 +57,7 @@ public abstract partial class SharedJobSystem : EntitySystem public bool TryGetDepartment(string jobProto, [NotNullWhen(true)] out DepartmentPrototype? departmentPrototype) { // Not that many departments so we can just eat the cost instead of storing the inverse lookup. - var departmentProtos = _prototypes.EnumeratePrototypes().ToList(); + var departmentProtos = ProtoMan.EnumeratePrototypes().ToList(); departmentProtos.Sort((x, y) => string.Compare(x.ID, y.ID, StringComparison.Ordinal)); foreach (var department in departmentProtos) @@ -83,7 +82,7 @@ public abstract partial class SharedJobSystem : EntitySystem { // not sorting it since there should only be 1 primary department for a job. // this is enforced by the job tests. - var departmentProtos = _prototypes.EnumeratePrototypes(); + var departmentProtos = ProtoMan.EnumeratePrototypes(); foreach (var department in departmentProtos) { @@ -105,7 +104,7 @@ public abstract partial class SharedJobSystem : EntitySystem { // not sorting it since there should only be 1 primary department for a job. // this is enforced by the job tests. - var departmentProtos = _prototypes.EnumeratePrototypes(); + var departmentProtos = ProtoMan.EnumeratePrototypes(); departmentPrototypes = new List(); var found = false; @@ -158,7 +157,7 @@ public abstract partial class SharedJobSystem : EntitySystem prototype = null; MindTryGetJobId(mindId, out var protoId); - return _prototypes.Resolve(protoId, out prototype) || prototype is not null; + return ProtoMan.Resolve(protoId, out prototype) || prototype is not null; } public bool MindTryGetJobId( diff --git a/Content.Shared/Roles/SharedRoleSystem.cs b/Content.Shared/Roles/SharedRoleSystem.cs index 9e294513d9..8bd620ca60 100644 --- a/Content.Shared/Roles/SharedRoleSystem.cs +++ b/Content.Shared/Roles/SharedRoleSystem.cs @@ -26,7 +26,6 @@ public abstract partial class SharedRoleSystem : EntitySystem [Dependency] protected ISharedPlayerManager Player = default!; [Dependency] private EntityWhitelistSystem _whitelist = default!; [Dependency] private SharedMindSystem _minds = default!; - [Dependency] private IPrototypeManager _prototypes = default!; private JobRequirementOverridePrototype? _requirementOverride; @@ -53,7 +52,7 @@ public abstract partial class SharedRoleSystem : EntitySystem return; } - if (!_prototypes.TryIndex(value, out _requirementOverride)) + if (!ProtoMan.TryIndex(value, out _requirementOverride)) Log.Error($"Unknown JobRequirementOverridePrototype: {value}"); } @@ -140,7 +139,7 @@ public abstract partial class SharedRoleSystem : EntitySystem return; } - if (!_prototypes.Resolve(protoId, out var protoEnt)) + if (!ProtoMan.Resolve(protoId, out var protoEnt)) { Log.Error($"Failed to add role {protoId} to {ToPrettyString(mindId)} : Role prototype does not exist"); return; @@ -248,7 +247,7 @@ public abstract partial class SharedRoleSystem : EntitySystem return; } - if (!_prototypes.HasIndex(roleTypeId)) + if (!ProtoMan.HasIndex(roleTypeId)) { Log.Error($"Failed to change Role Type of {_minds.MindOwnerLoggingString(comp)} to {roleTypeId}, {subtype}. Invalid role"); return; @@ -571,7 +570,7 @@ public abstract partial class SharedRoleSystem : EntitySystem if (comp.JobPrototype is not null && comp.AntagPrototype is null) { prototype = comp.JobPrototype; - if (_prototypes.TryIndex(comp.JobPrototype, out var job)) + if (ProtoMan.TryIndex(comp.JobPrototype, out var job)) { playTimeTracker = job.PlayTimeTracker; name = job.Name; @@ -585,7 +584,7 @@ public abstract partial class SharedRoleSystem : EntitySystem else if (comp.AntagPrototype is not null && comp.JobPrototype is null) { prototype = comp.AntagPrototype; - if (_prototypes.TryIndex(comp.AntagPrototype, out var antag)) + if (ProtoMan.TryIndex(comp.AntagPrototype, out var antag)) { name = antag.Name; valid = true; @@ -715,14 +714,14 @@ public abstract partial class SharedRoleSystem : EntitySystem /// public HashSet? GetRoleRequirements(ProtoId jobId) { - return _prototypes.TryIndex(jobId, out var job) ? GetRoleRequirements(job) : null; + return ProtoMan.TryIndex(jobId, out var job) ? GetRoleRequirements(job) : null; } // TODO ROLES Change to readonly? /// public HashSet? GetRoleRequirements(ProtoId antagId) { - return _prototypes.TryIndex(antagId, out var antag) ? GetRoleRequirements(antag) : null; + return ProtoMan.TryIndex(antagId, out var antag) ? GetRoleRequirements(antag) : null; } /// diff --git a/Content.Shared/Salvage/SharedSalvageSystem.Magnet.cs b/Content.Shared/Salvage/SharedSalvageSystem.Magnet.cs index 9c9e2b332f..a8785583b4 100644 --- a/Content.Shared/Salvage/SharedSalvageSystem.Magnet.cs +++ b/Content.Shared/Salvage/SharedSalvageSystem.Magnet.cs @@ -48,7 +48,7 @@ public abstract partial class SharedSalvageSystem { case AsteroidOffering: var configId = _asteroidConfigs[rand.Next(_asteroidConfigs.Count)]; - var configProto = _proto.Index(configId); + var configProto = ProtoMan.Index(configId); var layers = new Dictionary(); var config = new DungeonConfig @@ -62,11 +62,11 @@ public abstract partial class SharedSalvageSystem }; var count = _asteroidOreCount.Next(rand); - var weightedProto = _proto.Index(_asteroidOreWeights); + var weightedProto = ProtoMan.Index(_asteroidOreWeights); for (var i = 0; i < count; i++) { var ore = weightedProto.Pick(rand); - config.Layers.Add(_proto.Index(ore)); + config.Layers.Add(ProtoMan.Index(ore)); var layerCount = layers.GetOrNew(ore); layerCount++; @@ -88,7 +88,7 @@ public abstract partial class SharedSalvageSystem case SalvageOffering: // Salvage map seed _salvageMaps.Clear(); - _salvageMaps.AddRange(_proto.EnumeratePrototypes()); + _salvageMaps.AddRange(ProtoMan.EnumeratePrototypes()); _salvageMaps.Sort((x, y) => string.Compare(x.ID, y.ID, StringComparison.Ordinal)); var mapIndex = rand.Next(_salvageMaps.Count); var map = _salvageMaps[mapIndex]; diff --git a/Content.Shared/Salvage/SharedSalvageSystem.cs b/Content.Shared/Salvage/SharedSalvageSystem.cs index b537498b9b..a8b8317a71 100644 --- a/Content.Shared/Salvage/SharedSalvageSystem.cs +++ b/Content.Shared/Salvage/SharedSalvageSystem.cs @@ -14,7 +14,6 @@ namespace Content.Shared.Salvage; public abstract partial class SharedSalvageSystem : EntitySystem { [Dependency] protected IConfigurationManager CfgManager = default!; - [Dependency] private IPrototypeManager _proto = default!; /// /// Main loot table for salvage expeditions. @@ -44,7 +43,7 @@ public abstract partial class SharedSalvageSystem : EntitySystem var temp = GetBiomeMod(biome.ID, rand, ref modifierBudget); var air = GetBiomeMod(biome.ID, rand, ref modifierBudget); var dungeon = GetBiomeMod(biome.ID, rand, ref modifierBudget); - var factionProtos = _proto.EnumeratePrototypes().ToList(); + var factionProtos = ProtoMan.EnumeratePrototypes().ToList(); factionProtos.Sort((x, y) => string.Compare(x.ID, y.ID, StringComparison.Ordinal)); var faction = factionProtos[rand.Next(factionProtos.Count)]; @@ -73,7 +72,7 @@ public abstract partial class SharedSalvageSystem : EntitySystem public T GetBiomeMod(string biome, IRobustRandom rand, ref float rating) where T : class, IPrototype, IBiomeSpecificMod { - var mods = _proto.EnumeratePrototypes().ToList(); + var mods = ProtoMan.EnumeratePrototypes().ToList(); mods.Sort((x, y) => string.Compare(x.ID, y.ID, StringComparison.Ordinal)); rand.Shuffle(mods); @@ -92,7 +91,7 @@ public abstract partial class SharedSalvageSystem : EntitySystem public T GetMod(IRobustRandom rand, ref float rating) where T : class, IPrototype, ISalvageMod { - var mods = _proto.EnumeratePrototypes().ToList(); + var mods = ProtoMan.EnumeratePrototypes().ToList(); mods.Sort((x, y) => string.Compare(x.ID, y.ID, StringComparison.Ordinal)); rand.Shuffle(mods); diff --git a/Content.Shared/Sandbox/SharedSandboxSystem.cs b/Content.Shared/Sandbox/SharedSandboxSystem.cs index 92f258db74..081ebd59d8 100644 --- a/Content.Shared/Sandbox/SharedSandboxSystem.cs +++ b/Content.Shared/Sandbox/SharedSandboxSystem.cs @@ -1,12 +1,9 @@ -using Robust.Shared.Prototypes; using Robust.Shared.Serialization; namespace Content.Shared.Sandbox { public abstract partial class SharedSandboxSystem : EntitySystem { - [Dependency] protected IPrototypeManager PrototypeManager = default!; - [Serializable, NetSerializable] protected sealed class MsgSandboxStatus : EntityEventArgs { diff --git a/Content.Shared/Silicons/Borgs/SharedBorgSwitchableTypeSystem.cs b/Content.Shared/Silicons/Borgs/SharedBorgSwitchableTypeSystem.cs index 0b2dc2a0d2..dca0768ae9 100644 --- a/Content.Shared/Silicons/Borgs/SharedBorgSwitchableTypeSystem.cs +++ b/Content.Shared/Silicons/Borgs/SharedBorgSwitchableTypeSystem.cs @@ -18,7 +18,6 @@ public abstract partial class SharedBorgSwitchableTypeSystem : EntitySystem [Dependency] private SharedActionsSystem _actionsSystem = default!; [Dependency] private SharedUserInterfaceSystem _userInterface = default!; - [Dependency] protected IPrototypeManager Prototypes = default!; [Dependency] private InteractionPopupSystem _interactionPopup = default!; public static readonly EntProtoId ActionId = "ActionSelectBorgType"; @@ -73,7 +72,7 @@ public abstract partial class SharedBorgSwitchableTypeSystem : EntitySystem if (ent.Comp.SelectedBorgType != null) return; - if (!Prototypes.HasIndex(args.Prototype)) + if (!ProtoMan.HasIndex(args.Prototype)) return; SelectBorgModule(ent, args.Prototype); @@ -100,7 +99,7 @@ public abstract partial class SharedBorgSwitchableTypeSystem : EntitySystem protected void UpdateEntityAppearance(Entity entity) { - if (!Prototypes.Resolve(entity.Comp.SelectedBorgType, out var proto)) + if (!ProtoMan.Resolve(entity.Comp.SelectedBorgType, out var proto)) return; UpdateEntityAppearance(entity, proto); diff --git a/Content.Shared/Silicons/StationAi/SharedStationAiSystem.Customization.cs b/Content.Shared/Silicons/StationAi/SharedStationAiSystem.Customization.cs index 4361b86d12..01404b7fdb 100644 --- a/Content.Shared/Silicons/StationAi/SharedStationAiSystem.Customization.cs +++ b/Content.Shared/Silicons/StationAi/SharedStationAiSystem.Customization.cs @@ -25,7 +25,7 @@ public abstract partial class SharedStationAiSystem private void OnStationAiCustomization(Entity entity, ref StationAiCustomizationMessage args) { - if (!_protoManager.Resolve(args.GroupProtoId, out var groupPrototype) || !_protoManager.Resolve(args.CustomizationProtoId, out var customizationProto)) + if (!ProtoMan.Resolve(args.GroupProtoId, out var groupPrototype) || !ProtoMan.Resolve(args.CustomizationProtoId, out var customizationProto)) return; if (!TryGetHeld((entity, entity.Comp), out var held)) @@ -94,7 +94,7 @@ public abstract partial class SharedStationAiSystem if (!entity.Comp.ProtoIds.TryGetValue(_stationAiHologramCustomGroupProtoId, out var protoId)) return; - if (!_protoManager.Resolve(protoId, out var prototype)) + if (!ProtoMan.Resolve(protoId, out var prototype)) return; if (!prototype.LayerData.TryGetValue(StationAiState.Hologram.ToString(), out var layerData)) @@ -130,7 +130,7 @@ public abstract partial class SharedStationAiSystem layerData = null; if (!entity.Comp.ProtoIds.TryGetValue(_stationAiCoreCustomGroupProtoId, out var protoId) || - !_protoManager.Resolve(protoId, out var prototype) || + !ProtoMan.Resolve(protoId, out var prototype) || prototype.LayerData.Count == 0) { return false; diff --git a/Content.Shared/Silicons/StationAi/SharedStationAiSystem.cs b/Content.Shared/Silicons/StationAi/SharedStationAiSystem.cs index 0cca2be82b..4cfb9dd7bf 100644 --- a/Content.Shared/Silicons/StationAi/SharedStationAiSystem.cs +++ b/Content.Shared/Silicons/StationAi/SharedStationAiSystem.cs @@ -62,7 +62,6 @@ public abstract partial class SharedStationAiSystem : EntitySystem [Dependency] private SharedTransformSystem _xforms = default!; [Dependency] private SharedUserInterfaceSystem _uiSystem = default!; [Dependency] private StationAiVisionSystem _vision = default!; - [Dependency] private IPrototypeManager _protoManager = default!; [Dependency] private MobStateSystem _mobState = default!; // StationAiHeld is added to anything inside of an AI core. diff --git a/Content.Shared/Singularity/EntitySystems/SharedEmitterSystem.cs b/Content.Shared/Singularity/EntitySystems/SharedEmitterSystem.cs index a0f01af4a3..1b9450a9c6 100644 --- a/Content.Shared/Singularity/EntitySystems/SharedEmitterSystem.cs +++ b/Content.Shared/Singularity/EntitySystems/SharedEmitterSystem.cs @@ -10,7 +10,6 @@ namespace Content.Shared.Singularity.EntitySystems; public abstract partial class SharedEmitterSystem : EntitySystem { - [Dependency] private IPrototypeManager _prototype = default!; [Dependency] private SharedPopupSystem _popup = default!; public override void Initialize() @@ -34,7 +33,7 @@ public abstract partial class SharedEmitterSystem : EntitySystem foreach (var type in ent.Comp.SelectableTypes) { - var proto = _prototype.Index(type); + var proto = ProtoMan.Index(type); var v = new Verb { @@ -60,7 +59,7 @@ public abstract partial class SharedEmitterSystem : EntitySystem if (ent.Comp.SelectableTypes.Count < 2) return; - var proto = _prototype.Index(ent.Comp.BoltType); + var proto = ProtoMan.Index(ent.Comp.BoltType); args.PushMarkup(Loc.GetString("emitter-component-current-type", ("type", proto.Name))); } } diff --git a/Content.Shared/Species/Systems/GibActionSystem.cs b/Content.Shared/Species/Systems/GibActionSystem.cs index 13c6fee8dd..e5da0d57a2 100644 --- a/Content.Shared/Species/Systems/GibActionSystem.cs +++ b/Content.Shared/Species/Systems/GibActionSystem.cs @@ -1,6 +1,5 @@ using Content.Shared.Species.Components; using Content.Shared.Actions; -using Content.Shared.Body.Systems; using Content.Shared.Gibbing; using Content.Shared.Mobs; using Content.Shared.Mobs.Components; @@ -14,7 +13,6 @@ public sealed partial class GibActionSystem : EntitySystem { [Dependency] private SharedActionsSystem _actionsSystem = default!; [Dependency] private GibbingSystem _gibbing = default!; - [Dependency] private IPrototypeManager _protoManager = default!; [Dependency] private SharedPopupSystem _popupSystem = default!; public override void Initialize() @@ -31,10 +29,9 @@ public sealed partial class GibActionSystem : EntitySystem if (!TryComp(uid, out var mobState)) return; - if (!_protoManager.TryIndex(comp.ActionPrototype, out var actionProto)) + if (!ProtoMan.TryIndex(comp.ActionPrototype, out var actionProto)) return; - foreach (var allowedState in comp.AllowedStates) { if(allowedState == mobState.CurrentState) diff --git a/Content.Shared/Species/Systems/ReformSystem.cs b/Content.Shared/Species/Systems/ReformSystem.cs index ca5764eda9..726ad189e2 100644 --- a/Content.Shared/Species/Systems/ReformSystem.cs +++ b/Content.Shared/Species/Systems/ReformSystem.cs @@ -6,7 +6,6 @@ using Content.Shared.Stunnable; using Content.Shared.Mind; using Content.Shared.Zombies; using Robust.Shared.Network; -using Robust.Shared.Prototypes; using Robust.Shared.Serialization; using Robust.Shared.Timing; @@ -18,7 +17,6 @@ public sealed partial class ReformSystem : EntitySystem [Dependency] private INetManager _netMan = default!; [Dependency] private SharedDoAfterSystem _doAfterSystem = default!; [Dependency] private SharedPopupSystem _popupSystem = default!; - [Dependency] private IPrototypeManager _protoManager = default!; [Dependency] private SharedStunSystem _stunSystem = default!; [Dependency] private IGameTiming _gameTiming = default!; [Dependency] private SharedMindSystem _mindSystem = default!; @@ -39,7 +37,7 @@ public sealed partial class ReformSystem : EntitySystem private void OnMapInit(EntityUid uid, ReformComponent comp, MapInitEvent args) { // When the map is initialized, give them the action - if (comp.ActionPrototype != default && !_protoManager.TryIndex(comp.ActionPrototype, out var actionProto)) + if (comp.ActionPrototype != default && !ProtoMan.HasIndex(comp.ActionPrototype)) return; _actionsSystem.AddAction(uid, ref comp.ActionEntity, out var reformAction, comp.ActionPrototype); diff --git a/Content.Shared/SprayPainter/SharedSprayPainterSystem.cs b/Content.Shared/SprayPainter/SharedSprayPainterSystem.cs index 8228090314..a83559d21a 100644 --- a/Content.Shared/SprayPainter/SharedSprayPainterSystem.cs +++ b/Content.Shared/SprayPainter/SharedSprayPainterSystem.cs @@ -10,7 +10,6 @@ using Content.Shared.SprayPainter.Components; using Content.Shared.SprayPainter.Prototypes; using Content.Shared.Verbs; using Robust.Shared.Audio.Systems; -using Robust.Shared.Prototypes; using Robust.Shared.Timing; using Robust.Shared.Utility; using System.Linq; @@ -24,7 +23,6 @@ namespace Content.Shared.SprayPainter; public abstract partial class SharedSprayPainterSystem : EntitySystem { [Dependency] private IGameTiming _timing = default!; - [Dependency] protected IPrototypeManager Proto = default!; [Dependency] protected ISharedAdminLogManager AdminLogger = default!; [Dependency] protected SharedAppearanceSystem Appearance = default!; [Dependency] protected SharedAudioSystem Audio = default!; @@ -60,7 +58,7 @@ public abstract partial class SharedSprayPainterSystem : EntitySystem private void OnMapInit(Entity ent, ref MapInitEvent args) { bool stylesByGroupPopulated = false; - foreach (var groupProto in Proto.EnumeratePrototypes()) + foreach (var groupProto in ProtoMan.EnumeratePrototypes()) { ent.Comp.StylesByGroup[groupProto.ID] = groupProto.DefaultStyle; stylesByGroupPopulated = true; @@ -182,7 +180,7 @@ public abstract partial class SharedSprayPainterSystem : EntitySystem if (ent.Comp.Group is not { } group || !painter.StylesByGroup.TryGetValue(group, out var selectedStyle) - || !Proto.Resolve(group, out PaintableGroupPrototype? targetGroup)) + || !ProtoMan.Resolve(group, out PaintableGroupPrototype? targetGroup)) return; // Valid paint target. diff --git a/Content.Shared/Stacks/SharedStackSystem.API.cs b/Content.Shared/Stacks/SharedStackSystem.API.cs index cdb8306a31..918822e534 100644 --- a/Content.Shared/Stacks/SharedStackSystem.API.cs +++ b/Content.Shared/Stacks/SharedStackSystem.API.cs @@ -25,7 +25,7 @@ public abstract partial class SharedStackSystem return stackEnt.Owner; ReduceCount(stackEnt, 1); - var stackId = _prototype.Index(stackEnt.Comp.StackTypeId); + var stackId = ProtoMan.Index(stackEnt.Comp.StackTypeId); var entityUid = PredictedSpawnNextToOrDrop(stackId.Spawn, stackEnt.Owner); SetCount(entityUid, 1); @@ -262,7 +262,7 @@ public abstract partial class SharedStackSystem if (component.MaxCountOverride != null) return component.MaxCountOverride.Value; - var stackProto = _prototype.Index(component.StackTypeId); + var stackProto = ProtoMan.Index(component.StackTypeId); return stackProto.MaxCount ?? int.MaxValue; } @@ -270,8 +270,8 @@ public abstract partial class SharedStackSystem [PublicAPI] public int GetMaxCount(EntProtoId entityId) { - var entProto = _prototype.Index(entityId); - entProto.TryGetComponent(out var stackComp, EntityManager.ComponentFactory); + var entProto = ProtoMan.Index(entityId); + entProto.TryComp(out var stackComp, EntityManager.ComponentFactory); return GetMaxCount(stackComp); } @@ -279,7 +279,7 @@ public abstract partial class SharedStackSystem [PublicAPI] public int GetMaxCount(EntityPrototype entityId) { - entityId.TryGetComponent(out var stackComp, EntityManager.ComponentFactory); + entityId.TryComp(out var stackComp, EntityManager.ComponentFactory); return GetMaxCount(stackComp); } @@ -303,7 +303,7 @@ public abstract partial class SharedStackSystem [PublicAPI] public int GetMaxCount(ProtoId stackId) { - return GetMaxCount(_prototype.Index(stackId)); + return GetMaxCount(ProtoMan.Index(stackId)); } /// diff --git a/Content.Shared/Stacks/SharedStackSystem.cs b/Content.Shared/Stacks/SharedStackSystem.cs index 22fc3cdf41..374a0ed139 100644 --- a/Content.Shared/Stacks/SharedStackSystem.cs +++ b/Content.Shared/Stacks/SharedStackSystem.cs @@ -9,8 +9,6 @@ using Content.Shared.Verbs; using JetBrains.Annotations; using Robust.Shared.GameStates; using Robust.Shared.Physics.Systems; -using Robust.Shared.Prototypes; -using Robust.Shared.Timing; namespace Content.Shared.Stacks; @@ -21,7 +19,6 @@ namespace Content.Shared.Stacks; [UsedImplicitly] public abstract partial class SharedStackSystem : EntitySystem { - [Dependency] private IPrototypeManager _prototype = default!; [Dependency] private IViewVariablesManager _vvm = default!; [Dependency] protected SharedAppearanceSystem Appearance = default!; [Dependency] protected SharedHandsSystem Hands = default!; diff --git a/Content.Shared/Station/SharedStationSpawningSystem.cs b/Content.Shared/Station/SharedStationSpawningSystem.cs index 45eb649fd6..fea37ac85f 100644 --- a/Content.Shared/Station/SharedStationSpawningSystem.cs +++ b/Content.Shared/Station/SharedStationSpawningSystem.cs @@ -2,21 +2,17 @@ using System.Linq; using Content.Shared.Hands.Components; using Content.Shared.Hands.EntitySystems; using Content.Shared.Inventory; -using Content.Shared.Item; using Content.Shared.Preferences.Loadouts; using Content.Shared.Roles; using Content.Shared.Storage; using Content.Shared.Storage.EntitySystems; -using Robust.Shared.Collections; using Robust.Shared.Prototypes; using Robust.Shared.Random; -using Robust.Shared.Utility; namespace Content.Shared.Station; public abstract partial class SharedStationSpawningSystem : EntitySystem { - [Dependency] protected IPrototypeManager PrototypeManager = default!; [Dependency] private IRobustRandom _random = default!; [Dependency] protected InventorySystem InventorySystem = default!; [Dependency] private SharedHandsSystem _handsSystem = default!; @@ -39,7 +35,7 @@ public abstract partial class SharedStationSpawningSystem : EntitySystem { foreach (var items in group.Value) { - if (!PrototypeManager.TryIndex(items.Prototype, out var loadoutProto)) + if (!ProtoMan.TryIndex(items.Prototype, out var loadoutProto)) { Log.Error($"Unable to find loadout prototype for {items.Prototype}"); continue; @@ -64,7 +60,7 @@ public abstract partial class SharedStationSpawningSystem : EntitySystem name = loadout.EntityName; } - if (string.IsNullOrEmpty(name) && PrototypeManager.Resolve(roleProto.NameDataset, out var nameData)) + if (string.IsNullOrEmpty(name) && ProtoMan.Resolve(roleProto.NameDataset, out var nameData)) { name = Loc.GetString(_random.Pick(nameData.Values)); } @@ -86,7 +82,7 @@ public abstract partial class SharedStationSpawningSystem : EntitySystem /// public void EquipStartingGear(EntityUid entity, ProtoId? startingGear, bool raiseEvent = true) { - PrototypeManager.Resolve(startingGear, out var gearProto); + ProtoMan.Resolve(startingGear, out var gearProto); EquipStartingGear(entity, gearProto, raiseEvent); } @@ -189,7 +185,7 @@ public abstract partial class SharedStationSpawningSystem : EntitySystem { foreach (var items in group.Value) { - if (!PrototypeManager.Resolve(items.Prototype, out var loadoutPrototype)) + if (!ProtoMan.Resolve(items.Prototype, out var loadoutPrototype)) return null; var gear = ((IEquipmentLoadout) loadoutPrototype).GetGear(slot); diff --git a/Content.Shared/StatusEffect/StatusEffectsSystem.cs b/Content.Shared/StatusEffect/StatusEffectsSystem.cs index 767ed76aca..3bbce59101 100644 --- a/Content.Shared/StatusEffect/StatusEffectsSystem.cs +++ b/Content.Shared/StatusEffect/StatusEffectsSystem.cs @@ -5,14 +5,12 @@ using Content.Shared.StatusEffectNew; using Robust.Shared.GameStates; using Robust.Shared.Prototypes; using Robust.Shared.Timing; -using Robust.Shared.Utility; namespace Content.Shared.StatusEffect { [Obsolete("Migration to Content.Shared.StatusEffectNew.StatusEffectsSystem is required")] public sealed partial class StatusEffectsSystem : EntitySystem { - [Dependency] private IPrototypeManager _prototypeManager = default!; [Dependency] private IGameTiming _gameTiming = default!; [Dependency] private AlertsSystem _alertsSystem = default!; private List _toRemove = new(); @@ -181,7 +179,7 @@ namespace Content.Shared.StatusEffect // we already checked if it has the index in CanApplyEffect so a straight index and not tryindex here // is fine - var proto = _prototypeManager.Index(key); + var proto = ProtoMan.Index(key); var start = startTime ?? _gameTiming.CurTime; (TimeSpan, TimeSpan) cooldown = (start, start + time); @@ -233,7 +231,7 @@ namespace Content.Shared.StatusEffect (TimeSpan, TimeSpan)? maxCooldown = null; foreach (var kvp in status.ActiveEffects) { - var proto = _prototypeManager.Index(kvp.Key); + var proto = ProtoMan.Index(kvp.Key); if (proto.Alert == alert) { @@ -268,7 +266,7 @@ namespace Content.Shared.StatusEffect return false; if (!status.ActiveEffects.ContainsKey(key)) return false; - if (!_prototypeManager.TryIndex(key, out var proto)) + if (!ProtoMan.TryIndex(key, out var proto)) return false; var state = status.ActiveEffects[key]; @@ -358,7 +356,7 @@ namespace Content.Shared.StatusEffect if (ev.Cancelled) return false; - if (!_prototypeManager.TryIndex(key, out var proto)) + if (!ProtoMan.TryIndex(key, out var proto)) return false; if (!status.AllowedEffects.Contains(key) && !proto.AlwaysAllowed) return false; @@ -387,7 +385,7 @@ namespace Content.Shared.StatusEffect timer.Item2 += time; status.ActiveEffects[key].Cooldown = timer; - if (_prototypeManager.TryIndex(key, out var proto) + if (ProtoMan.TryIndex(key, out var proto) && proto.Alert != null) { (TimeSpan, TimeSpan)? cooldown = GetAlertCooldown(uid, proto.Alert.Value, status); @@ -424,7 +422,7 @@ namespace Content.Shared.StatusEffect timer.Item2 -= time; status.ActiveEffects[key].Cooldown = timer; - if (_prototypeManager.TryIndex(key, out var proto) + if (ProtoMan.TryIndex(key, out var proto) && proto.Alert != null) { (TimeSpan, TimeSpan)? cooldown = GetAlertCooldown(uid, proto.Alert.Value, status); diff --git a/Content.Shared/StatusEffectNew/StatusEffectsSystem.cs b/Content.Shared/StatusEffectNew/StatusEffectsSystem.cs index 2fc125d324..d966d7c88a 100644 --- a/Content.Shared/StatusEffectNew/StatusEffectsSystem.cs +++ b/Content.Shared/StatusEffectNew/StatusEffectsSystem.cs @@ -18,7 +18,6 @@ public sealed partial class StatusEffectsSystem : EntitySystem [Dependency] private IGameTiming _timing = default!; [Dependency] private SharedContainerSystem _container = default!; [Dependency] private EntityWhitelistSystem _whitelist = default!; - [Dependency] private IPrototypeManager _proto = default!; [Dependency] private EntityQuery _containerQuery = default!; [Dependency] private EntityQuery _effectQuery = default!; @@ -77,7 +76,7 @@ public sealed partial class StatusEffectsSystem : EntitySystem { StatusEffectPrototypes.Clear(); - foreach (var ent in _proto.EnumeratePrototypes()) + foreach (var ent in ProtoMan.EnumeratePrototypes()) { if (ent.TryGetComponent(out _, _factory)) StatusEffectPrototypes.Add(ent.ID); @@ -165,7 +164,7 @@ public sealed partial class StatusEffectsSystem : EntitySystem public bool CanAddStatusEffect(EntityUid uid, EntProtoId effectProto) { - if (!_proto.Resolve(effectProto, out var effectProtoData)) + if (!ProtoMan.Resolve(effectProto, out var effectProtoData)) return false; if (!effectProtoData.TryGetComponent(out var effectProtoComp, Factory)) diff --git a/Content.Shared/Storage/EntitySystems/DumpableSystem.cs b/Content.Shared/Storage/EntitySystems/DumpableSystem.cs index 0e42cdb685..f682687e92 100644 --- a/Content.Shared/Storage/EntitySystems/DumpableSystem.cs +++ b/Content.Shared/Storage/EntitySystems/DumpableSystem.cs @@ -5,8 +5,6 @@ using Content.Shared.Item; using Content.Shared.Storage.Components; using Content.Shared.Verbs; using Robust.Shared.Audio.Systems; -using Robust.Shared.Containers; -using Robust.Shared.Prototypes; using Robust.Shared.Random; using Robust.Shared.Utility; @@ -14,7 +12,6 @@ namespace Content.Shared.Storage.EntitySystems; public sealed partial class DumpableSystem : EntitySystem { - [Dependency] private IPrototypeManager _prototypeManager = default!; [Dependency] private IRobustRandom _random = default!; [Dependency] private SharedAudioSystem _audio = default!; [Dependency] private SharedDoAfterSystem _doAfterSystem = default!; @@ -108,7 +105,7 @@ public sealed partial class DumpableSystem : EntitySystem foreach (var entity in storage.Container.ContainedEntities) { if (!_itemQuery.TryGetComponent(entity, out var itemComp) || - !_prototypeManager.Resolve(itemComp.Size, out var itemSize)) + !ProtoMan.Resolve(itemComp.Size, out var itemSize)) { continue; } diff --git a/Content.Shared/Storage/EntitySystems/SharedStorageSystem.cs b/Content.Shared/Storage/EntitySystems/SharedStorageSystem.cs index eee4835a29..0f8ee7f63a 100644 --- a/Content.Shared/Storage/EntitySystems/SharedStorageSystem.cs +++ b/Content.Shared/Storage/EntitySystems/SharedStorageSystem.cs @@ -16,10 +16,8 @@ using Content.Shared.Interaction; using Content.Shared.Interaction.Components; using Content.Shared.Inventory; using Content.Shared.Item; -using Content.Shared.Item.ItemToggle.Components; using Content.Shared.Lock; using Content.Shared.Materials; -using Content.Shared.Placeable; using Content.Shared.Popups; using Content.Shared.Stacks; using Content.Shared.Storage.Components; @@ -39,7 +37,6 @@ using Robust.Shared.Player; using Robust.Shared.Prototypes; using Robust.Shared.Random; using Robust.Shared.Serialization; -using Robust.Shared.Timing; using Robust.Shared.Utility; using Content.Shared.Rounding; using Robust.Shared.Collections; @@ -50,7 +47,6 @@ namespace Content.Shared.Storage.EntitySystems; public abstract partial class SharedStorageSystem : EntitySystem { [Dependency] private IConfigurationManager _cfg = default!; - [Dependency] private IPrototypeManager _prototype = default!; [Dependency] protected IRobustRandom Random = default!; [Dependency] private ISharedAdminLogManager _adminLog = default!; @@ -125,7 +121,7 @@ public abstract partial class SharedStorageSystem : EntitySystem { base.Initialize(); - _prototype.PrototypesReloaded += OnPrototypesReloaded; + ProtoMan.PrototypesReloaded += OnPrototypesReloaded; Subs.CVar(_cfg, CCVars.StorageLimit, OnStorageLimitChanged, true); @@ -242,7 +238,7 @@ public abstract partial class SharedStorageSystem : EntitySystem public override void Shutdown() { - _prototype.PrototypesReloaded -= OnPrototypesReloaded; + ProtoMan.PrototypesReloaded -= OnPrototypesReloaded; } private void OnPrototypesReloaded(PrototypesReloadedEventArgs args) @@ -257,9 +253,9 @@ public abstract partial class SharedStorageSystem : EntitySystem private void UpdatePrototypeCache() { - _defaultStorageMaxItemSize = _prototype.Index(DefaultStorageMaxItemSize); + _defaultStorageMaxItemSize = ProtoMan.Index(DefaultStorageMaxItemSize); _sortedSizes.Clear(); - _sortedSizes.AddRange(_prototype.EnumeratePrototypes()); + _sortedSizes.AddRange(ProtoMan.EnumeratePrototypes()); _sortedSizes.Sort(); var nextSmallest = new KeyValuePair[_sortedSizes.Count]; @@ -576,7 +572,7 @@ public abstract partial class SharedStorageSystem : EntitySystem { if (entity == args.User || !_itemQuery.TryGetComponent(entity, out var itemComp) // Need comp to get item size to get weight - || !_prototype.Resolve(itemComp.Size, out var itemSize) + || !ProtoMan.Resolve(itemComp.Size, out var itemSize) || !CanInsert(uid, entity, out _, storageComp, item: itemComp) || !_interactionSystem.InRangeUnobstructed(args.User, entity)) { @@ -1820,7 +1816,7 @@ public abstract partial class SharedStorageSystem : EntitySystem // If we specify a max item size, use that if (uid.Comp.MaxItemSize != null) { - if (_prototype.Resolve(uid.Comp.MaxItemSize.Value, out var proto)) + if (ProtoMan.Resolve(uid.Comp.MaxItemSize.Value, out var proto)) return proto; Log.Error($"{ToPrettyString(uid.Owner)} tried to get invalid item size prototype: {uid.Comp.MaxItemSize.Value}. Stack trace:\\n{Environment.StackTrace}"); diff --git a/Content.Shared/Store/SharedStoreSystem.Listings.cs b/Content.Shared/Store/SharedStoreSystem.Listings.cs index fa0f29bb4c..1b49aa5243 100644 --- a/Content.Shared/Store/SharedStoreSystem.Listings.cs +++ b/Content.Shared/Store/SharedStoreSystem.Listings.cs @@ -46,7 +46,7 @@ public abstract partial class SharedStoreSystem public HashSet GetAllListings() { var clones = new HashSet(); - foreach (var prototype in Proto.EnumeratePrototypes()) + foreach (var prototype in ProtoMan.EnumeratePrototypes()) { clones.Add(new ListingDataWithCostModifiers(prototype)); } @@ -62,7 +62,7 @@ public abstract partial class SharedStoreSystem /// Whether or not the listing was added successfully public bool TryAddListing(StoreComponent component, string listingId) { - if (!Proto.TryIndex(listingId, out var proto)) + if (!ProtoMan.TryIndex(listingId, out var proto)) { Log.Error("Attempted to add invalid listing."); return false; diff --git a/Content.Shared/Store/SharedStoreSystem.cs b/Content.Shared/Store/SharedStoreSystem.cs index c754551a52..74251adb6d 100644 --- a/Content.Shared/Store/SharedStoreSystem.cs +++ b/Content.Shared/Store/SharedStoreSystem.cs @@ -8,7 +8,6 @@ using Content.Shared.Popups; using Content.Shared.Stacks; using Content.Shared.Store.Components; using Content.Shared.Store.Events; -using Robust.Shared.Prototypes; namespace Content.Shared.Store; @@ -18,7 +17,6 @@ namespace Content.Shared.Store; /// public abstract partial class SharedStoreSystem : EntitySystem { - [Dependency] protected IPrototypeManager Proto = default!; [Dependency] protected SharedMindSystem Mind = default!; [Dependency] protected SharedPopupSystem Popup = default!; [Dependency] protected SharedStackSystem Stack = default!; diff --git a/Content.Shared/StoryGen/EntitySystems/StoryGeneratorSystem.cs b/Content.Shared/StoryGen/EntitySystems/StoryGeneratorSystem.cs index 7906b54cf4..a9109fa2ab 100644 --- a/Content.Shared/StoryGen/EntitySystems/StoryGeneratorSystem.cs +++ b/Content.Shared/StoryGen/EntitySystems/StoryGeneratorSystem.cs @@ -10,7 +10,6 @@ namespace Content.Shared.StoryGen; /// public sealed partial class StoryGeneratorSystem : EntitySystem { - [Dependency] private IPrototypeManager _protoMan = default!; [Dependency] private IRobustRandom _random = default!; /// @@ -24,7 +23,7 @@ public sealed partial class StoryGeneratorSystem : EntitySystem public bool TryGenerateStoryFromTemplate(ProtoId template, [NotNullWhen(true)] out string? story, int? seed = null) { // Get the story template prototype from the ID - if (!_protoMan.Resolve(template, out var templateProto)) + if (!ProtoMan.Resolve(template, out var templateProto)) { story = null; return false; @@ -39,7 +38,7 @@ public sealed partial class StoryGeneratorSystem : EntitySystem foreach (var (name, list) in templateProto.Variables) { // Get the prototype for the world list dataset - if (!_protoMan.Resolve(list, out var listProto)) + if (!ProtoMan.Resolve(list, out var listProto)) continue; // Missed one, but keep going with the rest of the story // Pick a random word from the dataset and localize it diff --git a/Content.Shared/Tag/TagSystem.cs b/Content.Shared/Tag/TagSystem.cs index 37a7077d24..86aa650270 100644 --- a/Content.Shared/Tag/TagSystem.cs +++ b/Content.Shared/Tag/TagSystem.cs @@ -16,8 +16,6 @@ namespace Content.Shared.Tag; /// public sealed partial class TagSystem : EntitySystem { - [Dependency] private IPrototypeManager _proto = default!; - [Dependency] private EntityQuery _tagQuery = default!; public override void Initialize() @@ -708,6 +706,6 @@ public sealed partial class TagSystem : EntitySystem private void AssertValidTag(string id) { - DebugTools.Assert(_proto.HasIndex(id), $"Unknown tag: {id}"); + DebugTools.Assert(ProtoMan.HasIndex(id), $"Unknown tag: {id}"); } } diff --git a/Content.Shared/Tiles/ReplaceFloorOnSpawnSystem.cs b/Content.Shared/Tiles/ReplaceFloorOnSpawnSystem.cs index 9340062e4f..2f824a38b4 100644 --- a/Content.Shared/Tiles/ReplaceFloorOnSpawnSystem.cs +++ b/Content.Shared/Tiles/ReplaceFloorOnSpawnSystem.cs @@ -1,6 +1,5 @@ using Robust.Shared.Map; using Robust.Shared.Map.Components; -using Robust.Shared.Prototypes; using Robust.Shared.Random; namespace Content.Shared.Tiles; @@ -8,7 +7,6 @@ namespace Content.Shared.Tiles; public sealed partial class ReplaceFloorOnSpawnSystem : EntitySystem { [Dependency] private ITileDefinitionManager _tile = default!; - [Dependency] private IPrototypeManager _prototype = default!; [Dependency] private IRobustRandom _random = default!; [Dependency] private SharedMapSystem _map = default!; @@ -42,7 +40,7 @@ public sealed partial class ReplaceFloorOnSpawnSystem : EntitySystem continue; var tileToSet = _random.Pick(ent.Comp.ReplacementTiles); - _map.SetTile(grid, gridComp, tile.GridIndices, new Tile(_prototype.Index(tileToSet).TileId)); + _map.SetTile(grid, gridComp, tile.GridIndices, new Tile(ProtoMan.Index(tileToSet).TileId)); } } } diff --git a/Content.Shared/Tools/Systems/SharedToolSystem.MultipleTool.cs b/Content.Shared/Tools/Systems/SharedToolSystem.MultipleTool.cs index 5a5d719dde..73bb348588 100644 --- a/Content.Shared/Tools/Systems/SharedToolSystem.MultipleTool.cs +++ b/Content.Shared/Tools/Systems/SharedToolSystem.MultipleTool.cs @@ -78,7 +78,7 @@ public abstract partial class SharedToolSystem if (playSound && current.ChangeSound != null) _audioSystem.PlayPredicted(current.ChangeSound, uid, user); - if (_protoMan.TryIndex(current.Behavior.First(), out ToolQualityPrototype? quality)) + if (ProtoMan.TryIndex(current.Behavior.First(), out ToolQualityPrototype? quality)) multiple.CurrentQualityName = Loc.GetString(quality.Name); } } diff --git a/Content.Shared/Tools/Systems/SharedToolSystem.cs b/Content.Shared/Tools/Systems/SharedToolSystem.cs index 93567bb2d5..3d75bb477f 100644 --- a/Content.Shared/Tools/Systems/SharedToolSystem.cs +++ b/Content.Shared/Tools/Systems/SharedToolSystem.cs @@ -10,7 +10,6 @@ using Content.Shared.Tools.Components; using JetBrains.Annotations; using Robust.Shared.Audio.Systems; using Robust.Shared.Map; -using Robust.Shared.Prototypes; using Robust.Shared.Serialization; using Robust.Shared.Timing; using Robust.Shared.Utility; @@ -21,7 +20,6 @@ public abstract partial class SharedToolSystem : EntitySystem { [Dependency] private IGameTiming _timing = default!; [Dependency] private IMapManager _mapManager = default!; - [Dependency] private IPrototypeManager _protoMan = default!; [Dependency] protected ISharedAdminLogManager AdminLogger = default!; [Dependency] private ITileDefinitionManager _tileDefManager = default!; [Dependency] private SharedAudioSystem _audioSystem = default!; @@ -75,7 +73,7 @@ public abstract partial class SharedToolSystem : EntitySystem // Loop through tool qualities and add localized names to the list foreach (var toolQuality in ent.Comp.Qualities) { - if (_protoMan.TryIndex(toolQuality ?? string.Empty, out var protoToolQuality)) + if (ProtoMan.TryIndex(toolQuality ?? string.Empty, out var protoToolQuality)) { toolQualities.Add(Loc.GetString(protoToolQuality.Name)); } diff --git a/Content.Shared/Trigger/Systems/RandomTriggerOnTriggerSystem.cs b/Content.Shared/Trigger/Systems/RandomTriggerOnTriggerSystem.cs index 8a4b03181c..aafd0ea434 100644 --- a/Content.Shared/Trigger/Systems/RandomTriggerOnTriggerSystem.cs +++ b/Content.Shared/Trigger/Systems/RandomTriggerOnTriggerSystem.cs @@ -1,6 +1,5 @@ using Content.Shared.Random.Helpers; using Content.Shared.Trigger.Components.Effects; -using Robust.Shared.Prototypes; using Robust.Shared.Timing; namespace Content.Shared.Trigger.Systems; @@ -8,13 +7,12 @@ namespace Content.Shared.Trigger.Systems; public sealed partial class RandomTriggerOnTriggerSystem : XOnTriggerSystem { [Dependency] private TriggerSystem _trigger = default!; - [Dependency] private IPrototypeManager _prototypeManager = default!; [Dependency] private IGameTiming _timing = default!; protected override void OnTrigger(Entity ent, EntityUid target, ref TriggerEvent args) { var rand = SharedRandomExtensions.PredictedRandom(_timing, GetNetEntity(ent), GetNetEntity(args.User)); - var keyOut = _prototypeManager.Index(ent.Comp.RandomKeyOut).Pick(rand); + var keyOut = ProtoMan.Index(ent.Comp.RandomKeyOut).Pick(rand); // Prevent recursive triggers if (target == ent.Owner && ent.Comp.KeysIn.Contains(keyOut)) diff --git a/Content.Shared/Trigger/Systems/WeatherTriggerSystem.cs b/Content.Shared/Trigger/Systems/WeatherTriggerSystem.cs index 6c587bccac..dc262f9e61 100644 --- a/Content.Shared/Trigger/Systems/WeatherTriggerSystem.cs +++ b/Content.Shared/Trigger/Systems/WeatherTriggerSystem.cs @@ -1,6 +1,5 @@ using Content.Shared.Trigger.Components.Effects; using Content.Shared.Weather; -using Robust.Shared.Prototypes; using Robust.Shared.Timing; namespace Content.Shared.Trigger.Systems; @@ -8,7 +7,6 @@ namespace Content.Shared.Trigger.Systems; public sealed partial class WeatherTriggerSystem : XOnTriggerSystem { [Dependency] private IGameTiming _timing = default!; - [Dependency] private IPrototypeManager _prototypeManager = default!; [Dependency] private SharedWeatherSystem _weather = default!; protected override void OnTrigger(Entity ent, EntityUid target, ref TriggerEvent args) @@ -23,7 +21,7 @@ public sealed partial class WeatherTriggerSystem : XOnTriggerSystem(id)) + if (ProtoMan.HasIndex(id)) { var restock = amount; var chanceOfMissingStock = 1 - restockQuality; diff --git a/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs b/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs index 02f14cb451..023a6329d7 100644 --- a/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs +++ b/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs @@ -49,7 +49,6 @@ public abstract partial class SharedMeleeWeaponSystem : EntitySystem [Dependency] protected IGameTiming Timing = default!; [Dependency] protected IMapManager MapManager = default!; [Dependency] private INetManager _netMan = default!; - [Dependency] private IPrototypeManager _protoManager = default!; [Dependency] private IRobustRandom _random = default!; [Dependency] protected ISharedAdminLogManager AdminLogger = default!; [Dependency] protected ActionBlockerSystem Blocker = default!; @@ -574,7 +573,7 @@ public abstract partial class SharedMeleeWeaponSystem : EntitySystem } - _meleeSound.PlayHitSound(target.Value, user, GetHighestDamageSound(modifiedDamage, _protoManager), hitEvent.HitSoundOverride, component); + _meleeSound.PlayHitSound(target.Value, user, GetHighestDamageSound(modifiedDamage, ProtoMan), hitEvent.HitSoundOverride, component); if (damageResult.GetTotal() > FixedPoint2.Zero && !TerminatingOrDeleted(target.Value)) { @@ -742,7 +741,7 @@ public abstract partial class SharedMeleeWeaponSystem : EntitySystem if (entities.Count != 0) { var target = entities.First(); - _meleeSound.PlayHitSound(target, user, GetHighestDamageSound(appliedDamage, _protoManager), hitEvent.HitSoundOverride, component); + _meleeSound.PlayHitSound(target, user, GetHighestDamageSound(appliedDamage, ProtoMan), hitEvent.HitSoundOverride, component); } if (appliedDamage.GetTotal() > FixedPoint2.Zero && targets.Count > 0) diff --git a/Content.Shared/Weapons/Ranged/Systems/BatteryWeaponFireModesSystem.cs b/Content.Shared/Weapons/Ranged/Systems/BatteryWeaponFireModesSystem.cs index 3fac137ef1..f989a1a881 100644 --- a/Content.Shared/Weapons/Ranged/Systems/BatteryWeaponFireModesSystem.cs +++ b/Content.Shared/Weapons/Ranged/Systems/BatteryWeaponFireModesSystem.cs @@ -12,7 +12,6 @@ namespace Content.Shared.Weapons.Ranged.Systems; public sealed partial class BatteryWeaponFireModesSystem : EntitySystem { [Dependency] private AccessReaderSystem _accessReaderSystem = default!; - [Dependency] private IPrototypeManager _prototypeManager = default!; [Dependency] private SharedAppearanceSystem _appearanceSystem = default!; [Dependency] private SharedGunSystem _gun = default!; [Dependency] private SharedPopupSystem _popupSystem = default!; @@ -33,7 +32,7 @@ public sealed partial class BatteryWeaponFireModesSystem : EntitySystem var fireMode = GetMode(ent.Comp); - if (!_prototypeManager.TryIndex(fireMode.Prototype, out var proto)) + if (!ProtoMan.TryIndex(fireMode.Prototype, out var proto)) return; args.PushMarkup(Loc.GetString("gun-set-fire-mode-examine", ("mode", proto.Name))); @@ -58,7 +57,7 @@ public sealed partial class BatteryWeaponFireModesSystem : EntitySystem for (var i = 0; i < component.FireModes.Count; i++) { var fireMode = component.FireModes[i]; - var entProto = _prototypeManager.Index(fireMode.Prototype); + var entProto = ProtoMan.Index(fireMode.Prototype); var index = i; var v = new Verb @@ -116,7 +115,7 @@ public sealed partial class BatteryWeaponFireModesSystem : EntitySystem ent.Comp.CurrentFireMode = index; Dirty(ent); - if (_prototypeManager.TryIndex(fireMode.Prototype, out var prototype)) + if (ProtoMan.TryIndex(fireMode.Prototype, out var prototype)) { if (TryComp(ent, out var appearance)) _appearanceSystem.SetData(ent, BatteryWeaponFireModeVisuals.State, prototype.ID, appearance); diff --git a/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.Battery.cs b/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.Battery.cs index f92cea07d3..baa8939d75 100644 --- a/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.Battery.cs +++ b/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.Battery.cs @@ -33,11 +33,11 @@ public abstract partial class SharedGunSystem private void OnBatteryDamageExamine(Entity ent, ref DamageExamineEvent args) { - var proto = ProtoManager.Index(ent.Comp.Prototype); + var proto = ProtoMan.Index(ent.Comp.Prototype); DamageSpecifier? damageSpec = null; var damageType = string.Empty; - if (proto.TryGetComponent(out var projectileComp, Factory)) + if (proto.TryComp(out var projectileComp, Factory)) { if (!projectileComp.Damage.Empty) { @@ -45,7 +45,7 @@ public abstract partial class SharedGunSystem damageSpec = projectileComp.Damage * Damageable.UniversalProjectileDamageModifier; } } - else if (proto.TryGetComponent(out var hitscanComp, Factory)) + else if (proto.TryComp(out var hitscanComp, Factory)) { if (!hitscanComp.Damage.Empty) { diff --git a/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.Cartridges.cs b/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.Cartridges.cs index c6146f0f0d..c212275d58 100644 --- a/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.Cartridges.cs +++ b/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.Cartridges.cs @@ -38,10 +38,10 @@ public abstract partial class SharedGunSystem private DamageSpecifier? GetProjectileDamage(EntProtoId proto) { - if (!ProtoManager.TryIndex(proto, out var entityProto)) + if (!ProtoMan.TryIndex(proto, out var entityProto)) return null; - if (!entityProto.TryGetComponent(out var projectile, Factory)) + if (!entityProto.TryComp(out var projectile, Factory)) return null; if (!projectile.Damage.Empty) diff --git a/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs b/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs index 3a231f5dd5..bc28a1a599 100644 --- a/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs +++ b/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs @@ -52,7 +52,6 @@ public abstract partial class SharedGunSystem : EntitySystem [Dependency] protected ExamineSystemShared Examine = default!; [Dependency] protected IGameTiming Timing = default!; [Dependency] protected IMapManager MapManager = default!; - [Dependency] protected IPrototypeManager ProtoManager = default!; [Dependency] protected IRobustRandom Random = default!; [Dependency] protected ISharedAdminLogManager Logs = default!; [Dependency] protected SharedActionsSystem Actions = default!; diff --git a/Content.Shared/Whitelist/EntityWhitelistSystem.Prototype.cs b/Content.Shared/Whitelist/EntityWhitelistSystem.Prototype.cs index 1526ae6e44..6c6b55634a 100644 --- a/Content.Shared/Whitelist/EntityWhitelistSystem.Prototype.cs +++ b/Content.Shared/Whitelist/EntityWhitelistSystem.Prototype.cs @@ -11,7 +11,7 @@ public sealed partial class EntityWhitelistSystem /// public bool IsValid(EntityWhitelist list, [ForbidLiteral] EntProtoId protoId) { - return IsValid(list, _proto.Index(protoId)); + return IsValid(list, ProtoMan.Index(protoId)); } /// @@ -35,13 +35,13 @@ public sealed partial class EntityWhitelistSystem } } - if (list.Sizes != null && prototype.TryGetComponent(_itemComponentName, out ItemComponent? itemComp)) + if (list.Sizes != null && prototype.TryComp(_itemComponentName, out ItemComponent? itemComp)) { if (list.Sizes.Contains(itemComp.Size)) return true; } - if (list.Tags != null && prototype.TryGetComponent(_tagComponentName, out TagComponent? tagComp)) + if (list.Tags != null && prototype.TryComp(_tagComponentName, out TagComponent? tagComp)) { return list.RequireAll ? _tag.HasAllTags(tagComp, list.Tags) @@ -59,7 +59,7 @@ public sealed partial class EntityWhitelistSystem /// public bool CheckBoth([ForbidLiteral] EntProtoId protoId, EntityWhitelist? blacklist = null, EntityWhitelist? whitelist = null) { - return CheckBoth(_proto.Index(protoId), blacklist, whitelist); + return CheckBoth(ProtoMan.Index(protoId), blacklist, whitelist); } /// diff --git a/Content.Shared/Whitelist/EntityWhitelistSystem.cs b/Content.Shared/Whitelist/EntityWhitelistSystem.cs index a9218d5257..bc6fcb53d4 100644 --- a/Content.Shared/Whitelist/EntityWhitelistSystem.cs +++ b/Content.Shared/Whitelist/EntityWhitelistSystem.cs @@ -1,26 +1,25 @@ using System.Diagnostics.CodeAnalysis; using Content.Shared.Item; using Content.Shared.Tag; -using Robust.Shared.Prototypes; namespace Content.Shared.Whitelist; public sealed partial class EntityWhitelistSystem : EntitySystem { - [Dependency] private IPrototypeManager _proto = default!; + [Dependency] private IComponentFactory _factory = default!; [Dependency] private TagSystem _tag = default!; [Dependency] private EntityQuery _itemQuery; - private string _itemComponentName = string.Empty; - private string _tagComponentName = string.Empty; + private CompName _itemComponentName = default; + private CompName _tagComponentName = default; public override void Initialize() { base.Initialize(); // caching for minor performance improvement - _itemComponentName = Factory.GetComponentName(); - _tagComponentName = Factory.GetComponentName(); + _itemComponentName = CompName.Get(_factory); + _tagComponentName = CompName.Get(_factory); } /// diff --git a/Content.Shared/Xenoarchaeology/Artifact/SharedXenoArtifactSystem.Node.cs b/Content.Shared/Xenoarchaeology/Artifact/SharedXenoArtifactSystem.Node.cs index ffbaf6d330..b4da7d5def 100644 --- a/Content.Shared/Xenoarchaeology/Artifact/SharedXenoArtifactSystem.Node.cs +++ b/Content.Shared/Xenoarchaeology/Artifact/SharedXenoArtifactSystem.Node.cs @@ -83,7 +83,7 @@ public abstract partial class SharedXenoArtifactSystem /// public Entity CreateNode(Entity ent, ProtoId trigger, int depth = 0) { - var triggerProto = PrototypeManager.Index(trigger); + var triggerProto = ProtoMan.Index(trigger); return CreateNode(ent, triggerProto, depth); } diff --git a/Content.Shared/Xenoarchaeology/Artifact/SharedXenoArtifactSystem.cs b/Content.Shared/Xenoarchaeology/Artifact/SharedXenoArtifactSystem.cs index 751eb839e2..2cd02a1d13 100644 --- a/Content.Shared/Xenoarchaeology/Artifact/SharedXenoArtifactSystem.cs +++ b/Content.Shared/Xenoarchaeology/Artifact/SharedXenoArtifactSystem.cs @@ -3,7 +3,6 @@ using Content.Shared.Popups; using Content.Shared.Xenoarchaeology.Artifact.Components; using Robust.Shared.Containers; using Robust.Shared.Network; -using Robust.Shared.Prototypes; using Robust.Shared.Random; using Robust.Shared.Timing; @@ -16,7 +15,6 @@ public abstract partial class SharedXenoArtifactSystem : EntitySystem { [Dependency] private IGameTiming _timing = default!; [Dependency] private INetManager _net = default!; - [Dependency] protected IPrototypeManager PrototypeManager = default!; [Dependency] protected IRobustRandom RobustRandom = default!; [Dependency] private SharedActionsSystem _actions = default!; [Dependency] private SharedContainerSystem _container = default!; diff --git a/Content.Shared/Xenoarchaeology/Artifact/XAT/XATDamageThresholdReachedSystem.cs b/Content.Shared/Xenoarchaeology/Artifact/XAT/XATDamageThresholdReachedSystem.cs index 2e90dc6044..66e1e606f5 100644 --- a/Content.Shared/Xenoarchaeology/Artifact/XAT/XATDamageThresholdReachedSystem.cs +++ b/Content.Shared/Xenoarchaeology/Artifact/XAT/XATDamageThresholdReachedSystem.cs @@ -1,8 +1,6 @@ -using Content.Shared.Damage; using Content.Shared.Damage.Systems; using Content.Shared.Xenoarchaeology.Artifact.Components; using Content.Shared.Xenoarchaeology.Artifact.XAT.Components; -using Robust.Shared.Prototypes; namespace Content.Shared.Xenoarchaeology.Artifact.XAT; @@ -11,8 +9,6 @@ namespace Content.Shared.Xenoarchaeology.Artifact.XAT; /// public sealed partial class XATDamageThresholdReachedSystem : BaseXATSystem { - [Dependency] private IPrototypeManager _prototype = default!; - /// public override void Initialize() { @@ -41,7 +37,7 @@ public sealed partial class XATDamageThresholdReachedSystem : BaseXATSystem Date: Mon, 29 Jun 2026 12:50:31 +0200 Subject: [PATCH 02/47] Fix admin logs being silently dropped in case of failure (#33278) re-enqueue logs if update failed --- .../Administration/Logs/AdminLogManager.cs | 34 ++++++++++++++++--- Content.Server/Database/ServerDbBase.cs | 2 +- 2 files changed, 30 insertions(+), 6 deletions(-) diff --git a/Content.Server/Administration/Logs/AdminLogManager.cs b/Content.Server/Administration/Logs/AdminLogManager.cs index 10328d41ce..5e8d7472d8 100644 --- a/Content.Server/Administration/Logs/AdminLogManager.cs +++ b/Content.Server/Administration/Logs/AdminLogManager.cs @@ -251,18 +251,42 @@ public sealed partial class AdminLogManager : SharedAdminLogManager, IAdminLogMa _sawmill.Debug($"Saving {copy.Count} admin logs."); - if (_metricsEnabled) + try { - LogsSent.Inc(copy.Count); + if (_metricsEnabled) + { + LogsSent.Inc(copy.Count); - using (DatabaseUpdateTime.NewTimer()) + using (DatabaseUpdateTime.NewTimer()) + { + await task; + } + } + else { await task; - return; } } + catch (Exception ex) + { + _sawmill.Error($"Failed to save logs: {ex.Message}"); + _sawmill.Warning("Re-enqueueing logs and retrying at the next update."); - await task; + foreach (var log in copy) + { + if (log.RoundId == _currentRoundId) + { + _logQueue.Enqueue(log); + } + else + { + _preRoundLogQueue.Enqueue(log); + } + } + + Queue.Set(_logQueue.Count); + PreRoundQueue.Set(_preRoundLogQueue.Count); + } } public void RoundStarting(int id) diff --git a/Content.Server/Database/ServerDbBase.cs b/Content.Server/Database/ServerDbBase.cs index d759b2454a..f002144a0b 100644 --- a/Content.Server/Database/ServerDbBase.cs +++ b/Content.Server/Database/ServerDbBase.cs @@ -853,7 +853,7 @@ INSERT INTO player_round (players_id, rounds_id) VALUES ({players[player]}, {id} if (attempt >= maxRetryAttempts) { _opsLog.Error($"Max retry attempts reached. Failed to save {logs.Count} admin logs."); - return; + throw; } _opsLog.Warning($"Retrying in {retryDelay.TotalSeconds} seconds..."); From 1088205d84b7a52980f5f2dee80653e134dceec2 Mon Sep 17 00:00:00 2001 From: Myra Date: Mon, 29 Jun 2026 12:54:38 +0200 Subject: [PATCH 03/47] Introduce a Content sided config file (#36379) * Introduce a Content sided config file This PR adds a server_config.toml file on the content side of the game. Before the example config file was provided by Robust Toolbox. Which meant it could only really have RT related settings in it. This PR tells dotnet on build time (Via Content.Server.csproj) to replace the config file with the one in content, which means we can have specific SS14 cvars. In this case, the new default has what I believe to be the most touched config options for Space Station 14, sandbox player side and server host side. Along with a good description on what everything does. Fork owners may add their own cvars they believe should be easily visible at a glance by just editing the server_config.toml inside the Content.Server folder. Fork owners should change any of these defaults if they like to have a consistent experience for players downloading a sandbox server. * Comment fixes * Holy shit this pr had requested changes wtf --- Content.Server/Content.Server.csproj | 3 + Content.Server/server_config.toml | 158 +++++++++++++++++++++++++++ 2 files changed, 161 insertions(+) create mode 100644 Content.Server/server_config.toml diff --git a/Content.Server/Content.Server.csproj b/Content.Server/Content.Server.csproj index 10d4bd56ab..4e6280b24f 100644 --- a/Content.Server/Content.Server.csproj +++ b/Content.Server/Content.Server.csproj @@ -20,6 +20,9 @@ + + PreserveNewest + diff --git a/Content.Server/server_config.toml b/Content.Server/server_config.toml new file mode 100644 index 0000000000..ed14aaae76 --- /dev/null +++ b/Content.Server/server_config.toml @@ -0,0 +1,158 @@ +# Welcome to the example configuration file for Space Station 14! +# If you are in a watchdog enviroment, please create config.toml in your instence's root directory instead of editing this. +# If you are in a development environment, ensure you are editing /bin/Content.Server/server_config.toml. Be aware that this file may be overwritten on build. + +# This configuration file contains **some popular** options most often changed by sandboxers and server hosts. +# Along with a description of what they do. Look at the end of the file for a list of all options available if it's not listed here. + +[net] +# The ticks per second the server runs at. +# Lower values mean less load on the server, but also less responsiveness. +# Higher values mean more load, but also more responsiveness. +# 30 is what most servers on the hub use and going higher has minimal effect. +tickrate = 30 +# The port the server will bind to. 1212 is the default port for Space Station 14. +port = 1212 +# Attempt to automatically forward the port using UPnP. Change to true to enable. +# If it doesn't work, please follow the instructions here: https://docs.spacestation14.com/en/server-hosting/port-forwarding.html +upnp = false +# The maximum number of players that can connect to the server. (Including admins) +# Look at the game section for the soft max players setting. Which is what is displayed in the server list. +max_connections = 256 + +[game] +# Name of the server. This is what will be displayed in the server list and lobby. +hostname = "MyServer" +# Decscription of the server. This is what will be displayed in the server list. +desc = "Just another server, don't mind me!" +# The maximum number of players that can connect to the server. (Exluding admins) +soft_max_players = 30 +# Controls the lobby timer in seconds. +lobbyduration = 150 +# Should roles be restricted based on time? +role_timers = true +# Check connecting player ip against the IPIntel API (aka stop VPN/Proxy connections). Useful for hosts. +# Read more here https://getipintel.net/ +ipintel_enabled = false +# Required contact email to use IPIntel. +ipintel_contact_email = "" +# IPIntel score to reject connections. +ipintel_bad_rating = 0.95 + +[ic] +# Allows visibility and editing of flavor text (character descriptions) +flavor_text = false + +[admin] +# Should players be able to see their own notes? +see_own_notes = false + +[server] +# Change this to have the changelog and rules "last seen" date stored separately from other servers. +id = "unknown_server_id" + +[events] +# Controls if the game should run station events. (Meteors, Sleeper Syndicates ETC) +enabled = true +# Should admins count towards the max players count? +# Explanation: 9 players, 2 admins. Server list shows 11/10 players. But those 2 admins are subtracted from the max players. +# So someone who is not an admin can join, since technically the server is at 9/10 players. +admins_count_for_max_players = false +# Should admins be displayed on the player count? Just subtracts active admins from the player count. This is hub rule safe. +admins_count_in_playercount = false + +[shuttle] +# Should the emergency shuttle be allowed to launch early by command staff? +emergency_early_launch_allowed = false +# Time in minutes after round start to auto-call the emergency shuttle. Set to zero to disable. +auto_call_time = 90 + +[console] +# If this is true, people connecting from this computer will automatically be elevated to full admin privileges. +# Make sure to disable this if you are running a public server, especially if you are using a tunneling service. +loginlocal = true +# A player username that will be automatically elevated to full admin privileges on join. +# Please only use this to give yourself admin privileges temporarily. +# For a more permanent solution, use the permissions pannel in the game. (f7 -> Permissions Pannel, or `permissions` in the client console) +login_host_user = "" + +[whitelist] +# If this is true, only players on the whitelist will be able to connect to the server. +# Use the whitelistadd and whitelistremove commands to manage the whitelist. +enabled = false + +[chat] +# Message of the day. This is displayed to players when they connect to the server. +# Type your message between the quotes. +motd = "" + +[hub] +# Set to true to show this server on the public server list +# Before enabling this, read: https://docs.spacestation14.com/en/community/space-wizards-hub-rules.html +# By advertising your server, you agree to follow the rules of the hub. +advertise = false +# Comma-separated list of tags, useful for categorizing your server. For a list of standard tags, see the link below. +# https://docs.spacestation14.com/en/robust-toolbox/server-http-api.html?highlight=http#standard-tags +tags = "" +# Comma-separated list of URLs of hub servers to advertise to. +hub_urls = "https://hub.spacestation14.com/" +# URL of your server. Fill this in if you have a domain name, +# want to use HTTPS (with a reverse proxy), or other advanced scenarios. +# Must be in the form of an ss14:// or ss14s:// URI pointing to the status API. +# Example: ss14://mydomain.com +server_url = "" + +[status] +# This is the address of the SS14 server as the launcher uses it. +# This is only needed if you're proxying the status HTTP server +# by default the launcher will assume the address and port match that of the status server. +# Example: udp://mydomain.com:1212 +connectaddress = "" + +[infolinks] +# Links to be displayed in the launcher. +forum = "" +github = "" +website = "" +wiki = "" +patreon = "" +bug_report = "" +appeal = "" +telegram = "" + +[discord] +# Discord webhook to send ahelp messages to. +ahelp_webhook = "" +# Discord webhook to send round restart messages to. +round_update_webhook = "" +# Role ID to ping when the round ends. +round_end_role = "" + +[adminlogs] +# Name of the server within the admin logs. +# Recommended to be set to something unique between your servers if you have multiple to help with identifying them. +# Also used in some places to get the server name in a server family. +server_name = "unknown" + +[database] +# The database engine to use. Either "sqlite" or "postgres". +engine = "sqlite" +# PostgreSQL database information. Ignored if engine is not "postgres". +pg_host = "localhost" +pg_port = 5432 +pg_user = "postgres" +pg_password = "" +pg_database = "ss14" + +[log] +# Level of logging to display. 0 = verbose, 1 = debug, 2 = info, 3 = warnings, 4 = errors, 5 = fatal +level = 2 +# Write logs to disk? True to enable, false to disable. +enabled = false + +# For a full list of options, you can view the code where all CVars are defined: +# Robust Toolbox CVars: https://github.com/space-wizards/RobustToolbox/blob/master/Robust.Shared/CVars.cs +# Space Station 14 specific CVars: https://github.com/space-wizards/space-station-14/tree/master/Content.Shared/CCVar + +# More information on working with the config file can be found here: +# https://docs.spacestation14.com/en/general-development/tips/config-file-reference.html From 82bf7856473ef5d5b34c1781d3f7635ea00ca009 Mon Sep 17 00:00:00 2001 From: Princess Cheeseballs <66055347+Princess-Cheeseballs@users.noreply.github.com> Date: Mon, 29 Jun 2026 03:56:59 -0700 Subject: [PATCH 04/47] Linear Damping final fixes (#37987) * Init Commit * Last commit * Merge conflict resolve * fix test failures --------- Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com> --- Content.Server/Chemistry/EntitySystems/VaporSystem.cs | 3 --- .../Movement/Systems/SharedMoverController.cs | 10 +++++++--- Content.Shared/Weapons/Misc/SharedTetherGunSystem.cs | 4 ---- Content.Shared/Weapons/Misc/TetheredComponent.cs | 3 --- .../Entities/Objects/Fun/Plushies/plushies.yml | 4 ++-- .../Entities/Objects/Specific/Janitorial/spray.yml | 2 ++ 6 files changed, 11 insertions(+), 15 deletions(-) diff --git a/Content.Server/Chemistry/EntitySystems/VaporSystem.cs b/Content.Server/Chemistry/EntitySystems/VaporSystem.cs index 6b3e392080..fbcb14e4e6 100644 --- a/Content.Server/Chemistry/EntitySystems/VaporSystem.cs +++ b/Content.Server/Chemistry/EntitySystems/VaporSystem.cs @@ -68,9 +68,6 @@ namespace Content.Server.Chemistry.EntitySystems // Set Move if (TryComp(vapor, out PhysicsComponent? physics)) { - _physics.SetLinearDamping(vapor, physics, 0f); - _physics.SetAngularDamping(vapor, physics, 0f); - _throwing.TryThrow(vapor, dir, speed, user: user); var distance = (target.Position - _transformSystem.GetWorldPosition(vaporXform)).Length(); diff --git a/Content.Shared/Movement/Systems/SharedMoverController.cs b/Content.Shared/Movement/Systems/SharedMoverController.cs index 97de3b3722..f2180c3381 100644 --- a/Content.Shared/Movement/Systems/SharedMoverController.cs +++ b/Content.Shared/Movement/Systems/SharedMoverController.cs @@ -71,6 +71,7 @@ public abstract partial class SharedMoverController : VirtualController private float _minDamping; private float _airDamping; private float _offGridDamping; + private float _frictionModifier; private const LookupFlags _touchingFlags = LookupFlags.Approximate | LookupFlags.Dynamic | LookupFlags.Static; @@ -93,6 +94,8 @@ public abstract partial class SharedMoverController : VirtualController InitializeInput(); InitializeRelay(); + + Subs.CVar(_configManager, CCVars.TileFrictionModifier, value => _frictionModifier = value, true); Subs.CVar(_configManager, CCVars.RelativeMovement, value => _relativeMovement = value, true); Subs.CVar(_configManager, CCVars.MinFriction, value => _minDamping = value, true); Subs.CVar(_configManager, CCVars.AirFriction, value => _airDamping = value, true); @@ -233,7 +236,7 @@ public abstract partial class SharedMoverController : VirtualController ContentTileDefinition? tileDef = null; var touching = false; - // Whether we use tilefriction or not + // Should we use tile friction or not? if (weightless || inAirHelpless) { // Find the speed we should be moving at and make sure we're not trying to move faster than that @@ -270,6 +273,7 @@ public abstract partial class SharedMoverController : VirtualController } else { + // Should we ignore the friction of the tile we're standing on? if (MapGridQuery.TryComp(xform.GridUid, out var gridComp) && _mapSystem.TryGetTileRef(xform.GridUid.Value, gridComp, xform.Coordinates, out var tile) && physicsComponent.BodyStatus == BodyStatus.OnGround) @@ -282,12 +286,12 @@ public abstract partial class SharedMoverController : VirtualController if (wishDir != Vector2.Zero) { - friction = moveSpeedComponent?.Friction ?? MovementSpeedModifierComponent.DefaultFriction; + friction = moveSpeedComponent?.Friction ?? MovementSpeedModifierComponent.DefaultFriction * _frictionModifier; friction *= tileDef?.MobFriction ?? tileDef?.Friction ?? 1f; } else { - friction = moveSpeedComponent?.FrictionNoInput ?? MovementSpeedModifierComponent.DefaultFrictionNoInput; + friction = moveSpeedComponent?.FrictionNoInput ?? MovementSpeedModifierComponent.DefaultFrictionNoInput * _frictionModifier; friction *= tileDef?.Friction ?? 1f; } diff --git a/Content.Shared/Weapons/Misc/SharedTetherGunSystem.cs b/Content.Shared/Weapons/Misc/SharedTetherGunSystem.cs index 4f99790d12..1498408f73 100644 --- a/Content.Shared/Weapons/Misc/SharedTetherGunSystem.cs +++ b/Content.Shared/Weapons/Misc/SharedTetherGunSystem.cs @@ -215,9 +215,6 @@ public abstract partial class SharedTetherGunSystem : EntitySystem _physics.SetBodyStatus(target, targetPhysics, BodyStatus.InAir, false); _physics.SetSleepingAllowed(target, targetPhysics, false); tethered.Tetherer = gunUid; - tethered.OriginalAngularDamping = targetPhysics.AngularDamping; - _physics.SetAngularDamping(target, targetPhysics, 0f); - _physics.SetLinearDamping(target, targetPhysics, 0f); _physics.SetAngularVelocity(target, SpinVelocity, body: targetPhysics); _physics.WakeBody(target, body: targetPhysics); var thrown = EnsureComp(component.Tethered.Value); @@ -271,7 +268,6 @@ public abstract partial class SharedTetherGunSystem : EntitySystem _physics.SetBodyStatus(component.Tethered.Value, targetPhysics, BodyStatus.OnGround); _physics.SetSleepingAllowed(component.Tethered.Value, targetPhysics, true); - _physics.SetAngularDamping(component.Tethered.Value, targetPhysics, Comp(component.Tethered.Value).OriginalAngularDamping); } if (!transfer) diff --git a/Content.Shared/Weapons/Misc/TetheredComponent.cs b/Content.Shared/Weapons/Misc/TetheredComponent.cs index 3a92c69fbf..5632eb0594 100644 --- a/Content.Shared/Weapons/Misc/TetheredComponent.cs +++ b/Content.Shared/Weapons/Misc/TetheredComponent.cs @@ -10,7 +10,4 @@ public sealed partial class TetheredComponent : Component { [DataField("tetherer"), AutoNetworkedField] public EntityUid Tetherer; - - [ViewVariables(VVAccess.ReadWrite), DataField("originalAngularDamping"), AutoNetworkedField] - public float OriginalAngularDamping; } diff --git a/Resources/Prototypes/Entities/Objects/Fun/Plushies/plushies.yml b/Resources/Prototypes/Entities/Objects/Fun/Plushies/plushies.yml index 60d2d47dbf..d3e9736af5 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/Plushies/plushies.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/Plushies/plushies.yml @@ -80,10 +80,10 @@ noRot: true - type: Item - type: Physics - angularDamping: 0.02 - linearDamping: 0.02 fixedRotation: true bodyType: Dynamic + - type: MovementIgnoreGravity + weightless: true - type: Fixtures fixtures: fix1: diff --git a/Resources/Prototypes/Entities/Objects/Specific/Janitorial/spray.yml b/Resources/Prototypes/Entities/Objects/Specific/Janitorial/spray.yml index 9079ee1cb6..377acb0e32 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Janitorial/spray.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Janitorial/spray.yml @@ -187,6 +187,8 @@ - ItemMask - type: Appearance - type: VaporVisuals + - type: TileFrictionModifier + modifier: 0 - type: entity parent: Vapor From ae66092d888786f05fc2386648f76f5a8a2f0a40 Mon Sep 17 00:00:00 2001 From: eoineoineoin Date: Mon, 29 Jun 2026 12:01:05 +0100 Subject: [PATCH 05/47] Remove player workarounds for PowerGridCheckRule (#32130) Fix exploits for PowerGridCheckRule Don't allow breakers to be toggled while rule is active Turn off newly-constructed APCs while rule is active --- .../Components/PowerGridCheckRuleComponent.cs | 9 +++ .../Events/PowerGridCheckRule.cs | 59 +++++++++++++++++++ .../Entities/Structures/Power/apc.yml | 1 + 3 files changed, 69 insertions(+) diff --git a/Content.Server/StationEvents/Components/PowerGridCheckRuleComponent.cs b/Content.Server/StationEvents/Components/PowerGridCheckRuleComponent.cs index fcf0d483ab..eef7a924bf 100644 --- a/Content.Server/StationEvents/Components/PowerGridCheckRuleComponent.cs +++ b/Content.Server/StationEvents/Components/PowerGridCheckRuleComponent.cs @@ -65,3 +65,12 @@ public sealed partial class PowerGridCheckRuleComponent : Component [DataField] public float FrameTimeAccumulator = 0.0f; } + +/// +/// This component is used to detect when APCs are constructed +/// while the PowerGridCheckRule is active. +/// +[RegisterComponent] +public sealed partial class PowerGridCheckNotifyComponent : Component +{ +} diff --git a/Content.Server/StationEvents/Events/PowerGridCheckRule.cs b/Content.Server/StationEvents/Events/PowerGridCheckRule.cs index ee1c53fb9b..137900bb97 100644 --- a/Content.Server/StationEvents/Events/PowerGridCheckRule.cs +++ b/Content.Server/StationEvents/Events/PowerGridCheckRule.cs @@ -18,6 +18,13 @@ namespace Content.Server.StationEvents.Events { [Dependency] private ApcSystem _apcSystem = default!; + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnApcStartup); + SubscribeLocalEvent(OnApcToggleMainBreaker); + } + protected override void Started(EntityUid uid, PowerGridCheckRuleComponent component, GameRuleComponent gameRule, GameRuleStartedEvent args) { base.Started(uid, component, gameRule, args); @@ -37,6 +44,58 @@ namespace Content.Server.StationEvents.Events RobustRandom.Shuffle(component.Powered); component.NumberPerSecond = Math.Max(1, (int)(component.Powered.Count / component.SecondsUntilOff)); // Number of APCs to turn off every second. At least one. + + } + + /// + /// Check if the entity should be affected by an existing + /// PowerGridCheckRuleComponent and if so, turns off the APC. + /// + private void OnApcStartup(EntityUid apcUid, PowerGridCheckNotifyComponent comp, ComponentStartup args) + { + if (!TryComp(apcUid, out var apcComp)) + { + return; + } + + PowerGridCheckRuleComponent? rule = GetRuleAffectingEntity(apcUid); + if (rule != null && apcComp.MainBreakerEnabled) + { + _apcSystem.ApcToggleBreaker(apcUid, apcComp); + rule.Unpowered.Add(apcUid); + } + } + + private void OnApcToggleMainBreaker(EntityUid uid, PowerGridCheckNotifyComponent component, ref ApcToggleMainBreakerAttemptEvent args) + { + args.Cancelled |= GetRuleAffectingEntity(uid) != null; + } + + /// + /// Returns the PowerGridCheckRuleComponent affecting the uid, or null if none + /// + private PowerGridCheckRuleComponent? GetRuleAffectingEntity(EntityUid uid) + { + if (!TryComp(uid, out TransformComponent? xform)) + { + return null; + } + + if (!TryComp(xform.GridUid, out var stationMemberComp)) + { + return null; + } + + var activeRules = AllEntityQuery(); + while (activeRules.MoveNext(out var _entity, out var powerGridRule, out var _activeGameRule)) + { + if (stationMemberComp.Station == powerGridRule.AffectedStation) + { + return powerGridRule; + } + } + + return null; } protected override void Ended(EntityUid uid, PowerGridCheckRuleComponent component, GameRuleComponent gameRule, GameRuleEndedEvent args) diff --git a/Resources/Prototypes/Entities/Structures/Power/apc.yml b/Resources/Prototypes/Entities/Structures/Power/apc.yml index 15e9c4594d..8d94bf1a42 100644 --- a/Resources/Prototypes/Entities/Structures/Power/apc.yml +++ b/Resources/Prototypes/Entities/Structures/Power/apc.yml @@ -143,6 +143,7 @@ priority: 1 - type: StaticPrice price: 500 + - type: PowerGridCheckNotify - type: GuideHelp guides: - VoltageNetworks From fd855e25fceb2fda5a725553b803520d76f9e850 Mon Sep 17 00:00:00 2001 From: ProPeperos <61984624+ProPeperos@users.noreply.github.com> Date: Mon, 29 Jun 2026 13:47:42 +0200 Subject: [PATCH 06/47] Packed - atmos, tweaks and fixes and SHEEP (#43985) * packed atmos, tweaks and fixes * fix evac hole * suggested atmos and more atmos * no more invalid stuff * applied fixrotation removed multiple duplicated walls replaced the detective bookshelf door with hidden door moved the windoors in armory for them to close * reverted det stuff, just unachored the bookshelf * reverted sec armory change, will be fixed with 44081 * added sheep! added vacuum fixers painted waste filters --- Resources/Maps/packed.yml | 3459 +++++++++++++++++++++++++++---------- 1 file changed, 2581 insertions(+), 878 deletions(-) diff --git a/Resources/Maps/packed.yml b/Resources/Maps/packed.yml index f6c5ef7536..b159462fac 100644 --- a/Resources/Maps/packed.yml +++ b/Resources/Maps/packed.yml @@ -1,11 +1,11 @@ meta: format: 7 category: Map - engineVersion: 272.0.0 + engineVersion: 277.0.0 forkId: "" forkVersion: "" - time: 03/18/2026 17:37:36 - entityCount: 16015 + time: 05/28/2026 22:36:18 + entityCount: 16385 maps: - 126 grids: @@ -120,7 +120,7 @@ entities: version: 7 2,-3: ind: 2,-3 - tiles: ewAAAAAAAGoAAAAAAABbAAAAAAIAagAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAABqAAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB6AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAWwAAAAAAAGoAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAagAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAegAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAGsAAAAAAABqAAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAGoAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHoAAAAAAAB7AAAAAAAAHQAAAAABAHsAAAAAAABrAAAAAAAAagAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB6AAAAAAAAewAAAAAAAB0AAAAAAQB7AAAAAAAAawAAAAAAAGoAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAegAAAAAAAHsAAAAAAAAdAAAAAAMAewAAAAAAAFsAAAAAAgBqAAAAAAAAagAAAAAAAGoAAAAAAABqAAAAAAAAewAAAAAAAHsAAAAAAABqAAAAAAAAagAAAAAAAGoAAAAAAABqAAAAAAAAewAAAAAAAHoAAAAAAAB6AAAAAAAAHQAAAAADAHsAAAAAAAB7AAAAAAAAawAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAB0AAAAAAgB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAFsAAAAAAwBbAAAAAAEAWwAAAAACAFsAAAAAAABbAAAAAAAAWwAAAAAAAFsAAAAAAQBbAAAAAAEAWwAAAAABAHsAAAAAAAAdAAAAAAAAawAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAGsAAAAAAABbAAAAAAMAewAAAAAAAFsAAAAAAQBbAAAAAAEAWwAAAAAAAFsAAAAAAwBbAAAAAAIAWwAAAAADAFsAAAAAAgB7AAAAAAAAHQAAAAADAHsAAAAAAABqAAAAAAAAagAAAAAAAGoAAAAAAAB7AAAAAAAAWwAAAAACAHsAAAAAAABbAAAAAAIAWwAAAAACAGsAAAAAAABrAAAAAAAAawAAAAAAAGsAAAAAAABrAAAAAAAAewAAAAAAAB0AAAAAAgB7AAAAAAAAewAAAAAAAGsAAAAAAAB7AAAAAAAAewAAAAAAAGsAAAAAAABrAAAAAAAAawAAAAAAAHsAAAAAAABrAAAAAAAAawAAAAAAAGsAAAAAAABrAAAAAAAAawAAAAAAAHsAAAAAAABbAAAAAAIAewAAAAAAAHoAAAAAAAB6AAAAAAAAegAAAAAAAHsAAAAAAABqAAAAAAAAagAAAAAAAGoAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAWwAAAAABAHsAAAAAAAB6AAAAAAAAegAAAAAAAHoAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB6AAAAAAAAegAAAAAAAFsAAAAAAAB7AAAAAAAAegAAAAAAAHoAAAAAAAB6AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAegAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAAEAAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHoAAAAAAAB7AAAAAAAAWwAAAAADAHsAAAAAAABqAAAAAAAABgAAAAADAGoAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB6AAAAAAAAewAAAAAAAA== + tiles: ewAAAAAAAGoAAAAAAABbAAAAAAIAagAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAABqAAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB6AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAWwAAAAAAAGoAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAagAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAegAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAGsAAAAAAABqAAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAGoAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHoAAAAAAAB7AAAAAAAAHQAAAAABAHsAAAAAAABrAAAAAAAAagAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB6AAAAAAAAewAAAAAAAB0AAAAAAQB7AAAAAAAAawAAAAAAAGoAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAegAAAAAAAHsAAAAAAAAdAAAAAAMAewAAAAAAAFsAAAAAAgBqAAAAAAAAagAAAAAAAGoAAAAAAABqAAAAAAAAewAAAAAAAHsAAAAAAABqAAAAAAAAagAAAAAAAGoAAAAAAABqAAAAAAAAewAAAAAAAHoAAAAAAAB6AAAAAAAAHQAAAAADAHsAAAAAAAB7AAAAAAAAawAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAB0AAAAAAgB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAFsAAAAAAwBbAAAAAAEAWwAAAAACAFsAAAAAAABbAAAAAAAAWwAAAAAAAFsAAAAAAQBbAAAAAAEAWwAAAAABAHsAAAAAAAAdAAAAAAAAawAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAGsAAAAAAABbAAAAAAMAewAAAAAAAFsAAAAAAgBbAAAAAAEAWwAAAAAAAFsAAAAAAwBbAAAAAAIAWwAAAAADAFsAAAAAAgB7AAAAAAAAHQAAAAADAHsAAAAAAABqAAAAAAAAagAAAAAAAGoAAAAAAAB7AAAAAAAAWwAAAAACAHsAAAAAAABbAAAAAAIAWwAAAAACAGsAAAAAAABrAAAAAAAAawAAAAAAAGsAAAAAAABrAAAAAAAAewAAAAAAAB0AAAAAAgB7AAAAAAAAewAAAAAAAGsAAAAAAAB7AAAAAAAAewAAAAAAAGsAAAAAAABrAAAAAAAAawAAAAAAAHsAAAAAAABrAAAAAAAAawAAAAAAAGsAAAAAAABrAAAAAAAAawAAAAAAAHsAAAAAAABbAAAAAAIAewAAAAAAAHoAAAAAAAB6AAAAAAAAegAAAAAAAHsAAAAAAABqAAAAAAAAagAAAAAAAGoAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAWwAAAAABAHsAAAAAAAB6AAAAAAAAegAAAAAAAHoAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB6AAAAAAAAegAAAAAAAFsAAAAAAAB7AAAAAAAAegAAAAAAAHoAAAAAAAB6AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAegAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAAEAAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHoAAAAAAAB7AAAAAAAAWwAAAAADAHsAAAAAAABqAAAAAAAABgAAAAADAGoAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB6AAAAAAAAewAAAAAAAA== version: 7 1,1: ind: 1,1 @@ -192,7 +192,7 @@ entities: version: 7 4,-2: ind: 4,-2 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAegAAAAAAAHoAAAAAAAB6AAAAAAAAegAAAAAAAAAAAAAAAAB6AAAAAAAAegAAAAAAAHoAAAAAAAB6AAAAAAAAegAAAAAAAHoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAegAAAAAAAHoAAAAAAAB6AAAAAAAAegAAAAAAAHoAAAAAAAB6AAAAAAAAegAAAAAAAHoAAAAAAAB6AAAAAAAAegAAAAAAAHoAAAAAAAB6AAAAAAAAegAAAAAAAHoAAAAAAAB6AAAAAAAAegAAAAAAAHoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAawAAAAAAAHsAAAAAAAB7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAGoAAAAAAAB7AAAAAAAAagAAAAAAAHsAAAAAAABqAAAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAABqAAAAAAAAewAAAAAAAGoAAAAAAAB7AAAAAAAAagAAAAAAAHsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB7AAAAAAAAewAAAAAAAHgAAAAAAQB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAagAAAAAAAHsAAAAAAAB7AAAAAAAAawAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHgAAAAAAQB4AAAAAAMAeAAAAAADAGsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAagAAAAAAAHsAAAAAAAB7AAAAAAAAagAAAAAAAGoAAAAAAAB7AAAAAAAAagAAAAAAAA== + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAegAAAAAAAHoAAAAAAAB6AAAAAAAAegAAAAAAAAAAAAAAAAB6AAAAAAAAegAAAAAAAHoAAAAAAAB6AAAAAAAAegAAAAAAAHoAAAAAAAB6AAAAAAAAegAAAAAAAHoAAAAAAAB6AAAAAAAAegAAAAAAAHoAAAAAAAB6AAAAAAAAegAAAAAAAHoAAAAAAAB6AAAAAAAAegAAAAAAAHoAAAAAAAB6AAAAAAAAegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHoAAAAAAAB6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAawAAAAAAAHsAAAAAAAB7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAGoAAAAAAAB7AAAAAAAAagAAAAAAAHsAAAAAAABqAAAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAABqAAAAAAAAewAAAAAAAGoAAAAAAAB7AAAAAAAAagAAAAAAAHsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB7AAAAAAAAewAAAAAAAHgAAAAAAQB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAagAAAAAAAHsAAAAAAAB7AAAAAAAAawAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHgAAAAAAQB4AAAAAAMAeAAAAAADAGsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAagAAAAAAAHsAAAAAAAB7AAAAAAAAagAAAAAAAGoAAAAAAAB7AAAAAAAAagAAAAAAAA== version: 7 3,0: ind: 3,0 @@ -236,7 +236,7 @@ entities: version: 7 5,-2: ind: 5,-2 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAegAAAAAAAHoAAAAAAAB6AAAAAAAAegAAAAAAAHoAAAAAAAB6AAAAAAAAegAAAAAAAHoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6AAAAAAAAegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAEwAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAawAAAAAAAHsAAAAAAAB7AAAAAAAAawAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAGsAAAAAAAB7AAAAAAAAewAAAAAAAGsAAAAAAAB7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAABrAAAAAAAAewAAAAAAAHsAAAAAAABrAAAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAEwAAAAAAQB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAagAAAAAAAGoAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAABqAAAAAAAAagAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAegAAAAAAAHoAAAAAAAB6AAAAAAAAegAAAAAAAHoAAAAAAAB6AAAAAAAAegAAAAAAAHoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6AAAAAAAAegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAEwAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAawAAAAAAAHsAAAAAAAB7AAAAAAAAawAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAGsAAAAAAAB7AAAAAAAAewAAAAAAAGsAAAAAAAB7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAABrAAAAAAAAewAAAAAAAHsAAAAAAABrAAAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAEwAAAAAAQB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAagAAAAAAAGoAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAABqAAAAAAAAagAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== version: 7 5,2: ind: 5,2 @@ -276,15 +276,15 @@ entities: version: 7 -2,-2: ind: -2,-2 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAegAAAAAAAHoAAAAAAAB6AAAAAAAAegAAAAAAAHoAAAAAAAB6AAAAAAAAegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAegAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6AAAAAAAAegAAAAAAAHoAAAAAAAB7AAAAAAAAegAAAAAAAHoAAAAAAAB6AAAAAAAAegAAAAAAAHsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGoAAAAAAAB7AAAAAAAAIgAAAAAAAFsAAAAAAABbAAAAAAMAWwAAAAAAAGsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAABbAAAAAAAAWwAAAAADAFsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAagAAAAAAAHsAAAAAAAAiAAAAAAMAWwAAAAADAFsAAAAAAABbAAAAAAMAewAAAAAAAHoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAFsAAAAAAQBbAAAAAAEAWwAAAAADAHsAAAAAAAB6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAegAAAAAAAHsAAAAAAABbAAAAAAEAWwAAAAAAAFsAAAAAAgB7AAAAAAAAegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHoAAAAAAAB7AAAAAAAAWwAAAAAAAFsAAAAAAwBbAAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6AAAAAAAAewAAAAAAAFsAAAAAAgBbAAAAAAAAWwAAAAABACIAAAAAAgB7AAAAAAAAagAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAegAAAAAAAHoAAAAAAAB6AAAAAAAAegAAAAAAAHoAAAAAAAB6AAAAAAAAegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAegAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6AAAAAAAAegAAAAAAAHoAAAAAAAB7AAAAAAAAegAAAAAAAHoAAAAAAAB6AAAAAAAAegAAAAAAAHsAAAAAAAAAAAAAAAAAAAAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAAAAAAAAAAAAAAAAAAABqAAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAIgAAAAAAAFsAAAAAAABbAAAAAAMAWwAAAAAAAGsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAABbAAAAAAAAWwAAAAADAFsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAAAAAAAAAAAAAAAAAAAAGoAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAAiAAAAAAMAWwAAAAADAFsAAAAAAABbAAAAAAMAewAAAAAAAHoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAFsAAAAAAQBbAAAAAAEAWwAAAAADAHsAAAAAAAB6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHoAAAAAAAAAAAAAAAAAegAAAAAAAHsAAAAAAABbAAAAAAEAWwAAAAAAAFsAAAAAAgB7AAAAAAAAegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6AAAAAAAAAAAAAAAAAHoAAAAAAAB7AAAAAAAAWwAAAAAAAFsAAAAAAwBbAAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAegAAAAAAAAAAAAAAAAB6AAAAAAAAewAAAAAAAFsAAAAAAgBbAAAAAAAAWwAAAAABACIAAAAAAgB7AAAAAAAAagAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== version: 7 -2,-1: ind: -2,-1 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB7AAAAAAAAewAAAAAAAFsAAAAAAgBbAAAAAAAAWwAAAAACAHsAAAAAAAB7AAAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAAAUAAAAAAgBbAAAAAAAAWwAAAAAAAFsAAAAAAABbAAAAAAIAewAAAAAAAHoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHsAAAAAAAAFAAAAAAEAWwAAAAABAFsAAAAAAABbAAAAAAMAWwAAAAADAHsAAAAAAAB6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB7AAAAAAAABQAAAAAAAFsAAAAAAQBbAAAAAAAAWwAAAAABAFsAAAAAAAB7AAAAAAAAegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAAAUAAAAAAwBbAAAAAAAAWwAAAAAAAFsAAAAAAQBbAAAAAAMAewAAAAAAAHoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHsAAAAAAAB7AAAAAAAAWwAAAAACAFsAAAAAAgBbAAAAAAIAewAAAAAAAHsAAAAAAAB7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6AAAAAAAAewAAAAAAAFsAAAAAAwBbAAAAAAMAWwAAAAADACIAAAAAAgB7AAAAAAAAagAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAegAAAAAAAHsAAAAAAABbAAAAAAAAWwAAAAACAFsAAAAAAwB7AAAAAAAAewAAAAAAAHsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHoAAAAAAAB7AAAAAAAAWwAAAAADAFsAAAAAAABbAAAAAAIAewAAAAAAAHoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6AAAAAAAAewAAAAAAAFsAAAAAAABbAAAAAAMAWwAAAAAAAHsAAAAAAAB6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAegAAAAAAAHsAAAAAAABbAAAAAAMAWwAAAAADAFsAAAAAAAB7AAAAAAAAegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHoAAAAAAAB7AAAAAAAAWwAAAAACAFsAAAAAAABbAAAAAAIAewAAAAAAAHoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6AAAAAAAAewAAAAAAAFsAAAAAAABbAAAAAAEAWwAAAAAAAHsAAAAAAAB6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAABbAAAAAAMAWwAAAAACAFsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAagAAAAAAAHsAAAAAAAAiAAAAAAAAWwAAAAABAFsAAAAAAgBbAAAAAAMAWwAAAAAAAFsAAAAAAABbAAAAAAIAWwAAAAABAFsAAAAAAABbAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAFsAAAAAAgBbAAAAAAMAWwAAAAAAAFsAAAAAAgBbAAAAAAIAWwAAAAADAFsAAAAAAABbAAAAAAIAWwAAAAABAA== + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAegAAAAAAAHoAAAAAAAB7AAAAAAAAewAAAAAAAFsAAAAAAgBbAAAAAAAAWwAAAAACAHsAAAAAAAB7AAAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHoAAAAAAAAAAAAAAAAAewAAAAAAAAUAAAAAAgBbAAAAAAAAWwAAAAAAAFsAAAAAAABbAAAAAAIAewAAAAAAAHoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6AAAAAAAAAAAAAAAAAHsAAAAAAAAFAAAAAAEAWwAAAAABAFsAAAAAAABbAAAAAAMAWwAAAAADAHsAAAAAAAB6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAegAAAAAAAAAAAAAAAAB7AAAAAAAABQAAAAAAAFsAAAAAAQBbAAAAAAAAWwAAAAABAFsAAAAAAAB7AAAAAAAAegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHoAAAAAAAAAAAAAAAAAewAAAAAAAAUAAAAAAwBbAAAAAAAAWwAAAAAAAFsAAAAAAQBbAAAAAAMAewAAAAAAAHoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6AAAAAAAAegAAAAAAAHsAAAAAAAB7AAAAAAAAWwAAAAACAFsAAAAAAgBbAAAAAAIAewAAAAAAAHsAAAAAAAB7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAegAAAAAAAAAAAAAAAAB6AAAAAAAAewAAAAAAAFsAAAAAAwBbAAAAAAMAWwAAAAADACIAAAAAAgB7AAAAAAAAagAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHoAAAAAAAAAAAAAAAAAegAAAAAAAHsAAAAAAABbAAAAAAAAWwAAAAACAFsAAAAAAwB7AAAAAAAAewAAAAAAAHsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6AAAAAAAAAAAAAAAAAHoAAAAAAAB7AAAAAAAAWwAAAAADAFsAAAAAAABbAAAAAAIAewAAAAAAAHoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAegAAAAAAAAAAAAAAAAB6AAAAAAAAewAAAAAAAFsAAAAAAABbAAAAAAMAWwAAAAAAAHsAAAAAAAB6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHoAAAAAAAAAAAAAAAAAegAAAAAAAHsAAAAAAABbAAAAAAMAWwAAAAADAFsAAAAAAAB7AAAAAAAAegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6AAAAAAAAAAAAAAAAAHoAAAAAAAB7AAAAAAAAWwAAAAACAFsAAAAAAABbAAAAAAIAewAAAAAAAHoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAegAAAAAAAHoAAAAAAAB6AAAAAAAAewAAAAAAAFsAAAAAAABbAAAAAAEAWwAAAAAAAHsAAAAAAAB6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAABbAAAAAAMAWwAAAAACAFsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAAAAAAAAAAAAAAAAAAAAGoAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAAiAAAAAAAAWwAAAAABAFsAAAAAAgBbAAAAAAMAWwAAAAAAAFsAAAAAAABbAAAAAAIAWwAAAAABAFsAAAAAAABbAAAAAAIAAAAAAAAAAAAAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAFsAAAAAAgBbAAAAAAMAWwAAAAAAAFsAAAAAAgBbAAAAAAIAWwAAAAADAFsAAAAAAABbAAAAAAIAWwAAAAABAA== version: 7 -2,0: ind: -2,0 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGoAAAAAAAB7AAAAAAAAIgAAAAACAFsAAAAAAABbAAAAAAMAWwAAAAADAFsAAAAAAgBbAAAAAAEAWwAAAAACAFsAAAAAAwBbAAAAAAIAWwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6AAAAAAAAAAAAAAAAAHoAAAAAAAAAAAAAAAAAewAAAAAAAHoAAAAAAAB6AAAAAAAAegAAAAAAAHoAAAAAAAB6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAegAAAAAAAAAAAAAAAAB6AAAAAAAAAAAAAAAAAHoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHoAAAAAAAAAAAAAAAAAegAAAAAAAAAAAAAAAAB6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6AAAAAAAAegAAAAAAAHoAAAAAAAB6AAAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAegAAAAAAAAAAAAAAAAB6AAAAAAAAAAAAAAAAAHsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHoAAAAAAAAAAAAAAAAAegAAAAAAAAAAAAAAAAB7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6AAAAAAAAAAAAAAAAAHoAAAAAAAAAAAAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAegAAAAAAAAAAAAAAAAB6AAAAAAAAAAAAAAAAAHsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHoAAAAAAAB6AAAAAAAAegAAAAAAAHoAAAAAAAB7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6AAAAAAAAAAAAAAAAAHoAAAAAAAAAAAAAAAAAegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAegAAAAAAAAAAAAAAAAB6AAAAAAAAAAAAAAAAAHoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHoAAAAAAAAAAAAAAAAAegAAAAAAAAAAAAAAAAB7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6AAAAAAAAegAAAAAAAHoAAAAAAAB6AAAAAAAAewAAAAAAAHsAAAAAAAB6AAAAAAAAegAAAAAAAHsAAAAAAAB7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6AAAAAAAAAAAAAAAAAA== + tiles: AAAAAAAAAAAAAAAAAABqAAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAIgAAAAACAFsAAAAAAABbAAAAAAMAWwAAAAADAFsAAAAAAgBbAAAAAAEAWwAAAAACAFsAAAAAAwBbAAAAAAIAWwAAAAABAAAAAAAAAAAAAAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAB7AAAAAAAAewAAAAAAAHsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6AAAAAAAAAAAAAAAAAHoAAAAAAAAAAAAAAAAAewAAAAAAAHoAAAAAAAB6AAAAAAAAegAAAAAAAHoAAAAAAAB6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAegAAAAAAAAAAAAAAAAB6AAAAAAAAAAAAAAAAAHoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHoAAAAAAAAAAAAAAAAAegAAAAAAAAAAAAAAAAB6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6AAAAAAAAegAAAAAAAHoAAAAAAAB6AAAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAegAAAAAAAAAAAAAAAAB6AAAAAAAAAAAAAAAAAHsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHoAAAAAAAAAAAAAAAAAegAAAAAAAAAAAAAAAAB7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6AAAAAAAAAAAAAAAAAHoAAAAAAAAAAAAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAegAAAAAAAAAAAAAAAAB6AAAAAAAAAAAAAAAAAHsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHoAAAAAAAB6AAAAAAAAegAAAAAAAHoAAAAAAAB7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6AAAAAAAAAAAAAAAAAHoAAAAAAAAAAAAAAAAAegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAegAAAAAAAAAAAAAAAAB6AAAAAAAAAAAAAAAAAHoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHoAAAAAAAAAAAAAAAAAegAAAAAAAAAAAAAAAAB7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6AAAAAAAAegAAAAAAAHoAAAAAAAB6AAAAAAAAewAAAAAAAHsAAAAAAAB6AAAAAAAAegAAAAAAAHsAAAAAAAB7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6AAAAAAAAAAAAAAAAAA== version: 7 -2,1: ind: -2,1 @@ -490,7 +490,7 @@ entities: 0: 61919 -4,-8: 1: 61624 - 0: 68 + 2: 68 -5,-8: 1: 34952 -4,-7: @@ -501,10 +501,10 @@ entities: -5,-6: 0: 240 -4,-9: - 0: 17408 + 2: 17408 1: 35807 -3,-8: - 0: 85 + 2: 85 1: 61608 -3,-7: 1: 3840 @@ -512,26 +512,28 @@ entities: 0: 255 1: 32768 -3,-9: - 0: 21760 + 2: 21760 1: 43759 -2,-8: - 0: 85 + 2: 85 1: 61610 -2,-7: 1: 768 -2,-6: 0: 20087 -2,-9: - 0: 21760 + 2: 21760 1: 35471 -1,-8: - 0: 34969 + 2: 17 1: 12832 + 0: 34952 -1,-6: 0: 3840 1: 8 -1,-9: - 0: 4360 + 2: 4352 + 0: 8 1: 119 -1,-7: 1: 35904 @@ -672,10 +674,10 @@ entities: 0: 61422 7,-4: 0: 239 - 2: 57344 + 3: 57344 7,-3: 0: 16 - 2: 3822 + 3: 3822 7,-2: 0: 61422 7,-5: @@ -716,7 +718,7 @@ entities: 0: 63967 8,-8: 0: 4113 - 3: 204 + 2: 204 1: 49152 8,-7: 0: 65521 @@ -728,7 +730,7 @@ entities: 1: 4368 -1,-11: 1: 58608 - 0: 4096 + 2: 4096 0,-10: 1: 241 0: 49152 @@ -759,53 +761,56 @@ entities: 3,-9: 0: 3067 3,-12: - 0: 60966 + 2: 60966 1: 192 3,-11: 0: 3682 3,-13: - 0: 9830 + 2: 9762 1: 51208 + 0: 68 4,-12: 1: 252 - 0: 16130 + 2: 16130 4,-11: 0: 48056 4,-10: 0: 61631 4,-13: 1: 13117 - 0: 2 + 2: 2 5,-12: 1: 253 - 0: 3842 + 2: 3842 5,-11: 0: 65535 5,-10: 0: 62207 5,-13: 1: 8749 - 0: 2 + 2: 2 6,-12: 1: 241 - 0: 26370 + 2: 26370 6,-10: 0: 61543 6,-11: 0: 26208 6,-13: 1: 61037 - 0: 2 + 2: 2 7,-12: 1: 16 - 0: 61611 + 0: 61576 + 2: 35 7,-11: 0: 65535 7,-10: 0: 63743 7,-13: 1: 4232 - 0: 41779 + 2: 9011 + 0: 32768 8,-12: 0: 56543 8,-11: @@ -815,10 +820,10 @@ entities: 1: 49152 8,-9: 0: 4113 - 3: 49152 + 2: 49152 1: 204 9,-8: - 3: 17 + 2: 17 1: 4096 0: 52428 9,-7: @@ -828,7 +833,7 @@ entities: 9,-5: 0: 30479 9,-9: - 3: 4096 + 2: 4096 0: 52428 1: 17 9,-4: @@ -865,9 +870,9 @@ entities: 0: 63692 12,-8: 4: 7 - 3: 1792 + 2: 1792 12,-7: - 3: 7 + 2: 7 5: 1792 12,-6: 6: 7 @@ -876,7 +881,8 @@ entities: 12,-5: 0: 43263 8,-13: - 0: 53519 + 0: 53504 + 2: 15 1: 240 9,-12: 0: 65535 @@ -886,8 +892,9 @@ entities: 0: 52447 1: 4096 9,-13: - 0: 61444 + 0: 61440 1: 248 + 2: 4 10,-12: 0: 65535 10,-11: @@ -909,14 +916,14 @@ entities: 0: 4096 1: 17657 12,-12: - 3: 65535 + 2: 65535 12,-11: 1: 62960 12,-10: 1: 4369 12,-9: 1: 15 - 3: 1792 + 2: 1792 4,7: 0: 61152 4,8: @@ -1016,55 +1023,56 @@ entities: 3,-16: 1: 39152 4,-15: - 0: 4095 + 2: 4095 1: 61440 3,-15: - 0: 12006 + 2: 12006 1: 49152 4,-14: 1: 13116 - 0: 2 + 2: 2 3,-14: 1: 2240 - 0: 26150 + 2: 9766 + 0: 16384 5,-16: 1: 34800 5,-15: - 0: 4088 + 2: 4088 1: 61440 5,-14: 1: 8749 - 0: 2 + 2: 2 6,-16: 1: 29936 6,-15: - 0: 4091 + 2: 4091 1: 61440 6,-14: 1: 28385 - 0: 2 + 2: 2 7,-16: 1: 28272 7,-15: - 0: 9009 + 2: 9009 1: 38912 7,-14: 1: 34968 - 0: 13091 + 2: 13091 8,-16: 1: 3840 8,-15: - 0: 14336 + 2: 14336 1: 224 8,-14: - 0: 65535 + 2: 65535 9,-16: 1: 3840 9,-15: 1: 36080 - 0: 25344 + 2: 25344 9,-14: - 0: 20756 + 2: 20756 1: 35976 10,-16: 1: 61696 @@ -1082,7 +1090,7 @@ entities: 1: 61441 12,-13: 1: 244 - 3: 61440 + 2: 61440 1,-16: 1: 50368 1,-15: @@ -1097,30 +1105,30 @@ entities: 1: 21847 -4,-11: 1: 46064 - 0: 16384 + 2: 16384 -5,-11: 1: 34944 -4,-10: 1: 48008 - 0: 1092 + 2: 1092 -5,-10: 1: 44776 -5,-9: 1: 60074 -3,-11: 1: 41200 - 0: 20480 + 2: 20480 -3,-10: - 0: 1365 + 2: 1365 1: 64168 -2,-11: 1: 41200 - 0: 20480 + 2: 20480 -2,-10: - 0: 1365 + 2: 1365 1: 47752 -1,-10: - 0: 273 + 2: 273 1: 29764 12,-3: 0: 58470 @@ -1196,10 +1204,10 @@ entities: 0,10: 1: 59938 1,9: - 3: 32752 + 2: 32752 0: 2 1,10: - 3: 7 + 2: 7 1: 63488 2,10: 1: 15906 @@ -1401,16 +1409,16 @@ entities: 17,-7: 1: 65024 18,-7: - 1: 63232 + 1: 7936 18,-6: 1: 1 0: 16384 19,-7: - 1: 63488 + 1: 16128 19,-6: 1: 1 20,-7: - 1: 7936 + 1: 3840 20,-5: 0: 61440 13,1: @@ -1503,10 +1511,10 @@ entities: 22,2: 1: 8738 23,0: - 0: 256 + 2: 256 1: 17 23,1: - 0: 256 + 2: 256 1: 4096 23,3: 1: 273 @@ -1609,27 +1617,32 @@ entities: 0: 30495 18,6: 1: 49168 - 0: 7168 + 0: 4096 + 2: 3072 18,7: - 0: 7441 + 0: 4369 1: 49344 + 2: 3072 18,8: - 0: 3089 + 0: 17 1: 57536 + 2: 3072 19,5: 1: 3955 - 0: 61440 + 2: 61440 19,6: 1: 28679 - 0: 36744 + 2: 36744 19,7: 1: 12336 - 0: 35712 + 2: 768 + 0: 34944 20,5: 1: 12544 20,6: - 0: 25123 + 2: 35 1: 92 + 0: 25088 20,7: 0: 30578 16,12: @@ -1651,17 +1664,18 @@ entities: 1: 29764 19,8: 1: 12336 - 0: 2944 + 2: 768 + 0: 2176 19,9: 1: 20236 19,11: 1: 17652 - 0: 40960 + 2: 40960 19,10: - 0: 43690 + 2: 43690 1: 17476 19,12: - 0: 2730 + 2: 2730 1: 17476 20,8: 0: 1906 @@ -1669,7 +1683,7 @@ entities: 1: 20303 20,11: 1: 17652 - 0: 40960 + 2: 40960 17,12: 1: 57344 18,13: @@ -1712,10 +1726,10 @@ entities: 24,-5: 0: 127 20,10: - 0: 43690 + 2: 43690 1: 17476 20,12: - 0: 2730 + 2: 2730 1: 17476 21,8: 0: 7 @@ -1724,14 +1738,14 @@ entities: 1: 20227 21,11: 1: 17652 - 0: 40960 + 2: 40960 21,7: 0: 30583 21,10: - 0: 43690 + 2: 43690 1: 17476 21,12: - 0: 2730 + 2: 2730 1: 17476 22,9: 1: 9002 @@ -1740,7 +1754,8 @@ entities: 22,7: 0: 65534 22,8: - 0: 24590 + 0: 14 + 2: 24576 22,10: 1: 44578 22,12: @@ -1781,20 +1796,21 @@ entities: 27,-5: 0: 57309 27,-4: - 0: 34829 + 0: 13 1: 17408 + 2: 34816 27,-7: 1: 19456 - 0: 32768 + 2: 32768 27,-6: 1: 1092 - 0: 2184 + 2: 2184 28,-7: 1: 24320 - 0: 40960 + 2: 40960 28,-6: 1: 1365 - 0: 2730 + 2: 2730 28,-5: 0: 65535 25,-3: @@ -1803,37 +1819,38 @@ entities: 0: 238 27,-3: 1: 3140 - 0: 136 + 2: 136 28,-4: - 0: 43535 + 0: 15 1: 21760 + 2: 43520 28,-3: 1: 3925 - 0: 170 + 2: 170 29,-7: 1: 4352 29,-6: 1: 57617 29,-5: - 0: 3598 + 2: 3598 1: 57568 29,-4: - 0: 14 + 2: 14 1: 4576 30,-6: 1: 12288 30,-5: - 0: 257 + 2: 257 1: 12850 30,-4: - 0: 1 + 2: 1 1: 50 29,-3: 1: 273 21,6: 1: 99 22,6: - 0: 96 + 2: 96 1: 8 23,6: 0: 61440 @@ -1845,8 +1862,14 @@ entities: 1: 8 13,-14: 1: 61440 + -8,-6: + 0: 49344 -7,-6: 0: 63728 + -8,-5: + 1: 34944 + -8,-4: + 1: 34952 -7,-5: 1: 8736 0: 34952 @@ -1862,21 +1885,31 @@ entities: 1: 136 -7,-4: 0: 52424 + 1: 1 -6,-4: 0: 30579 -5,-7: 1: 28976 -5,-5: 0: 4096 + -8,-1: + 0: 3072 + 1: 8 + -8,0: + 0: 12 + -8,-3: + 1: 34952 + -7,-3: + 1: 8720 + 0: 34956 + -8,-2: + 1: 34952 -7,-1: + 1: 3 0: 36744 - 1: 2 -7,0: 0: 15 1: 17408 - -7,-3: - 0: 34956 - 1: 8704 -7,-2: 1: 8738 0: 34952 @@ -1933,14 +1966,14 @@ entities: - volume: 2500 immutable: True moles: {} + - volume: 2500 + temperature: 293.15 + moles: {} - volume: 2500 temperature: 235 moles: Oxygen: 27.225372 Nitrogen: 102.419266 - - volume: 2500 - temperature: 293.15 - moles: {} - volume: 2500 temperature: 293.15 moles: @@ -3520,7 +3553,6 @@ entities: id: DirtHeavy decals: 426: 40,-41 - 427: 40,-40 484: 31,-36 1485: 18,21 1507: 23,23 @@ -3565,7 +3597,6 @@ entities: 4086: 24,-25 4274: 30,-37 4364: 34,-49 - 4461: 38,-37 4776: 28,-35 4989: 15,-37 4990: 18,-31 @@ -3654,7 +3685,6 @@ entities: 4080: 31,-27 4089: 25,-24 4288: 32,-37 - 4361: 41,-40 4365: 35,-48 4366: 34,-45 4777: 25,-32 @@ -3877,6 +3907,8 @@ entities: id: DirtMedium decals: 6544: 70,33 + 7027: 40,-40 + 7028: 41,-40 - node: cleanable: True color: '#FFFFFFFF' @@ -3941,7 +3973,6 @@ entities: 4077: 29,-28 4088: 25,-25 4362: 41,-39 - 4363: 35,-44 4463: 40,-37 4746: 25,-37 4778: 24,-34 @@ -5844,9 +5875,9 @@ entities: id: WarnCornerNW decals: 2248: 54,-14 - 2580: 36,-44 3102: 96,27 4517: 2,-30 + 7029: 36,-44 - node: color: '#FFFFFFFF' id: WarnCornerSE @@ -6184,7 +6215,6 @@ entities: decals: 382: 31,-37 383: 32,-37 - 688: 38,-37 689: 39,-37 690: 40,-37 1882: 12,-8 @@ -7303,6 +7333,18 @@ entities: - 4280 - type: Fixtures fixtures: {} + - uid: 5773 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 12.5,-24.5 + parent: 2 + - type: DeviceList + devices: + - 5772 + - 5771 + - type: Fixtures + fixtures: {} - uid: 6126 components: - type: Transform @@ -8061,6 +8103,18 @@ entities: - 9557 - type: Fixtures fixtures: {} + - uid: 13003 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 45.5,-41.5 + parent: 2 + - type: DeviceList + devices: + - 16089 + - 16086 + - type: Fixtures + fixtures: {} - uid: 13984 components: - type: Transform @@ -8337,6 +8391,17 @@ entities: - - Atmospherics - type: Fixtures fixtures: {} + - uid: 16091 + components: + - type: Transform + pos: 36.5,-41.5 + parent: 2 + - type: DeviceList + devices: + - 16087 + - 16088 + - type: Fixtures + fixtures: {} - proto: AirCanister entities: - uid: 2078 @@ -8405,7 +8470,6 @@ entities: - uid: 613 components: - type: Transform - rot: 1.5707963267948966 rad pos: 41.5,19.5 parent: 2 - uid: 1079 @@ -8433,7 +8497,6 @@ entities: - uid: 2217 components: - type: Transform - rot: 1.5707963267948966 rad pos: 41.5,25.5 parent: 2 - proto: AirlockAssembly @@ -8477,13 +8540,11 @@ entities: - uid: 963 components: - type: Transform - rot: -1.5707963267948966 rad pos: 39.5,-8.5 parent: 2 - uid: 2132 components: - type: Transform - rot: -1.5707963267948966 rad pos: 37.5,-3.5 parent: 2 - proto: AirlockBrigGlassLocked @@ -8655,7 +8716,6 @@ entities: - uid: 14428 components: - type: Transform - rot: 1.5707963267948966 rad pos: 52.5,37.5 parent: 2 - proto: AirlockEngineering @@ -8758,7 +8818,6 @@ entities: - uid: 662 components: - type: Transform - rot: 1.5707963267948966 rad pos: 19.5,-14.5 parent: 2 - uid: 815 @@ -8799,7 +8858,6 @@ entities: - uid: 4012 components: - type: Transform - rot: 3.141592653589793 rad pos: 63.5,19.5 parent: 2 - uid: 5824 @@ -8810,7 +8868,6 @@ entities: - uid: 8500 components: - type: Transform - rot: -1.5707963267948966 rad pos: 61.5,35.5 parent: 2 - uid: 11212 @@ -8833,13 +8890,11 @@ entities: - uid: 142 components: - type: Transform - rot: 1.5707963267948966 rad pos: 9.5,-2.5 parent: 2 - uid: 203 components: - type: Transform - rot: 1.5707963267948966 rad pos: 8.5,-2.5 parent: 2 - proto: AirlockExternal @@ -8903,7 +8958,6 @@ entities: - uid: 270 components: - type: Transform - rot: 1.5707963267948966 rad pos: 73.5,20.5 parent: 2 - type: DeviceLinkSink @@ -8916,7 +8970,6 @@ entities: - uid: 543 components: - type: Transform - rot: 1.5707963267948966 rad pos: 81.5,28.5 parent: 2 - type: DeviceLinkSink @@ -8988,7 +9041,7 @@ entities: invokeCounter: 1 - type: DeviceLinkSource linkedPorts: - 509: + 16053: - - DoorStatus - DoorBolt - uid: 418 @@ -9038,7 +9091,7 @@ entities: invokeCounter: 1 - type: DeviceLinkSource linkedPorts: - 4518: + 16054: - - DoorStatus - DoorBolt - uid: 9283 @@ -9088,7 +9141,7 @@ entities: invokeCounter: 1 - type: DeviceLinkSource linkedPorts: - 13305: + 16052: - - DoorStatus - DoorBolt - uid: 13300 @@ -9107,7 +9160,7 @@ entities: invokeCounter: 1 - type: DeviceLinkSource linkedPorts: - 13294: + 16051: - - DoorStatus - DoorBolt - uid: 14764 @@ -9366,21 +9419,6 @@ entities: - InputB - type: DeviceLinkSink invokeCounter: 1 - - uid: 509 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -27.5,-1.5 - parent: 2 - - type: DeviceLinkSource - linkedPorts: - 8663: - - - DoorStatus - - InputA - - - DockStatus - - InputB - - type: DeviceLinkSink - invokeCounter: 1 - uid: 607 components: - type: Transform @@ -9396,21 +9434,6 @@ entities: - InputB - type: DeviceLinkSink invokeCounter: 1 - - uid: 4518 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -27.5,0.5 - parent: 2 - - type: DeviceLinkSource - linkedPorts: - 6639: - - - DoorStatus - - InputA - - - DockStatus - - InputB - - type: DeviceLinkSink - invokeCounter: 1 - uid: 9303 components: - type: Transform @@ -9441,11 +9464,11 @@ entities: - InputB - type: DeviceLinkSink invokeCounter: 1 - - uid: 13294 + - uid: 16051 components: - type: Transform rot: -1.5707963267948966 rad - pos: -27.5,-22.5 + pos: -29.5,-22.5 parent: 2 - type: DeviceLinkSource linkedPorts: @@ -9456,11 +9479,11 @@ entities: - InputB - type: DeviceLinkSink invokeCounter: 1 - - uid: 13305 + - uid: 16052 components: - type: Transform rot: -1.5707963267948966 rad - pos: -27.5,-20.5 + pos: -29.5,-20.5 parent: 2 - type: DeviceLinkSource linkedPorts: @@ -9471,6 +9494,36 @@ entities: - InputB - type: DeviceLinkSink invokeCounter: 1 + - uid: 16053 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -29.5,-1.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 8663: + - - DoorStatus + - InputA + - - DockStatus + - InputB + - type: DeviceLinkSink + invokeCounter: 1 + - uid: 16054 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -29.5,0.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 6639: + - - DoorStatus + - InputA + - - DockStatus + - InputB + - type: DeviceLinkSink + invokeCounter: 1 - proto: AirlockExternalLocked entities: - uid: 1369 @@ -9797,13 +9850,11 @@ entities: - uid: 2338 components: - type: Transform - rot: -1.5707963267948966 rad pos: 48.5,37.5 parent: 2 - uid: 3394 components: - type: Transform - rot: -1.5707963267948966 rad pos: 45.5,41.5 parent: 2 - proto: AirlockHydroGlassLocked @@ -9900,7 +9951,6 @@ entities: - uid: 205 components: - type: Transform - rot: 1.5707963267948966 rad pos: 9.5,-10.5 parent: 2 - proto: AirlockMaintEngiLocked @@ -9964,7 +10014,6 @@ entities: - uid: 653 components: - type: Transform - rot: 3.141592653589793 rad pos: 87.5,-1.5 parent: 2 - uid: 1110 @@ -10095,13 +10144,11 @@ entities: - uid: 7822 components: - type: Transform - rot: 3.141592653589793 rad pos: 53.5,46.5 parent: 2 - uid: 9444 components: - type: Transform - rot: 3.141592653589793 rad pos: 68.5,39.5 parent: 2 - uid: 9609 @@ -10117,7 +10164,6 @@ entities: - uid: 13587 components: - type: Transform - rot: -1.5707963267948966 rad pos: 30.5,34.5 parent: 2 - uid: 13769 @@ -10211,7 +10257,6 @@ entities: - uid: 14626 components: - type: Transform - rot: -1.5707963267948966 rad pos: 49.5,29.5 parent: 2 - proto: AirlockMaintTheatreLocked @@ -10812,7 +10857,6 @@ entities: - uid: 12544 components: - type: Transform - rot: -1.5707963267948966 rad pos: 43.5,42.5 parent: 2 - uid: 12563 @@ -11026,7 +11070,6 @@ entities: - uid: 15468 components: - type: Transform - rot: -1.5707963267948966 rad pos: 51.5,36.5 parent: 2 - type: DeviceNetwork @@ -12228,16 +12271,66 @@ entities: - type: Transform pos: 50.5,-27.5 parent: 2 + - uid: 5310 + components: + - type: Transform + pos: 87.5,47.5 + parent: 2 - uid: 8067 components: - type: Transform pos: 4.5,38.5 parent: 2 + - uid: 8506 + components: + - type: Transform + pos: 74.5,30.5 + parent: 2 + - uid: 8532 + components: + - type: Transform + pos: 75.5,30.5 + parent: 2 + - uid: 9304 + components: + - type: Transform + pos: 76.5,30.5 + parent: 2 + - uid: 9334 + components: + - type: Transform + pos: 77.5,30.5 + parent: 2 + - uid: 10425 + components: + - type: Transform + pos: 77.5,34.5 + parent: 2 + - uid: 10606 + components: + - type: Transform + pos: 76.5,34.5 + parent: 2 + - uid: 11946 + components: + - type: Transform + pos: 75.5,34.5 + parent: 2 - uid: 13731 components: - type: Transform pos: 4.5,40.5 parent: 2 + - uid: 14337 + components: + - type: Transform + pos: 74.5,34.5 + parent: 2 + - uid: 14566 + components: + - type: Transform + pos: 77.5,43.5 + parent: 2 - uid: 14660 components: - type: Transform @@ -12258,6 +12351,11 @@ entities: - type: Transform pos: 6.5,39.5 parent: 2 + - uid: 14767 + components: + - type: Transform + pos: 77.5,42.5 + parent: 2 - uid: 14989 components: - type: Transform @@ -12433,6 +12531,1466 @@ entities: - type: Transform pos: 49.5,-47.5 parent: 2 + - uid: 16093 + components: + - type: Transform + pos: 77.5,41.5 + parent: 2 + - uid: 16094 + components: + - type: Transform + pos: 77.5,40.5 + parent: 2 + - uid: 16095 + components: + - type: Transform + pos: 79.5,40.5 + parent: 2 + - uid: 16096 + components: + - type: Transform + pos: 79.5,41.5 + parent: 2 + - uid: 16097 + components: + - type: Transform + pos: 79.5,42.5 + parent: 2 + - uid: 16098 + components: + - type: Transform + pos: 79.5,43.5 + parent: 2 + - uid: 16099 + components: + - type: Transform + pos: 81.5,43.5 + parent: 2 + - uid: 16100 + components: + - type: Transform + pos: 81.5,42.5 + parent: 2 + - uid: 16101 + components: + - type: Transform + pos: 81.5,41.5 + parent: 2 + - uid: 16102 + components: + - type: Transform + pos: 81.5,40.5 + parent: 2 + - uid: 16103 + components: + - type: Transform + pos: 83.5,40.5 + parent: 2 + - uid: 16104 + components: + - type: Transform + pos: 83.5,41.5 + parent: 2 + - uid: 16105 + components: + - type: Transform + pos: 83.5,43.5 + parent: 2 + - uid: 16106 + components: + - type: Transform + pos: 83.5,42.5 + parent: 2 + - uid: 16107 + components: + - type: Transform + pos: 85.5,43.5 + parent: 2 + - uid: 16108 + components: + - type: Transform + pos: 85.5,42.5 + parent: 2 + - uid: 16109 + components: + - type: Transform + pos: 85.5,41.5 + parent: 2 + - uid: 16110 + components: + - type: Transform + pos: 85.5,40.5 + parent: 2 + - uid: 16111 + components: + - type: Transform + pos: 87.5,40.5 + parent: 2 + - uid: 16112 + components: + - type: Transform + pos: 87.5,41.5 + parent: 2 + - uid: 16113 + components: + - type: Transform + pos: 87.5,42.5 + parent: 2 + - uid: 16114 + components: + - type: Transform + pos: 87.5,43.5 + parent: 2 + - uid: 16115 + components: + - type: Transform + pos: 87.5,48.5 + parent: 2 + - uid: 16116 + components: + - type: Transform + pos: 87.5,49.5 + parent: 2 + - uid: 16117 + components: + - type: Transform + pos: 87.5,50.5 + parent: 2 + - uid: 16118 + components: + - type: Transform + pos: 85.5,50.5 + parent: 2 + - uid: 16119 + components: + - type: Transform + pos: 85.5,49.5 + parent: 2 + - uid: 16120 + components: + - type: Transform + pos: 85.5,48.5 + parent: 2 + - uid: 16121 + components: + - type: Transform + pos: 85.5,47.5 + parent: 2 + - uid: 16122 + components: + - type: Transform + pos: 83.5,47.5 + parent: 2 + - uid: 16123 + components: + - type: Transform + pos: 83.5,49.5 + parent: 2 + - uid: 16124 + components: + - type: Transform + pos: 83.5,50.5 + parent: 2 + - uid: 16125 + components: + - type: Transform + pos: 83.5,48.5 + parent: 2 + - uid: 16126 + components: + - type: Transform + pos: 81.5,50.5 + parent: 2 + - uid: 16127 + components: + - type: Transform + pos: 81.5,49.5 + parent: 2 + - uid: 16128 + components: + - type: Transform + pos: 81.5,48.5 + parent: 2 + - uid: 16129 + components: + - type: Transform + pos: 81.5,47.5 + parent: 2 + - uid: 16130 + components: + - type: Transform + pos: 79.5,47.5 + parent: 2 + - uid: 16131 + components: + - type: Transform + pos: 79.5,48.5 + parent: 2 + - uid: 16132 + components: + - type: Transform + pos: 79.5,49.5 + parent: 2 + - uid: 16133 + components: + - type: Transform + pos: 79.5,50.5 + parent: 2 + - uid: 16134 + components: + - type: Transform + pos: 77.5,50.5 + parent: 2 + - uid: 16135 + components: + - type: Transform + pos: 77.5,49.5 + parent: 2 + - uid: 16136 + components: + - type: Transform + pos: 77.5,48.5 + parent: 2 + - uid: 16137 + components: + - type: Transform + pos: 77.5,47.5 + parent: 2 + - uid: 16138 + components: + - type: Transform + pos: 14.5,-53.5 + parent: 2 + - uid: 16139 + components: + - type: Transform + pos: -13.5,-30.5 + parent: 2 + - uid: 16140 + components: + - type: Transform + pos: -13.5,-31.5 + parent: 2 + - uid: 16141 + components: + - type: Transform + pos: -13.5,-32.5 + parent: 2 + - uid: 16142 + components: + - type: Transform + pos: -13.5,-33.5 + parent: 2 + - uid: 16143 + components: + - type: Transform + pos: -11.5,-32.5 + parent: 2 + - uid: 16144 + components: + - type: Transform + pos: -11.5,-31.5 + parent: 2 + - uid: 16145 + components: + - type: Transform + pos: -11.5,-30.5 + parent: 2 + - uid: 16146 + components: + - type: Transform + pos: -11.5,-33.5 + parent: 2 + - uid: 16147 + components: + - type: Transform + pos: -9.5,-30.5 + parent: 2 + - uid: 16148 + components: + - type: Transform + pos: -9.5,-31.5 + parent: 2 + - uid: 16149 + components: + - type: Transform + pos: -9.5,-32.5 + parent: 2 + - uid: 16150 + components: + - type: Transform + pos: -9.5,-33.5 + parent: 2 + - uid: 16151 + components: + - type: Transform + pos: -7.5,-33.5 + parent: 2 + - uid: 16152 + components: + - type: Transform + pos: -7.5,-32.5 + parent: 2 + - uid: 16153 + components: + - type: Transform + pos: -7.5,-31.5 + parent: 2 + - uid: 16154 + components: + - type: Transform + pos: -7.5,-30.5 + parent: 2 + - uid: 16155 + components: + - type: Transform + pos: -5.5,-30.5 + parent: 2 + - uid: 16156 + components: + - type: Transform + pos: -5.5,-31.5 + parent: 2 + - uid: 16157 + components: + - type: Transform + pos: -5.5,-32.5 + parent: 2 + - uid: 16158 + components: + - type: Transform + pos: -5.5,-33.5 + parent: 2 + - uid: 16159 + components: + - type: Transform + pos: -3.5,-33.5 + parent: 2 + - uid: 16160 + components: + - type: Transform + pos: -3.5,-32.5 + parent: 2 + - uid: 16161 + components: + - type: Transform + pos: -3.5,-31.5 + parent: 2 + - uid: 16162 + components: + - type: Transform + pos: -3.5,-30.5 + parent: 2 + - uid: 16163 + components: + - type: Transform + pos: -3.5,-37.5 + parent: 2 + - uid: 16164 + components: + - type: Transform + pos: -3.5,-38.5 + parent: 2 + - uid: 16165 + components: + - type: Transform + pos: -3.5,-40.5 + parent: 2 + - uid: 16166 + components: + - type: Transform + pos: -3.5,-39.5 + parent: 2 + - uid: 16167 + components: + - type: Transform + pos: -5.5,-40.5 + parent: 2 + - uid: 16168 + components: + - type: Transform + pos: -5.5,-39.5 + parent: 2 + - uid: 16169 + components: + - type: Transform + pos: -5.5,-38.5 + parent: 2 + - uid: 16170 + components: + - type: Transform + pos: -5.5,-37.5 + parent: 2 + - uid: 16171 + components: + - type: Transform + pos: -7.5,-37.5 + parent: 2 + - uid: 16172 + components: + - type: Transform + pos: -7.5,-38.5 + parent: 2 + - uid: 16173 + components: + - type: Transform + pos: -7.5,-39.5 + parent: 2 + - uid: 16174 + components: + - type: Transform + pos: -7.5,-40.5 + parent: 2 + - uid: 16175 + components: + - type: Transform + pos: -9.5,-40.5 + parent: 2 + - uid: 16176 + components: + - type: Transform + pos: -9.5,-39.5 + parent: 2 + - uid: 16177 + components: + - type: Transform + pos: -9.5,-38.5 + parent: 2 + - uid: 16178 + components: + - type: Transform + pos: -9.5,-37.5 + parent: 2 + - uid: 16179 + components: + - type: Transform + pos: -11.5,-37.5 + parent: 2 + - uid: 16180 + components: + - type: Transform + pos: -11.5,-38.5 + parent: 2 + - uid: 16181 + components: + - type: Transform + pos: -11.5,-39.5 + parent: 2 + - uid: 16182 + components: + - type: Transform + pos: -11.5,-40.5 + parent: 2 + - uid: 16183 + components: + - type: Transform + pos: -13.5,-40.5 + parent: 2 + - uid: 16184 + components: + - type: Transform + pos: -13.5,-39.5 + parent: 2 + - uid: 16185 + components: + - type: Transform + pos: -13.5,-38.5 + parent: 2 + - uid: 16186 + components: + - type: Transform + pos: -13.5,-37.5 + parent: 2 + - uid: 16187 + components: + - type: Transform + pos: 16.5,-59.5 + parent: 2 + - uid: 16188 + components: + - type: Transform + pos: 17.5,-59.5 + parent: 2 + - uid: 16189 + components: + - type: Transform + pos: 18.5,-59.5 + parent: 2 + - uid: 16190 + components: + - type: Transform + pos: 19.5,-59.5 + parent: 2 + - uid: 16191 + components: + - type: Transform + pos: 14.5,-59.5 + parent: 2 + - uid: 16192 + components: + - type: Transform + pos: 13.5,-59.5 + parent: 2 + - uid: 16193 + components: + - type: Transform + pos: 23.5,-59.5 + parent: 2 + - uid: 16194 + components: + - type: Transform + pos: 24.5,-59.5 + parent: 2 + - uid: 16195 + components: + - type: Transform + pos: 25.5,-59.5 + parent: 2 + - uid: 16196 + components: + - type: Transform + pos: 27.5,-59.5 + parent: 2 + - uid: 16197 + components: + - type: Transform + pos: 28.5,-59.5 + parent: 2 + - uid: 16198 + components: + - type: Transform + pos: 29.5,-58.5 + parent: 2 + - uid: 16199 + components: + - type: Transform + pos: 29.5,-57.5 + parent: 2 + - uid: 16200 + components: + - type: Transform + pos: 28.5,-58.5 + parent: 2 + - uid: 16201 + components: + - type: Transform + pos: 28.5,-57.5 + parent: 2 + - uid: 16202 + components: + - type: Transform + pos: 27.5,-58.5 + parent: 2 + - uid: 16203 + components: + - type: Transform + pos: 27.5,-57.5 + parent: 2 + - uid: 16204 + components: + - type: Transform + pos: 26.5,-58.5 + parent: 2 + - uid: 16205 + components: + - type: Transform + pos: 26.5,-57.5 + parent: 2 + - uid: 16206 + components: + - type: Transform + pos: 25.5,-58.5 + parent: 2 + - uid: 16207 + components: + - type: Transform + pos: 25.5,-57.5 + parent: 2 + - uid: 16208 + components: + - type: Transform + pos: 24.5,-58.5 + parent: 2 + - uid: 16209 + components: + - type: Transform + pos: 24.5,-57.5 + parent: 2 + - uid: 16210 + components: + - type: Transform + pos: 23.5,-58.5 + parent: 2 + - uid: 16211 + components: + - type: Transform + pos: 23.5,-57.5 + parent: 2 + - uid: 16212 + components: + - type: Transform + pos: 22.5,-58.5 + parent: 2 + - uid: 16213 + components: + - type: Transform + pos: 22.5,-57.5 + parent: 2 + - uid: 16214 + components: + - type: Transform + pos: 21.5,-58.5 + parent: 2 + - uid: 16215 + components: + - type: Transform + pos: 21.5,-57.5 + parent: 2 + - uid: 16216 + components: + - type: Transform + pos: 20.5,-58.5 + parent: 2 + - uid: 16217 + components: + - type: Transform + pos: 20.5,-57.5 + parent: 2 + - uid: 16218 + components: + - type: Transform + pos: 19.5,-58.5 + parent: 2 + - uid: 16219 + components: + - type: Transform + pos: 19.5,-57.5 + parent: 2 + - uid: 16220 + components: + - type: Transform + pos: 18.5,-58.5 + parent: 2 + - uid: 16221 + components: + - type: Transform + pos: 18.5,-57.5 + parent: 2 + - uid: 16222 + components: + - type: Transform + pos: 17.5,-58.5 + parent: 2 + - uid: 16223 + components: + - type: Transform + pos: 17.5,-57.5 + parent: 2 + - uid: 16224 + components: + - type: Transform + pos: 16.5,-58.5 + parent: 2 + - uid: 16225 + components: + - type: Transform + pos: 16.5,-57.5 + parent: 2 + - uid: 16226 + components: + - type: Transform + pos: 15.5,-58.5 + parent: 2 + - uid: 16227 + components: + - type: Transform + pos: 15.5,-57.5 + parent: 2 + - uid: 16228 + components: + - type: Transform + pos: 14.5,-58.5 + parent: 2 + - uid: 16229 + components: + - type: Transform + pos: 14.5,-57.5 + parent: 2 + - uid: 16230 + components: + - type: Transform + pos: 13.5,-58.5 + parent: 2 + - uid: 16231 + components: + - type: Transform + pos: 13.5,-57.5 + parent: 2 + - uid: 16232 + components: + - type: Transform + pos: 13.5,-56.5 + parent: 2 + - uid: 16233 + components: + - type: Transform + pos: 13.5,-55.5 + parent: 2 + - uid: 16234 + components: + - type: Transform + pos: 13.5,-54.5 + parent: 2 + - uid: 16235 + components: + - type: Transform + pos: 13.5,-53.5 + parent: 2 + - uid: 16236 + components: + - type: Transform + pos: 13.5,-52.5 + parent: 2 + - uid: 16237 + components: + - type: Transform + pos: 13.5,-51.5 + parent: 2 + - uid: 16238 + components: + - type: Transform + pos: 13.5,-49.5 + parent: 2 + - uid: 16239 + components: + - type: Transform + pos: 13.5,-48.5 + parent: 2 + - uid: 16240 + components: + - type: Transform + pos: 13.5,-47.5 + parent: 2 + - uid: 16241 + components: + - type: Transform + pos: 13.5,-46.5 + parent: 2 + - uid: 16242 + components: + - type: Transform + pos: 13.5,-45.5 + parent: 2 + - uid: 16243 + components: + - type: Transform + pos: 13.5,-44.5 + parent: 2 + - uid: 16244 + components: + - type: Transform + pos: 13.5,-50.5 + parent: 2 + - uid: 16245 + components: + - type: Transform + pos: 14.5,-44.5 + parent: 2 + - uid: 16246 + components: + - type: Transform + pos: 14.5,-45.5 + parent: 2 + - uid: 16247 + components: + - type: Transform + pos: 15.5,-44.5 + parent: 2 + - uid: 16248 + components: + - type: Transform + pos: 15.5,-45.5 + parent: 2 + - uid: 16249 + components: + - type: Transform + pos: 16.5,-44.5 + parent: 2 + - uid: 16250 + components: + - type: Transform + pos: 16.5,-45.5 + parent: 2 + - uid: 16251 + components: + - type: Transform + pos: 17.5,-44.5 + parent: 2 + - uid: 16252 + components: + - type: Transform + pos: 17.5,-45.5 + parent: 2 + - uid: 16253 + components: + - type: Transform + pos: 18.5,-45.5 + parent: 2 + - uid: 16254 + components: + - type: Transform + pos: 19.5,-45.5 + parent: 2 + - uid: 16255 + components: + - type: Transform + pos: 20.5,-45.5 + parent: 2 + - uid: 16256 + components: + - type: Transform + pos: 21.5,-45.5 + parent: 2 + - uid: 16257 + components: + - type: Transform + pos: 22.5,-45.5 + parent: 2 + - uid: 16258 + components: + - type: Transform + pos: 23.5,-45.5 + parent: 2 + - uid: 16259 + components: + - type: Transform + pos: 24.5,-45.5 + parent: 2 + - uid: 16260 + components: + - type: Transform + pos: 25.5,-45.5 + parent: 2 + - uid: 16261 + components: + - type: Transform + pos: 26.5,-45.5 + parent: 2 + - uid: 16262 + components: + - type: Transform + pos: 25.5,-44.5 + parent: 2 + - uid: 16263 + components: + - type: Transform + pos: 26.5,-44.5 + parent: 2 + - uid: 16264 + components: + - type: Transform + pos: 25.5,-47.5 + parent: 2 + - uid: 16265 + components: + - type: Transform + pos: 21.5,-47.5 + parent: 2 + - uid: 16266 + components: + - type: Transform + pos: 17.5,-47.5 + parent: 2 + - uid: 16267 + components: + - type: Transform + pos: 14.5,-47.5 + parent: 2 + - uid: 16268 + components: + - type: Transform + pos: 14.5,-49.5 + parent: 2 + - uid: 16269 + components: + - type: Transform + pos: 17.5,-51.5 + parent: 2 + - uid: 16270 + components: + - type: Transform + pos: 21.5,-51.5 + parent: 2 + - uid: 16271 + components: + - type: Transform + pos: 25.5,-51.5 + parent: 2 + - uid: 16272 + components: + - type: Transform + pos: 25.5,-55.5 + parent: 2 + - uid: 16273 + components: + - type: Transform + pos: 21.5,-55.5 + parent: 2 + - uid: 16274 + components: + - type: Transform + pos: 17.5,-55.5 + parent: 2 + - uid: 16275 + components: + - type: Transform + pos: 14.5,-55.5 + parent: 2 + - uid: 16276 + components: + - type: Transform + pos: 92.5,6.5 + parent: 2 + - uid: 16277 + components: + - type: Transform + pos: 28.5,-55.5 + parent: 2 + - uid: 16278 + components: + - type: Transform + pos: 29.5,-56.5 + parent: 2 + - uid: 16279 + components: + - type: Transform + pos: 29.5,-55.5 + parent: 2 + - uid: 16280 + components: + - type: Transform + pos: 29.5,-54.5 + parent: 2 + - uid: 16281 + components: + - type: Transform + pos: 29.5,-53.5 + parent: 2 + - uid: 16282 + components: + - type: Transform + pos: 29.5,-52.5 + parent: 2 + - uid: 16283 + components: + - type: Transform + pos: 29.5,-51.5 + parent: 2 + - uid: 16284 + components: + - type: Transform + pos: 29.5,-50.5 + parent: 2 + - uid: 16285 + components: + - type: Transform + pos: 29.5,-49.5 + parent: 2 + - uid: 16286 + components: + - type: Transform + pos: 29.5,-48.5 + parent: 2 + - uid: 16287 + components: + - type: Transform + pos: 29.5,-47.5 + parent: 2 + - uid: 16288 + components: + - type: Transform + pos: 29.5,-46.5 + parent: 2 + - uid: 16289 + components: + - type: Transform + pos: 28.5,-47.5 + parent: 2 + - uid: 16290 + components: + - type: Transform + pos: 28.5,-49.5 + parent: 2 + - uid: 16291 + components: + - type: Transform + pos: 28.5,-50.5 + parent: 2 + - uid: 16292 + components: + - type: Transform + pos: 28.5,-51.5 + parent: 2 + - uid: 16293 + components: + - type: Transform + pos: 28.5,-52.5 + parent: 2 + - uid: 16294 + components: + - type: Transform + pos: 28.5,-53.5 + parent: 2 + - uid: 16295 + components: + - type: Transform + pos: 32.5,-51.5 + parent: 2 + - uid: 16296 + components: + - type: Transform + pos: 32.5,-52.5 + parent: 2 + - uid: 16297 + components: + - type: Transform + pos: 32.5,-53.5 + parent: 2 + - uid: 16298 + components: + - type: Transform + pos: 32.5,-54.5 + parent: 2 + - uid: 16299 + components: + - type: Transform + pos: 32.5,-55.5 + parent: 2 + - uid: 16300 + components: + - type: Transform + pos: 33.5,-51.5 + parent: 2 + - uid: 16301 + components: + - type: Transform + pos: 33.5,-52.5 + parent: 2 + - uid: 16302 + components: + - type: Transform + pos: 33.5,-53.5 + parent: 2 + - uid: 16303 + components: + - type: Transform + pos: 33.5,-54.5 + parent: 2 + - uid: 16304 + components: + - type: Transform + pos: 33.5,-55.5 + parent: 2 + - uid: 16305 + components: + - type: Transform + pos: 34.5,-52.5 + parent: 2 + - uid: 16306 + components: + - type: Transform + pos: 34.5,-51.5 + parent: 2 + - uid: 16307 + components: + - type: Transform + pos: 34.5,-53.5 + parent: 2 + - uid: 16308 + components: + - type: Transform + pos: 34.5,-54.5 + parent: 2 + - uid: 16309 + components: + - type: Transform + pos: 34.5,-55.5 + parent: 2 + - uid: 16310 + components: + - type: Transform + pos: 35.5,-51.5 + parent: 2 + - uid: 16311 + components: + - type: Transform + pos: 35.5,-52.5 + parent: 2 + - uid: 16312 + components: + - type: Transform + pos: 35.5,-53.5 + parent: 2 + - uid: 16313 + components: + - type: Transform + pos: 35.5,-54.5 + parent: 2 + - uid: 16314 + components: + - type: Transform + pos: 35.5,-55.5 + parent: 2 + - uid: 16315 + components: + - type: Transform + pos: 36.5,-54.5 + parent: 2 + - uid: 16316 + components: + - type: Transform + pos: 36.5,-53.5 + parent: 2 + - uid: 16317 + components: + - type: Transform + pos: 33.5,-56.5 + parent: 2 + - uid: 16318 + components: + - type: Transform + pos: 32.5,-56.5 + parent: 2 + - uid: 16319 + components: + - type: Transform + pos: 36.5,-52.5 + parent: 2 + - uid: 16320 + components: + - type: Transform + pos: 38.5,-51.5 + parent: 2 + - uid: 16321 + components: + - type: Transform + pos: 38.5,-52.5 + parent: 2 + - uid: 16322 + components: + - type: Transform + pos: 38.5,-55.5 + parent: 2 + - uid: 16323 + components: + - type: Transform + pos: 38.5,-56.5 + parent: 2 + - uid: 16324 + components: + - type: Transform + pos: 37.5,-56.5 + parent: 2 + - uid: 16325 + components: + - type: Transform + pos: 37.5,-57.5 + parent: 2 + - uid: 16326 + components: + - type: Transform + pos: 36.5,-57.5 + parent: 2 + - uid: 16327 + components: + - type: Transform + pos: 35.5,-57.5 + parent: 2 + - uid: 16328 + components: + - type: Transform + pos: 111.5,-24.5 + parent: 2 + - uid: 16329 + components: + - type: Transform + pos: 111.5,-23.5 + parent: 2 + - uid: 16330 + components: + - type: Transform + pos: 111.5,-22.5 + parent: 2 + - uid: 16331 + components: + - type: Transform + pos: 111.5,-21.5 + parent: 2 + - uid: 16332 + components: + - type: Transform + pos: 113.5,-21.5 + parent: 2 + - uid: 16333 + components: + - type: Transform + pos: 113.5,-22.5 + parent: 2 + - uid: 16334 + components: + - type: Transform + pos: 113.5,-23.5 + parent: 2 + - uid: 16335 + components: + - type: Transform + pos: 113.5,-24.5 + parent: 2 + - uid: 16336 + components: + - type: Transform + pos: 115.5,-24.5 + parent: 2 + - uid: 16337 + components: + - type: Transform + pos: 115.5,-23.5 + parent: 2 + - uid: 16338 + components: + - type: Transform + pos: 115.5,-21.5 + parent: 2 + - uid: 16339 + components: + - type: Transform + pos: 115.5,-22.5 + parent: 2 + - uid: 16340 + components: + - type: Transform + pos: 117.5,-19.5 + parent: 2 + - uid: 16341 + components: + - type: Transform + pos: 118.5,-19.5 + parent: 2 + - uid: 16342 + components: + - type: Transform + pos: 119.5,-19.5 + parent: 2 + - uid: 16343 + components: + - type: Transform + pos: 120.5,-19.5 + parent: 2 + - uid: 16344 + components: + - type: Transform + pos: 120.5,-17.5 + parent: 2 + - uid: 16345 + components: + - type: Transform + pos: 119.5,-17.5 + parent: 2 + - uid: 16346 + components: + - type: Transform + pos: 118.5,-17.5 + parent: 2 + - uid: 16347 + components: + - type: Transform + pos: 117.5,-17.5 + parent: 2 + - uid: 16348 + components: + - type: Transform + pos: 117.5,-15.5 + parent: 2 + - uid: 16349 + components: + - type: Transform + pos: 118.5,-15.5 + parent: 2 + - uid: 16350 + components: + - type: Transform + pos: 119.5,-15.5 + parent: 2 + - uid: 16351 + components: + - type: Transform + pos: 120.5,-15.5 + parent: 2 + - uid: 16352 + components: + - type: Transform + pos: 115.5,-13.5 + parent: 2 + - uid: 16353 + components: + - type: Transform + pos: 115.5,-12.5 + parent: 2 + - uid: 16354 + components: + - type: Transform + pos: 115.5,-11.5 + parent: 2 + - uid: 16355 + components: + - type: Transform + pos: 115.5,-10.5 + parent: 2 + - uid: 16356 + components: + - type: Transform + pos: 113.5,-10.5 + parent: 2 + - uid: 16357 + components: + - type: Transform + pos: 113.5,-11.5 + parent: 2 + - uid: 16358 + components: + - type: Transform + pos: 113.5,-12.5 + parent: 2 + - uid: 16359 + components: + - type: Transform + pos: 113.5,-13.5 + parent: 2 + - uid: 16360 + components: + - type: Transform + pos: 111.5,-13.5 + parent: 2 + - uid: 16361 + components: + - type: Transform + pos: 111.5,-12.5 + parent: 2 + - uid: 16362 + components: + - type: Transform + pos: 111.5,-10.5 + parent: 2 + - uid: 16363 + components: + - type: Transform + pos: 111.5,-11.5 + parent: 2 + - uid: 16364 + components: + - type: Transform + pos: 92.5,2.5 + parent: 2 + - uid: 16365 + components: + - type: Transform + pos: 89.5,25.5 + parent: 2 + - uid: 16366 + components: + - type: Transform + pos: 76.5,23.5 + parent: 2 + - uid: 16367 + components: + - type: Transform + pos: 77.5,23.5 + parent: 2 + - uid: 16368 + components: + - type: Transform + pos: 78.5,23.5 + parent: 2 + - uid: 16369 + components: + - type: Transform + pos: 79.5,23.5 + parent: 2 + - uid: 16370 + components: + - type: Transform + pos: 79.5,24.5 + parent: 2 + - uid: 16371 + components: + - type: Transform + pos: 80.5,24.5 + parent: 2 + - uid: 16372 + components: + - type: Transform + pos: 81.5,24.5 + parent: 2 + - uid: 16373 + components: + - type: Transform + pos: 81.5,25.5 + parent: 2 + - uid: 16374 + components: + - type: Transform + pos: 79.5,25.5 + parent: 2 + - uid: 16375 + components: + - type: Transform + pos: 79.5,26.5 + parent: 2 + - uid: 16376 + components: + - type: Transform + pos: 79.5,27.5 + parent: 2 + - uid: 16377 + components: + - type: Transform + pos: 78.5,26.5 + parent: 2 + - uid: 16378 + components: + - type: Transform + pos: 77.5,26.5 + parent: 2 + - uid: 16379 + components: + - type: Transform + pos: 76.5,26.5 + parent: 2 + - uid: 16380 + components: + - type: Transform + pos: 75.5,26.5 + parent: 2 + - uid: 16381 + components: + - type: Transform + pos: 74.5,26.5 + parent: 2 + - uid: 16382 + components: + - type: Transform + pos: 90.5,35.5 + parent: 2 + - uid: 16383 + components: + - type: Transform + pos: 89.5,35.5 + parent: 2 + - uid: 16384 + components: + - type: Transform + pos: 90.5,25.5 + parent: 2 - proto: AtmosFixFreezerMarker entities: - uid: 6535 @@ -12759,11 +14317,6 @@ entities: - type: Transform pos: 77.5,-12.5 parent: 2 - - uid: 8434 - components: - - type: Transform - pos: 59.5,-4.5 - parent: 2 - uid: 8669 components: - type: Transform @@ -12854,11 +14407,6 @@ entities: - type: Transform pos: 43.5,43.5 parent: 2 - - uid: 15388 - components: - - type: Transform - pos: 62.5,-4.5 - parent: 2 - proto: BedsheetCaptain entities: - uid: 14854 @@ -13282,6 +14830,14 @@ entities: - type: Transform pos: 10.5,7.5 parent: 2 + - uid: 3237 + components: + - type: Transform + anchored: False + pos: 58.5,37.5 + parent: 2 + - type: Physics + bodyType: Dynamic - uid: 5100 components: - type: Transform @@ -13292,14 +14848,6 @@ entities: - type: Transform pos: 41.5,22.5 parent: 2 - - uid: 11946 - components: - - type: Transform - anchored: False - pos: 58.5,37.5 - parent: 2 - - type: Physics - bodyType: Dynamic - proto: BoozeDispenser entities: - uid: 2921 @@ -13888,6 +15436,11 @@ entities: - type: Transform pos: -25.5,-1.5 parent: 2 + - uid: 509 + components: + - type: Transform + pos: -28.5,0.5 + parent: 2 - uid: 575 components: - type: Transform @@ -14058,6 +15611,11 @@ entities: - type: Transform pos: 74.5,10.5 parent: 2 + - uid: 1456 + components: + - type: Transform + pos: -27.5,0.5 + parent: 2 - uid: 1551 components: - type: Transform @@ -14073,6 +15631,11 @@ entities: - type: Transform pos: 39.5,34.5 parent: 2 + - uid: 1633 + components: + - type: Transform + pos: -28.5,-1.5 + parent: 2 - uid: 1699 components: - type: Transform @@ -14983,6 +16546,11 @@ entities: - type: Transform pos: 14.5,33.5 parent: 2 + - uid: 4518 + components: + - type: Transform + pos: -27.5,-1.5 + parent: 2 - uid: 4648 components: - type: Transform @@ -16013,11 +17581,31 @@ entities: - type: Transform pos: 19.5,-18.5 parent: 2 + - uid: 5699 + components: + - type: Transform + pos: 64.5,15.5 + parent: 2 + - uid: 5700 + components: + - type: Transform + pos: 64.5,19.5 + parent: 2 - uid: 5704 components: - type: Transform pos: 41.5,34.5 parent: 2 + - uid: 5777 + components: + - type: Transform + pos: 64.5,16.5 + parent: 2 + - uid: 5778 + components: + - type: Transform + pos: 64.5,17.5 + parent: 2 - uid: 5889 components: - type: Transform @@ -16528,6 +18116,11 @@ entities: - type: Transform pos: 29.5,-55.5 parent: 2 + - uid: 6868 + components: + - type: Transform + pos: 64.5,18.5 + parent: 2 - uid: 6869 components: - type: Transform @@ -22603,6 +24196,11 @@ entities: - type: Transform pos: -21.5,-9.5 parent: 2 + - uid: 13331 + components: + - type: Transform + pos: 77.5,-15.5 + parent: 2 - uid: 13438 components: - type: Transform @@ -23553,6 +25151,11 @@ entities: - type: Transform pos: 8.5,21.5 parent: 2 + - uid: 14954 + components: + - type: Transform + pos: 76.5,-15.5 + parent: 2 - uid: 14962 components: - type: Transform @@ -23643,6 +25246,11 @@ entities: - type: Transform pos: 49.5,-44.5 parent: 2 + - uid: 15388 + components: + - type: Transform + pos: 75.5,-15.5 + parent: 2 - uid: 15402 components: - type: Transform @@ -23798,6 +25406,16 @@ entities: - type: Transform pos: 62.5,45.5 parent: 2 + - uid: 15797 + components: + - type: Transform + pos: 74.5,-15.5 + parent: 2 + - uid: 15798 + components: + - type: Transform + pos: 74.5,-16.5 + parent: 2 - uid: 15814 components: - type: Transform @@ -23983,6 +25601,41 @@ entities: - type: Transform pos: 48.5,-48.5 parent: 2 + - uid: 16016 + components: + - type: Transform + pos: 74.5,-17.5 + parent: 2 + - uid: 16017 + components: + - type: Transform + pos: 74.5,-18.5 + parent: 2 + - uid: 16018 + components: + - type: Transform + pos: 74.5,-19.5 + parent: 2 + - uid: 16055 + components: + - type: Transform + pos: -27.5,-20.5 + parent: 2 + - uid: 16056 + components: + - type: Transform + pos: -28.5,-20.5 + parent: 2 + - uid: 16057 + components: + - type: Transform + pos: -27.5,-22.5 + parent: 2 + - uid: 16058 + components: + - type: Transform + pos: -28.5,-22.5 + parent: 2 - proto: CableApcStack entities: - uid: 5627 @@ -24005,6 +25658,11 @@ entities: - type: Transform pos: 44.968018,9.688091 parent: 2 + - uid: 16019 + components: + - type: Transform + pos: 90.05174,-9.92947 + parent: 2 - proto: CableApcStack1 entities: - uid: 3248 @@ -36236,43 +37894,36 @@ entities: - uid: 2213 components: - type: Transform - rot: 3.141592653589793 rad pos: 48.5,42.5 parent: 2 - uid: 2234 components: - type: Transform - rot: 3.141592653589793 rad pos: 48.5,40.5 parent: 2 - uid: 2902 components: - type: Transform - rot: 3.141592653589793 rad pos: 49.5,42.5 parent: 2 - uid: 3065 components: - type: Transform - rot: 3.141592653589793 rad pos: 49.5,41.5 parent: 2 - uid: 3194 components: - type: Transform - rot: 3.141592653589793 rad pos: 48.5,41.5 parent: 2 - uid: 5425 components: - type: Transform - rot: 1.5707963267948966 rad pos: 54.5,37.5 parent: 2 - uid: 5456 components: - type: Transform - rot: -1.5707963267948966 rad pos: 54.5,36.5 parent: 2 - uid: 5682 @@ -36283,13 +37934,11 @@ entities: - uid: 9248 components: - type: Transform - rot: 3.141592653589793 rad pos: 55.5,38.5 parent: 2 - uid: 10833 components: - type: Transform - rot: 3.141592653589793 rad pos: 54.5,38.5 parent: 2 - uid: 13066 @@ -36320,19 +37969,16 @@ entities: - uid: 13520 components: - type: Transform - rot: 3.141592653589793 rad pos: 49.5,40.5 parent: 2 - uid: 14837 components: - type: Transform - rot: 1.5707963267948966 rad pos: 55.5,36.5 parent: 2 - uid: 15157 components: - type: Transform - rot: 1.5707963267948966 rad pos: 55.5,37.5 parent: 2 - proto: CarpetSBlue @@ -41053,11 +42699,6 @@ entities: - type: Transform pos: 35.5,-20.5 parent: 2 - - uid: 15515 - components: - - type: Transform - pos: 5.5,-29.5 - parent: 2 - uid: 15518 components: - type: Transform @@ -42747,8 +44388,11 @@ entities: - uid: 1289 components: - type: Transform + anchored: False pos: 26.5,-38.5 parent: 2 + - type: Physics + bodyType: Dynamic - uid: 1593 components: - type: Transform @@ -43300,6 +44944,13 @@ entities: - type: Transform pos: 29.5,47.5 parent: 2 +- proto: CrateNPCSheep + entities: + - uid: 7849 + components: + - type: Transform + pos: 46.5,-9.5 + parent: 2 - proto: CrateSecurityTrackingMindshieldImplants entities: - uid: 14832 @@ -43538,7 +45189,7 @@ entities: pos: 59.5,39.5 parent: 2 - type: Door - secondsUntilStateChange: -19693.469 + secondsUntilStateChange: -28605.215 state: Closing - proto: CurtainsWhiteOpen entities: @@ -44161,17 +45812,6 @@ entities: rot: 1.5707963267948966 rad pos: 26.5,35.5 parent: 2 - - uid: 5777 - components: - - type: Transform - pos: 31.5,-28.5 - parent: 2 - - uid: 5778 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 31.5,-32.5 - parent: 2 - uid: 5781 components: - type: Transform @@ -44319,6 +45959,12 @@ entities: rot: 1.5707963267948966 rad pos: 11.5,13.5 parent: 2 + - uid: 8434 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.5,-28.5 + parent: 2 - uid: 8473 components: - type: Transform @@ -44674,51 +46320,6 @@ entities: - type: Transform pos: 32.5,1.5 parent: 2 - - uid: 5697 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 27.5,-28.5 - parent: 2 - - uid: 5698 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 28.5,-28.5 - parent: 2 - - uid: 5699 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 29.5,-28.5 - parent: 2 - - uid: 5700 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 30.5,-28.5 - parent: 2 - - uid: 5770 - components: - - type: Transform - pos: 31.5,-29.5 - parent: 2 - - uid: 5771 - components: - - type: Transform - pos: 31.5,-30.5 - parent: 2 - - uid: 5772 - components: - - type: Transform - pos: 31.5,-31.5 - parent: 2 - - uid: 5773 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 30.5,-32.5 - parent: 2 - uid: 5784 components: - type: Transform @@ -46922,12 +48523,6 @@ entities: - type: Transform pos: 5.5,10.5 parent: 2 - - uid: 5696 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 26.5,-28.5 - parent: 2 - uid: 5801 components: - type: Transform @@ -48869,43 +50464,36 @@ entities: - uid: 8376 components: - type: Transform - rot: 1.5707963267948966 rad pos: 63.5,46.5 parent: 2 - uid: 8384 components: - type: Transform - rot: 1.5707963267948966 rad pos: 61.5,46.5 parent: 2 - uid: 8406 components: - type: Transform - rot: 1.5707963267948966 rad pos: 65.5,35.5 parent: 2 - uid: 8426 components: - type: Transform - rot: 1.5707963267948966 rad pos: 53.5,28.5 parent: 2 - uid: 9437 components: - type: Transform - rot: 1.5707963267948966 rad pos: 65.5,34.5 parent: 2 - uid: 9443 components: - type: Transform - rot: 1.5707963267948966 rad pos: 62.5,46.5 parent: 2 - uid: 9574 components: - type: Transform - rot: 1.5707963267948966 rad pos: 53.5,27.5 parent: 2 - proto: FirelockEdge @@ -49394,7 +50982,7 @@ entities: pos: 26.5,37.5 parent: 2 - type: Door - secondsUntilStateChange: -66987.26 + secondsUntilStateChange: -75899.01 state: Closing - uid: 9362 components: @@ -49848,7 +51436,6 @@ entities: - uid: 217 components: - type: Transform - rot: -1.5707963267948966 rad pos: 39.5,40.5 parent: 2 - uid: 248 @@ -49953,7 +51540,6 @@ entities: - uid: 1537 components: - type: Transform - rot: -1.5707963267948966 rad pos: 37.5,-3.5 parent: 2 - type: DeviceNetwork @@ -49976,7 +51562,6 @@ entities: - uid: 2421 components: - type: Transform - rot: 3.141592653589793 rad pos: 56.5,12.5 parent: 2 - type: DeviceNetwork @@ -50017,7 +51602,6 @@ entities: - uid: 5392 components: - type: Transform - rot: 3.141592653589793 rad pos: 55.5,10.5 parent: 2 - type: DeviceNetwork @@ -50040,7 +51624,6 @@ entities: - uid: 5478 components: - type: Transform - rot: 3.141592653589793 rad pos: 48.5,14.5 parent: 2 - type: DeviceNetwork @@ -50057,7 +51640,6 @@ entities: - uid: 5531 components: - type: Transform - rot: -1.5707963267948966 rad pos: 28.5,-5.5 parent: 2 - type: DeviceNetwork @@ -50095,7 +51677,6 @@ entities: - uid: 6523 components: - type: Transform - rot: -1.5707963267948966 rad pos: 33.5,-1.5 parent: 2 - type: DeviceNetwork @@ -50114,7 +51695,6 @@ entities: - uid: 6573 components: - type: Transform - rot: -1.5707963267948966 rad pos: 35.5,-1.5 parent: 2 - type: DeviceNetwork @@ -50138,7 +51718,6 @@ entities: - uid: 7267 components: - type: Transform - rot: 3.141592653589793 rad pos: 48.5,17.5 parent: 2 - type: DeviceNetwork @@ -50176,7 +51755,6 @@ entities: - uid: 8460 components: - type: Transform - rot: 3.141592653589793 rad pos: 59.5,16.5 parent: 2 - type: DeviceNetwork @@ -50239,7 +51817,6 @@ entities: - uid: 10336 components: - type: Transform - rot: 3.141592653589793 rad pos: 57.5,12.5 parent: 2 - type: DeviceNetwork @@ -50582,7 +52159,6 @@ entities: - uid: 15953 components: - type: Transform - rot: 3.141592653589793 rad pos: 83.5,30.5 parent: 2 - type: DeviceNetwork @@ -50592,7 +52168,6 @@ entities: - uid: 15958 components: - type: Transform - rot: 3.141592653589793 rad pos: 87.5,30.5 parent: 2 - type: DeviceNetwork @@ -50602,7 +52177,6 @@ entities: - uid: 15968 components: - type: Transform - rot: -1.5707963267948966 rad pos: 39.5,7.5 parent: 2 - type: DeviceNetwork @@ -51047,7 +52621,7 @@ entities: - uid: 6172 components: - type: Transform - pos: 62.99293,47.87387 + pos: 63.420906,47.582474 parent: 2 - proto: FoodTinPeachesMaint entities: @@ -51103,32 +52677,41 @@ entities: rot: 3.141592653589793 rad pos: 44.5,-25.5 parent: 2 + - type: AtmosPipeColor + color: '#990000FF' - type: GasFilter - filteredGas: Oxygen + enabled: True - uid: 3294 components: - type: Transform rot: 3.141592653589793 rad pos: 44.5,-27.5 parent: 2 + - type: AtmosPipeColor + color: '#990000FF' - type: GasFilter - filteredGas: CarbonDioxide + enabled: True - uid: 3297 components: - type: Transform rot: 3.141592653589793 rad pos: 44.5,-29.5 parent: 2 + - type: AtmosPipeColor + color: '#990000FF' - type: GasFilter - filteredGas: WaterVapor + enabled: True - uid: 3309 components: - type: Transform rot: 3.141592653589793 rad pos: 44.5,-31.5 parent: 2 + - type: AtmosPipeColor + color: '#990000FF' - type: GasFilter filteredGas: Plasma + enabled: True - uid: 3310 components: - type: Transform @@ -51136,7 +52719,7 @@ entities: pos: 44.5,-23.5 parent: 2 - type: GasFilter - filteredGas: Nitrogen + enabled: True - type: AtmosPipeColor color: '#990000FF' - uid: 3455 @@ -51145,8 +52728,11 @@ entities: rot: 3.141592653589793 rad pos: 44.5,-33.5 parent: 2 + - type: AtmosPipeColor + color: '#990000FF' - type: GasFilter filteredGas: Tritium + enabled: True - uid: 4903 components: - type: Transform @@ -51200,9 +52786,17 @@ entities: - type: GasMixer inletTwoConcentration: 0.22000003 inletOneConcentration: 0.78 + targetPressure: 303.975 + enabled: True - type: AtmosPipeColor color: '#0055CCFF' - - uid: 1933 + - uid: 4924 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 43.5,-40.5 + parent: 2 + - uid: 16092 components: - type: Transform rot: 3.141592653589793 rad @@ -51211,13 +52805,8 @@ entities: - type: GasMixer inletTwoConcentration: 0.029999971 inletOneConcentration: 0.97 - targetPressure: 4500 - - uid: 4924 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 43.5,-40.5 - parent: 2 + - type: AtmosPipeColor + color: '#947507FF' - proto: GasOutletInjector entities: - uid: 95 @@ -51316,6 +52905,8 @@ entities: rot: -1.5707963267948966 rad pos: 47.5,-35.5 parent: 2 + - type: AtmosPipeColor + color: '#990000FF' - uid: 4354 components: - type: Transform @@ -51574,14 +53165,6 @@ entities: parent: 2 - type: AtmosPipeColor color: '#990000FF' - - uid: 1456 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 17.5,-27.5 - parent: 2 - - type: AtmosPipeColor - color: '#990000FF' - uid: 1506 components: - type: Transform @@ -51695,13 +53278,16 @@ entities: - uid: 2435 components: - type: Transform - pos: 43.5,-25.5 + rot: -1.5707963267948966 rad + pos: 43.5,-33.5 parent: 2 + - type: AtmosPipeColor + color: '#947507FF' - uid: 2696 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 43.5,-34.5 + rot: 3.141592653589793 rad + pos: 43.5,-24.5 parent: 2 - uid: 3066 components: @@ -51725,6 +53311,8 @@ entities: rot: 3.141592653589793 rad pos: 44.5,-35.5 parent: 2 + - type: AtmosPipeColor + color: '#990000FF' - uid: 3688 components: - type: Transform @@ -51906,8 +53494,7 @@ entities: - uid: 5208 components: - type: Transform - rot: 3.141592653589793 rad - pos: 43.5,-24.5 + pos: 43.5,-25.5 parent: 2 - uid: 5286 components: @@ -52341,6 +53928,14 @@ entities: parent: 2 - type: AtmosPipeColor color: '#9F2B68FF' + - uid: 13294 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 39.5,-33.5 + parent: 2 + - type: AtmosPipeColor + color: '#947507FF' - uid: 13529 components: - type: Transform @@ -52662,6 +54257,14 @@ entities: parent: 2 - type: AtmosPipeColor color: '#990000FF' + - uid: 8924 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,-39.5 + parent: 2 + - type: AtmosPipeColor + color: '#0055CCFF' - uid: 8930 components: - type: Transform @@ -52695,6 +54298,14 @@ entities: parent: 2 - type: AtmosPipeColor color: '#0055CCFF' + - uid: 16067 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 31.5,-39.5 + parent: 2 + - type: AtmosPipeColor + color: '#990000FF' - proto: GasPipeFourway entities: - uid: 62 @@ -52821,6 +54432,32 @@ entities: color: '#03FCD3FF' - proto: GasPipeManifold entities: + - uid: 3956 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,-38.5 + parent: 2 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 3970 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 31.5,-38.5 + parent: 2 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 4448 + components: + - type: Transform + pos: 43.5,-23.5 + parent: 2 + - uid: 4449 + components: + - type: Transform + pos: 42.5,-24.5 + parent: 2 - uid: 8695 components: - type: Transform @@ -52856,7 +54493,7 @@ entities: components: - type: Transform rot: -1.5707963267948966 rad - pos: 42.5,-34.5 + pos: 41.5,-33.5 parent: 2 - type: AtmosPipeColor color: '#947507FF' @@ -54070,14 +55707,6 @@ entities: parent: 2 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 1633 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 20.5,-28.5 - parent: 2 - - type: AtmosPipeColor - color: '#0055CCFF' - uid: 1636 components: - type: Transform @@ -54934,6 +56563,11 @@ entities: parent: 2 - type: AtmosPipeColor color: '#0055CCFF' + - uid: 1933 + components: + - type: Transform + pos: 43.5,-30.5 + parent: 2 - uid: 1934 components: - type: Transform @@ -55517,16 +57151,15 @@ entities: parent: 2 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 2697 + - uid: 2695 components: - type: Transform rot: 3.141592653589793 rad - pos: 43.5,-30.5 + pos: 43.5,-31.5 parent: 2 - uid: 2712 components: - type: Transform - rot: 3.141592653589793 rad pos: 43.5,-28.5 parent: 2 - uid: 2716 @@ -55585,12 +57218,16 @@ entities: rot: 3.141592653589793 rad pos: 44.5,-34.5 parent: 2 + - type: AtmosPipeColor + color: '#990000FF' - uid: 2782 components: - type: Transform rot: 3.141592653589793 rad pos: 44.5,-30.5 parent: 2 + - type: AtmosPipeColor + color: '#990000FF' - uid: 3036 components: - type: Transform @@ -55645,24 +57282,32 @@ entities: rot: 3.141592653589793 rad pos: 44.5,-24.5 parent: 2 + - type: AtmosPipeColor + color: '#990000FF' - uid: 3292 components: - type: Transform rot: 3.141592653589793 rad pos: 44.5,-28.5 parent: 2 + - type: AtmosPipeColor + color: '#990000FF' - uid: 3295 components: - type: Transform rot: 3.141592653589793 rad pos: 44.5,-32.5 parent: 2 + - type: AtmosPipeColor + color: '#990000FF' - uid: 3301 components: - type: Transform rot: 3.141592653589793 rad pos: 44.5,-26.5 parent: 2 + - type: AtmosPipeColor + color: '#990000FF' - uid: 3302 components: - type: Transform @@ -55863,12 +57508,6 @@ entities: parent: 2 - type: AtmosPipeColor color: '#990000FF' - - uid: 3970 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 43.5,-27.5 - parent: 2 - uid: 3974 components: - type: Transform @@ -55971,6 +57610,11 @@ entities: parent: 2 - type: AtmosPipeColor color: '#0055CCFF' + - uid: 4031 + components: + - type: Transform + pos: 43.5,-27.5 + parent: 2 - uid: 4032 components: - type: Transform @@ -56793,20 +58437,6 @@ entities: parent: 2 - type: AtmosPipeColor color: '#990000FF' - - uid: 4448 - components: - - type: Transform - pos: 31.5,-38.5 - parent: 2 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 4449 - components: - - type: Transform - pos: 32.5,-38.5 - parent: 2 - - type: AtmosPipeColor - color: '#0055CCFF' - uid: 4451 components: - type: Transform @@ -56873,6 +58503,8 @@ entities: rot: -1.5707963267948966 rad pos: 45.5,-35.5 parent: 2 + - type: AtmosPipeColor + color: '#990000FF' - uid: 4561 components: - type: Transform @@ -57261,6 +58893,14 @@ entities: parent: 2 - type: AtmosPipeColor color: '#03FCD3FF' + - uid: 5770 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 16.5,-27.5 + parent: 2 + - type: AtmosPipeColor + color: '#990000FF' - uid: 5931 components: - type: Transform @@ -58632,16 +60272,10 @@ entities: parent: 2 - type: AtmosPipeColor color: '#990000FF' - - uid: 8924 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 43.5,-31.5 - parent: 2 - uid: 8982 components: - type: Transform - pos: 42.5,-24.5 + pos: 43.5,-29.5 parent: 2 - uid: 9035 components: @@ -60035,14 +61669,11 @@ entities: - uid: 10663 components: - type: Transform - pos: 43.5,-23.5 - parent: 2 - - uid: 11101 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 43.5,-29.5 + rot: -1.5707963267948966 rad + pos: 40.5,-33.5 parent: 2 + - type: AtmosPipeColor + color: '#947507FF' - uid: 11278 components: - type: Transform @@ -60620,12 +62251,6 @@ entities: parent: 2 - type: AtmosPipeColor color: '#990000FF' - - uid: 11756 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 43.5,-33.5 - parent: 2 - uid: 11764 components: - type: Transform @@ -60964,7 +62589,7 @@ entities: components: - type: Transform rot: -1.5707963267948966 rad - pos: 41.5,-34.5 + pos: 42.5,-33.5 parent: 2 - type: AtmosPipeColor color: '#947507FF' @@ -62610,6 +64235,75 @@ entities: parent: 2 - type: AtmosPipeColor color: '#990000FF' + - uid: 16062 + components: + - type: Transform + pos: 35.5,-42.5 + parent: 2 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 16063 + components: + - type: Transform + pos: 35.5,-41.5 + parent: 2 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 16064 + components: + - type: Transform + pos: 35.5,-40.5 + parent: 2 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 16065 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,-39.5 + parent: 2 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 16066 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.5,-39.5 + parent: 2 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 16077 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 36.5,-39.5 + parent: 2 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 16078 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,-39.5 + parent: 2 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 16079 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 38.5,-39.5 + parent: 2 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 16080 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,-39.5 + parent: 2 + - type: AtmosPipeColor + color: '#0055CCFF' - proto: GasPipeStraightAlt2 entities: - uid: 4360 @@ -62652,6 +64346,105 @@ entities: parent: 2 - type: AtmosPipeColor color: '#0055CCFF' + - uid: 16069 + components: + - type: Transform + pos: 35.5,-44.5 + parent: 2 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 16070 + components: + - type: Transform + pos: 35.5,-43.5 + parent: 2 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 16071 + components: + - type: Transform + pos: 35.5,-42.5 + parent: 2 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 16072 + components: + - type: Transform + pos: 35.5,-41.5 + parent: 2 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 16073 + components: + - type: Transform + pos: 35.5,-40.5 + parent: 2 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 16074 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,-39.5 + parent: 2 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 16075 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.5,-39.5 + parent: 2 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 16076 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 32.5,-39.5 + parent: 2 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 16081 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 40.5,-39.5 + parent: 2 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 16082 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,-39.5 + parent: 2 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 16083 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 38.5,-39.5 + parent: 2 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 16084 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,-39.5 + parent: 2 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 16085 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 36.5,-39.5 + parent: 2 + - type: AtmosPipeColor + color: '#990000FF' - proto: GasPipeTJunction entities: - uid: 14 @@ -62982,7 +64775,7 @@ entities: parent: 2 - type: AtmosPipeColor color: '#990000FF' - - uid: 2695 + - uid: 2697 components: - type: Transform rot: 1.5707963267948966 rad @@ -63190,6 +64983,7 @@ entities: - uid: 4498 components: - type: Transform + rot: -1.5707963267948966 rad pos: 39.5,-34.5 parent: 2 - type: AtmosPipeColor @@ -64001,6 +65795,14 @@ entities: parent: 2 - type: AtmosPipeColor color: '#990000FF' + - uid: 11756 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 20.5,-28.5 + parent: 2 + - type: AtmosPipeColor + color: '#0055CCFF' - uid: 11766 components: - type: Transform @@ -64009,6 +65811,13 @@ entities: parent: 2 - type: AtmosPipeColor color: '#03FCD3FF' + - uid: 12435 + components: + - type: Transform + pos: 17.5,-27.5 + parent: 2 + - type: AtmosPipeColor + color: '#990000FF' - uid: 12863 components: - type: Transform @@ -64243,6 +66052,22 @@ entities: parent: 2 - type: AtmosPipeColor color: '#990000FF' + - uid: 16068 + components: + - type: Transform + pos: 35.5,-39.5 + parent: 2 + - type: AtmosPipeColor + color: '#0055CCFF' +- proto: GasPipeTJunctionAlt2 + entities: + - uid: 16061 + components: + - type: Transform + pos: 35.5,-39.5 + parent: 2 + - type: AtmosPipeColor + color: '#990000FF' - proto: GasPort entities: - uid: 1945 @@ -64399,6 +66224,9 @@ entities: rot: -1.5707963267948966 rad pos: 44.5,-26.5 parent: 2 + - type: GasPressurePump + targetPressure: 4500 + enabled: True - uid: 3293 components: - type: Transform @@ -64417,6 +66245,9 @@ entities: rot: -1.5707963267948966 rad pos: 44.5,-24.5 parent: 2 + - type: GasPressurePump + targetPressure: 4500 + enabled: True - uid: 3311 components: - type: Transform @@ -64435,24 +66266,6 @@ entities: rot: 3.141592653589793 rad pos: 35.5,-26.5 parent: 2 - - uid: 3956 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 40.5,-34.5 - parent: 2 - - type: GasPressurePump - targetPressure: 4500 - - type: AtmosPipeColor - color: '#947507FF' - - uid: 4031 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 30.5,-25.5 - parent: 2 - - type: AtmosPipeColor - color: '#990000FF' - uid: 4033 components: - type: Transform @@ -64477,7 +66290,7 @@ entities: pos: 44.5,-44.5 parent: 2 - type: GasPressurePump - targetPressure: 4500 + targetPressure: 101.3 - type: AtmosPipeColor color: '#947507FF' - uid: 5497 @@ -64517,13 +66330,6 @@ entities: parent: 2 - type: AtmosPipeColor color: '#03FCD3FF' - - uid: 11578 - components: - - type: Transform - pos: 31.5,-25.5 - parent: 2 - - type: AtmosPipeColor - color: '#0055CCFF' - uid: 12329 components: - type: Transform @@ -64653,12 +66459,28 @@ entities: open: False - type: AtmosPipeColor color: '#9F2B68FF' + - uid: 11101 + components: + - type: Transform + pos: 30.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 11578 + components: + - type: Transform + pos: 31.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0055CCFF' - uid: 11580 components: - type: Transform rot: -1.5707963267948966 rad pos: 46.5,-35.5 parent: 2 + - type: AtmosPipeColor + color: '#990000FF' - uid: 15273 components: - type: Transform @@ -64870,6 +66692,13 @@ entities: - 6126 - type: AtmosPipeColor color: '#0055CCFF' + - uid: 5771 + components: + - type: Transform + pos: 20.5,-27.5 + parent: 2 + - type: AtmosPipeColor + color: '#0055CCFF' - uid: 5776 components: - type: Transform @@ -65617,6 +67446,32 @@ entities: - type: DeviceNetwork deviceLists: - 12480 + - uid: 16086 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 40.5,-39.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 13003 + - type: AtmosPipeLayers + pipeLayer: Secondary + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 16087 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 35.5,-43.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 16091 + - type: AtmosPipeLayers + pipeLayer: Secondary + - type: AtmosPipeColor + color: '#0055CCFF' - proto: GasVentScrubber entities: - uid: 3 @@ -65765,6 +67620,14 @@ entities: - 6126 - type: AtmosPipeColor color: '#990000FF' + - uid: 5772 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,-27.5 + parent: 2 + - type: AtmosPipeColor + color: '#990000FF' - uid: 5775 components: - type: Transform @@ -66476,6 +68339,32 @@ entities: - type: DeviceNetwork deviceLists: - 12480 + - uid: 16088 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 35.5,-45.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 16091 + - type: AtmosPipeLayers + pipeLayer: Tertiary + - type: AtmosPipeColor + color: '#990000FF' + - uid: 16089 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 41.5,-39.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 13003 + - type: AtmosPipeLayers + pipeLayer: Tertiary + - type: AtmosPipeColor + color: '#990000FF' - proto: GasVolumePump entities: - uid: 1238 @@ -67787,6 +69676,11 @@ entities: - type: Transform pos: 98.5,-22.5 parent: 2 + - uid: 3898 + components: + - type: Transform + pos: 75.5,34.5 + parent: 2 - uid: 3903 components: - type: Transform @@ -68287,11 +70181,6 @@ entities: - type: Transform pos: -20.5,16.5 parent: 2 - - uid: 6868 - components: - - type: Transform - pos: 62.5,51.5 - parent: 2 - uid: 6874 components: - type: Transform @@ -68712,11 +70601,6 @@ entities: - type: Transform pos: 73.5,28.5 parent: 2 - - uid: 8532 - components: - - type: Transform - pos: 73.5,28.5 - parent: 2 - uid: 8545 components: - type: Transform @@ -69395,22 +71279,22 @@ entities: - uid: 11546 components: - type: Transform - pos: 80.5,-24.5 + pos: 75.5,-25.5 parent: 2 - uid: 11547 components: - type: Transform - pos: 79.5,-24.5 + pos: 78.5,-25.5 parent: 2 - uid: 11548 components: - type: Transform - pos: 77.5,-24.5 + pos: 77.5,-25.5 parent: 2 - uid: 11549 components: - type: Transform - pos: 76.5,-24.5 + pos: 79.5,-25.5 parent: 2 - uid: 11550 components: @@ -69485,7 +71369,7 @@ entities: - uid: 11564 components: - type: Transform - pos: 72.5,-25.5 + pos: 80.5,-25.5 parent: 2 - uid: 11565 components: @@ -70847,11 +72731,6 @@ entities: - type: Transform pos: 78.5,26.5 parent: 2 - - uid: 14337 - components: - - type: Transform - pos: 75.5,34.5 - parent: 2 - uid: 14338 components: - type: Transform @@ -71432,6 +73311,81 @@ entities: - type: Transform pos: 55.5,-44.5 parent: 2 + - uid: 16020 + components: + - type: Transform + pos: -28.5,-3.5 + parent: 2 + - uid: 16022 + components: + - type: Transform + pos: -28.5,-5.5 + parent: 2 + - uid: 16023 + components: + - type: Transform + pos: -28.5,-6.5 + parent: 2 + - uid: 16025 + components: + - type: Transform + pos: -28.5,-8.5 + parent: 2 + - uid: 16026 + components: + - type: Transform + pos: -28.5,-9.5 + parent: 2 + - uid: 16028 + components: + - type: Transform + pos: -28.5,-11.5 + parent: 2 + - uid: 16030 + components: + - type: Transform + pos: -28.5,-13.5 + parent: 2 + - uid: 16031 + components: + - type: Transform + pos: -28.5,-14.5 + parent: 2 + - uid: 16033 + components: + - type: Transform + pos: -28.5,-16.5 + parent: 2 + - uid: 16034 + components: + - type: Transform + pos: -28.5,-17.5 + parent: 2 + - uid: 16035 + components: + - type: Transform + pos: -28.5,-18.5 + parent: 2 + - uid: 16047 + components: + - type: Transform + pos: -29.5,-21.5 + parent: 2 + - uid: 16048 + components: + - type: Transform + pos: -28.5,-21.5 + parent: 2 + - uid: 16049 + components: + - type: Transform + pos: -29.5,-0.5 + parent: 2 + - uid: 16050 + components: + - type: Transform + pos: -28.5,-0.5 + parent: 2 - proto: GrilleBroken entities: - uid: 1247 @@ -71471,6 +73425,12 @@ entities: rot: 1.5707963267948966 rad pos: 2.5,43.5 parent: 2 + - uid: 13305 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 62.5,51.5 + parent: 2 - uid: 14785 components: - type: Transform @@ -71548,7 +73508,6 @@ entities: - uid: 7857 components: - type: Transform - rot: 1.5707963267948966 rad pos: 89.5,37.5 parent: 2 - uid: 8105 @@ -71621,6 +73580,11 @@ entities: - type: Transform pos: 24.5,53.5 parent: 2 + - uid: 15515 + components: + - type: Transform + pos: -28.5,-10.5 + parent: 2 - uid: 15627 components: - type: Transform @@ -71701,6 +73665,26 @@ entities: - type: Transform pos: 0.5,-40.5 parent: 2 + - uid: 16021 + components: + - type: Transform + pos: -28.5,-4.5 + parent: 2 + - uid: 16024 + components: + - type: Transform + pos: -28.5,-7.5 + parent: 2 + - uid: 16029 + components: + - type: Transform + pos: -28.5,-12.5 + parent: 2 + - uid: 16032 + components: + - type: Transform + pos: -28.5,-15.5 + parent: 2 - proto: GunSafe entities: - uid: 6527 @@ -72428,7 +74412,7 @@ entities: pos: 12.5,12.5 parent: 2 - type: Door - secondsUntilStateChange: -5159.2036 + secondsUntilStateChange: -14070.949 state: Closing - uid: 5750 components: @@ -74164,6 +76148,16 @@ entities: - type: Transform pos: 66.5,4.5 parent: 2 + - uid: 5696 + components: + - type: Transform + pos: 62.5,-4.5 + parent: 2 + - uid: 5697 + components: + - type: Transform + pos: 59.5,-4.5 + parent: 2 - uid: 7800 components: - type: Transform @@ -75363,36 +77357,18 @@ entities: parent: 2 - proto: PlasmaWindoorSecureSecurityLocked entities: - - uid: 9304 + - uid: 2459 components: - type: Transform rot: 1.5707963267948966 rad pos: 42.5,35.5 parent: 2 - - type: Airlock - autoClose: False - - type: DeviceLinkSink - invokeCounter: 1 - - type: DeviceLinkSource - linkedPorts: - 10606: - - - DoorStatus - - Close - - uid: 10606 + - uid: 3080 components: - type: Transform rot: -1.5707963267948966 rad pos: 42.5,35.5 parent: 2 - - type: Airlock - autoClose: False - - type: DeviceLinkSink - invokeCounter: 1 - - type: DeviceLinkSource - linkedPorts: - 9304: - - - DoorStatus - - Close - proto: PlasticFlapsAirtightClear entities: - uid: 5576 @@ -75425,11 +77401,6 @@ entities: - type: Transform pos: 7.5,36.5 parent: 2 - - uid: 14767 - components: - - type: Transform - pos: 7.5,36.5 - parent: 2 - proto: PlayerStationAi entities: - uid: 14506 @@ -75478,6 +77449,13 @@ entities: - type: Transform pos: 6.6388106,-13.475947 parent: 2 +- proto: PlushieSheep + entities: + - uid: 16385 + components: + - type: Transform + pos: 71.5,27.5 + parent: 2 - proto: PlushieSpaceLizard entities: - uid: 7441 @@ -75485,6 +77463,13 @@ entities: - type: Transform pos: -3.4634295,-18.46823 parent: 2 +- proto: PlushieSpaceSheep + entities: + - uid: 8370 + components: + - type: Transform + pos: 9.5,36.5 + parent: 2 - proto: PlushieSpawner50 entities: - uid: 8652 @@ -78513,17 +80498,6 @@ entities: rot: 1.5707963267948966 rad pos: 31.5,-47.5 parent: 2 - - uid: 13330 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -26.5,-22.5 - parent: 2 - - uid: 13331 - components: - - type: Transform - pos: -26.5,0.5 - parent: 2 - uid: 13716 components: - type: Transform @@ -78607,6 +80581,17 @@ entities: rot: -1.5707963267948966 rad pos: 85.5,3.5 parent: 2 + - uid: 16059 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -27.5,-22.5 + parent: 2 + - uid: 16060 + components: + - type: Transform + pos: -27.5,0.5 + parent: 2 - proto: PoweredSmallLightEmpty entities: - uid: 3323 @@ -79112,19 +81097,6 @@ entities: rot: -1.5707963267948966 rad pos: 22.5,-9.5 parent: 2 - - uid: 14954 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 3.5,-28.5 - parent: 2 -- proto: RailingCornerSmall - entities: - - uid: 15742 - components: - - type: Transform - pos: 3.5,-29.5 - parent: 2 - proto: RandomArcade entities: - uid: 8653 @@ -79379,19 +81351,16 @@ entities: - uid: 15694 components: - type: Transform - rot: 3.141592653589793 rad pos: 55.5,46.5 parent: 2 - uid: 15701 components: - type: Transform - rot: 3.141592653589793 rad pos: 63.5,42.5 parent: 2 - uid: 15702 components: - type: Transform - rot: 3.141592653589793 rad pos: 54.5,51.5 parent: 2 - proto: RandomPosterContraband @@ -79436,7 +81405,6 @@ entities: - uid: 5477 components: - type: Transform - rot: 3.141592653589793 rad pos: 52.5,38.5 parent: 2 - uid: 7573 @@ -79750,7 +81718,6 @@ entities: - uid: 8548 components: - type: Transform - rot: 1.5707963267948966 rad pos: 62.5,26.5 parent: 2 - uid: 8689 @@ -79761,7 +81728,6 @@ entities: - uid: 9565 components: - type: Transform - rot: 3.141592653589793 rad pos: 44.5,32.5 parent: 2 - uid: 10088 @@ -79787,7 +81753,6 @@ entities: - uid: 13517 components: - type: Transform - rot: 3.141592653589793 rad pos: 41.5,32.5 parent: 2 - uid: 15344 @@ -79820,7 +81785,6 @@ entities: - uid: 37 components: - type: Transform - rot: 3.141592653589793 rad pos: 39.5,23.5 parent: 2 - uid: 45 @@ -80291,7 +82255,6 @@ entities: - uid: 2230 components: - type: Transform - rot: 3.141592653589793 rad pos: 35.5,16.5 parent: 2 - uid: 2231 @@ -80317,7 +82280,6 @@ entities: - uid: 2425 components: - type: Transform - rot: 3.141592653589793 rad pos: 34.5,16.5 parent: 2 - uid: 2427 @@ -80548,7 +82510,6 @@ entities: - uid: 3157 components: - type: Transform - rot: 3.141592653589793 rad pos: 36.5,28.5 parent: 2 - uid: 3162 @@ -80564,7 +82525,6 @@ entities: - uid: 3174 components: - type: Transform - rot: 3.141592653589793 rad pos: 36.5,29.5 parent: 2 - uid: 3279 @@ -80585,7 +82545,6 @@ entities: - uid: 3337 components: - type: Transform - rot: 3.141592653589793 rad pos: 51.5,51.5 parent: 2 - uid: 3340 @@ -80601,7 +82560,6 @@ entities: - uid: 3347 components: - type: Transform - rot: 3.141592653589793 rad pos: 52.5,51.5 parent: 2 - uid: 3350 @@ -81027,7 +82985,6 @@ entities: - uid: 5411 components: - type: Transform - rot: -1.5707963267948966 rad pos: 47.5,37.5 parent: 2 - uid: 5417 @@ -81178,7 +83135,6 @@ entities: - uid: 7755 components: - type: Transform - rot: -1.5707963267948966 rad pos: 73.5,29.5 parent: 2 - uid: 7763 @@ -81234,7 +83190,6 @@ entities: - uid: 8457 components: - type: Transform - rot: -1.5707963267948966 rad pos: 36.5,23.5 parent: 2 - uid: 8587 @@ -81245,19 +83200,16 @@ entities: - uid: 8597 components: - type: Transform - rot: 3.141592653589793 rad pos: 61.5,51.5 parent: 2 - uid: 8599 components: - type: Transform - rot: 3.141592653589793 rad pos: 73.5,32.5 parent: 2 - uid: 8616 components: - type: Transform - rot: 3.141592653589793 rad pos: 60.5,51.5 parent: 2 - uid: 8634 @@ -81268,7 +83220,6 @@ entities: - uid: 8636 components: - type: Transform - rot: 3.141592653589793 rad pos: 37.5,29.5 parent: 2 - uid: 8694 @@ -81489,37 +83440,31 @@ entities: - uid: 9265 components: - type: Transform - rot: 3.141592653589793 rad pos: 16.5,-37.5 parent: 2 - uid: 9284 components: - type: Transform - rot: 3.141592653589793 rad pos: 17.5,-37.5 parent: 2 - uid: 9292 components: - type: Transform - rot: 3.141592653589793 rad pos: 73.5,31.5 parent: 2 - uid: 9294 components: - type: Transform - rot: 3.141592653589793 rad pos: 20.5,-37.5 parent: 2 - uid: 9295 components: - type: Transform - rot: 3.141592653589793 rad pos: 22.5,-37.5 parent: 2 - uid: 9296 components: - type: Transform - rot: 3.141592653589793 rad pos: 73.5,28.5 parent: 2 - uid: 10123 @@ -81550,7 +83495,6 @@ entities: - uid: 10587 components: - type: Transform - rot: -1.5707963267948966 rad pos: 53.5,12.5 parent: 2 - uid: 10768 @@ -81583,12 +83527,6 @@ entities: - type: Transform pos: -9.5,-10.5 parent: 2 - - uid: 12435 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 62.5,51.5 - parent: 2 - uid: 12444 components: - type: Transform @@ -81922,7 +83860,6 @@ entities: - uid: 14238 components: - type: Transform - rot: 1.5707963267948966 rad pos: 52.5,23.5 parent: 2 - uid: 14343 @@ -81958,7 +83895,6 @@ entities: - uid: 14431 components: - type: Transform - rot: 3.141592653589793 rad pos: 50.5,34.5 parent: 2 - uid: 14653 @@ -81989,7 +83925,6 @@ entities: - uid: 14932 components: - type: Transform - rot: -1.5707963267948966 rad pos: 78.5,31.5 parent: 2 - uid: 15004 @@ -82015,7 +83950,6 @@ entities: - uid: 15877 components: - type: Transform - rot: -1.5707963267948966 rad pos: 54.5,12.5 parent: 2 - uid: 15973 @@ -82023,6 +83957,26 @@ entities: - type: Transform pos: 49.5,16.5 parent: 2 + - uid: 16043 + components: + - type: Transform + pos: -28.5,-0.5 + parent: 2 + - uid: 16044 + components: + - type: Transform + pos: -29.5,-0.5 + parent: 2 + - uid: 16045 + components: + - type: Transform + pos: -28.5,-21.5 + parent: 2 + - uid: 16046 + components: + - type: Transform + pos: -29.5,-21.5 + parent: 2 - proto: RemoteSignaller entities: - uid: 9222 @@ -82353,7 +84307,7 @@ entities: - uid: 10311 components: - type: Transform - pos: 71.58744,34.19874 + pos: 71.17203,33.812214 parent: 2 - proto: SheetGlass entities: @@ -84067,13 +86021,6 @@ entities: parent: 2 - type: Fixtures fixtures: {} - - uid: 13003 - components: - - type: Transform - pos: 36.5,-41.5 - parent: 2 - - type: Fixtures - fixtures: {} - uid: 13004 components: - type: Transform @@ -84105,6 +86052,14 @@ entities: parent: 2 - type: Fixtures fixtures: {} + - uid: 16090 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,-41.5 + parent: 2 + - type: Fixtures + fixtures: {} - proto: SignEngine entities: - uid: 5157 @@ -85813,7 +87768,6 @@ entities: - uid: 1646 components: - type: Transform - rot: 1.5707963267948966 rad pos: 38.5,-10.5 parent: 2 - proto: SpawnMobMouse @@ -85864,6 +87818,13 @@ entities: - type: Transform pos: 5.5,15.5 parent: 2 +- proto: SpawnMobSheepRainbow + entities: + - uid: 6843 + components: + - type: Transform + pos: 71.5,35.5 + parent: 2 - proto: SpawnMobShiva entities: - uid: 1195 @@ -86008,7 +87969,7 @@ entities: parent: 2 - proto: SpawnPointDetective entities: - - uid: 10425 + - uid: 3268 components: - type: Transform pos: 58.5,38.5 @@ -86233,15 +88194,15 @@ entities: parent: 2 - proto: SpawnPointSecurityCadet entities: - - uid: 15797 + - uid: 5698 components: - type: Transform - pos: 38.5,25.5 + pos: 37.5,30.5 parent: 2 - - uid: 15798 + - uid: 15742 components: - type: Transform - pos: 37.5,26.5 + pos: 39.5,30.5 parent: 2 - proto: SpawnPointSecurityOfficer entities: @@ -88502,13 +90463,11 @@ entities: - uid: 2444 components: - type: Transform - rot: -1.5707963267948966 rad pos: 61.5,50.5 parent: 2 - uid: 2478 components: - type: Transform - rot: 3.141592653589793 rad pos: 51.5,38.5 parent: 2 - uid: 2684 @@ -88554,7 +90513,6 @@ entities: - uid: 3204 components: - type: Transform - rot: 3.141592653589793 rad pos: 52.5,45.5 parent: 2 - uid: 3282 @@ -88565,7 +90523,6 @@ entities: - uid: 3428 components: - type: Transform - rot: 1.5707963267948966 rad pos: 55.5,40.5 parent: 2 - uid: 3430 @@ -88671,7 +90628,6 @@ entities: - uid: 5200 components: - type: Transform - rot: 1.5707963267948966 rad pos: 37.5,-10.5 parent: 2 - uid: 5203 @@ -88742,7 +90698,6 @@ entities: - uid: 6336 components: - type: Transform - rot: 1.5707963267948966 rad pos: 51.5,50.5 parent: 2 - uid: 6756 @@ -88798,7 +90753,6 @@ entities: - uid: 8410 components: - type: Transform - rot: 3.141592653589793 rad pos: 63.5,25.5 parent: 2 - uid: 8503 @@ -88824,7 +90778,6 @@ entities: - uid: 9257 components: - type: Transform - rot: 3.141592653589793 rad pos: 69.5,38.5 parent: 2 - uid: 9333 @@ -88900,19 +90853,16 @@ entities: - uid: 10404 components: - type: Transform - rot: 3.141592653589793 rad pos: 65.5,11.5 parent: 2 - uid: 10431 components: - type: Transform - rot: 1.5707963267948966 rad pos: 42.5,29.5 parent: 2 - uid: 10574 components: - type: Transform - rot: 3.141592653589793 rad pos: 65.5,10.5 parent: 2 - uid: 10614 @@ -88938,7 +90888,6 @@ entities: - uid: 10886 components: - type: Transform - rot: 3.141592653589793 rad pos: 64.5,25.5 parent: 2 - uid: 11119 @@ -89009,7 +90958,6 @@ entities: - uid: 11472 components: - type: Transform - rot: 3.141592653589793 rad pos: 60.5,20.5 parent: 2 - uid: 11830 @@ -89100,19 +91048,16 @@ entities: - uid: 14235 components: - type: Transform - rot: -1.5707963267948966 rad pos: 51.5,40.5 parent: 2 - uid: 14374 components: - type: Transform - rot: -1.5707963267948966 rad pos: 38.5,-9.5 parent: 2 - uid: 15013 components: - type: Transform - rot: 3.141592653589793 rad pos: 50.5,38.5 parent: 2 - uid: 15302 @@ -89123,7 +91068,6 @@ entities: - uid: 15657 components: - type: Transform - rot: -1.5707963267948966 rad pos: 58.5,47.5 parent: 2 - proto: TableCounterMetal @@ -89366,7 +91310,6 @@ entities: - uid: 824 components: - type: Transform - rot: 1.5707963267948966 rad pos: 49.5,19.5 parent: 2 - uid: 935 @@ -89427,7 +91370,6 @@ entities: - uid: 3528 components: - type: Transform - rot: 3.141592653589793 rad pos: 48.5,17.5 parent: 2 - uid: 4146 @@ -89518,13 +91460,11 @@ entities: - uid: 5400 components: - type: Transform - rot: -1.5707963267948966 rad pos: 86.5,32.5 parent: 2 - uid: 5401 components: - type: Transform - rot: -1.5707963267948966 rad pos: 84.5,32.5 parent: 2 - uid: 5813 @@ -89565,13 +91505,11 @@ entities: - uid: 8563 components: - type: Transform - rot: -1.5707963267948966 rad pos: 36.5,27.5 parent: 2 - uid: 9133 components: - type: Transform - rot: 1.5707963267948966 rad pos: 36.5,24.5 parent: 2 - uid: 10310 @@ -89597,7 +91535,6 @@ entities: - uid: 11944 components: - type: Transform - rot: 1.5707963267948966 rad pos: 31.5,31.5 parent: 2 - uid: 12423 @@ -89941,39 +91878,57 @@ entities: - uid: 2038 components: - type: Transform + anchored: False rot: -1.5707963267948966 rad pos: 25.5,-40.5 parent: 2 + - type: Physics + bodyType: Dynamic - uid: 2081 components: - type: Transform + anchored: False rot: 3.141592653589793 rad pos: 25.5,-41.5 parent: 2 + - type: Physics + bodyType: Dynamic - uid: 7969 components: - type: Transform + anchored: False rot: 3.141592653589793 rad pos: 26.5,-42.5 parent: 2 + - type: Physics + bodyType: Dynamic - uid: 7971 components: - type: Transform + anchored: False rot: 3.141592653589793 rad pos: 25.5,-42.5 parent: 2 + - type: Physics + bodyType: Dynamic - uid: 8108 components: - type: Transform + anchored: False rot: -1.5707963267948966 rad pos: 26.5,-40.5 parent: 2 + - type: Physics + bodyType: Dynamic - uid: 11070 components: - type: Transform + anchored: False rot: 3.141592653589793 rad pos: 26.5,-41.5 parent: 2 + - type: Physics + bodyType: Dynamic - proto: TeslaGenerator entities: - uid: 832 @@ -89986,27 +91941,39 @@ entities: - uid: 14755 components: - type: Transform + anchored: False rot: 3.141592653589793 rad pos: 26.5,-44.5 parent: 2 + - type: Physics + bodyType: Dynamic - uid: 14756 components: - type: Transform + anchored: False rot: 3.141592653589793 rad pos: 25.5,-44.5 parent: 2 + - type: Physics + bodyType: Dynamic - uid: 14757 components: - type: Transform + anchored: False rot: 3.141592653589793 rad pos: 17.5,-44.5 parent: 2 + - type: Physics + bodyType: Dynamic - uid: 14758 components: - type: Transform + anchored: False rot: 3.141592653589793 rad pos: 16.5,-44.5 parent: 2 + - type: Physics + bodyType: Dynamic - proto: TintedWindow entities: - uid: 1165 @@ -90262,79 +92229,79 @@ entities: linkedPorts: 5842: - - Left - - Forward - - - Right - Reverse + - - Right + - Forward - - Middle - Off 5843: - - Left - - Forward - - - Right - Reverse + - - Right + - Forward - - Middle - Off 5844: - - Left - - Forward - - - Right - Reverse + - - Right + - Forward - - Middle - Off 5845: - - Left - - Forward - - - Right - Reverse + - - Right + - Forward - - Middle - Off 5846: - - Left - - Forward - - - Right - Reverse + - - Right + - Forward - - Middle - Off 5847: - - Left - - Forward - - - Right - Reverse + - - Right + - Forward - - Middle - Off 5850: - - Left - - Forward - - - Right - Reverse + - - Right + - Forward - - Middle - Off 5851: - - Left - - Forward - - - Right - Reverse + - - Right + - Forward - - Middle - Off 5852: - - Left - - Forward - - - Right - Reverse + - - Right + - Forward - - Middle - Off 5853: - - Left - - Forward - - - Right - Reverse + - - Right + - Forward - - Middle - Off 5854: - - Left - - Forward - - - Right - Reverse + - - Right + - Forward - - Middle - Off 5855: @@ -90884,7 +92851,6 @@ entities: - uid: 82 components: - type: Transform - rot: 3.141592653589793 rad pos: 45.5,40.5 parent: 2 - uid: 83 @@ -91000,13 +92966,11 @@ entities: - uid: 349 components: - type: Transform - rot: -1.5707963267948966 rad pos: 60.5,28.5 parent: 2 - uid: 404 components: - type: Transform - rot: 3.141592653589793 rad pos: 42.5,40.5 parent: 2 - uid: 422 @@ -91597,7 +93561,6 @@ entities: - uid: 984 components: - type: Transform - rot: 3.141592653589793 rad pos: 54.5,52.5 parent: 2 - uid: 993 @@ -91643,13 +93606,11 @@ entities: - uid: 1109 components: - type: Transform - rot: 3.141592653589793 rad pos: 45.5,24.5 parent: 2 - uid: 1152 components: - type: Transform - rot: 3.141592653589793 rad pos: 58.5,52.5 parent: 2 - uid: 1218 @@ -91670,7 +93631,6 @@ entities: - uid: 1256 components: - type: Transform - rot: 3.141592653589793 rad pos: 44.5,44.5 parent: 2 - uid: 1264 @@ -91871,7 +93831,6 @@ entities: - uid: 1521 components: - type: Transform - rot: -1.5707963267948966 rad pos: 11.5,-20.5 parent: 2 - uid: 1576 @@ -92037,7 +93996,6 @@ entities: - uid: 2040 components: - type: Transform - rot: 1.5707963267948966 rad pos: 8.5,37.5 parent: 2 - uid: 2058 @@ -92068,7 +94026,6 @@ entities: - uid: 2090 components: - type: Transform - rot: 1.5707963267948966 rad pos: 91.5,2.5 parent: 2 - uid: 2102 @@ -92104,7 +94061,6 @@ entities: - uid: 2153 components: - type: Transform - rot: 1.5707963267948966 rad pos: 58.5,27.5 parent: 2 - uid: 2191 @@ -92135,19 +94091,16 @@ entities: - uid: 2205 components: - type: Transform - rot: 1.5707963267948966 rad pos: 61.5,29.5 parent: 2 - uid: 2210 components: - type: Transform - rot: 1.5707963267948966 rad pos: 59.5,40.5 parent: 2 - uid: 2212 components: - type: Transform - rot: -1.5707963267948966 rad pos: 35.5,22.5 parent: 2 - uid: 2214 @@ -92163,7 +94116,6 @@ entities: - uid: 2227 components: - type: Transform - rot: 1.5707963267948966 rad pos: 28.5,18.5 parent: 2 - uid: 2228 @@ -92174,13 +94126,11 @@ entities: - uid: 2229 components: - type: Transform - rot: 1.5707963267948966 rad pos: 58.5,40.5 parent: 2 - uid: 2244 components: - type: Transform - rot: 3.141592653589793 rad pos: 28.5,26.5 parent: 2 - uid: 2245 @@ -92191,13 +94141,11 @@ entities: - uid: 2257 components: - type: Transform - rot: 3.141592653589793 rad pos: 36.5,40.5 parent: 2 - uid: 2262 components: - type: Transform - rot: 3.141592653589793 rad pos: 35.5,40.5 parent: 2 - uid: 2263 @@ -92213,13 +94161,11 @@ entities: - uid: 2267 components: - type: Transform - rot: 3.141592653589793 rad pos: 32.5,22.5 parent: 2 - uid: 2268 components: - type: Transform - rot: -1.5707963267948966 rad pos: 51.5,39.5 parent: 2 - uid: 2281 @@ -92235,7 +94181,6 @@ entities: - uid: 2292 components: - type: Transform - rot: 3.141592653589793 rad pos: 35.5,23.5 parent: 2 - uid: 2293 @@ -92246,7 +94191,6 @@ entities: - uid: 2297 components: - type: Transform - rot: 3.141592653589793 rad pos: 32.5,26.5 parent: 2 - uid: 2306 @@ -92257,19 +94201,16 @@ entities: - uid: 2318 components: - type: Transform - rot: 1.5707963267948966 rad pos: 40.5,37.5 parent: 2 - uid: 2328 components: - type: Transform - rot: -1.5707963267948966 rad pos: 30.5,36.5 parent: 2 - uid: 2330 components: - type: Transform - rot: 1.5707963267948966 rad pos: 45.5,21.5 parent: 2 - uid: 2357 @@ -92280,13 +94221,11 @@ entities: - uid: 2362 components: - type: Transform - rot: -1.5707963267948966 rad pos: 49.5,39.5 parent: 2 - uid: 2372 components: - type: Transform - rot: -1.5707963267948966 rad pos: 47.5,43.5 parent: 2 - uid: 2400 @@ -92334,16 +94273,9 @@ entities: - type: Transform pos: 37.5,16.5 parent: 2 - - uid: 2459 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 51.5,46.5 - parent: 2 - uid: 2465 components: - type: Transform - rot: 3.141592653589793 rad pos: 30.5,32.5 parent: 2 - uid: 2485 @@ -92414,7 +94346,6 @@ entities: - uid: 2586 components: - type: Transform - rot: -1.5707963267948966 rad pos: 40.5,39.5 parent: 2 - uid: 2587 @@ -92870,7 +94801,6 @@ entities: - uid: 3095 components: - type: Transform - rot: -1.5707963267948966 rad pos: 60.5,35.5 parent: 2 - uid: 3097 @@ -92881,13 +94811,11 @@ entities: - uid: 3102 components: - type: Transform - rot: -1.5707963267948966 rad pos: 40.5,40.5 parent: 2 - uid: 3106 components: - type: Transform - rot: -1.5707963267948966 rad pos: 40.5,38.5 parent: 2 - uid: 3107 @@ -92898,7 +94826,6 @@ entities: - uid: 3110 components: - type: Transform - rot: 3.141592653589793 rad pos: 41.5,40.5 parent: 2 - uid: 3117 @@ -92934,19 +94861,16 @@ entities: - uid: 3153 components: - type: Transform - rot: 3.141592653589793 rad pos: 31.5,26.5 parent: 2 - uid: 3155 components: - type: Transform - rot: 1.5707963267948966 rad pos: 28.5,17.5 parent: 2 - uid: 3156 components: - type: Transform - rot: 3.141592653589793 rad pos: 35.5,26.5 parent: 2 - uid: 3166 @@ -92962,7 +94886,6 @@ entities: - uid: 3178 components: - type: Transform - rot: -1.5707963267948966 rad pos: 47.5,29.5 parent: 2 - uid: 3180 @@ -92983,7 +94906,6 @@ entities: - uid: 3186 components: - type: Transform - rot: -1.5707963267948966 rad pos: 60.5,36.5 parent: 2 - uid: 3201 @@ -92994,7 +94916,6 @@ entities: - uid: 3208 components: - type: Transform - rot: 3.141592653589793 rad pos: 34.5,22.5 parent: 2 - uid: 3210 @@ -93005,7 +94926,6 @@ entities: - uid: 3230 components: - type: Transform - rot: -1.5707963267948966 rad pos: 11.5,-14.5 parent: 2 - uid: 3236 @@ -93013,16 +94933,9 @@ entities: - type: Transform pos: 70.5,-13.5 parent: 2 - - uid: 3237 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 51.5,45.5 - parent: 2 - uid: 3240 components: - type: Transform - rot: -1.5707963267948966 rad pos: 53.5,39.5 parent: 2 - uid: 3242 @@ -93033,7 +94946,6 @@ entities: - uid: 3243 components: - type: Transform - rot: 1.5707963267948966 rad pos: 28.5,16.5 parent: 2 - uid: 3247 @@ -93054,14 +94966,8 @@ entities: - uid: 3262 components: - type: Transform - rot: 1.5707963267948966 rad pos: 49.5,51.5 parent: 2 - - uid: 3268 - components: - - type: Transform - pos: 65.5,45.5 - parent: 2 - uid: 3271 components: - type: Transform @@ -93135,13 +95041,11 @@ entities: - uid: 3331 components: - type: Transform - rot: 3.141592653589793 rad pos: 53.5,51.5 parent: 2 - uid: 3338 components: - type: Transform - rot: -1.5707963267948966 rad pos: 45.5,27.5 parent: 2 - uid: 3349 @@ -93227,7 +95131,6 @@ entities: - uid: 3383 components: - type: Transform - rot: -1.5707963267948966 rad pos: 45.5,29.5 parent: 2 - uid: 3388 @@ -93238,19 +95141,16 @@ entities: - uid: 3389 components: - type: Transform - rot: -1.5707963267948966 rad pos: 73.5,30.5 parent: 2 - uid: 3390 components: - type: Transform - rot: -1.5707963267948966 rad pos: 73.5,34.5 parent: 2 - uid: 3391 components: - type: Transform - rot: -1.5707963267948966 rad pos: 73.5,26.5 parent: 2 - uid: 3419 @@ -93681,7 +95581,6 @@ entities: - uid: 3634 components: - type: Transform - rot: 1.5707963267948966 rad pos: 43.5,48.5 parent: 2 - uid: 3635 @@ -93822,7 +95721,6 @@ entities: - uid: 3671 components: - type: Transform - rot: 3.141592653589793 rad pos: 66.5,9.5 parent: 2 - uid: 3674 @@ -94320,11 +96218,6 @@ entities: - type: Transform pos: 87.5,-19.5 parent: 2 - - uid: 3898 - components: - - type: Transform - pos: 87.5,-19.5 - parent: 2 - uid: 3899 components: - type: Transform @@ -94723,7 +96616,6 @@ entities: - uid: 5183 components: - type: Transform - rot: 3.141592653589793 rad pos: 16.5,-14.5 parent: 2 - uid: 5291 @@ -94746,39 +96638,29 @@ entities: - type: Transform pos: 45.5,-41.5 parent: 2 - - uid: 5310 - components: - - type: Transform - pos: 60.5,37.5 - parent: 2 - uid: 5318 components: - type: Transform - rot: 1.5707963267948966 rad pos: 51.5,22.5 parent: 2 - uid: 5319 components: - type: Transform - rot: 3.141592653589793 rad pos: 49.5,25.5 parent: 2 - uid: 5322 components: - type: Transform - rot: 1.5707963267948966 rad pos: 50.5,22.5 parent: 2 - uid: 5328 components: - type: Transform - rot: 3.141592653589793 rad pos: 66.5,10.5 parent: 2 - uid: 5351 components: - type: Transform - rot: 3.141592653589793 rad pos: 34.5,26.5 parent: 2 - uid: 5353 @@ -94799,7 +96681,6 @@ entities: - uid: 5441 components: - type: Transform - rot: 3.141592653589793 rad pos: 48.5,50.5 parent: 2 - uid: 5442 @@ -94815,7 +96696,6 @@ entities: - uid: 5459 components: - type: Transform - rot: -1.5707963267948966 rad pos: 30.5,37.5 parent: 2 - uid: 5479 @@ -94846,7 +96726,6 @@ entities: - uid: 5492 components: - type: Transform - rot: 3.141592653589793 rad pos: 4.5,22.5 parent: 2 - uid: 5498 @@ -94872,7 +96751,6 @@ entities: - uid: 5522 components: - type: Transform - rot: 3.141592653589793 rad pos: 5.5,22.5 parent: 2 - uid: 5648 @@ -94918,7 +96796,6 @@ entities: - uid: 5859 components: - type: Transform - rot: 3.141592653589793 rad pos: 42.5,32.5 parent: 2 - uid: 5876 @@ -94929,13 +96806,11 @@ entities: - uid: 5877 components: - type: Transform - rot: 3.141592653589793 rad pos: 31.5,22.5 parent: 2 - uid: 5929 components: - type: Transform - rot: 3.141592653589793 rad pos: 15.5,-14.5 parent: 2 - uid: 5967 @@ -94991,13 +96866,11 @@ entities: - uid: 6313 components: - type: Transform - rot: -1.5707963267948966 rad pos: 45.5,42.5 parent: 2 - uid: 6318 components: - type: Transform - rot: 1.5707963267948966 rad pos: 38.5,37.5 parent: 2 - uid: 6323 @@ -95008,13 +96881,11 @@ entities: - uid: 6349 components: - type: Transform - rot: 3.141592653589793 rad pos: 41.5,37.5 parent: 2 - uid: 6422 components: - type: Transform - rot: 3.141592653589793 rad pos: 66.5,11.5 parent: 2 - uid: 6680 @@ -95050,7 +96921,6 @@ entities: - uid: 6797 components: - type: Transform - rot: 1.5707963267948966 rad pos: 61.5,30.5 parent: 2 - uid: 6798 @@ -95073,11 +96943,6 @@ entities: - type: Transform pos: -4.5,-13.5 parent: 2 - - uid: 6843 - components: - - type: Transform - pos: 68.5,49.5 - parent: 2 - uid: 6848 components: - type: Transform @@ -95126,7 +96991,6 @@ entities: - uid: 6917 components: - type: Transform - rot: 3.141592653589793 rad pos: 63.5,20.5 parent: 2 - uid: 6945 @@ -95242,19 +97106,16 @@ entities: - uid: 7752 components: - type: Transform - rot: 3.141592653589793 rad pos: 30.5,26.5 parent: 2 - uid: 7761 components: - type: Transform - rot: 3.141592653589793 rad pos: 64.5,49.5 parent: 2 - uid: 7762 components: - type: Transform - rot: 3.141592653589793 rad pos: 65.5,48.5 parent: 2 - uid: 7769 @@ -95280,13 +97141,11 @@ entities: - uid: 7834 components: - type: Transform - rot: 3.141592653589793 rad pos: 64.5,48.5 parent: 2 - uid: 7835 components: - type: Transform - rot: 3.141592653589793 rad pos: 67.5,48.5 parent: 2 - uid: 7839 @@ -95307,15 +97166,8 @@ entities: - uid: 7845 components: - type: Transform - rot: 1.5707963267948966 rad pos: 39.5,48.5 parent: 2 - - uid: 7849 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 68.5,48.5 - parent: 2 - uid: 7875 components: - type: Transform @@ -95509,7 +97361,6 @@ entities: - uid: 7937 components: - type: Transform - rot: 1.5707963267948966 rad pos: 58.5,26.5 parent: 2 - uid: 8044 @@ -95530,7 +97381,6 @@ entities: - uid: 8101 components: - type: Transform - rot: 1.5707963267948966 rad pos: 89.5,3.5 parent: 2 - uid: 8102 @@ -95588,33 +97438,24 @@ entities: - type: Transform pos: 44.5,16.5 parent: 2 - - uid: 8370 - components: - - type: Transform - pos: 68.5,50.5 - parent: 2 - uid: 8411 components: - type: Transform - rot: 3.141592653589793 rad pos: 28.5,23.5 parent: 2 - uid: 8413 components: - type: Transform - rot: 3.141592653589793 rad pos: 29.5,26.5 parent: 2 - uid: 8415 components: - type: Transform - rot: 3.141592653589793 rad pos: 28.5,25.5 parent: 2 - uid: 8416 components: - type: Transform - rot: 3.141592653589793 rad pos: 31.5,32.5 parent: 2 - uid: 8422 @@ -95625,7 +97466,6 @@ entities: - uid: 8439 components: - type: Transform - rot: 3.141592653589793 rad pos: 29.5,22.5 parent: 2 - uid: 8440 @@ -95636,7 +97476,6 @@ entities: - uid: 8444 components: - type: Transform - rot: -1.5707963267948966 rad pos: 54.5,39.5 parent: 2 - uid: 8447 @@ -95647,7 +97486,6 @@ entities: - uid: 8451 components: - type: Transform - rot: 1.5707963267948966 rad pos: 45.5,22.5 parent: 2 - uid: 8474 @@ -95668,13 +97506,11 @@ entities: - uid: 8486 components: - type: Transform - rot: 3.141592653589793 rad pos: 45.5,32.5 parent: 2 - uid: 8487 components: - type: Transform - rot: 1.5707963267948966 rad pos: 58.5,28.5 parent: 2 - uid: 8489 @@ -95690,13 +97526,11 @@ entities: - uid: 8493 components: - type: Transform - rot: -1.5707963267948966 rad pos: 30.5,33.5 parent: 2 - uid: 8499 components: - type: Transform - rot: -1.5707963267948966 rad pos: 46.5,29.5 parent: 2 - uid: 8502 @@ -95707,7 +97541,6 @@ entities: - uid: 8516 components: - type: Transform - rot: 3.141592653589793 rad pos: 38.5,45.5 parent: 2 - uid: 8542 @@ -95718,7 +97551,6 @@ entities: - uid: 8582 components: - type: Transform - rot: 3.141592653589793 rad pos: 43.5,32.5 parent: 2 - uid: 8591 @@ -95744,7 +97576,6 @@ entities: - uid: 8613 components: - type: Transform - rot: 3.141592653589793 rad pos: 42.5,37.5 parent: 2 - uid: 8617 @@ -95755,13 +97586,11 @@ entities: - uid: 8637 components: - type: Transform - rot: 3.141592653589793 rad pos: 29.5,32.5 parent: 2 - uid: 8693 components: - type: Transform - rot: 1.5707963267948966 rad pos: 52.5,22.5 parent: 2 - uid: 8698 @@ -95782,7 +97611,6 @@ entities: - uid: 8702 components: - type: Transform - rot: -1.5707963267948966 rad pos: 45.5,26.5 parent: 2 - uid: 8703 @@ -95918,13 +97746,11 @@ entities: - uid: 8795 components: - type: Transform - rot: 1.5707963267948966 rad pos: 61.5,26.5 parent: 2 - uid: 8796 components: - type: Transform - rot: -1.5707963267948966 rad pos: 48.5,43.5 parent: 2 - uid: 8811 @@ -96035,7 +97861,6 @@ entities: - uid: 8983 components: - type: Transform - rot: 3.141592653589793 rad pos: 48.5,51.5 parent: 2 - uid: 9037 @@ -96046,7 +97871,6 @@ entities: - uid: 9041 components: - type: Transform - rot: 1.5707963267948966 rad pos: 39.5,37.5 parent: 2 - uid: 9154 @@ -96067,7 +97891,6 @@ entities: - uid: 9177 components: - type: Transform - rot: 1.5707963267948966 rad pos: 60.5,28.5 parent: 2 - uid: 9212 @@ -96078,7 +97901,6 @@ entities: - uid: 9214 components: - type: Transform - rot: 3.141592653589793 rad pos: 43.5,40.5 parent: 2 - uid: 9217 @@ -96104,7 +97926,6 @@ entities: - uid: 9223 components: - type: Transform - rot: -1.5707963267948966 rad pos: 49.5,37.5 parent: 2 - uid: 9247 @@ -96115,13 +97936,11 @@ entities: - uid: 9276 components: - type: Transform - rot: 1.5707963267948966 rad pos: 45.5,37.5 parent: 2 - uid: 9277 components: - type: Transform - rot: 1.5707963267948966 rad pos: 60.5,26.5 parent: 2 - uid: 9278 @@ -96137,7 +97956,6 @@ entities: - uid: 9320 components: - type: Transform - rot: -1.5707963267948966 rad pos: 56.5,54.5 parent: 2 - uid: 9346 @@ -96148,25 +97966,21 @@ entities: - uid: 9401 components: - type: Transform - rot: 1.5707963267948966 rad pos: 44.5,37.5 parent: 2 - uid: 9433 components: - type: Transform - rot: 1.5707963267948966 rad pos: 65.5,9.5 parent: 2 - uid: 9585 components: - type: Transform - rot: 1.5707963267948966 rad pos: 61.5,28.5 parent: 2 - uid: 9749 components: - type: Transform - rot: 1.5707963267948966 rad pos: 11.5,-17.5 parent: 2 - uid: 9860 @@ -96197,7 +98011,6 @@ entities: - uid: 9956 components: - type: Transform - rot: 1.5707963267948966 rad pos: 91.5,6.5 parent: 2 - uid: 10044 @@ -96333,7 +98146,6 @@ entities: - uid: 10115 components: - type: Transform - rot: 1.5707963267948966 rad pos: 49.5,22.5 parent: 2 - uid: 10140 @@ -96389,31 +98201,26 @@ entities: - uid: 10279 components: - type: Transform - rot: 1.5707963267948966 rad pos: 33.5,33.5 parent: 2 - uid: 10389 components: - type: Transform - rot: -1.5707963267948966 rad pos: 49.5,38.5 parent: 2 - uid: 10390 components: - type: Transform - rot: 3.141592653589793 rad pos: 34.5,40.5 parent: 2 - uid: 10401 components: - type: Transform - rot: 3.141592653589793 rad pos: 38.5,46.5 parent: 2 - uid: 10414 components: - type: Transform - rot: 3.141592653589793 rad pos: 63.5,35.5 parent: 2 - uid: 10434 @@ -96424,7 +98231,6 @@ entities: - uid: 10442 components: - type: Transform - rot: 3.141592653589793 rad pos: 63.5,36.5 parent: 2 - uid: 10446 @@ -96435,13 +98241,11 @@ entities: - uid: 10588 components: - type: Transform - rot: 3.141592653589793 rad pos: 52.5,25.5 parent: 2 - uid: 10713 components: - type: Transform - rot: 3.141592653589793 rad pos: 63.5,18.5 parent: 2 - uid: 10715 @@ -96482,7 +98286,6 @@ entities: - uid: 10770 components: - type: Transform - rot: -1.5707963267948966 rad pos: 79.5,32.5 parent: 2 - uid: 10831 @@ -96508,7 +98311,6 @@ entities: - uid: 10881 components: - type: Transform - rot: 3.141592653589793 rad pos: 50.5,25.5 parent: 2 - uid: 10967 @@ -96544,31 +98346,26 @@ entities: - uid: 11100 components: - type: Transform - rot: 3.141592653589793 rad pos: 59.5,51.5 parent: 2 - uid: 11145 components: - type: Transform - rot: 3.141592653589793 rad pos: 63.5,51.5 parent: 2 - uid: 11146 components: - type: Transform - rot: -1.5707963267948966 rad pos: 58.5,53.5 parent: 2 - uid: 11192 components: - type: Transform - rot: -1.5707963267948966 rad pos: 54.5,53.5 parent: 2 - uid: 11221 components: - type: Transform - rot: -1.5707963267948966 rad pos: 54.5,54.5 parent: 2 - uid: 11223 @@ -96584,7 +98381,6 @@ entities: - uid: 11663 components: - type: Transform - rot: 3.141592653589793 rad pos: 48.5,48.5 parent: 2 - uid: 11691 @@ -96670,13 +98466,11 @@ entities: - uid: 12367 components: - type: Transform - rot: 1.5707963267948966 rad pos: 43.5,37.5 parent: 2 - uid: 12415 components: - type: Transform - rot: -1.5707963267948966 rad pos: 32.5,32.5 parent: 2 - uid: 12424 @@ -96692,13 +98486,11 @@ entities: - uid: 12436 components: - type: Transform - rot: 3.141592653589793 rad pos: 48.5,49.5 parent: 2 - uid: 12443 components: - type: Transform - rot: 1.5707963267948966 rad pos: 33.5,34.5 parent: 2 - uid: 12446 @@ -96759,13 +98551,11 @@ entities: - uid: 12896 components: - type: Transform - rot: -1.5707963267948966 rad pos: 50.5,-43.5 parent: 2 - uid: 12897 components: - type: Transform - rot: -1.5707963267948966 rad pos: 48.5,-43.5 parent: 2 - uid: 12898 @@ -97101,7 +98891,6 @@ entities: - uid: 13526 components: - type: Transform - rot: 3.141592653589793 rad pos: 45.5,44.5 parent: 2 - uid: 13561 @@ -97447,7 +99236,6 @@ entities: - uid: 14091 components: - type: Transform - rot: -1.5707963267948966 rad pos: 65.5,13.5 parent: 2 - uid: 14132 @@ -97818,7 +99606,6 @@ entities: - uid: 14329 components: - type: Transform - rot: -1.5707963267948966 rad pos: 42.5,38.5 parent: 2 - uid: 14340 @@ -98059,13 +99846,11 @@ entities: - uid: 14550 components: - type: Transform - rot: -1.5707963267948966 rad pos: 44.5,38.5 parent: 2 - uid: 14583 components: - type: Transform - rot: -1.5707963267948966 rad pos: 43.5,38.5 parent: 2 - uid: 14745 @@ -98101,7 +99886,6 @@ entities: - uid: 14787 components: - type: Transform - rot: -1.5707963267948966 rad pos: 45.5,38.5 parent: 2 - uid: 14795 @@ -98167,25 +99951,21 @@ entities: - uid: 14823 components: - type: Transform - rot: 3.141592653589793 rad pos: 38.5,48.5 parent: 2 - uid: 14872 components: - type: Transform - rot: -1.5707963267948966 rad pos: 49.5,43.5 parent: 2 - uid: 14874 components: - type: Transform - rot: -1.5707963267948966 rad pos: 46.5,43.5 parent: 2 - uid: 14888 components: - type: Transform - rot: 3.141592653589793 rad pos: 38.5,47.5 parent: 2 - uid: 14890 @@ -98196,13 +99976,11 @@ entities: - uid: 14892 components: - type: Transform - rot: -1.5707963267948966 rad pos: 63.5,37.5 parent: 2 - uid: 14915 components: - type: Transform - rot: 1.5707963267948966 rad pos: 58.5,22.5 parent: 2 - uid: 14920 @@ -98268,13 +100046,11 @@ entities: - uid: 15184 components: - type: Transform - rot: 3.141592653589793 rad pos: 43.5,44.5 parent: 2 - uid: 15261 components: - type: Transform - rot: -1.5707963267948966 rad pos: 49.5,-43.5 parent: 2 - uid: 15332 @@ -98295,37 +100071,31 @@ entities: - uid: 15363 components: - type: Transform - rot: 1.5707963267948966 rad pos: 42.5,33.5 parent: 2 - uid: 15365 components: - type: Transform - rot: 1.5707963267948966 rad pos: 33.5,32.5 parent: 2 - uid: 15369 components: - type: Transform - rot: -1.5707963267948966 rad pos: 58.5,54.5 parent: 2 - uid: 15372 components: - type: Transform - rot: 3.141592653589793 rad pos: 44.5,40.5 parent: 2 - uid: 15512 components: - type: Transform - rot: 1.5707963267948966 rad pos: 60.5,21.5 parent: 2 - uid: 15526 components: - type: Transform - rot: 1.5707963267948966 rad pos: 58.5,25.5 parent: 2 - uid: 15532 @@ -98351,27 +100121,63 @@ entities: - uid: 15544 components: - type: Transform - rot: 3.141592653589793 rad pos: 51.5,25.5 parent: 2 - uid: 15564 components: - type: Transform - rot: 1.5707963267948966 rad pos: 59.5,21.5 parent: 2 - uid: 15565 components: - type: Transform - rot: 1.5707963267948966 rad pos: 58.5,21.5 parent: 2 - uid: 15784 components: - type: Transform - rot: 1.5707963267948966 rad pos: 89.5,5.5 parent: 2 + - uid: 16027 + components: + - type: Transform + pos: -28.5,-2.5 + parent: 2 + - uid: 16036 + components: + - type: Transform + pos: -28.5,-23.5 + parent: 2 + - uid: 16037 + components: + - type: Transform + pos: -29.5,-23.5 + parent: 2 + - uid: 16038 + components: + - type: Transform + pos: -29.5,-19.5 + parent: 2 + - uid: 16039 + components: + - type: Transform + pos: -28.5,-19.5 + parent: 2 + - uid: 16040 + components: + - type: Transform + pos: -29.5,-2.5 + parent: 2 + - uid: 16041 + components: + - type: Transform + pos: -28.5,1.5 + parent: 2 + - uid: 16042 + components: + - type: Transform + pos: -29.5,1.5 + parent: 2 - proto: WallReinforcedRust entities: - uid: 14967 @@ -98464,7 +100270,6 @@ entities: - uid: 185 components: - type: Transform - rot: 3.141592653589793 rad pos: 36.5,17.5 parent: 2 - uid: 186 @@ -98615,7 +100420,6 @@ entities: - uid: 449 components: - type: Transform - rot: 1.5707963267948966 rad pos: 86.5,3.5 parent: 2 - uid: 452 @@ -98666,7 +100470,6 @@ entities: - uid: 474 components: - type: Transform - rot: 3.141592653589793 rad pos: 68.5,38.5 parent: 2 - uid: 475 @@ -99667,7 +101470,6 @@ entities: - uid: 1828 components: - type: Transform - rot: -1.5707963267948966 rad pos: 7.5,-2.5 parent: 2 - uid: 1877 @@ -100028,25 +101830,21 @@ entities: - uid: 2224 components: - type: Transform - rot: -1.5707963267948966 rad pos: 7.5,-3.5 parent: 2 - uid: 2242 components: - type: Transform - rot: -1.5707963267948966 rad pos: 7.5,-4.5 parent: 2 - uid: 2247 components: - type: Transform - rot: -1.5707963267948966 rad pos: 7.5,-5.5 parent: 2 - uid: 2250 components: - type: Transform - rot: -1.5707963267948966 rad pos: 7.5,-6.5 parent: 2 - uid: 2256 @@ -100057,7 +101855,6 @@ entities: - uid: 2291 components: - type: Transform - rot: -1.5707963267948966 rad pos: 10.5,-3.5 parent: 2 - uid: 2299 @@ -100078,25 +101875,21 @@ entities: - uid: 2354 components: - type: Transform - rot: 3.141592653589793 rad pos: 56.5,44.5 parent: 2 - uid: 2360 components: - type: Transform - rot: 3.141592653589793 rad pos: 64.5,46.5 parent: 2 - uid: 2368 components: - type: Transform - rot: 3.141592653589793 rad pos: 68.5,41.5 parent: 2 - uid: 2489 components: - type: Transform - rot: -1.5707963267948966 rad pos: 10.5,-4.5 parent: 2 - uid: 2496 @@ -100397,7 +102190,6 @@ entities: - uid: 2953 components: - type: Transform - rot: -1.5707963267948966 rad pos: 11.5,-4.5 parent: 2 - uid: 2958 @@ -100408,13 +102200,11 @@ entities: - uid: 2959 components: - type: Transform - rot: -1.5707963267948966 rad pos: 12.5,-4.5 parent: 2 - uid: 2960 components: - type: Transform - rot: -1.5707963267948966 rad pos: 12.5,-9.5 parent: 2 - uid: 2969 @@ -100590,25 +102380,21 @@ entities: - uid: 3022 components: - type: Transform - rot: -1.5707963267948966 rad pos: 11.5,-9.5 parent: 2 - uid: 3023 components: - type: Transform - rot: -1.5707963267948966 rad pos: 10.5,-9.5 parent: 2 - uid: 3025 components: - type: Transform - rot: -1.5707963267948966 rad pos: 10.5,-10.5 parent: 2 - uid: 3026 components: - type: Transform - rot: -1.5707963267948966 rad pos: 8.5,-10.5 parent: 2 - uid: 3027 @@ -100721,12 +102507,6 @@ entities: - type: Transform pos: 49.5,12.5 parent: 2 - - uid: 3080 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 64.5,45.5 - parent: 2 - uid: 3092 components: - type: Transform @@ -100735,7 +102515,6 @@ entities: - uid: 3128 components: - type: Transform - rot: 3.141592653589793 rad pos: 54.5,46.5 parent: 2 - uid: 3130 @@ -100796,7 +102575,6 @@ entities: - uid: 3429 components: - type: Transform - rot: -1.5707963267948966 rad pos: 10.5,-2.5 parent: 2 - uid: 3442 @@ -101292,7 +103070,6 @@ entities: - uid: 4404 components: - type: Transform - rot: 3.141592653589793 rad pos: 49.5,35.5 parent: 2 - uid: 4843 @@ -101348,7 +103125,6 @@ entities: - uid: 5487 components: - type: Transform - rot: 1.5707963267948966 rad pos: 47.5,20.5 parent: 2 - uid: 5496 @@ -101374,13 +103150,11 @@ entities: - uid: 6198 components: - type: Transform - rot: 3.141592653589793 rad pos: 65.5,38.5 parent: 2 - uid: 6212 components: - type: Transform - rot: 3.141592653589793 rad pos: 65.5,37.5 parent: 2 - uid: 6481 @@ -101391,7 +103165,6 @@ entities: - uid: 6487 components: - type: Transform - rot: 3.141592653589793 rad pos: 55.5,46.5 parent: 2 - uid: 6494 @@ -101427,7 +103200,6 @@ entities: - uid: 6521 components: - type: Transform - rot: 3.141592653589793 rad pos: 57.5,46.5 parent: 2 - uid: 6530 @@ -101438,7 +103210,6 @@ entities: - uid: 6533 components: - type: Transform - rot: 3.141592653589793 rad pos: 65.5,40.5 parent: 2 - uid: 6574 @@ -101449,7 +103220,6 @@ entities: - uid: 6578 components: - type: Transform - rot: -1.5707963267948966 rad pos: 40.5,-6.5 parent: 2 - uid: 6582 @@ -101460,7 +103230,6 @@ entities: - uid: 6703 components: - type: Transform - rot: -1.5707963267948966 rad pos: 40.5,-3.5 parent: 2 - uid: 6776 @@ -101491,7 +103260,6 @@ entities: - uid: 6921 components: - type: Transform - rot: 3.141592653589793 rad pos: 16.5,17.5 parent: 2 - uid: 7035 @@ -101527,7 +103295,6 @@ entities: - uid: 8175 components: - type: Transform - rot: 3.141592653589793 rad pos: 71.5,36.5 parent: 2 - uid: 8251 @@ -101543,7 +103310,6 @@ entities: - uid: 8430 components: - type: Transform - rot: 3.141592653589793 rad pos: 36.5,18.5 parent: 2 - uid: 8435 @@ -101574,7 +103340,6 @@ entities: - uid: 8469 components: - type: Transform - rot: 1.5707963267948966 rad pos: 67.5,45.5 parent: 2 - uid: 8504 @@ -101582,21 +103347,14 @@ entities: - type: Transform pos: 64.5,37.5 parent: 2 - - uid: 8506 - components: - - type: Transform - pos: 64.5,42.5 - parent: 2 - uid: 8507 components: - type: Transform - rot: 3.141592653589793 rad pos: 65.5,41.5 parent: 2 - uid: 8509 components: - type: Transform - rot: 1.5707963267948966 rad pos: 65.5,45.5 parent: 2 - uid: 8518 @@ -101677,7 +103435,6 @@ entities: - uid: 9238 components: - type: Transform - rot: -1.5707963267948966 rad pos: 41.5,17.5 parent: 2 - uid: 9240 @@ -101688,7 +103445,6 @@ entities: - uid: 9256 components: - type: Transform - rot: 3.141592653589793 rad pos: 56.5,52.5 parent: 2 - uid: 9260 @@ -101699,30 +103455,21 @@ entities: - uid: 9280 components: - type: Transform - rot: 3.141592653589793 rad pos: 69.5,36.5 parent: 2 - uid: 9298 components: - type: Transform - rot: 3.141592653589793 rad pos: 52.5,46.5 parent: 2 - uid: 9300 components: - type: Transform - rot: 1.5707963267948966 rad pos: 64.5,45.5 parent: 2 - - uid: 9334 - components: - - type: Transform - pos: 64.5,37.5 - parent: 2 - uid: 9340 components: - type: Transform - rot: 3.141592653589793 rad pos: 56.5,46.5 parent: 2 - uid: 9405 @@ -101768,7 +103515,6 @@ entities: - uid: 10307 components: - type: Transform - rot: 3.141592653589793 rad pos: 70.5,36.5 parent: 2 - uid: 10313 @@ -101784,7 +103530,6 @@ entities: - uid: 10399 components: - type: Transform - rot: -1.5707963267948966 rad pos: 55.5,9.5 parent: 2 - uid: 10608 @@ -101810,7 +103555,6 @@ entities: - uid: 10839 components: - type: Transform - rot: -1.5707963267948966 rad pos: 50.5,44.5 parent: 2 - uid: 10861 @@ -101821,7 +103565,6 @@ entities: - uid: 10882 components: - type: Transform - rot: -1.5707963267948966 rad pos: 55.5,11.5 parent: 2 - uid: 11020 @@ -101897,7 +103640,6 @@ entities: - uid: 12550 components: - type: Transform - rot: 1.5707963267948966 rad pos: 29.5,19.5 parent: 2 - uid: 12562 @@ -101913,19 +103655,16 @@ entities: - uid: 13591 components: - type: Transform - rot: 1.5707963267948966 rad pos: 55.5,12.5 parent: 2 - uid: 13609 components: - type: Transform - rot: -1.5707963267948966 rad pos: 51.5,44.5 parent: 2 - uid: 13651 components: - type: Transform - rot: -1.5707963267948966 rad pos: 55.5,8.5 parent: 2 - uid: 13684 @@ -101936,151 +103675,121 @@ entities: - uid: 14367 components: - type: Transform - rot: -1.5707963267948966 rad pos: 61.5,16.5 parent: 2 - uid: 14377 components: - type: Transform - rot: 3.141592653589793 rad pos: 49.5,36.5 parent: 2 - uid: 14385 components: - type: Transform - rot: 1.5707963267948966 rad pos: 52.5,38.5 parent: 2 - uid: 14386 components: - type: Transform - rot: 1.5707963267948966 rad pos: 55.5,31.5 parent: 2 - uid: 14390 components: - type: Transform - rot: 1.5707963267948966 rad pos: 31.5,29.5 parent: 2 - uid: 14392 components: - type: Transform - rot: 1.5707963267948966 rad pos: 43.5,26.5 parent: 2 - uid: 14395 components: - type: Transform - rot: 1.5707963267948966 rad pos: 42.5,26.5 parent: 2 - uid: 14410 components: - type: Transform - rot: 1.5707963267948966 rad pos: 44.5,26.5 parent: 2 - uid: 14414 components: - type: Transform - rot: 1.5707963267948966 rad pos: 55.5,33.5 parent: 2 - uid: 14415 components: - type: Transform - rot: 1.5707963267948966 rad pos: 41.5,24.5 parent: 2 - uid: 14418 components: - type: Transform - rot: 3.141592653589793 rad pos: 49.5,34.5 parent: 2 - uid: 14421 components: - type: Transform - rot: 1.5707963267948966 rad pos: 57.5,34.5 parent: 2 - uid: 14422 components: - type: Transform - rot: 1.5707963267948966 rad pos: 55.5,34.5 parent: 2 - uid: 14427 components: - type: Transform - rot: 1.5707963267948966 rad pos: 41.5,26.5 parent: 2 - uid: 14429 components: - type: Transform - rot: 1.5707963267948966 rad pos: 41.5,28.5 parent: 2 - uid: 14430 components: - type: Transform - rot: 1.5707963267948966 rad pos: 41.5,27.5 parent: 2 - uid: 14525 components: - type: Transform - rot: 1.5707963267948966 rad pos: 57.5,37.5 parent: 2 - - uid: 14566 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 52.5,46.5 - parent: 2 - uid: 14582 components: - type: Transform - rot: 1.5707963267948966 rad pos: 51.5,46.5 parent: 2 - uid: 14587 components: - type: Transform - rot: 1.5707963267948966 rad pos: 51.5,45.5 parent: 2 - uid: 14599 components: - type: Transform - rot: 1.5707963267948966 rad pos: 41.5,29.5 parent: 2 - uid: 14600 components: - type: Transform - rot: 1.5707963267948966 rad pos: 56.5,38.5 parent: 2 - uid: 14651 components: - type: Transform - rot: 1.5707963267948966 rad pos: 52.5,36.5 parent: 2 - uid: 14656 components: - type: Transform - rot: 1.5707963267948966 rad pos: 52.5,34.5 parent: 2 - uid: 14658 components: - type: Transform - rot: 1.5707963267948966 rad pos: 54.5,34.5 parent: 2 - uid: 14725 @@ -102101,31 +103810,26 @@ entities: - uid: 14827 components: - type: Transform - rot: 1.5707963267948966 rad pos: 30.5,19.5 parent: 2 - uid: 14830 components: - type: Transform - rot: 1.5707963267948966 rad pos: 59.5,37.5 parent: 2 - uid: 14860 components: - type: Transform - rot: 1.5707963267948966 rad pos: 56.5,37.5 parent: 2 - uid: 14861 components: - type: Transform - rot: 1.5707963267948966 rad pos: 52.5,35.5 parent: 2 - uid: 14913 components: - type: Transform - rot: 1.5707963267948966 rad pos: 86.5,5.5 parent: 2 - uid: 15006 @@ -102136,43 +103840,36 @@ entities: - uid: 15413 components: - type: Transform - rot: 3.141592653589793 rad pos: 56.5,53.5 parent: 2 - uid: 15416 components: - type: Transform - rot: -1.5707963267948966 rad pos: 68.5,45.5 parent: 2 - uid: 15417 components: - type: Transform - rot: -1.5707963267948966 rad pos: 68.5,46.5 parent: 2 - uid: 15418 components: - type: Transform - rot: -1.5707963267948966 rad pos: 68.5,44.5 parent: 2 - uid: 15419 components: - type: Transform - rot: -1.5707963267948966 rad pos: 68.5,43.5 parent: 2 - uid: 15619 components: - type: Transform - rot: 1.5707963267948966 rad pos: 64.5,47.5 parent: 2 - uid: 15622 components: - type: Transform - rot: -1.5707963267948966 rad pos: 70.5,43.5 parent: 2 - uid: 15644 @@ -102797,6 +104494,12 @@ entities: rot: -1.5707963267948966 rad pos: 13.5,-1.5 parent: 2 + - uid: 13330 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,-28.5 + parent: 2 - uid: 14990 components: - type: Transform From e5c6c8835078a87bac893e416dab330a5f0cac6b Mon Sep 17 00:00:00 2001 From: Thomas <87614336+Aeshus@users.noreply.github.com> Date: Mon, 29 Jun 2026 07:19:21 -0500 Subject: [PATCH 07/47] Fix Context Menus Not Orphaning Correctly (#44085) The change to remove DisposeAllChildren in favor of RemoveAllChildren didn't account for the fact that some controls have custom Dispose behavior that wasn't getting triggered correctly. I fixed it by switching it to ExitedTree + Orphan, which made it magically work again --- Content.Client/ContextMenu/UI/ContextMenuElement.xaml.cs | 6 +++--- Content.Client/ContextMenu/UI/ContextMenuPopup.xaml.cs | 4 ++-- Content.Client/ContextMenu/UI/ContextMenuUIController.cs | 2 +- Content.Client/ContextMenu/UI/EntityMenuElement.cs | 4 ++-- Content.Client/ContextMenu/UI/EntityMenuUIController.cs | 6 +++--- 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/Content.Client/ContextMenu/UI/ContextMenuElement.xaml.cs b/Content.Client/ContextMenu/UI/ContextMenuElement.xaml.cs index 91d34b037b..662759ce14 100644 --- a/Content.Client/ContextMenu/UI/ContextMenuElement.xaml.cs +++ b/Content.Client/ContextMenu/UI/ContextMenuElement.xaml.cs @@ -55,10 +55,10 @@ namespace Content.Client.ContextMenu.UI Text = text; } - protected override void Dispose(bool disposing) + protected override void ExitedTree() { - base.Dispose(disposing); - _subMenu?.Dispose(); + base.ExitedTree(); + _subMenu?.Orphan(); _subMenu = null; ParentMenu = null; } diff --git a/Content.Client/ContextMenu/UI/ContextMenuPopup.xaml.cs b/Content.Client/ContextMenu/UI/ContextMenuPopup.xaml.cs index dd5642ae45..0e2fd8a070 100644 --- a/Content.Client/ContextMenu/UI/ContextMenuPopup.xaml.cs +++ b/Content.Client/ContextMenu/UI/ContextMenuPopup.xaml.cs @@ -70,11 +70,11 @@ namespace Content.Client.ContextMenu.UI }; } - protected override void Dispose(bool disposing) + protected override void ExitedTree() { + base.ExitedTree(); MenuBody.OnChildRemoved -= ctrl => _uiController.OnRemoveElement(this, ctrl); ParentElement = null; - base.Dispose(disposing); } } } diff --git a/Content.Client/ContextMenu/UI/ContextMenuUIController.cs b/Content.Client/ContextMenu/UI/ContextMenuUIController.cs index ca173ff1e1..37a1e71179 100644 --- a/Content.Client/ContextMenu/UI/ContextMenuUIController.cs +++ b/Content.Client/ContextMenu/UI/ContextMenuUIController.cs @@ -86,7 +86,7 @@ namespace Content.Client.ContextMenu.UI Close(); RootMenu.OnPopupHide -= Close; - RootMenu.Dispose(); + RootMenu.Orphan(); RootMenu = default!; } diff --git a/Content.Client/ContextMenu/UI/EntityMenuElement.cs b/Content.Client/ContextMenu/UI/EntityMenuElement.cs index 175693810a..4c58f9f2e3 100644 --- a/Content.Client/ContextMenu/UI/EntityMenuElement.cs +++ b/Content.Client/ContextMenu/UI/EntityMenuElement.cs @@ -41,9 +41,9 @@ namespace Content.Client.ContextMenu.UI UpdateEntity(); } - protected override void Dispose(bool disposing) + protected override void ExitedTree() { - base.Dispose(disposing); + base.ExitedTree(); Entity = null; Count = 0; } diff --git a/Content.Client/ContextMenu/UI/EntityMenuUIController.cs b/Content.Client/ContextMenu/UI/EntityMenuUIController.cs index 19c0e5cb6c..1674a3bc1b 100644 --- a/Content.Client/ContextMenu/UI/EntityMenuUIController.cs +++ b/Content.Client/ContextMenu/UI/EntityMenuUIController.cs @@ -312,7 +312,7 @@ namespace Content.Client.ContextMenu.UI // remove the element var parent = element.ParentMenu?.ParentElement; - element.Dispose(); + element.Orphan(); Elements.Remove(entity); // update any parent elements @@ -340,7 +340,7 @@ namespace Content.Client.ContextMenu.UI if (entity == null) { // This whole element has no associated entities. We should remove it - element.Dispose(); + element.Orphan(); return; } @@ -352,7 +352,7 @@ namespace Content.Client.ContextMenu.UI // There was only one entity in the sub-menu. So we will just remove the sub-menu and point directly to // that entity. element.Entity = entity; - element.SubMenu.Dispose(); + element.SubMenu.Orphan(); element.SubMenu = null; Elements[entity.Value] = element; } From fe445a53fe81ee5f7328a316fd109a270bebb9ab Mon Sep 17 00:00:00 2001 From: OxidisedGearz <108626116+OxidisedGearz@users.noreply.github.com> Date: Mon, 29 Jun 2026 07:21:03 -0500 Subject: [PATCH 08/47] Rename PA strength wire to STR (#44403) * change wire-name-pa-strength in wire-names.ftl to STR --- Resources/Locale/en-US/wires/wire-names.ftl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Locale/en-US/wires/wire-names.ftl b/Resources/Locale/en-US/wires/wire-names.ftl index 1c35bdeb8c..602230a034 100644 --- a/Resources/Locale/en-US/wires/wire-names.ftl +++ b/Resources/Locale/en-US/wires/wire-names.ftl @@ -64,7 +64,7 @@ wire-name-vending-eject = VEND wire-name-pa-keyboard = KEYB wire-name-pa-limiter = LIMT wire-name-pa-power = POWR -wire-name-pa-strength = STRC +wire-name-pa-strength = STR wire-name-bomb-live = LIVE wire-name-bomb-delay = DLAY wire-name-bomb-proceed = PRCD From 7a5e1708f8880c67972bb215cef4b6f91db57fa5 Mon Sep 17 00:00:00 2001 From: DevArchwave <168038123+DevArchwave@users.noreply.github.com> Date: Mon, 29 Jun 2026 09:22:13 -0300 Subject: [PATCH 09/47] Fixes the Draw Depth of Ghost Pipe Sprites (#44086) Fixes ghost sprites draw depth --- Content.Client/Construction/ConstructionSystem.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Content.Client/Construction/ConstructionSystem.cs b/Content.Client/Construction/ConstructionSystem.cs index bf780fde7e..b803d7c7ea 100644 --- a/Content.Client/Construction/ConstructionSystem.cs +++ b/Content.Client/Construction/ConstructionSystem.cs @@ -312,9 +312,9 @@ namespace Content.Client.Construction var dummy = EntityManager.SpawnEntity(targetProtoId, MapCoordinates.Nullspace); var targetSprite = EnsureComp(dummy); EntityManager.System().OnChangeData(dummy, targetSprite); - + var ghostDrawDepth = sprite.DrawDepth; _sprite.CopySprite((dummy, targetSprite), (ghost.Value, sprite)); - + _sprite.SetDrawDepth((ghost.Value, sprite), ghostDrawDepth); for (var i = 0; i < sprite.AllLayers.Count(); i++) { sprite.LayerSetShader(i, "unshaded"); From 4d64635311d7faa0472ebdab7465a85e328d2895 Mon Sep 17 00:00:00 2001 From: Jessica M Date: Mon, 29 Jun 2026 12:18:34 +0000 Subject: [PATCH 10/47] Add BUI Rider template (#43857) BUI template From fde9909f98c02d47443915ce931baaebd85d0813 Mon Sep 17 00:00:00 2001 From: ScarKy0 <106310278+ScarKy0@users.noreply.github.com> Date: Mon, 29 Jun 2026 14:51:58 +0200 Subject: [PATCH 11/47] Make once-to-station locker no access by default (#44411) * fuck * fuck squared --- .../Storage/Closets/Lockers/lockers.yml | 45 ++++++++++--------- 1 file changed, 25 insertions(+), 20 deletions(-) diff --git a/Resources/Prototypes/Entities/Structures/Storage/Closets/Lockers/lockers.yml b/Resources/Prototypes/Entities/Structures/Storage/Closets/Lockers/lockers.yml index 1410eb4e1c..93244037cd 100644 --- a/Resources/Prototypes/Entities/Structures/Storage/Closets/Lockers/lockers.yml +++ b/Resources/Prototypes/Entities/Structures/Storage/Closets/Lockers/lockers.yml @@ -549,30 +549,35 @@ # Bluespace - type: entity + parent: LockerBaseSecure id: LockerBluespaceStation name: bluespace locker - suffix: once to station - parent: LockerSyndicatePersonal description: Advanced locker technology. + suffix: once to station components: - - type: ArrivalsBlacklist - - type: BluespaceLocker - minBluespaceLinks: 1 - behaviorProperties: - delay: 1 - actOnOpen: false - bluespaceEffectOnInit: true - bluespaceEffectOnTeleportSource: true - bluespaceEffectOnTeleportTarget: true - destroyAfterUses: 1 - destroyAfterUsesMinItemsToCountUse: 1 - destroyType: Delete - autoLinksUseProperties: true - autoLinkProperties: - actOnOpen: false - actOnClose: false - destroyAfterUses: 2 - destroyType: DeleteComponent + - type: Appearance + - type: EntityStorageVisuals + stateBaseClosed: syndicate + stateDoorOpen: syndicate_open + stateDoorClosed: syndicate_door + - type: ArrivalsBlacklist + - type: BluespaceLocker + minBluespaceLinks: 1 + behaviorProperties: + delay: 1 + actOnOpen: false + bluespaceEffectOnInit: true + bluespaceEffectOnTeleportSource: true + bluespaceEffectOnTeleportTarget: true + destroyAfterUses: 1 + destroyAfterUsesMinItemsToCountUse: 1 + destroyType: Delete + autoLinksUseProperties: true + autoLinkProperties: + actOnOpen: false + actOnClose: false + destroyAfterUses: 2 + destroyType: DeleteComponent # Clown - type: entity From ba2e1856ebea03e54e6cd2cf30804fb81c62891f Mon Sep 17 00:00:00 2001 From: Samuka <47865393+Samuka-C@users.noreply.github.com> Date: Mon, 29 Jun 2026 16:03:37 -0300 Subject: [PATCH 12/47] Toggle dead chat (#44367) * add new cvar * add command to change the cvar * send chat alert when the cvar is changed * add new button to server tab to toggle that cvar * block deadchat * make it partial * empty commit * add completion * use the helper * new line in the end * remove white line * fix for sending server announcmente while the server is still loading * just use ? * remove changes to chat manager * make messages dull /j --------- Co-authored-by: Beck Thompson --- .../Administration/UI/Tabs/ServerTab.xaml | 1 + .../Administration/UI/Tabs/ServerTab.xaml.cs | 8 +++- .../Chat/Commands/SetDeadChatCommand.cs | 46 +++++++++++++++++++ .../Chat/Systems/ChatSystem.PrivateAPI.cs | 3 ++ Content.Server/Chat/Systems/ChatSystem.cs | 13 ++++++ Content.Shared/CCVar/CCVars.Chat.Dead.cs | 13 ++++++ .../commands/set-dead-chat-command.ftl | 4 ++ .../administration/ui/tabs/server-tab.ftl | 1 + .../en-US/chat/managers/chat-manager.ftl | 2 + 9 files changed, 90 insertions(+), 1 deletion(-) create mode 100644 Content.Server/Chat/Commands/SetDeadChatCommand.cs create mode 100644 Content.Shared/CCVar/CCVars.Chat.Dead.cs create mode 100644 Resources/Locale/en-US/administration/commands/set-dead-chat-command.ftl diff --git a/Content.Client/Administration/UI/Tabs/ServerTab.xaml b/Content.Client/Administration/UI/Tabs/ServerTab.xaml index 7898df6c1b..f3a6421aea 100644 --- a/Content.Client/Administration/UI/Tabs/ServerTab.xaml +++ b/Content.Client/Administration/UI/Tabs/ServerTab.xaml @@ -9,6 +9,7 @@ + diff --git a/Content.Client/Administration/UI/Tabs/ServerTab.xaml.cs b/Content.Client/Administration/UI/Tabs/ServerTab.xaml.cs index 1c83ff2847..e8ba41a3fe 100644 --- a/Content.Client/Administration/UI/Tabs/ServerTab.xaml.cs +++ b/Content.Client/Administration/UI/Tabs/ServerTab.xaml.cs @@ -1,4 +1,4 @@ -using System.Globalization; +using System.Globalization; using Content.Shared.CCVar; using Robust.Client.AutoGenerated; using Robust.Client.Console; @@ -21,6 +21,7 @@ namespace Content.Client.Administration.UI.Tabs _config.OnValueChanged(CCVars.OocEnabled, OocEnabledChanged, true); _config.OnValueChanged(CCVars.LoocEnabled, LoocEnabledChanged, true); + _config.OnValueChanged(CCVars.DeadChatEnabled, DeadChatEnabledChanged, true); _config.OnValueChanged(CCVars.AfkTime, AfkTimeChanged, true); _config.OnValueChanged(CCVars.AdminAfkTime, AdminAfkTimeChanged, true); _config.OnValueChanged(CCVars.AfkConfirmTimeout, AfkConfirmTimeoutChanged, true); @@ -57,6 +58,11 @@ namespace Content.Client.Administration.UI.Tabs SetLoocButton.Pressed = value; } + private void DeadChatEnabledChanged(bool value) + { + SetDeadChatButton.Pressed = value; + } + private void AfkTimeChanged(float value) { AfkTime.PlaceHolder = value.ToString(CultureInfo.InvariantCulture); diff --git a/Content.Server/Chat/Commands/SetDeadChatCommand.cs b/Content.Server/Chat/Commands/SetDeadChatCommand.cs new file mode 100644 index 0000000000..20cd716475 --- /dev/null +++ b/Content.Server/Chat/Commands/SetDeadChatCommand.cs @@ -0,0 +1,46 @@ +using Content.Server.Administration; +using Content.Shared.Administration; +using Content.Shared.CCVar; +using Robust.Shared.Configuration; +using Robust.Shared.Console; + +namespace Content.Server.Chat.Commands; + +[AdminCommand(AdminFlags.Server)] +public sealed partial class SetDeadChatCommand : LocalizedCommands +{ + [Dependency] private IConfigurationManager _configManager = default!; + + public override string Command => "setdeadchat"; + + public override void Execute(IConsoleShell shell, string argStr, string[] args) + { + if (args.Length > 1) + { + shell.WriteError(Loc.GetString("shell-need-between-arguments", ("lower", 0), ("upper", 1))); + return; + } + + var deadchat = _configManager.GetCVar(CCVars.DeadChatEnabled); + + if (args.Length == 0) + { + deadchat = !deadchat; + } + + if (args.Length == 1 && !bool.TryParse(args[0], out deadchat)) + { + shell.WriteError(Loc.GetString("shell-invalid-bool")); + return; + } + + _configManager.SetCVar(CCVars.DeadChatEnabled, deadchat); + + shell.WriteLine(Loc.GetString(deadchat ? "cmd-setdeadchat-looc-enabled" : "cmd-setdeadchat-looc-disabled")); + } + + public override CompletionResult GetCompletion(IConsoleShell shell, string[] args) + { + return args.Length == 1 ? CompletionResult.FromOptions(CompletionHelper.Booleans) : CompletionResult.Empty; + } +} diff --git a/Content.Server/Chat/Systems/ChatSystem.PrivateAPI.cs b/Content.Server/Chat/Systems/ChatSystem.PrivateAPI.cs index 56fe3cc124..7dec4b0cac 100644 --- a/Content.Server/Chat/Systems/ChatSystem.PrivateAPI.cs +++ b/Content.Server/Chat/Systems/ChatSystem.PrivateAPI.cs @@ -234,6 +234,9 @@ public sealed partial class ChatSystem private void SendDeadChat(EntityUid source, ICommonSession player, string message, bool hideChat) { + if (!_adminManager.IsAdmin(player) && !_deadChatEnabled) + return; + var clients = GetDeadChatClients(); var playerName = Name(source); string wrappedMessage; diff --git a/Content.Server/Chat/Systems/ChatSystem.cs b/Content.Server/Chat/Systems/ChatSystem.cs index dd87188fa0..547378ee2a 100644 --- a/Content.Server/Chat/Systems/ChatSystem.cs +++ b/Content.Server/Chat/Systems/ChatSystem.cs @@ -53,6 +53,8 @@ public sealed partial class ChatSystem : SharedChatSystem private bool _critLoocEnabled; private readonly bool _adminLoocEnabled = true; + private bool _deadChatEnabled = true; + public override void Initialize() { base.Initialize(); @@ -60,6 +62,7 @@ public sealed partial class ChatSystem : SharedChatSystem Subs.CVar(_configurationManager, CCVars.LoocEnabled, OnLoocEnabledChanged, true); Subs.CVar(_configurationManager, CCVars.DeadLoocEnabled, OnDeadLoocEnabledChanged, true); Subs.CVar(_configurationManager, CCVars.CritLoocEnabled, OnCritLoocEnabledChanged, true); + Subs.CVar(_configurationManager, CCVars.DeadChatEnabled, OnDeadChatEnabledChanged, true); SubscribeLocalEvent(OnGameChange); } @@ -92,6 +95,16 @@ public sealed partial class ChatSystem : SharedChatSystem Loc.GetString(val ? "chat-manager-crit-looc-chat-enabled-message" : "chat-manager-crit-looc-chat-disabled-message")); } + private void OnDeadChatEnabledChanged(bool val) + { + if (_deadChatEnabled == val) + return; + + _deadChatEnabled = val; + _chatManager.DispatchServerAnnouncement( + Loc.GetString(val ? "chat-manager-dead-chat-enabled-message" : "chat-manager-dead-chat-disabled-message")); + } + private void OnGameChange(GameRunLevelChangedEvent ev) { switch (ev.New) diff --git a/Content.Shared/CCVar/CCVars.Chat.Dead.cs b/Content.Shared/CCVar/CCVars.Chat.Dead.cs new file mode 100644 index 0000000000..f9618d793b --- /dev/null +++ b/Content.Shared/CCVar/CCVars.Chat.Dead.cs @@ -0,0 +1,13 @@ +using Robust.Shared.Configuration; + +namespace Content.Shared.CCVar; + +public sealed partial class CCVars +{ + /// + /// True: dead players can send dead chat + /// False: dead players can't send dead chat + /// + public static readonly CVarDef DeadChatEnabled = + CVarDef.Create("dead_chat.enabled", true, CVar.NOTIFY | CVar.REPLICATED); +} diff --git a/Resources/Locale/en-US/administration/commands/set-dead-chat-command.ftl b/Resources/Locale/en-US/administration/commands/set-dead-chat-command.ftl new file mode 100644 index 0000000000..a0f822ff2c --- /dev/null +++ b/Resources/Locale/en-US/administration/commands/set-dead-chat-command.ftl @@ -0,0 +1,4 @@ +cmd-setdeadchat-description = Allows you to enable or disable Dead chat. +cmd-setdeadchat-help = Usage: setdeadchat OR setdeadchat [value] +cmd-setdeadchat-looc-enabled = Dead chat has been enabled. +cmd-setdeadchat-looc-disabled = Dead chat has been disabled. diff --git a/Resources/Locale/en-US/administration/ui/tabs/server-tab.ftl b/Resources/Locale/en-US/administration/ui/tabs/server-tab.ftl index 47ffdbfa47..39ecc7c882 100644 --- a/Resources/Locale/en-US/administration/ui/tabs/server-tab.ftl +++ b/Resources/Locale/en-US/administration/ui/tabs/server-tab.ftl @@ -5,3 +5,4 @@ server-afk-timers = AFK Timers server-afk-time = Player AFK Time server-admin-afk-time = Admin AFK Time server-afk-confirm-timeout = Confirm Timeout +server-dead-chat-toggle = Toggle Dead Chat diff --git a/Resources/Locale/en-US/chat/managers/chat-manager.ftl b/Resources/Locale/en-US/chat/managers/chat-manager.ftl index 26c1c70bca..4a8fab51e1 100644 --- a/Resources/Locale/en-US/chat/managers/chat-manager.ftl +++ b/Resources/Locale/en-US/chat/managers/chat-manager.ftl @@ -11,6 +11,8 @@ chat-manager-crit-looc-chat-enabled-message = Crit players can now use LOOC. chat-manager-crit-looc-chat-disabled-message = Crit players can no longer use LOOC. chat-manager-admin-ooc-chat-enabled-message = Admin OOC chat has been enabled. chat-manager-admin-ooc-chat-disabled-message = Admin OOC chat has been disabled. +chat-manager-dead-chat-enabled-message = Dead chat has been enabled. +chat-manager-dead-chat-disabled-message = Dead chat has been disabled. chat-manager-max-message-length-exceeded-message = Your message exceeded {$limit} character limit chat-manager-no-headset-on-message = You don't have a headset on! From 5e5e61768e84ee88f651bb3ccac6148e8e439a0c Mon Sep 17 00:00:00 2001 From: ThatGuyUSA Date: Mon, 29 Jun 2026 14:08:09 -0700 Subject: [PATCH 13/47] Predict Holoparasites and their injectors (#43519) * save station * save * save station * free howdoicode working 2026 * final push before presentation * comments addressed, but need to fix PredictedSpawn * save * kill me again, im beggin on my knees * ok wait i apparently forgot half of these reviews * actually made everything work now * this has been a learning experience * formatting, removed unused namespace * dehardcode man * fixed it fr * no more null, only default * dollar store port, holy * error error go away * i removed these from being null, i swear * formatting and minor fixes * fixes 2 * Update guardian_activators.yml * comm * oops * oops 2 * Update GuardianSystem.cs --------- Co-authored-by: Pok245 <113675512+Pok27@users.noreply.github.com> --- .../Guardian/CanHostGuardianComponent.cs | 6 - Content.Server/Guardian/GuardianComponent.cs | 54 --- .../Guardian/GuardianCreatorComponent.cs | 32 -- .../Guardian/GuardianHostComponent.cs | 31 -- Content.Server/Guardian/GuardianSystem.cs | 388 ---------------- .../Components/CanHostGuardianComponent.cs | 10 + .../Guardian/Components/GuardianComponent.cs | 53 +++ .../Components/GuardianCreatorComponent.cs | 57 +++ .../Components/GuardianHostComponent.cs | 51 +++ Content.Shared/Guardian/GuardianSystem.cs | 423 ++++++++++++++++++ .../Audio/Effects/guardian_deck_shuffle.ogg | Bin 0 -> 17821 bytes Resources/Locale/en-US/guardian/guardian.ftl | 14 +- .../Syndicate_Gadgets/guardian_activators.yml | 21 +- 13 files changed, 616 insertions(+), 524 deletions(-) delete mode 100644 Content.Server/Guardian/CanHostGuardianComponent.cs delete mode 100644 Content.Server/Guardian/GuardianComponent.cs delete mode 100644 Content.Server/Guardian/GuardianCreatorComponent.cs delete mode 100644 Content.Server/Guardian/GuardianHostComponent.cs delete mode 100644 Content.Server/Guardian/GuardianSystem.cs create mode 100644 Content.Shared/Guardian/Components/CanHostGuardianComponent.cs create mode 100644 Content.Shared/Guardian/Components/GuardianComponent.cs create mode 100644 Content.Shared/Guardian/Components/GuardianCreatorComponent.cs create mode 100644 Content.Shared/Guardian/Components/GuardianHostComponent.cs create mode 100644 Content.Shared/Guardian/GuardianSystem.cs create mode 100644 Resources/Audio/Effects/guardian_deck_shuffle.ogg diff --git a/Content.Server/Guardian/CanHostGuardianComponent.cs b/Content.Server/Guardian/CanHostGuardianComponent.cs deleted file mode 100644 index 543a263d85..0000000000 --- a/Content.Server/Guardian/CanHostGuardianComponent.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace Content.Server.Guardian; - -[RegisterComponent] -public sealed partial class CanHostGuardianComponent : Component -{ -} diff --git a/Content.Server/Guardian/GuardianComponent.cs b/Content.Server/Guardian/GuardianComponent.cs deleted file mode 100644 index 7a010c6a0b..0000000000 --- a/Content.Server/Guardian/GuardianComponent.cs +++ /dev/null @@ -1,54 +0,0 @@ -using Robust.Shared.Audio; - -namespace Content.Server.Guardian -{ - /// - /// Given to guardians to monitor their link with the host - /// - [RegisterComponent] - public sealed partial class GuardianComponent : Component - { - /// - /// The guardian host entity - /// - [DataField] - public EntityUid? Host; - - /// - /// Percentage of damage reflected from the guardian to the host - /// - [DataField] - public float DamageShare { get; set; } = 0.65f; - - /// - /// Maximum distance the guardian can travel before it's forced to recall, use YAML to set - /// - [DataField] - public float DistanceAllowed { get; set; } = 5f; - - /// - /// If the guardian is currently manifested - /// - [DataField] - public bool GuardianLoose; - - /// - /// Sound played when a mob starts hosting the guardian. - /// - [DataField] - public SoundSpecifier InjectSound = new SoundPathSpecifier("/Audio/Effects/guardian_inject.ogg"); - - /// - /// Sound played when the guardian enters critical state. - /// - [DataField] - public SoundSpecifier CriticalSound = new SoundPathSpecifier("/Audio/Effects/guardian_warn.ogg"); - - /// - /// Sound played when the guardian dies. - /// - [DataField] - public SoundSpecifier DeathSound = new SoundPathSpecifier("/Audio/Voice/Human/malescream_guardian.ogg", AudioParams.Default.WithVariation(0.2f)); - - } -} diff --git a/Content.Server/Guardian/GuardianCreatorComponent.cs b/Content.Server/Guardian/GuardianCreatorComponent.cs deleted file mode 100644 index dfe801f290..0000000000 --- a/Content.Server/Guardian/GuardianCreatorComponent.cs +++ /dev/null @@ -1,32 +0,0 @@ -using Robust.Shared.Prototypes; -using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; - -namespace Content.Server.Guardian -{ - /// - /// Creates a GuardianComponent attached to the user's GuardianHost. - /// - [RegisterComponent] - public sealed partial class GuardianCreatorComponent : Component - { - /// - /// Counts as spent upon exhausting the injection - /// - /// - /// We don't mark as deleted as examine depends on this. - /// - public bool Used = false; - - /// - /// The prototype of the guardian entity which will be created - /// - [DataField("guardianProto", customTypeSerializer:typeof(PrototypeIdSerializer), required: true)] - public string GuardianProto { get; set; } = default!; - - /// - /// How long it takes to inject someone. - /// - [DataField("delay")] - public float InjectionDelay = 5f; - } -} diff --git a/Content.Server/Guardian/GuardianHostComponent.cs b/Content.Server/Guardian/GuardianHostComponent.cs deleted file mode 100644 index e9d0e4affd..0000000000 --- a/Content.Server/Guardian/GuardianHostComponent.cs +++ /dev/null @@ -1,31 +0,0 @@ -using Robust.Shared.Containers; -using Robust.Shared.Prototypes; - -namespace Content.Server.Guardian -{ - /// - /// Given to guardian users upon establishing a guardian link with the entity - /// - [RegisterComponent] - public sealed partial class GuardianHostComponent : Component - { - /// - /// Guardian hosted within the component - /// - /// - /// Can be null if the component is added at any time. - /// - [DataField] - public EntityUid? HostedGuardian; - - /// - /// Container which holds the guardian - /// - [ViewVariables] public ContainerSlot GuardianContainer = default!; - - [DataField] - public EntProtoId Action = "ActionToggleGuardian"; - - [DataField] public EntityUid? ActionEntity; - } -} diff --git a/Content.Server/Guardian/GuardianSystem.cs b/Content.Server/Guardian/GuardianSystem.cs deleted file mode 100644 index 0c95f82fbb..0000000000 --- a/Content.Server/Guardian/GuardianSystem.cs +++ /dev/null @@ -1,388 +0,0 @@ -using Content.Server.Popups; -using Content.Shared.Actions; -using Content.Shared.Damage.Systems; -using Content.Shared.DoAfter; -using Content.Shared.Examine; -using Content.Shared.Gibbing; -using Content.Shared.Guardian; -using Content.Shared.Hands.Components; -using Content.Shared.Hands.EntitySystems; -using Content.Shared.IdentityManagement; -using Content.Shared.Interaction; -using Content.Shared.Interaction.Events; -using Content.Shared.Mech.EntitySystems; -using Content.Shared.Mobs; -using Content.Shared.Popups; -using Robust.Shared.Audio.Systems; -using Robust.Shared.Containers; -using Robust.Shared.Player; -using Robust.Shared.Utility; - -namespace Content.Server.Guardian -{ - /// - /// A guardian has a host it's attached to that it fights for. A fighting spirit. - /// - public sealed partial class GuardianSystem : EntitySystem - { - [Dependency] private SharedDoAfterSystem _doAfterSystem = default!; - [Dependency] private PopupSystem _popupSystem = default!; - [Dependency] private DamageableSystem _damageSystem = default!; - [Dependency] private SharedActionsSystem _actionSystem = default!; - [Dependency] private SharedHandsSystem _handsSystem = default!; - [Dependency] private SharedAudioSystem _audio = default!; - [Dependency] private GibbingSystem _gibbing = default!; - [Dependency] private SharedContainerSystem _container = default!; - [Dependency] private SharedTransformSystem _transform = default!; - - public override void Initialize() - { - base.Initialize(); - SubscribeLocalEvent(OnCreatorUse); - SubscribeLocalEvent(OnCreatorInteract); - SubscribeLocalEvent(OnCreatorExamine); - SubscribeLocalEvent(OnDoAfter); - - SubscribeLocalEvent(OnGuardianShutdown); - SubscribeLocalEvent(OnGuardianMove); - SubscribeLocalEvent(OnGuardianDamaged); - SubscribeLocalEvent(OnGuardianPlayerAttached); - SubscribeLocalEvent(OnGuardianPlayerDetached); - - SubscribeLocalEvent(OnHostInit); - SubscribeLocalEvent(OnHostMove); - SubscribeLocalEvent(OnHostStateChange); - SubscribeLocalEvent(OnHostShutdown); - - SubscribeLocalEvent(OnPerformAction); - - SubscribeLocalEvent(OnGuardianAttackAttempt); - - SubscribeLocalEvent>(OnPilotAttackAttempt); - } - - private void OnGuardianShutdown(EntityUid uid, GuardianComponent component, ComponentShutdown args) - { - var host = component.Host; - component.Host = null; - - if (!TryComp(host, out GuardianHostComponent? hostComponent)) - return; - - _container.Remove(uid, hostComponent.GuardianContainer); - hostComponent.HostedGuardian = null; - QueueDel(hostComponent.ActionEntity); - hostComponent.ActionEntity = null; - } - - private void OnPerformAction(EntityUid uid, GuardianHostComponent component, GuardianToggleActionEvent args) - { - if (args.Handled) - return; - - if (_container.IsEntityInContainer(uid)) - { - _popupSystem.PopupEntity(Loc.GetString("guardian-inside-container"), uid, uid); - return; - } - - if (component.HostedGuardian != null) - ToggleGuardian(uid, component); - - args.Handled = true; - } - - private void OnGuardianPlayerDetached(EntityUid uid, GuardianComponent component, PlayerDetachedEvent args) - { - var host = component.Host; - if (!TryComp(host, out var hostComponent) || TerminatingOrDeleted(host.Value)) - { - QueueDel(uid); - return; - } - - RetractGuardian(host.Value, hostComponent, uid, component); - } - - private void OnGuardianPlayerAttached(EntityUid uid, GuardianComponent component, PlayerAttachedEvent args) - { - var host = component.Host; - - if (!HasComp(host)) - { - QueueDel(uid); - return; - } - - _popupSystem.PopupEntity(Loc.GetString("guardian-available"), host.Value, host.Value); - } - - private void OnHostInit(EntityUid uid, GuardianHostComponent component, ComponentInit args) - { - component.GuardianContainer = _container.EnsureContainer(uid, "GuardianContainer"); - _actionSystem.AddAction(uid, ref component.ActionEntity, component.Action); - } - - private void OnHostShutdown(EntityUid uid, GuardianHostComponent component, ComponentShutdown args) - { - if (component.HostedGuardian is not {} guardian) - return; - - // Ensure held items are dropped before deleting guardian. - if (HasComp(guardian)) - _gibbing.Gib(component.HostedGuardian.Value); - - QueueDel(guardian); - QueueDel(component.ActionEntity); - component.ActionEntity = null; - } - - private void OnGuardianAttackAttempt(EntityUid uid, GuardianComponent component, AttackAttemptEvent args) - { - if (args.Cancelled || args.Target != component.Host) - return; - - // why is this server side code? This should be in shared - _popupSystem.PopupCursor(Loc.GetString("guardian-attack-host"), uid, PopupType.LargeCaution); - args.Cancel(); - } - - private void OnPilotAttackAttempt(Entity uid, ref MechPilotRelayedEvent args) - { - if (args.Args.Cancelled) - return; - - _popupSystem.PopupCursor(Loc.GetString("guardian-attack-host"), args.Args.Attacker, PopupType.LargeCaution); - - args.Args.Cancelled = true; - } - - public void ToggleGuardian(EntityUid user, GuardianHostComponent hostComponent) - { - if (!TryComp(hostComponent.HostedGuardian, out var guardianComponent)) - return; - - if (guardianComponent.GuardianLoose) - RetractGuardian(user, hostComponent, hostComponent.HostedGuardian.Value, guardianComponent); - else - ReleaseGuardian(user, hostComponent, hostComponent.HostedGuardian.Value, guardianComponent); - } - - /// - /// Adds the guardian host component to the user and spawns the guardian inside said component - /// - private void OnCreatorUse(EntityUid uid, GuardianCreatorComponent component, UseInHandEvent args) - { - if (args.Handled) - return; - - args.Handled = true; - UseCreator(args.User, args.User, uid, component); - } - - private void OnCreatorInteract(EntityUid uid, GuardianCreatorComponent component, AfterInteractEvent args) - { - if (args.Handled || args.Target == null || !args.CanReach) - return; - - args.Handled = true; - UseCreator(args.User, args.Target.Value, uid, component); - } - private void UseCreator(EntityUid user, EntityUid target, EntityUid injector, GuardianCreatorComponent component) - { - if (component.Used) - { - _popupSystem.PopupEntity(Loc.GetString("guardian-activator-empty-invalid-creation"), user, user); - return; - } - - // Can only inject things with the component... - if (!HasComp(target)) - { - var msg = Loc.GetString("guardian-activator-invalid-target", ("entity", Identity.Entity(target, EntityManager, user))); - - _popupSystem.PopupEntity(msg, user, user); - return; - } - - // If user is already a host don't duplicate. - if (HasComp(target)) - { - _popupSystem.PopupEntity(Loc.GetString("guardian-already-present-invalid-creation"), user, user); - return; - } - - _doAfterSystem.TryStartDoAfter(new DoAfterArgs(EntityManager, user, component.InjectionDelay, new GuardianCreatorDoAfterEvent(), injector, target: target, used: injector) - { - BreakOnMove = true, - NeedHand = true, - BreakOnHandChange = true - }); - } - - private void OnDoAfter(EntityUid uid, GuardianCreatorComponent component, DoAfterEvent args) - { - if (args.Handled || args.Args.Target == null) - return; - - if (args.Cancelled || component.Deleted || component.Used || !_handsSystem.IsHolding(args.Args.User, uid, out _) || HasComp(args.Args.Target)) - return; - - var hostXform = Transform(args.Args.Target.Value); - var host = EnsureComp(args.Args.Target.Value); - // Use map position so it's not inadvertantly parented to the host + if it's in a container it spawns outside I guess. - var guardian = Spawn(component.GuardianProto, _transform.GetMapCoordinates(args.Args.Target.Value, xform: hostXform)); - - _container.Insert(guardian, host.GuardianContainer); - host.HostedGuardian = guardian; - - if (TryComp(guardian, out var guardianComp)) - { - guardianComp.Host = args.Args.Target.Value; - _audio.PlayPvs(guardianComp.InjectSound, args.Args.Target.Value); - _popupSystem.PopupEntity(Loc.GetString("guardian-created"), args.Args.Target.Value, args.Args.Target.Value); - // Exhaust the activator - component.Used = true; - } - else - { - Log.Error($"Tried to spawn a guardian that doesn't have {nameof(GuardianComponent)}"); - QueueDel(guardian); - } - - args.Handled = true; - } - - /// - /// Triggers when the host receives damage which puts the host in either critical or killed state - /// - private void OnHostStateChange(EntityUid uid, GuardianHostComponent component, MobStateChangedEvent args) - { - if (component.HostedGuardian == null) - return; - - TryComp(component.HostedGuardian, out var guardianComp); - - if (args.NewMobState == MobState.Critical) - { - _popupSystem.PopupEntity(Loc.GetString("guardian-host-critical-warn"), component.HostedGuardian.Value, component.HostedGuardian.Value); - if (guardianComp != null) - _audio.PlayPvs(guardianComp.CriticalSound, component.HostedGuardian.Value); - } - else if (args.NewMobState == MobState.Dead) - { - if (guardianComp != null) - _audio.PlayPvs(guardianComp.DeathSound, uid); - RemComp(uid); - } - } - - /// - /// Handles guardian receiving damage and splitting it with the host according to his defence percent - /// - private void OnGuardianDamaged(EntityUid uid, GuardianComponent component, DamageChangedEvent args) - { - if (args.DamageDelta == null || component.Host == null || component.DamageShare == 0) - return; - - _damageSystem.ChangeDamage( - component.Host.Value, - args.DamageDelta * component.DamageShare, - origin: args.Origin, - ignoreResistances: true, - interruptsDoAfters: false); - _popupSystem.PopupEntity(Loc.GetString("guardian-entity-taking-damage"), component.Host.Value, component.Host.Value); - - } - - /// - /// Triggers while trying to examine an activator to see if it's used - /// - private void OnCreatorExamine(EntityUid uid, GuardianCreatorComponent component, ExaminedEvent args) - { - if (component.Used) - args.PushMarkup(Loc.GetString("guardian-activator-empty-examine")); - } - - /// - /// Called every time the host moves, to make sure the distance between the host and the guardian isn't too far - /// - private void OnHostMove(EntityUid uid, GuardianHostComponent component, ref MoveEvent args) - { - if (!TryComp(component.HostedGuardian, out GuardianComponent? guardianComponent) || - !guardianComponent.GuardianLoose) - { - return; - } - - CheckGuardianMove(uid, component.HostedGuardian.Value, component); - } - - /// - /// Called every time the guardian moves: makes sure it's not out of it's allowed distance - /// - private void OnGuardianMove(EntityUid uid, GuardianComponent component, ref MoveEvent args) - { - if (!component.GuardianLoose || component.Host == null) - return; - - CheckGuardianMove(component.Host.Value, uid, guardianComponent: component); - } - - /// - /// Retract the guardian if either the host or the guardian move away from each other. - /// - private void CheckGuardianMove( - EntityUid hostUid, - EntityUid guardianUid, - GuardianHostComponent? hostComponent = null, - GuardianComponent? guardianComponent = null, - TransformComponent? hostXform = null, - TransformComponent? guardianXform = null) - { - if (TerminatingOrDeleted(guardianUid) || TerminatingOrDeleted(hostUid)) - return; - - if (!Resolve(hostUid, ref hostComponent, ref hostXform) || - !Resolve(guardianUid, ref guardianComponent, ref guardianXform)) - { - return; - } - - if (!guardianComponent.GuardianLoose) - return; - - if (!_transform.InRange(guardianXform.Coordinates, hostXform.Coordinates, guardianComponent.DistanceAllowed)) - RetractGuardian(hostUid, hostComponent, guardianUid, guardianComponent); - } - - private void ReleaseGuardian(EntityUid host, GuardianHostComponent hostComponent, EntityUid guardian, GuardianComponent guardianComponent) - { - if (guardianComponent.GuardianLoose) - { - DebugTools.Assert(!hostComponent.GuardianContainer.Contains(guardian)); - return; - } - - DebugTools.Assert(hostComponent.GuardianContainer.Contains(guardian)); - _container.Remove(guardian, hostComponent.GuardianContainer); - DebugTools.Assert(!hostComponent.GuardianContainer.Contains(guardian)); - - guardianComponent.GuardianLoose = true; - } - - private void RetractGuardian(EntityUid host,GuardianHostComponent hostComponent, EntityUid guardian, GuardianComponent guardianComponent) - { - if (!guardianComponent.GuardianLoose) - { - DebugTools.Assert(hostComponent.GuardianContainer.Contains(guardian)); - return; - } - - _container.Insert(guardian, hostComponent.GuardianContainer); - DebugTools.Assert(hostComponent.GuardianContainer.Contains(guardian)); - _popupSystem.PopupEntity(Loc.GetString("guardian-entity-recall"), host); - guardianComponent.GuardianLoose = false; - } - } -} diff --git a/Content.Shared/Guardian/Components/CanHostGuardianComponent.cs b/Content.Shared/Guardian/Components/CanHostGuardianComponent.cs new file mode 100644 index 0000000000..146f74742d --- /dev/null +++ b/Content.Shared/Guardian/Components/CanHostGuardianComponent.cs @@ -0,0 +1,10 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Guardian.Components; + +/// +/// Marker component that allows an entity to become a guardian host. +/// Added to entities that may receive a through a guardian creator. +/// +[RegisterComponent, NetworkedComponent] +public sealed partial class CanHostGuardianComponent : Component; diff --git a/Content.Shared/Guardian/Components/GuardianComponent.cs b/Content.Shared/Guardian/Components/GuardianComponent.cs new file mode 100644 index 0000000000..f32c37a0d3 --- /dev/null +++ b/Content.Shared/Guardian/Components/GuardianComponent.cs @@ -0,0 +1,53 @@ +using Robust.Shared.Audio; +using Robust.Shared.GameStates; + +namespace Content.Shared.Guardian.Components; + +/// +/// Given to guardians to monitor their link with the host. +/// +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class GuardianComponent : Component +{ + /// + /// The guardian host entity. + /// + [DataField, AutoNetworkedField] + public EntityUid? Host; + + /// + /// Percentage of damage reflected from the guardian to the host. + /// + [DataField] + public float DamageShare { get; set; } = 0.65f; + + /// + /// Maximum distance the guardian can travel before it's forced to recall, use YAML to set. + /// + [DataField] + public float DistanceAllowed { get; set; } = 5f; + + /// + /// If the guardian is currently manifested. + /// + [DataField, AutoNetworkedField] + public bool GuardianLoose; + + /// + /// Popup shown to the host when their guardian takes damage. + /// + [DataField] + public LocId GuardianDamagePopup = "guardian-entity-taking-damage"; + + /// + /// Sound played when the guardian enters critical state. + /// + [DataField] + public SoundSpecifier CriticalSound = new SoundPathSpecifier("/Audio/Effects/guardian_warn.ogg"); + + /// + /// Sound played when the guardian dies. + /// + [DataField] + public SoundSpecifier DeathSound = new SoundPathSpecifier("/Audio/Voice/Human/malescream_guardian.ogg", AudioParams.Default.WithVariation(0.2f)); +} diff --git a/Content.Shared/Guardian/Components/GuardianCreatorComponent.cs b/Content.Shared/Guardian/Components/GuardianCreatorComponent.cs new file mode 100644 index 0000000000..1e67ddde94 --- /dev/null +++ b/Content.Shared/Guardian/Components/GuardianCreatorComponent.cs @@ -0,0 +1,57 @@ +using Robust.Shared.Audio; +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; + +namespace Content.Shared.Guardian.Components; + +/// +/// Creates a GuardianComponent attached to the user's GuardianHost. +/// +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class GuardianCreatorComponent : Component +{ + /// + /// Counts as spent upon exhausting the injection + /// + /// + /// We don't mark as deleted as examine depends on this. + /// + [DataField, AutoNetworkedField] + public bool Used; + + /// + /// Sound played when a mob obtains a guardian. + /// + [DataField] + public SoundSpecifier UsedSound = new SoundPathSpecifier("/Audio/Effects/guardian_inject.ogg"); + + /// + /// Popup shown when the creator has already been used and cannot create a guardian. + /// + [DataField] + public LocId EmptyPopup = "guardian-injector-empty-invalid-creation"; + + /// + /// Examine text shown for an exhausted creator. + /// + [DataField] + public LocId EmptyExamine = "guardian-injector-empty-examine"; + + /// + /// Text shown to the host indicating the guardian creation was successful. + /// + [DataField] + public LocId GuardianHauntedPopup = "guardian-created"; + + /// + /// The prototype of the guardian entity which will be created + /// + [DataField(required: true)] + public EntProtoId? GuardianProto { get; set; } + + /// + /// How long it takes to inject someone. + /// + [DataField("delay")] + public float InjectionDelay = 5f; +} diff --git a/Content.Shared/Guardian/Components/GuardianHostComponent.cs b/Content.Shared/Guardian/Components/GuardianHostComponent.cs new file mode 100644 index 0000000000..1aed80d8a3 --- /dev/null +++ b/Content.Shared/Guardian/Components/GuardianHostComponent.cs @@ -0,0 +1,51 @@ +using Robust.Shared.Containers; +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; + +namespace Content.Shared.Guardian.Components; + +/// +/// Given to guardian users upon establishing a guardian link with the entity. +/// +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class GuardianHostComponent : Component +{ + /// + /// Guardian hosted within the component. + /// + /// + /// Can be null if the component is added at any time. + /// + [DataField, AutoNetworkedField] + public EntityUid? HostedGuardian; + + /// + /// Container which holds the guardian + /// + [ViewVariables] + public ContainerSlot GuardianContainer; + + /// + /// Action prototype used to toggle (release/retract) the hosted guardian. + /// + [DataField, AutoNetworkedField] + public EntProtoId Action = "ActionToggleGuardian"; + + /// + /// Popup shown to the guardian when its host enters a critical state. + /// + [DataField] + public LocId GuardianHostCritWarn = "guardian-host-critical-warn"; + + /// + /// Popup shown to the host when its guardian is retracted. + /// + [DataField] + public LocId GuardianHostRecall = "guardian-entity-recall"; + + /// + /// The spawned action entity used to toggle the guardian. + /// + [DataField, AutoNetworkedField] + public EntityUid? ActionEntity; +} diff --git a/Content.Shared/Guardian/GuardianSystem.cs b/Content.Shared/Guardian/GuardianSystem.cs new file mode 100644 index 0000000000..fff4d97925 --- /dev/null +++ b/Content.Shared/Guardian/GuardianSystem.cs @@ -0,0 +1,423 @@ +using Content.Shared.Actions; +using Content.Shared.Damage.Systems; +using Content.Shared.DoAfter; +using Content.Shared.Examine; +using Content.Shared.Gibbing; +using Content.Shared.Guardian.Components; +using Content.Shared.Hands.Components; +using Content.Shared.Hands.EntitySystems; +using Content.Shared.IdentityManagement; +using Content.Shared.Interaction; +using Content.Shared.Interaction.Events; +using Content.Shared.Mech.EntitySystems; +using Content.Shared.Mobs; +using Content.Shared.Popups; +using Robust.Shared.Audio.Systems; +using Robust.Shared.Containers; +using Robust.Shared.Player; +using Robust.Shared.Timing; +using Robust.Shared.Utility; + +namespace Content.Shared.Guardian; + +/// +/// A guardian has a host it's attached to that it fights for. A fighting spirit. +/// +public sealed partial class GuardianSystem : EntitySystem +{ + [Dependency] private DamageableSystem _damage = default!; + [Dependency] private GibbingSystem _gibbing = default!; + [Dependency] private IGameTiming _timing = default!; + [Dependency] private SharedActionsSystem _action = default!; + [Dependency] private SharedAudioSystem _audio = default!; + [Dependency] private SharedContainerSystem _container = default!; + [Dependency] private SharedDoAfterSystem _doAfter = default!; + [Dependency] private SharedHandsSystem _hands = default!; + [Dependency] private SharedPopupSystem _popup = default!; + [Dependency] private SharedTransformSystem _transform = default!; + + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnCreatorUse); + SubscribeLocalEvent(OnCreatorInteract); + SubscribeLocalEvent(OnCreatorExamine); + SubscribeLocalEvent(OnDoAfter); + + SubscribeLocalEvent(OnGuardianShutdown); + SubscribeLocalEvent(OnGuardianMove); + SubscribeLocalEvent(OnGuardianDamaged); + SubscribeLocalEvent(OnGuardianPlayerAttached); + SubscribeLocalEvent(OnGuardianPlayerDetached); + + SubscribeLocalEvent(OnHostInit); + SubscribeLocalEvent(OnHostMove); + SubscribeLocalEvent(OnHostStateChange); + SubscribeLocalEvent(OnHostShutdown); + + SubscribeLocalEvent(OnPerformAction); + + SubscribeLocalEvent(OnGuardianAttackAttempt); + + SubscribeLocalEvent>(OnPilotAttackAttempt); + } + + private void OnGuardianShutdown(Entity ent, ref ComponentShutdown args) + { + if (!TryComp(ent, out var hostComponent)) + return; + + _container.Remove(ent.Owner, hostComponent.GuardianContainer); + hostComponent.HostedGuardian = null; + PredictedDel(hostComponent.ActionEntity); + hostComponent.ActionEntity = null; + ent.Comp.Host = null; + + Dirty(ent); + Dirty(ent, hostComponent); + } + + private void OnPerformAction(Entity ent, ref GuardianToggleActionEvent args) + { + if (args.Handled) + return; + + if (_container.IsEntityInContainer(ent.Owner)) + { + _popup.PopupPredicted(Loc.GetString("guardian-inside-container"), ent.Owner, ent.Owner); + return; + } + + if (ent.Comp.HostedGuardian != null) + ToggleGuardian(ent); + + args.Handled = true; + } + + private void OnGuardianPlayerDetached(Entity ent, ref PlayerDetachedEvent args) + { + if (!TryComp(ent.Comp.Host, out var hostComponent) || + TerminatingOrDeleted(ent.Owner)) + { + PredictedQueueDel(ent.Owner); + ent.Comp.Host = null; + Dirty(ent); + return; + } + + RetractGuardian((ent.Comp.Host.Value, hostComponent), (ent.Owner, ent.Comp)); + } + + private void OnGuardianPlayerAttached(Entity ent, ref PlayerAttachedEvent args) + { + var host = ent.Comp.Host; + if (!HasComp(host)) + { + PredictedQueueDel(ent.Owner); + ent.Comp.Host = null; + Dirty(ent); + return; + } + + _popup.PopupPredicted(Loc.GetString("guardian-available"), host.Value, host.Value); + } + + private void OnHostInit(Entity ent, ref ComponentInit args) + { + ent.Comp.GuardianContainer = _container.EnsureContainer(ent.Owner, "GuardianContainer"); + _action.AddAction(ent.Owner, ref ent.Comp.ActionEntity, ent.Comp.Action); + } + + private void OnHostShutdown(Entity ent, ref ComponentShutdown args) + { + if (ent.Comp.HostedGuardian is not { } guardian) + return; + + // Ensure held items are dropped before deleting guardian. + if (HasComp(guardian)) + _gibbing.Gib(ent.Comp.HostedGuardian.Value); + + PredictedQueueDel(guardian); + ent.Comp.HostedGuardian = null; + PredictedDel(ent.Comp.ActionEntity); + ent.Comp.ActionEntity = null; + Dirty(ent); + } + + private void OnGuardianAttackAttempt(Entity ent, ref AttackAttemptEvent args) + { + if (args.Cancelled || args.Target != ent.Comp.Host) + return; + + _popup.PopupPredictedCursor(Loc.GetString("guardian-attack-host"), ent.Owner, PopupType.LargeCaution); + args.Cancel(); + } + + private void OnPilotAttackAttempt(Entity ent, + ref MechPilotRelayedEvent args) + { + if (args.Args.Cancelled) + return; + + _popup.PopupPredictedCursor(Loc.GetString("guardian-attack-host"), + args.Args.Attacker, + PopupType.LargeCaution); + args.Args.Cancelled = true; + } + + private void ToggleGuardian(Entity ent) + { + if (!TryComp(ent.Comp.HostedGuardian, out var guardianComponent)) + return; + + if (guardianComponent.GuardianLoose) + RetractGuardian(ent, (ent.Comp.HostedGuardian.Value, guardianComponent)); + else + ReleaseGuardian(ent, (ent.Comp.HostedGuardian.Value, guardianComponent)); + } + + /// + /// Adds the guardian host component to the user and spawns the guardian inside said component. + /// + private void OnCreatorUse(Entity ent, ref UseInHandEvent args) + { + if (args.Handled) + return; + + args.Handled = true; + UseCreator(args.User, args.User, ent); + } + + private void OnCreatorInteract(Entity ent, ref AfterInteractEvent args) + { + if (args.Handled || args.Target == null || !args.CanReach) + return; + + args.Handled = true; + UseCreator(args.User, args.Target.Value, ent); + } + + private void UseCreator(EntityUid user, EntityUid target, Entity ent) + { + if (ent.Comp.Used) + { + _popup.PopupPredicted(Loc.GetString(ent.Comp.EmptyPopup), user, user); + + return; + } + + // Can only inject things with the component... + if (!HasComp(target)) + { + var msg = Loc.GetString("guardian-activator-invalid-target", + ("entity", Identity.Entity(target, EntityManager, user))); + _popup.PopupPredicted(msg, user, user); + return; + } + + // If user is already a host don't duplicate. + if (HasComp(target)) + { + _popup.PopupPredicted(Loc.GetString("guardian-already-present-invalid-creation"), user, user); + return; + } + + _doAfter.TryStartDoAfter(new DoAfterArgs(EntityManager, + user, + ent.Comp.InjectionDelay, + new GuardianCreatorDoAfterEvent(), + ent, + target: target, + used: ent) + { + BreakOnMove = true, + NeedHand = true, + BreakOnHandChange = true + }); + } + + private void OnDoAfter(Entity ent, ref GuardianCreatorDoAfterEvent args) + { + if (args.Handled || args.Args.Target == null || args.Cancelled || ent.Comp.Deleted || ent.Comp.Used) + return; + + if (!_hands.IsHolding(args.Args.User, ent.Owner) || HasComp(args.Args.Target)) + return; + + var hostXform = Transform(args.Args.Target.Value); + var host = EnsureComp(args.Args.Target.Value); + + // Use map position so it's not inadvertently parented to the host + if it's in a container it spawns outside I guess. + var guardian = PredictedSpawnAtPosition(ent.Comp.GuardianProto, + _transform.GetMoverCoordinates(args.Args.Target.Value, xform: hostXform)); + _container.Insert(guardian, host.GuardianContainer); + host.HostedGuardian = guardian; + + if (TryComp(guardian, out var guardianComp)) + { + guardianComp.Host = args.Args.Target.Value; + _audio.PlayPredicted(ent.Comp.UsedSound, + ent.Owner, + args.Args.Target); + _popup.PopupClient(Loc.GetString(ent.Comp.GuardianHauntedPopup), + args.Args.Target.Value, + args.Args.Target.Value); + // Exhaust the activator + ent.Comp.Used = true; + } + else + { + Log.Error($"Tried to spawn a guardian that doesn't have {nameof(GuardianComponent)}"); + PredictedDel(guardian); + } + + Dirty(ent); + args.Handled = true; + } + + /// + /// Triggers when the host receives damage which puts the host in either critical or killed state. + /// + private void OnHostStateChange(Entity ent, ref MobStateChangedEvent args) + { + if (ent.Comp.HostedGuardian == null || + !TryComp(ent.Comp.HostedGuardian, out var guardianComp)) + return; + + if (args.NewMobState == MobState.Critical) + { + _popup.PopupClient(Loc.GetString(ent.Comp.GuardianHostCritWarn), + ent.Comp.HostedGuardian.Value, + ent.Comp.HostedGuardian.Value); + _audio.PlayPredicted(guardianComp.CriticalSound, ent.Comp.HostedGuardian.Value, args.Target); + } + else if (args.NewMobState == MobState.Dead) + { + _audio.PlayPredicted(guardianComp.DeathSound, ent.Owner, args.Target); + RemComp(ent.Owner); + } + } + + /// + /// Handles guardian receiving damage and splitting it with the host according to his defense percent. + /// + private void OnGuardianDamaged(Entity ent, ref DamageDealtEvent args) + { + if (_timing.ApplyingState) + return; + + if (args.Damage == null! || ent.Comp.Host == null || ent.Comp.DamageShare == 0) + return; + + _damage.ChangeDamage( + ent.Comp.Host.Value, + args.Damage * ent.Comp.DamageShare, + origin: args.Origin, + ignoreResistances: true, + interruptsDoAfters: false); + _popup.PopupClient(Loc.GetString(ent.Comp.GuardianDamagePopup), ent.Comp.Host.Value, ent.Comp.Host.Value); + } + + /// + /// Triggers while trying to examine an activator to see if it's used. + /// + private void OnCreatorExamine(Entity ent, ref ExaminedEvent args) + { + if (!ent.Comp.Used) + return; + + args.PushMarkup(Loc.GetString(ent.Comp.EmptyExamine)); + } + + /// + /// Called every time the host moves, to make sure the host and the guardian are not too far away from each other. + /// + private void OnHostMove(Entity ent, ref MoveEvent args) + { + if (!TryComp(ent.Comp.HostedGuardian, out var guardianComponent) || + !guardianComponent.GuardianLoose) + { + return; + } + + CheckGuardianMove(ent.Owner, ent.Comp.HostedGuardian.Value); + } + + /// + /// Called every time the guardian moves: makes sure it's not out of it's allowed distance. + /// + private void OnGuardianMove(Entity ent, ref MoveEvent args) + { + if (!ent.Comp.GuardianLoose) + return; + + if (ent.Comp.Host == null) + return; + + CheckGuardianMove(ent.Comp.Host.Value, ent.Owner); + } + + /// + /// Retract the guardian if either the host or the guardian move away from each other. + /// + private void CheckGuardianMove( + Entity host, + Entity guardian, + TransformComponent? hostXform = null, + TransformComponent? guardianXform = null) + { + if (TerminatingOrDeleted(guardian.Owner) || TerminatingOrDeleted(host.Owner)) + return; + + if (!Resolve(host.Owner, ref host.Comp, ref hostXform) || + !Resolve(guardian.Owner, ref guardian.Comp, ref guardianXform)) + { + return; + } + + if (!guardian.Comp.GuardianLoose) + return; + + if (!_transform.InRange(guardianXform.Coordinates, hostXform.Coordinates, guardian.Comp.DistanceAllowed)) + RetractGuardian((host.Owner, host.Comp), guardian); + } + + private void ReleaseGuardian(Entity host, Entity guardian) + { + if (guardian.Comp.GuardianLoose) + { + DebugTools.Assert(!host.Comp.GuardianContainer.Contains(guardian)); + return; + } + + DebugTools.Assert(host.Comp.GuardianContainer.Contains(guardian)); + _container.Remove(guardian.Owner, host.Comp.GuardianContainer); + DebugTools.Assert(!host.Comp.GuardianContainer.Contains(guardian)); + + guardian.Comp.GuardianLoose = true; + Dirty(host); + Dirty(guardian); + } + + private void RetractGuardian(Entity host, Entity guardian) + { + if (_timing.ApplyingState) + return; + + if (!Resolve(guardian, ref guardian.Comp)) + return; + + if (!guardian.Comp.GuardianLoose) + { + DebugTools.Assert(host.Comp.GuardianContainer.Contains(guardian)); + return; + } + + _container.Insert(guardian.Owner, host.Comp.GuardianContainer); + _popup.PopupPredicted(Loc.GetString(host.Comp.GuardianHostRecall), host.Owner, host.Owner); + guardian.Comp.GuardianLoose = false; + + Dirty(host); + Dirty(guardian); + } +} diff --git a/Resources/Audio/Effects/guardian_deck_shuffle.ogg b/Resources/Audio/Effects/guardian_deck_shuffle.ogg new file mode 100644 index 0000000000000000000000000000000000000000..e8e5b8caad1c3b32b33d828b0eb91ed0f3f07b45 GIT binary patch literal 17821 zcmafa1ymi)vhHl$9RdXRjU>p%B|sp!OK^90LeK;W!7aE3_ux(-xVr@l9w0z)4{ykS z?mg$-x7K~LdiUz-ny%`u`l_e8r?--&r5XSS{Oh7&{HNe?#P0>6fOt5%m{_|$RzW1n z{`H6_#$;Fb&&e}xtFMBE( zDo%C|PIgXqE-EG^dk1SL7jsv02RA4@_&6^36H`@}QBxOowYGP%GY8X~$4Ye>b$Ll) zQ)3r1Di>=D3p;aEuu?)yT~Zk2!~;S6M;kg-XINA~060uQDwaT|ieRXUY-EB?>4a4UpL>E!QcYb! z1H9bzUwfF(dAQGc_-ZEy>o)poHwNp@2kT!38xx28D_!}nUOuM3L#KiO*|hwL8_>@* zq@UOMKf?!wl)(XJk1C-;jiZ6a<;oOT*i=}j)mxR;+YeQ<4pn3PeFTI8!eeiMZ0pp5 z|0h{!Cz}8Nlc-fcGaw4;vd@{U&zVkAm9Ec)75T4*`vK6VqN=PtE-)!qSf8s9n55h! z1`^~)&g8NG%LtEV2LMqHvL0u$0Z<#NY*Q}WuU&=bTovX(RXl3sf4|=S#S1tP>I{oS zn*bE97~{Wc2>{s==b*gA_(u}>Kxob;RqA-^=?Fho>Q;6!LE2R3NA)zursCwZzZSF` zCD{ON2^~!7$xazhbsd$#NX`GJ6mHR2@!1^x&^(IBs8_PZfy$~RjQMWw|Bjpr0D^G-qWHhEzfk@M z#d&dI%!5od!<<8`k6BsQsKEZ0E}WMb93YBWxj__1)@^6HR`5&P=GV>Yu;eGG%0l!1 z@hH%!RAw<^NF;xqBqZ5o5LyU&#eW*^H{BR6`NV&uv12k7JbExqaI&d!32Ufpy!Noy zPI6yt2-cr>U!C(^or^Sl67oNR_1~TYfKC(i*C!K9A~^ce0~N(l|1t1?d5$wdUo6=` zES+36ox&vR$O%m86gGh`sRC0_Bh;TDbe|$JSL4y2;x?bsFrV=-U#K_NZSd8u|Chu3 z<2I{v?*HLAk1j&PAGIMJhwyLD$!3aL=Zm71iKEkwWAI9}{FqvtlDS*_8SQ^~j#XG; za#&$#*iL8^)5k>XkEtb1pX~-K_M88|>AyWk%7qS0pyx=s(EW$!ba0Tp1ih)6RpIoX zF$zzB3U!lw@}C9(fQ}dpxxe#>iYnWTD))>kn})jZ|L!p$bq1y|1p^iP2>?g{fEF}z z5Kfp&jJSia77E8U9byhYQcgEQ7slxiRVG3S`M^ke-Y6=} zZv}cXTYM1w0= zDC9wd97q{~IM94DwNYpvSKgcx8iX2Ci3%EZ_G2*f1$B*O zB8{1P^F<=R*NN_{TngIY?JP)jpG)*LoVC|a{ue6+g1@YIH0J8LRopaGG|aWtHMBj< zwJ$YZ&-%)NR5gVKLJf_2jfHc2jYQuyHx2#Q<_nh^+C+Z3bHQsDzH7vfoabiTL8|er zxp9O0DwB1pwaw?El2oRWlH!tj`;v-s-OoQuK9>wuTb5Lm4OUl{R@m)>)QX~#YSxkx z*3#;-+Y;9O`l6EN^1mJ_XRBg3`U_ z;^tJOXtB>}ZpVzumt7y0{C+Kgy2FGD<=$WZ|8C-2I__h3Y z5M(fU#Xsgq)&w@Iad-;W^`5f4Fy@QOw@d|lT2h`?Qo3L5z|vK=FRr5DtN+P-l~-T; ziNh*ylzf71+3N&#lBj z?TZGn0eQp*{-9_MH49t-9|S<6-XT!KVeX-F!%^L%%2Ve+qIOl3?IBB0mbIZym}c&! zQje19PmjlwwSp#0sv_s)E6dvEB+RPXRuxQ}98l#E$y&1|OzPMa_fG3X;F{ua?&O(` z%An@gJ`zAyJK1?y;rKhsv2Im{oU1$`(j$B>`{gs_=a$e zZaUWlXPp3eKr{f=Jo|A9d30N`P}NZxYaEwher8nhVSdJ97kP0gRAX2Sg}!c-9}4Z6 z(R7@Lcvk6fpN!Qw?$I;*aJbs)J6p)Krim40_Pnhl6>O8apF7zQyiLn zV$d%61g4;FiCwY8nMq7X#h9Q$%CgMRU>sQ)`g|}hMk52`IlJ)$Ei$k}|I8ys7$z7T zAyjVaoXogE^0JJ@??8=~yMs{3?-|yyDX*OuMJW%S<&>ibps$qUG!x0AwV7!+T2xj>S zlaB;d*XsKyA65CW4hj-B+EDA1l{Fvck$ehfXpm+WKw5djjw z+g^~szeDzzrMpJ`J23fo2@K!=pFtFZaTcy7__ppPev0x>RQ?L@@2#obzk>ASe{TOH zX8(8e{=b!UZOcK({bvS0HpNv{m6<+2@p0;y){$icc_Y*3&#KyhQUp-)Yo{MY&5KDx z^JjI!*+7?*1#e9vxI$~f{SRYCtGHZ21kNXHiJx-A>DZq_8C4%9z5L(H0l zbI_@avOUQz#dc+8I5NL*f z>VjhayADTS=O1W+fZF-zxddhLztBR-0qdaTAjp{hmgvC}>OTS8UoZyYfuURi$oZeT z1Uyj2-|#L$^%0SvY90xHq58LkO8uy=zYkOY)AlhI1R)ClI1AJMq{|(ov4gFBgIBid zmjwba0Kj?PW*<7+Pt}tilqeSz-B0(EE)gdip$ z5Z~d=I;K)%C#ryCKGr|$W(Yt50CAX9G&HIFQCQK~F*vcfad`3g2_Sp{;0GiC8wj97 z3=Ivnh|2BSfTxo%3(D)>M4W#@wNaC0-WGBYtVv+!}Uu|SzvIJwz5Ie)A% zGDF#znV)gPU_4x$oKRLMfQAKL6c$3g$E@0-p~lzFSz6b6JqRVtBeT>rEO3BY!vn_) z;e`9k^Q&F|p`^+b|3AXFW2D3sI`*2)O7}R6vblxnFX7tzifSL^;;d%n4;J?=mTxCo z?O7>3^}njSMcHVJe{uLe9yhx?^IgIC=5y@B*v8x?62!bd}r zBJ*87bs|tNx#@-}nGGB%5NXc^p9&P6%ds=q^V(3CF%b4d9RJpEY~!`JUbfH`nW}-m zRN8;d03CF(mF<`r2VJYYC+~?s5vNA_+q83BE?>GvFB8?7zLq;IJMolu2_CQOZie5* zZ#%yjUM~~J6Q0N`Q|vvT3a><&S$U_9S-n7iunfWfx>kmG8Jog5y(g@Dbcw#*+$Kz#mBnQISw>O05xn%7iXh!+OGzA)bF?-{?Gct6wJ ztz&P{R9;Tzb_bt#eunF&P!x0Zf)EnXyRY^qIUz`_$YYj{oD=E$3&Y`7-bnMZA~?5m ziO&S03EA9>6wemyf0Zv_`kq;04TfWsAdP%ss8`$g%raVv8nkw4T>e1%!Xx|3f6&^o?DRt3*K~UmTk}FLd#^ zM6e`7eqM6H{+ddaz~T>%2ICC*^!Z=}CUp{J`Z+3I!q%!%xJ4@4US~#s>CIBTR8;xx zf{x6%o$gVF&!rdc+KpXrdI_*}?;-y~RsO^N8RC1iz{(f)n8$W?(DvT^afODt{a*&U zR$|Q~cY^O(Uy~N62U5xcdFO+OfN`LARJ#K4mebBP$4EGJ`I(k%h!h!&> z!lCE;28u8{&Oag5Ml-c_Alf~hL1x*p_I7hKdCgNL{zBx7KLfyD~SPY=t8%jMlY5*L(;< z-Xu>)krw`s^${@1}2J6S}cJt)7&b*2!cDpnjlune`E^o)v1ThzQ8E!lbn)t#k5HZcLB5|`shTwio@jsy{1`r5{U^Af|3NuXj zbG6J*I#KG1H@QbH@of_oz2vH0>Ya6jD2B+Y3^Tv!lo`+mU?FB{Pel}HMPHg-WYo&I zSI)B4mNg^x=o@%Ay*-EBdk#F*$^yU0JrR_~Ab8NGUv2WR8QEmf&9}mae~$-X zb(eEXb?P|tn%dky6?$Q54y7>ZMbB_@{?ryo--8p}6#ibxSQnOysl50T9?|%NOP7q*m-bk83SD>t& zTe-t`mp&|TFMt|6 z
Fw%!;ZU30T&_&~n1f{AyNQ81GPOfTQbuT~p>Q_Vf|2FyFJY8(bCg%_R7&t(t5cYX(I0Jbr4JZDPrq3Y@O6UlIW z{zWaUV#|~JBNj@vvXGIN?zJYAx^Q=dp77=kLgEV36>Z}0i3toJboSagaQ&i0{KVf+baDq6k>uM*740gMw_j7DL%AFsSt5R{pT6csHNtgQ?Pf~S1x ztF*N#c;ov|divHFd_FmGyH8@k z$BOuzT2Bp_UKrfHQk2BSnMpzV5!b?2aQj)IjI;Fh)@^Rp=|UGW!Q6F*y-O^=E`aep z3}89`$U^L%hpMKF>VJLLBau z%g)lb~k5eD6hg1vLO^AVeqx%zoT|{xj3X?DZH%3iHp2xV#GV;lxgd_)6c?c zu}9xXaeMvJ%{zDo5DBcwZa#b?kk1(cD$ihxbQay;9fSb$p7&C&+WF zP}Fb>{~RAFn{vpnH4heILhB;!Z*HT{-fi$ZRrlm7Nc<^#HPcq>C?$I+ylVOO?e+!x zR`6LDK!(-^V@IH(LwIqFgd#IsezP`@6RXQ}fM8vgQJx0N}#00Npy9#n8g?3Wt+Pkb6tLWQ7_6dgLj_@?~HE- zjNR4=PG8Yd-}nvl&oT&6gkyYRMvBX>46B|$xH(b`cGFj>$VhtXK36Lcp0bYOT({LR zc|2ajtoQ!pBe?J;AEM2CGM8muab|+V8Nu-y@m2MdqFcj^-Osv>Gp`jf#(je@VKY6V zK^p!N@+9{c5FaAk{m+t1^3d~w z^=$GqZV!Nzn5=-q%oq7gIlOIbkWZ(3ypDp*NGD!K#JN3|5g^rx5OFvu$fB$@u5XFP z-I?Fso60lv;hEj6J?n-iJZp%51%)FIpii$RS*y9u2p|*RIADyu?U1OR8FsNm6{3 z%-^>_dXudX+lyfZwU*LIJ7+K0md}^t>FuN2>;sSVRoK-KN&K))d1{(xd;m28_G?DX z{*{UDO1&r3-|rV0V8&$|&QHCSSJCRt#G;Iuzm^u#2oR4CMP25Ltj}oXe;cIqTEpoc z{Th@tW2)r!&|tNhTs;0d2Xl4%DuERD)SE1?lvAq4PPg%Oy}YS2t-h0=z56@spRbo- z_$SMTWwmB#u5cANeD~I$0E}ehE`=`Fn+v8&LymZ{!^-Ld#1s%DTNUg^8r0W=tN56D zh~N8ddo1FrmCL@jLK{jwf)d@arrS^6{U$hD2!kvzd_fr(5r)ePdIy)&L>w0Or}qh0 z*WC(q9u}VD&|sE3i*YFkA={Qn;6lFC^5ast-~W9U)-+8AKd^M;n*@R8$?a49;r7KJ1gd zRM=1h>uV=c1cVz8PC+dH!6mYj)8=<|HqS@Dx|p>}5sa;j zwrbJc((O;6PZm7!d=Jx*UHcgu7lE;LU}xr5 zdeMqw``UaHwhto6S;f1;*BhPthAnlkE=RK19eErxz_OD1FaIg!XA~Ae^;dyyiS=5i}0b@_QV&p@sIedP+N3=`a5Wm87TlPpU zP-P9-L=%GZB<|va%;VXG0T@wFI_2nzP?6k}52jwM_~q~rDJ)GDn$G4@a-saQ5fR|` z?~RDZFY;f*-H8OapYw8a^X{I2`wT4XFn%6>9u64CFD`Db`FUn$MkqJ93Bkq1%?ab- zIG=zrFfoB;PVknCm+uY{J$c!pAFaFAS8F_=blE%0Z+5t5@uL&X7VQ8o1&XH5-7`!} zD$LS8`z2D!7qF|oLU=%(bBKyb0^toW9OvM-Sp!!k$0)KSo*8~aq8G302O9D4 z-x%*%>#9QKluK!f*=e-(3CN|Cl8wbhAi2EEif4vVw9-I#EOZ zuy=BqF%Z&mB@%M^6i7HQz{bb?$Sap^k@KfW6=6Z3pG-0T*MSfQ5yXAxrT$UDK*eH> zDen}Y!abw4+3XaI85>}IRjEQsg3W|_G5}YPPpT|&) z7i`gK1|d;zHsLl@P$a87pY*}Ky&9IqczGwNBf$uFl9MXv(r>*`sP00AeFSQeuh(6J4LFFNc4NWbs7o~6U!)~b>|m!n0Wp> zW0Ys@1N4FVh`h=qQCAMes(B*&=#3Od~?F5jYiMr zb*8Kokbi0^RHz+C%dicqe_GY)y#6fZ!HQg%A{Vw8Cz2PQU@Fc9E8H8or>7P8E~JO< zSWSQuU8B`uzy74Kdb*cZl0=Rp&84__PK`Zbge(2m%BV`Dj&0{MgAUCHgKiDJ)O+J_ z=34g$I?tclDTwRQI0ShQr9~rpdt|K?D%bdc#Gf!~_Vib%jr^`~;&0fO6bnhptsc~f zd{(1grZXp4uglN5RF3s}R0Hy)a-mkL7YL`t0st<0mO@T{G1aJy(dSm$w-%EccB`sC zpKjs)^n_s0c;dmMAz(B>K7MfNXil3Am1Cj(u;D^zRxyw(m#4~Pl-R>#Qi1M>0&>g< zVMix0cOYsc4ST=+Av8=bazq46qx8!XzqX!Tegru+t%qArEE6Dsh0ezXhhUWjOU&2f z@Nw1WY~a}dp$G7T*d_st42#77sMG!YSaDoyL#5KVfMDy6C9s%|f9 zbT}h+NrDHN#07P|^c5|K95`BC=a?BB$5P_mq`y`Q`2%DOo|f>`^t3L<+8Tl#IVRcl z9uzD{Tqf*3nOyO2H8XAQi2DV0qL8otw8BoCQW~o|--_kFPy|o^$PQ8Wmh&r-f97qF z{=vhyX6u(zH5w-T08joVPG0>wPw6IawcKkz{wyQd-*prYK1C@%<@>xru@TDx6!9f?R&7R5gBdE=;{0dykw z6`Mskim{(s-*OxVIXv|8sLYKX?|*s_^X#0FW z&O{q^%Y_Lus@m!46c`%c)$2_kKC;_7%vwrlsN(8_CdG)9+`9MBSw%A}!{7)mWLsao zrx(+I=nlY84tR6_t{m>AOPFOma^UB0j(M4VZgE08zMF%e*h2Blug(vElQ$Tc5+AO_ z>U7lN8!k^IHJ?lfV|)}auyOCiD{hq^dm zTEj?+rA~+LN^!2eJ-8NiI!~Yu!zXUnoNk*$MYp0~D7(tmUm8Nxuhp;M(|OM2L2WZ; zP_M{xLO5PJn&jbD)bjC}OwB_bsh9!H`;`E?Ek(dFtQ%`zj?$Dvkk>LiZ7<~|osSH9 z=#sRz_TDZJ60*->VTLik@CK)vBwj@7(OI=UkqZ z{Gz6|H*a!#W~!JP9Nh+oDtpHZ`ik)QmDv?j@kS|`sP^a!UhYQzMJ$7a{pb>()+rui zlBy8)X`Ri`TVWfCKR){`0r)^O7-Pda0uXJgUTYgZM|#~W6iLRXLA4|~H)(XD5{`XYS=uAQ`PO2cHgA88{> zq15BUn#FOw?@GZyM&@3d=IEd??b_CCJXTBxM90O|77xAP6Q(1%SbEo>!6!+V{Q*z9 zI$gTU1V_I3IcyH$S9lis3L; zkvd+P4Me0LZOY{$1Y7S}IPCnc>{z?vU7d_a;zdnI;?t5=Mx&2En#wnYrX0@0huOq=3U2CVxvgq#{CGE_{K2{hW*AtnAfws$=x8{%2Yy#RRUM-s$(!3U@3NLKkRx9!%%%TQW#9nr*X#RcdzM2^_gs0rE7SB$&q2 z1or)%BXp!iK+W3OYN?SOMc=NM2R4H4x`3b(?5Y03ZhL-kmB;1pmvt5gqF4|Kyl_lG zJ}zWA(*BbH^gNB0uNm0ge#PpPL?U`9>6$f%@&;kEpB~ICot%qlPCumLLN+-7vUM~S z+7Zr|0|f_CcnKOyO+o;4b}y_E#e!~o#TImDOH5_+7kBDUTD0JhZi~w z!-0S0)-~Jt7~kavoINl}k60_ujh)vXmbPdvKe+P^eC2<(NNJq*`}riAu{ch`(w2u+ zJp^y~v|1z$qD}z6%w`|87jaOhq43Geey^c zGF>jwWH`cP3FVm-Mr`a}17&H5?wavo%f;<04~Gx!Y0n0ZZJiTGaCgdr>i`%y7))s; zz1fUG2Rna^VL%GAsmn#*J-84(Mw-K#$au7}c_# z2ff&y4aKU18EG|rk>ZEq>>a;VLRg@!p8hJmPs!Pf?&$j?J%=d`vKivsYGOcw##1I{ zn6BxN5fP?5zvEh8(QNIZQ+_U|<3YmVK5tUlR#QIFru$02>vK}#&w78j8&9%qoDWj) zxSp6t$bixQAC!0uQ2~Ze5|Z*LVnoiQU%zWNb8mhcb5)x=it^1!_jB@74l@`|nzCJS zVJ6f>IsR4}mZK9j+-$v^DTJ3^GY^mRhS3_G1cHQo3^+V?xhwfB=D#k)PAru80qQg zW7p3URbSF1aE87P)NA~?mu_Haki5+BEigG&(s9)LXzR~TXZX9wPc>=Bx>~8Kxm!E?C1R(NkhB5m zQa<)+B)Itz_{Mn!*)hFk?V=llW2!ySl7=8iuMLS5!A+2Na_D1wF6tNh;ehQLMh z1Mj$OY?j|cQHAwuLdb5|^gWIJy&MGSK0w16H=5aWfaIYuz#E(-8|tqS z4sLd*E~^I+ZhfyEADHmVcX}Ibytym!ZowXB@ac{aK$~;vKbVb7d>Zc|@}=U^!!(+B z>4TeHsfYR9GQzjm4w@1l7l;ImJu2f1ytDN=Eh4kXIB&`kiomqX>Wcp4kAC3pzy|?0 zZf<~b2O=>YkQI!)4wb{?Z5XW`>KLtaCmGm#e^0z4!vhFmxf5y0AnA&qwhQ6S186@i zM(5usDOw1LUVP}#XWwlRReCt{|1jUiTI76d2SqKcg4|uBIF{iYR7FzLR6c z#x66M+hAchx5t!Ez$yQ8dOGLa=W~l2+tH5S9(#yIHVM)aFnw9m5 zNu%%E&u6y=BDO2!69!DLLu-(HGgF=!3|-Dh7C6t*@f`~ zW`~FGt*daV4ILT;>+1Scbrgh@;-#x2{o)FlFmeDrPWM^%5NpS7?72JC*UY z0@Net7~R?2vcSNNnNbg(-V%&*TOZ@9(`?fh>LxWPtT*hK5d`SQ8(D#pyM${qRjt)} zcqQuO*eKB$M{mE*1>U_8Z}`f=_Q87p)m6s1sV4AiS9!2qxG^3(HhFV~LR1H_#v^G; zthlK~*OBAiXwR^l!m*Gpv6tkeqj+GQPbYdU5CQq@pfxmy-b*>`q69Oqw69)bmy~i? z;nrM;wt2nrj~9zaJNK8l@&|#6GS{B1HgeTB`bcNzXjZhDMo8a=vBu$?&e5_dW0G-8 zcrFOct{lJS-m($%wVR3PYGvhoY*+a>WnCAYwJ&=H0GqgSk)39kRtI7S@Ki|o^<*(4 zBK=QOnDupMeQZ6smpMpzh?4x0=H*^&zE(|)XD<)Y5$tn?2mW>Pq3Yio4u4NXWb#;w zbHHG{JlrrI9xfQi*7xV&p$C3mKCb6b4sK3H7UpL#*d{9rjF%tE%)-q4xb*;I=j3JN z zt+tnXy~399STDk|k>5uWyn_3RPK8vFxy8#m?l*}mv|Dl!|02xGtJQ7hP0?Ei*M9D$ z=XA;%=~L?D0PBq`oT=caXn{Nn1uW4?>|#Hy?cV+n<_~B5rjyAGcM;qZQ~gI3#+lzG z_sj5|RbxWf3x$Irusw;d_l@|#6*K^eneWE(iQqF9k}6@Mh)DQ@JS>Krdufa z(E573;#aw)=QK7KoY0?}3uqqC@>f(i|7&sVUW()D1B`u0XW@HNUwrP!ftOR=&rKUm5!%}HwyHu zFBrpw6$H|{m6~j8vn5xD0U;ha2oon#>*}H?*_S=GhtuW-KDqUGkz&U`@|GVoj6Uoi5zXm0E5X)&;U2pZD9Hjm6ER*^CS^KY;t7d6pLKfKmtsbgbVS z%%|)=Sx7E>Fsnc7GPJi#<4qrUH~U`ULF+pg3Gdk4Vi}`#JF=!ZKb`_mQio*dA=d1O zY_%d((Q2*3c0Y1z5{+wc{T_!z`Au2ZP}mrm`_EhUcQ!Hl);LccB|OZ_X|rZ4uEgVJ zJgaAsjyD^8N+BfmdW)%D>Wy7#RxZRRB;~at=$zc*$4!wB)4p4)!i3d!i`c=RdxP9K zk}rU!Jt74Y^@txz3Cz#QR=#EYCe_)ryvSe?SwqF$g!k)&OXO3>gZzf0Iot5wJKYt+ zEdOvAiBfN*&{6v>*R@?08gO!PB)Lj{D8UYLc9Sf=iM! z^4)FD$kwVJ{kTH5x3PcjV^;$iJ__L3^H3Q?uVwjyveDPAXtOV^=Lm^ z#M4~jw*!)2iOeJZtns%}wI$S!dvUv|-o~vopieW$lQ#8!Mih^GsYOZ|Jc0(WGRTol zh$n`re;I9p5N|0z>uBlxp60U{_qOq{ZedO?;+{(=38u|6;abk1mxl=>y_c^fm;b$E zCk62OXhC)d(JX7E#A*WtXA$qRze>f&WBlfwG=d}8lR%(*McNK~4*7`?$?J_YydwCi zDwDK%$oqgMTIn)e?1D~y49JXhmy+ed# z8i&}V)^HLD0c3dS0cKKbVp7!eSjw7h^^lzho81GRu=dkfebJMhLHX<3*e7))O~p1@ z^Dgyi^g-s54cpB5L*aRm!u=QSHTuq7 z)$-3%vwv15kW_J-Ivb;jFI7;39~9--0Ti4++yQQggrqL^LV^pq`B+5nXoLo0f&^|T zhi(h_^9I9|o=bc!@uC3q7<_4z#RFxxIPu|^jB_8B1mT4oKfN$HTz;~+I(XYI#VpYo zDTP*~Bf;5LR9l%D#dWa-ar@$wsgc1~7-1(weHq`j24|?_S!4{I3GTgc84OyTVt85n%v^@;74e7DkWx{NGH$!I{OZd8pG^G?ABLm3aN5E!3%gjyYc zJo@CCG2LYe+n}Rdw36ai)5Vf62UKj68YqmCJttbMH-qr(sS$i@o+S)1(l6@_#>Q0f z4y9I$He3fPxVwKZSEG!e1_(T`0|ZE(9Lni^($cNu9kC(4z|)_z1DeHXV#EHSwf86` zvWdZ`-%BbD!m0=K^z-2)m_2osmjqGgu9iuQh%wU-5I>y1ZObIrD@|EtC>)!rKj4n6 zQf7IdtfX)Hd-_3?cM6l#Ox#o22obftk--LFeig8+@&HfRXuB9YKaCQ~cenuEXO2&KOcJoCOM=0s%Gi z3^~?kwtmCaJJsKla5H_J4;E~1KQInV`LG=8;g5tV!B*#L@)PMfD}#cCdHD54HOda5 zt{%BMZy}A?raFf-2-UmLqz}RR@=}5`<^epR>y(5WriGlIyo&2rce!XM>uEs{mm^CG zYK}vvnpPe;Hp?OGq&8@;bJ{{i8zlIB(Y##G*qh{qpo=i7$Q{InWGd{$ z2X#q4)S~tw^;+!bZ)Ipyg5cg*bnhiE+1P=%;qYOI2YJ{a z=O-(-^X8eCnu4iC^A94BPAIsv4zs4kq6^VGEG5whd#EUTRu_({J(Ib_nh>4!;VbX5 z)s}%>GRIlGq~Jx)#=FeC2hGRjt6W!10N~ih1CWo`SIs zab8?6Cl!k>-sc*(RbAnu*#ryXdr zj2tHQuC1;+GWd0tuTK+<%4W(~X1}Xs2lp{5K6gNo-t2tEYwSdO1%FPZQqrBzcS*ix zR7AB+z&^-~+AUZ&t`8A9ltsW%?mtO*31p}&)v{KEeIoEgU)69vKhdx2|8x`VXu9Oh zH0M1Duqfy?$=zcg75Uu;Y&;b*;TlP?; zg4I#o`@zwuI#*9{XHo?a<7SjEHkjRHGrSM}NKw%pina=e08YoA;>z^s-InmuUBUsC zdy(jVTq~b#RB&_j2;QAe5U->}(P4I0eq#gYASjSW!#wck5Kg;u_qwq~OF?dQnt0z9 z@P6a(eEX)XRJ~27o1(Qkbib)4)ryNTlNcKUdsX>~2SEB&`aGuC;H$%d;Gs=;`OtHZ z;h9_Q2QKxy)f5TI(Km$lG&ot;T=dG3-OrE+REKa)U~$s0hv$%l(uRiUM9GDjE`JfL z)$i#0y7=F#CM7GYzf`P9SBf?YefYx|Ao#c?33Pl%vce3^ll7h25yZAooK3B@DD%;d z&>u)sg<8$VpdT9$I?l?7eWQv7Kj~jB)&gf7L;DynC)MbY=Sxz7_Q2pP?Ff#EY3mgy z8!r2Y*PDb^G9RjxGJ?XYu^ zvT@@a{cAYm;dBRidT9XO;UG49}3=u9S20wa;fQm+TTx8NE3+~rjX*QNS+hq_C_*b85n!% z%rvRRiuqlOED;cxH4VVBajEq4EvONT=Jb$!X;kLaSW70!Nlpbw+^31e%(X`M3>8m} ze)Ict_(5s4aP6A?peM%Di5(vpPkx#Q)V|shdz%{K|ITk+@U6#Sig%mKpkk@FSZx8( zn^lfC`ja(3UFmv04O)|j$1fwC&L+C_Tj6%YP5VF<=kPjczIvr^nmDfY0TTLc?3!DjbuC?jdjZRw%xH-=AgMV8M^ zT(Ksz4|5+6b}$*SP8F>tBjHz}Fy@1H5Qgo!zw8E$R zYw(6X=jZTJNJ=9*&nbkiu4z>lk1|gAkB%JmOX7GF^y;`ELOPyP6!0B^F&75_r2_I( zvaNu*!?x6`^@X}&ji*_TYf>He;`eWbB%@9FwxvB*37Dra(mtaac^zHZW7vrZGjZsc z{T#r&Re|5?6dS(dlbW$P_C*|erkPjNBeO!~MZWs2`IoS-m-H7!Q(s)XKOAr{@$hq1 zcr)ps2ZS%0_DT=!1G9XR*Y94~zr{Ii4ELK5sR$3yrnD?7^UmIt_bC_20RM{dcOL=) zSo`-r1o)?ZV7Dze35$DUw0Cy)pZ{S%Ab0$p*1gnr+A@DiE#8N{qe%}RC{U|c` zT~k5I(oBI2+7Y!ao|Rh3i(#_*O3;R3@=j%MiR#94aAPkp$Gc-*=*0AApx08bm-U& z%XxAM<;5RQkG!=D|rfnBjFCl&>agR12A{y`FmTM9i&DX4f&Uz=w=#bXIMz1&xFyFUht~_jD zjV_ZuYjSvQd&E!Q{01l9kaEvM_9fJC>OEP=skZ7UNBMiFU^R5yr7@a7*M1_#UHF@j zIig-!d^hVp>pxde$2KucY?COeeix>~@849dG=WS*V&=p}*RsWO7d|6CK!i^M{XMlW z0fTaGpXYZ(Q5J+7V#P^y)N*0$05cdOr|)W?=oFhD#fv+$J?+~T_Xx73S_eDJCWyWl>h%I7Y&qy28>gop2`e{9KRsrQ8~jWRd}AIY4M23jbawF_3v#n4PGs`KQqLsR2A?GC@naGd_*t6WX{4I&-C^| ziZ)8Ln$RS;!6W2TgE$XVS|GA^bo8@6TY6&gDg4Wi8g|b5`r2RL?z@lsM~>!AN}zm{ zYIW-k{+~L3;k%?#51FqIA{8+;1qfBXEUwjDk8kd@#RXmw;?5IZnJ;JgNky>8S&)U# z!pU^!wcGdhIgrB3mzLD(i8B>kIlZ}EKEtjYihh1cAwX~NLbIjPQmH-N`)yAshvMb+ zJb96O#9e4)c)GQL3yEclWAv_?&T~}#GzO^Z2(Qq$RzZ=$oQzdKP9uIAsrnkSb zFQh(oOj+MF|DTmG%3WZuKN%FHy!<3nP0Zg%*SQ~0Jza6_)Rimi7#Z@m%Lf}pB&fSG z)Q5&l@0=?z#fPz$S9ht@o7;?`K5HA*8y4=q)o`*oj`{wrqWwkx4?M6~xBqGzv)l1F Oev7%+89*DeKmY(~BtPx| literal 0 HcmV?d00001 diff --git a/Resources/Locale/en-US/guardian/guardian.ftl b/Resources/Locale/en-US/guardian/guardian.ftl index 13cb9ad9da..e619fea18d 100644 --- a/Resources/Locale/en-US/guardian/guardian.ftl +++ b/Resources/Locale/en-US/guardian/guardian.ftl @@ -1,16 +1,22 @@ - ## Guardian host specific guardian-created = You feel... Haunted. guardian-already-present-invalid-creation = You are NOT re-living that haunting experience! guardian-no-actions-invalid-creation = You don't have the ability to host a guardian! -guardian-activator-empty-invalid-creation = The injector is spent. -guardian-activator-empty-examine = [color=#ba1919]The injector is spent.[/color] -guardian-activator-invalid-target = {CAPITALIZE(THE($entity))} cannot be injected! +guardian-activator-invalid-target = {CAPITALIZE(THE($entity))} is incapable of hosting a guardian! guardian-no-soul = Your guardian has no soul. guardian-available = Your guardian now has a soul. guardian-inside-container = There's no room to release your guardian! +## Injector specific +guardian-injector-empty-invalid-creation = The injector is spent. +guardian-injector-empty-examine = [color=#ba1919]The injector is spent.[/color] + +## Guardian deck specific + +guardian-deck-invalid-creation = The deck can only provide one guardian at a time! +guardian-deck-used-examine = [color=#ba1919]The deck's seal has been broken.[/color] + ## Guardian entity specific guardian-entity-recall = The guardian vanishes into thin air! diff --git a/Resources/Prototypes/Entities/Objects/Devices/Syndicate_Gadgets/guardian_activators.yml b/Resources/Prototypes/Entities/Objects/Devices/Syndicate_Gadgets/guardian_activators.yml index 6cd2c335dd..b513d36a19 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/Syndicate_Gadgets/guardian_activators.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/Syndicate_Gadgets/guardian_activators.yml @@ -1,7 +1,7 @@ - type: entity - name: holoparasite injector - id: HoloparasiteInjector parent: [BaseItem, BaseSyndicateContraband] + id: HoloparasiteInjector + name: holoparasite injector description: A complex artwork of handheld machinery allowing the user to host a holoparasite guardian. components: - type: Sprite @@ -11,19 +11,19 @@ guardianProto: MobHoloparasiteGuardian - type: entity - name: holoclown injector parent: HoloparasiteInjector id: HoloClownInjector + name: holoclown injector description: A complex artwork of handheld machinery allowing the user to host a holoclown guardian. components: - type: GuardianCreator guardianProto: MobHoloClownGuardian - type: entity - name: magical lamp - id: MagicalLamp - parent: BaseItem - description: The wizard federation had to cut costs after the jinn merchandise scandal somehow. + parent: [BaseItem, BaseMagicalContraband] + id: GuardianDeck + name: guardian deck + description: A deck of guardian tarot cards, capable of binding a personal guardian to your body. components: - type: Sprite sprite: Objects/Misc/Lights/lamp.rsi @@ -31,11 +31,14 @@ - state: lamp - type: GuardianCreator guardianProto: MobIfritGuardian + emptyPopup: guardian-deck-invalid-creation + emptyExamine: guardian-deck-used-examine + usedSound: /Audio/Effects/guardian_deck_shuffle.ogg - type: entity - name: holoparasite box parent: [BoxCardboard, BaseSyndicateContraband] id: BoxHoloparasite + name: holoparasite box description: A box containing a holoparasite injector. components: - type: EntityTableContainerFill @@ -51,9 +54,9 @@ - state: holo - type: entity - name: holoclown box parent: [BoxCardboard, BaseSyndicateContraband] id: BoxHoloclown + name: holoclown box description: A box containing a holoclown injector. components: - type: EntityTableContainerFill From d4c4ce9feb4723d965656786a4386e096fb25d8c Mon Sep 17 00:00:00 2001 From: Whatstone <166147148+whatston3@users.noreply.github.com> Date: Mon, 29 Jun 2026 17:18:43 -0400 Subject: [PATCH 14/47] Restore general ruminant digestion (#44427) --- Resources/Prototypes/Body/Animals/ruminant.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/Resources/Prototypes/Body/Animals/ruminant.yml b/Resources/Prototypes/Body/Animals/ruminant.yml index f880f129e3..f31e1ce936 100644 --- a/Resources/Prototypes/Body/Animals/ruminant.yml +++ b/Resources/Prototypes/Body/Animals/ruminant.yml @@ -9,6 +9,7 @@ - Ruminant - Wheat - BananaPeel + isSpecialDigestibleExclusive: false - type: SolutionManager solutions: - SolutionStomachRuminant From f42f8df6d15a87a1f5156e0240c157b1e1c67295 Mon Sep 17 00:00:00 2001 From: Whatstone <166147148+whatston3@users.noreply.github.com> Date: Mon, 29 Jun 2026 17:33:56 -0400 Subject: [PATCH 15/47] Cleanup: ProtoMan Part 2 - remove Client and Server EntitySystem IPrototypeManager instances (#44416) * Remove all IPrototypeManager instances * Remove redundant IComponentFactory instances too * Found some stragglers * DestructibleSystem.PrototypeManager: no dependency * not based --- .../Access/Systems/JobStatusSystem.cs | 7 ++-- Content.Client/Actions/ActionsSystem.cs | 6 ++-- .../Administration/AdminQuickInfoSystem.cs | 3 +- .../Systems/AdminSystem.Overlay.cs | 4 +-- Content.Client/Alerts/ClientAlertsSystem.cs | 3 +- Content.Client/Atmos/AlignAtmosPipeLayers.cs | 5 ++- .../GasCanisterAppearanceSystem.cs | 5 +-- .../Audio/ContentAudioSystem.AmbientMusic.cs | 11 +++--- Content.Client/Audio/Jukebox/JukeboxSystem.cs | 5 ++- .../BarSign/BarSignVisualizerSystem.cs | 5 +-- Content.Client/Body/VisualBodySystem.cs | 4 +-- .../TypingIndicatorVisualizerSystem.cs | 4 +-- .../EntitySystems/ChemistryGuideDataSystem.cs | 7 ++-- .../InjectorStatusControlSystem.cs | 5 +-- .../SolutionContainerVisualsSystem.cs | 4 +-- .../Systems/ChameleonClothingSystem.cs | 8 ++--- .../UI/ChameleonBoundUserInterface.cs | 2 +- .../Construction/ConstructionSystem.cs | 2 +- Content.Client/Construction/FlatpackSystem.cs | 2 +- .../CrewManifest/CrewManifestSystem.cs | 4 +-- Content.Client/Damage/DamageVisualsSystem.cs | 7 ++-- Content.Client/Decals/DecalPlacementSystem.cs | 5 ++- .../Delivery/DeliveryVisualizerSystem.cs | 5 ++- Content.Client/DoAfter/DoAfterSystem.cs | 5 +-- Content.Client/Doors/DoorSystem.cs | 7 ++-- .../Explosion/ExplosionOverlaySystem.cs | 4 +-- Content.Client/Holopad/HolopadSystem.cs | 4 +-- Content.Client/Interaction/DragDropSystem.cs | 5 ++- .../EntitySystems/MultipartMachineSystem.cs | 5 ++- Content.Client/MapText/MapTextSystem.cs | 12 +++---- .../Movement/Systems/FloorOcclusionSystem.cs | 4 +-- Content.Client/Outline/TargetOutlineSystem.cs | 5 ++- .../Overlays/ShowCriminalRecordIconsSystem.cs | 6 +--- .../Overlays/ShowHealthBarsSystem.cs | 4 +-- .../Overlays/ShowHealthIconsSystem.cs | 7 ++-- .../Overlays/ShowMindShieldIconsSystem.cs | 10 ++---- .../Overlays/ShowSyndicateIconsSystem.cs | 5 +-- Content.Client/Popups/PopupSystem.cs | 5 +-- .../RCD/RCDConstructionGhostSystem.cs | 4 +-- .../Revolutionary/RevolutionarySystem.cs | 7 ++-- .../SSDIndicator/SSDIndicatorSystem.cs | 5 +-- Content.Client/Stealth/StealthSystem.cs | 4 +-- .../EntityStorageVisualizerSystem.cs | 10 ++---- Content.Client/Zombies/ZombieSystem.cs | 8 ++--- .../Actions/RetractableItemActionTest.cs | 2 +- .../Tests/Atmos/GasArrayTest.cs | 4 +-- Content.IntegrationTests/Tests/CargoTest.cs | 4 +-- .../Tests/ContrabandTest.cs | 2 +- .../Tests/DeviceLinking/DeviceLinkingTest.cs | 2 +- .../Tests/FillLevelSpriteTest.cs | 6 ++-- .../GameRules/AllGamePresetsStartTest.cs | 2 +- .../Tests/GameRules/AntagGhostRoleTest.cs | 4 +-- .../Tests/GameRules/TraitorRuleTest.cs | 6 ++-- .../InteractionTest.EntitySpecifier.cs | 4 +-- ...teractionTest.EntitySpecifierCollection.cs | 2 +- .../Tests/Lathe/LatheTest.cs | 6 ++-- .../Tests/MachineBoardTest.cs | 10 +++--- .../Tests/Power/PowerStatePrototypeTest.cs | 4 +-- .../PrototypeTests/PrototypeUploadTest.cs | 12 +++---- .../Tests/Puller/PullerTest.cs | 2 +- .../Tests/ResearchTest.cs | 4 +-- .../Tests/Storage/StorageTest.cs | 34 ++++++++++--------- .../Tests/VendingMachineRestockTest.cs | 4 +-- .../Access/Systems/AgentIDCardSystem.cs | 14 ++++---- .../Access/Systems/IdCardConsoleSystem.cs | 5 ++- Content.Server/Access/Systems/IdCardSystem.cs | 4 +-- .../Access/Systems/PresetIdCardSystem.cs | 7 ++-- .../Administration/Systems/AdminSystem.cs | 5 +-- .../Systems/AdminVerbSystem.Tools.cs | 3 +- .../Administration/Systems/AdminVerbSystem.cs | 2 -- .../EntitySystems/SpeakOnUIClosedSystem.cs | 4 +-- Content.Server/AlertLevel/AlertLevelSystem.cs | 4 +-- .../Anomaly/AnomalySystem.Generator.cs | 2 +- Content.Server/Anomaly/AnomalySystem.cs | 13 ++++--- .../Anomaly/Effects/InnerBodyAnomalySystem.cs | 8 ++--- .../Effects/ReagentProducerAnomalySystem.cs | 4 +-- .../AntagSelectionSystem.API.Assignment.cs | 16 ++++----- .../Antag/AntagSelectionSystem.API.cs | 12 +++---- Content.Server/Antag/AntagSelectionSystem.cs | 8 ++--- .../SpaceVillainArcadeSystem.cs | 8 ++--- Content.Server/Armor/ArmorSystem.cs | 7 ++-- .../Monitor/Systems/AtmosMonitoringSystem.cs | 8 ++--- Content.Server/Audio/ContentAudioSystem.cs | 3 +- Content.Server/Audio/Jukebox/JukeboxSystem.cs | 3 +- .../Body/Systems/RespiratorSystem.cs | 3 +- .../Botany/Systems/BotanySystem.Seed.cs | 5 ++- .../Botany/Systems/MutationSystem.cs | 5 ++- .../Botany/Systems/PlantHolderSystem.cs | 3 +- .../Cargo/Systems/CargoSystem.Bounty.cs | 14 ++++---- .../Cargo/Systems/CargoSystem.Funds.cs | 6 ++-- .../Cargo/Systems/CargoSystem.Orders.cs | 16 ++++----- Content.Server/Cargo/Systems/CargoSystem.cs | 2 -- Content.Server/Cargo/Systems/PricingSystem.cs | 11 +++--- .../CharacterInfo/CharacterInfoSystem.cs | 4 +-- .../Chat/Systems/AutoEmoteSystem.cs | 8 ++--- .../Chat/Systems/ChatNotificationSystem.cs | 3 +- .../Chat/Systems/ChatSystem.PrivateAPI.cs | 2 +- Content.Server/Chat/Systems/ChatSystem.cs | 2 -- .../Chat/Systems/EmoteOnDamageSystem.cs | 12 +++---- .../EntitySystems/ReagentDispenserSystem.cs | 4 +-- .../EntitySystems/SolutionRandomFillSystem.cs | 7 ++-- .../TransformableContainerSystem.cs | 6 ++-- .../Chemistry/EntitySystems/VaporSystem.cs | 8 ++--- Content.Server/Cloning/CloningSystem.cs | 7 ++-- .../Cloning/RandomCloneSpawnerSystem.cs | 6 +--- .../Systems/ChameleonClothingSystem.cs | 6 ++-- .../Clothing/Systems/OutfitSystem.cs | 10 +++--- Content.Server/Cluwne/CluwneSystem.cs | 4 +-- Content.Server/Codewords/CodewordSystem.cs | 7 ++-- .../Communications/CommsHackerSystem.cs | 7 ++-- Content.Server/Crayon/CrayonSystem.cs | 6 ++-- .../CrewManifest/CrewManifestSystem.cs | 5 +-- .../Systems/CriminalRecordsHackerSystem.cs | 4 +-- .../Damage/ForceSay/DamageForceSaySystem.cs | 7 ++-- .../Damage/Systems/ExaminableDamageSystem.cs | 4 +-- Content.Server/Delivery/DeliverySystem.cs | 3 +- .../Destructible/DestructibleSystem.cs | 2 +- .../Behaviors/WeightedSpawnEntityBehavior.cs | 3 +- .../Systems/DeviceNetworkSystem.cs | 12 +++---- .../Electrocution/ElectrocutionSystem.cs | 3 +- .../Emoting/Systems/BodyEmotesSystem.cs | 3 +- .../PlantMutateChemicalsEntityEffectSystem.cs | 4 +-- ...ntMutateSpeciesChangeEntityEffectSystem.cs | 4 +-- .../EntitySystems/ExplosionSystem.Airtight.cs | 4 +-- .../EntitySystems/ExplosionSystem.cs | 11 +++--- .../FeedbackSystem/FeedbackSystem.cs | 3 +- .../Fluids/EntitySystems/PuddleSystem.cs | 5 +-- .../Fluids/EntitySystems/SmokeSystem.cs | 6 ++-- .../GameTicking/GameTicker.GamePreset.cs | 14 ++++---- .../GameTicking/GameTicker.GameRule.cs | 4 +-- .../GameTicking/GameTicker.LobbyBackground.cs | 3 +- .../GameTicking/GameTicker.RoundFlow.cs | 4 +-- .../GameTicking/GameTicker.Spawning.cs | 6 ++-- Content.Server/GameTicking/GameTicker.cs | 5 +-- .../Rules/AntagLoadProfileRuleSystem.cs | 7 ++-- .../GameTicking/Rules/GameRuleSystem.cs | 3 -- .../GameTicking/Rules/LoadMapRuleSystem.cs | 4 +-- .../GameTicking/Rules/SecretRuleSystem.cs | 10 +++--- .../GameTicking/Rules/TraitorRuleSystem.cs | 6 +--- .../PuddleMessVariationPassSystem.cs | 4 +-- .../Gateway/Systems/GatewayGeneratorSystem.cs | 7 ++-- Content.Server/Ghost/GhostSystem.cs | 3 +- Content.Server/Ghost/Roles/GhostRoleSystem.cs | 13 ++++--- Content.Server/Ghost/SpookySpeakerSystem.cs | 4 +-- .../GridPreloader/GridPreloaderSystem.cs | 5 ++- .../Guidebook/GuidebookDataSystem.cs | 4 +-- .../Holiday/Christmas/RandomGiftSystem.cs | 5 ++- Content.Server/Holiday/HolidaySystem.cs | 6 ++-- .../Humanoid/Systems/RandomHumanoidSystem.cs | 6 ++-- .../Implants/ChameleonControllerSystem.cs | 14 ++++---- .../Kitchen/EntitySystems/MicrowaveSystem.cs | 7 ++-- Content.Server/Lathe/LatheSystem.cs | 20 +++++------ .../EntitySystems/MultipartMachineSystem.cs | 3 +- Content.Server/Maps/MapMigrationSystem.cs | 5 +-- .../Materials/MaterialReclaimerSystem.cs | 6 ++-- .../Materials/MaterialStorageSystem.cs | 11 +++--- Content.Server/Mining/MiningSystem.cs | 5 ++- Content.Server/NPC/HTN/HTNSystem.cs | 9 +++-- .../NPC/Systems/NPCUtilitySystem.cs | 5 ++- .../NameIdentifier/NameIdentifierSystem.cs | 9 +++-- Content.Server/Objectives/ObjectivesSystem.cs | 15 ++++---- .../Systems/StealConditionSystem.cs | 4 +-- Content.Server/Parallax/BiomeSystem.cs | 6 ++-- .../JobWhitelist/JobWhitelistSystem.cs | 3 +- .../PlayTimeTrackingSystem.cs | 15 ++++---- .../Polymorph/Systems/PolymorphSystem.cs | 9 +++-- .../Procedural/DungeonSystem.Commands.cs | 12 +++---- .../Procedural/DungeonSystem.Rooms.cs | 2 +- Content.Server/Procedural/DungeonSystem.cs | 7 ++-- .../Radio/EntitySystems/RadioDeviceSystem.cs | 7 ++-- .../Radio/EntitySystems/RadioSystem.cs | 5 ++- .../RandomMetadata/RandomMetadataSystem.cs | 3 +- .../Research/Disk/ResearchDiskSystem.cs | 4 +-- .../Respawn/SpecialRespawnSystem.cs | 4 +-- Content.Server/Roles/RoleSystem.cs | 4 +-- Content.Server/RoundEnd/RoundEndSystem.cs | 4 +-- .../Salvage/JobBoard/SalvageJobBoardSystem.cs | 9 +++-- .../SalvageSystem.ExpeditionConsole.cs | 5 ++- .../Salvage/SalvageSystem.Expeditions.cs | 2 +- .../Salvage/SalvageSystem.Magnet.cs | 2 +- Content.Server/Salvage/SalvageSystem.cs | 4 +-- .../Shuttles/Systems/ArrivalsSystem.cs | 3 +- .../Systems/ShuttleSystem.GridFill.cs | 4 +-- .../Shuttles/Systems/ShuttleSystem.Impact.cs | 2 +- .../Shuttles/Systems/ShuttleSystem.cs | 1 - Content.Server/Silicons/Laws/IonLawSystem.cs | 7 ++-- .../Silicons/Laws/IonStormSystem.cs | 4 +-- .../Silicons/Laws/SiliconLawSystem.cs | 5 ++- .../Silicons/StationAi/StationAiSystem.cs | 5 ++- .../ContainerSpawnPointSystem.cs | 4 +-- .../EntitySystems/RandomDecalSpawnerSystem.cs | 4 +-- Content.Server/Species/Systems/NymphSystem.cs | 3 +- Content.Server/Speech/EmotesMenuSystem.cs | 4 +-- .../EntitySystems/MumbleAccentSystem.cs | 4 +-- .../EntitySystems/ReplacementAccentSystem.cs | 7 ++-- .../Speech/EntitySystems/VocalSystem.cs | 8 ++--- Content.Server/Speech/Muting/MutingSystem.cs | 3 +- Content.Server/Speech/SpeechNoiseSystem.cs | 4 +-- Content.Server/Spreader/SpreaderSystem.cs | 9 +++-- Content.Server/Sprite/RandomSpriteSystem.cs | 6 ++-- Content.Server/Stack/StackSystem.cs | 12 +++---- .../Station/Systems/StationBiomeSystem.cs | 4 +-- .../Systems/StationJobsSystem.Roundstart.cs | 7 ++-- .../Station/Systems/StationSpawningSystem.cs | 15 ++++---- .../BasicStationEventSchedulerSystem.cs | 10 +++--- .../StationEvents/EventManagerSystem.cs | 15 ++++---- .../StationEvents/Events/ImmovableRodRule.cs | 6 ++-- .../Events/StationEventSystem.cs | 3 -- .../StationEvents/Events/VentClogRule.cs | 2 +- .../Systems/StationRecordsSystem.cs | 6 ++-- .../EntitySystems/StorageSystem.Fill.cs | 5 ++- .../Storage/EntitySystems/StorageSystem.cs | 3 -- .../Store/Systems/StoreSystem.Ui.cs | 4 +-- .../Systems/StoreDiscountSystem.cs | 3 +- .../Systems/SurveillanceCameraRouterSystem.cs | 6 ++-- .../Systems/SurveillanceCameraSystem.cs | 4 +-- Content.Server/Telephone/TelephoneSystem.cs | 4 +-- .../ThiefUndeterminedBackpackSystem.cs | 6 ++-- Content.Server/Tips/TipsSystem.cs | 3 +- Content.Server/Traitor/Uplink/UplinkSystem.cs | 3 +- Content.Server/Traits/TraitSystem.cs | 5 ++- .../Trigger/Systems/RattleOnTriggerSystem.cs | 3 +- .../Trigger/Systems/SpeakOnTriggerSystem.cs | 4 +-- .../Systems/DatasetVocalizationSystem.cs | 3 +- .../Systems/RadioVocalizationSystem.cs | 3 +- Content.Server/VoiceMask/VoiceMaskSystem.cs | 4 +-- Content.Server/Wagging/WaggingSystem.cs | 3 +- Content.Server/Wires/WiresSystem.cs | 5 ++- .../Artifact/XAE/XAECreatePuddleSystem.cs | 7 ++-- .../Artifact/XAE/XAEFoamSystem.cs | 3 +- Content.Server/Zombies/ZombieSystem.cs | 4 +-- Content.Shared/Item/SharedItemSystem.cs | 5 ++- .../StatusEffectNew/StatusEffectsSystem.cs | 5 ++- .../Whitelist/EntityWhitelistSystem.cs | 5 ++- 234 files changed, 508 insertions(+), 852 deletions(-) diff --git a/Content.Client/Access/Systems/JobStatusSystem.cs b/Content.Client/Access/Systems/JobStatusSystem.cs index e651bfdb70..0b4ef98720 100644 --- a/Content.Client/Access/Systems/JobStatusSystem.cs +++ b/Content.Client/Access/Systems/JobStatusSystem.cs @@ -10,7 +10,6 @@ public sealed partial class JobStatusSystem : SharedJobStatusSystem { [Dependency] private ShowJobIconsSystem _showJobIcons = default!; [Dependency] private ShowCrewIconsSystem _showCrewIcons = default!; - [Dependency] private IPrototypeManager _prototype = default!; private static readonly ProtoId CrewBorderIcon = "CrewBorderIcon"; private static readonly ProtoId CrewUncertainBorderIcon = "CrewUncertainBorderIcon"; @@ -26,14 +25,14 @@ public sealed partial class JobStatusSystem : SharedJobStatusSystem private void OnGetStatusIconsEvent(Entity ent, ref GetStatusIconsEvent ev) { if (_showJobIcons.IsActive && ent.Comp.JobStatusIcon != null) - ev.StatusIcons.Add(_prototype.Index(ent.Comp.JobStatusIcon)); + ev.StatusIcons.Add(ProtoMan.Index(ent.Comp.JobStatusIcon)); if (_showCrewIcons.IsActive) { if (_showCrewIcons.UncertainCrewBorder) - ev.StatusIcons.Add(_prototype.Index(CrewUncertainBorderIcon)); + ev.StatusIcons.Add(ProtoMan.Index(CrewUncertainBorderIcon)); else if (ent.Comp.IsCrew) - ev.StatusIcons.Add(_prototype.Index(CrewBorderIcon)); + ev.StatusIcons.Add(ProtoMan.Index(CrewBorderIcon)); } } } diff --git a/Content.Client/Actions/ActionsSystem.cs b/Content.Client/Actions/ActionsSystem.cs index 90cf4190f2..aac14a1420 100644 --- a/Content.Client/Actions/ActionsSystem.cs +++ b/Content.Client/Actions/ActionsSystem.cs @@ -17,7 +17,6 @@ using Robust.Shared.Serialization.Markdown; using Robust.Shared.Serialization.Markdown.Mapping; using Robust.Shared.Serialization.Markdown.Sequence; using Robust.Shared.Serialization.Markdown.Value; -using Robust.Shared.Timing; using Robust.Shared.Utility; using YamlDotNet.RepresentationModel; @@ -30,7 +29,6 @@ namespace Content.Client.Actions [Dependency] private SharedChargesSystem _sharedCharges = default!; [Dependency] private IPlayerManager _playerManager = default!; - [Dependency] private IPrototypeManager _proto = default!; [Dependency] private IResourceManager _resources = default!; [Dependency] private MetaDataSystem _metaData = default!; [Dependency] private ISerializationManager _serialization = default!; @@ -257,7 +255,7 @@ namespace Content.Client.Actions else if (map.TryGet("entity", out var entityNode)) { var id = new EntProtoId(entityNode.Value); - var proto = _proto.Index(id); + var proto = ProtoMan.Index(id); actionId = Spawn(MappingEntityAction); SetIcon(actionId, new SpriteSpecifier.EntityPrototype(id)); SetEvent(actionId, new StartPlacementActionEvent() @@ -270,7 +268,7 @@ namespace Content.Client.Actions else if (map.TryGet("tileId", out var tileNode)) { var id = new ProtoId(tileNode.Value); - var proto = _proto.Index(id); + var proto = ProtoMan.Index(id); actionId = Spawn(MappingEntityAction); if (proto.Sprite is {} sprite) SetIcon(actionId, new SpriteSpecifier.Texture(sprite)); diff --git a/Content.Client/Administration/AdminQuickInfoSystem.cs b/Content.Client/Administration/AdminQuickInfoSystem.cs index dec319136c..55e1979a99 100644 --- a/Content.Client/Administration/AdminQuickInfoSystem.cs +++ b/Content.Client/Administration/AdminQuickInfoSystem.cs @@ -39,7 +39,6 @@ internal sealed partial class AdminQuickInfoCommand : LocalizedEntityCommands internal sealed partial class AdminQuickInfoSystem : EntitySystem { [Dependency] private AdminSystem _adminSystem = null!; - [Dependency] private IPrototypeManager _prototypeManager = null!; public event Action? EntityResponseReceived; @@ -152,7 +151,7 @@ internal sealed partial class AdminQuickInfoSystem : EntitySystem sb.AppendMarkupLine(Loc.GetString("admin-quick-info-job", ("job", _playerInfo.StartingJob))); - if (_playerInfo.RoleProto is { } roleId && _system._prototypeManager.Resolve(roleId, out var role)) + if (_playerInfo.RoleProto is { } roleId && _system.ProtoMan.Resolve(roleId, out var role)) { var roleColor = role.Color.ToHex(); var symbol = _playerInfo.Antag ? role.Symbol : ""; diff --git a/Content.Client/Administration/Systems/AdminSystem.Overlay.cs b/Content.Client/Administration/Systems/AdminSystem.Overlay.cs index a07abae90c..3fb85b59d3 100644 --- a/Content.Client/Administration/Systems/AdminSystem.Overlay.cs +++ b/Content.Client/Administration/Systems/AdminSystem.Overlay.cs @@ -4,7 +4,6 @@ using Robust.Client.Graphics; using Robust.Client.ResourceManagement; using Robust.Client.UserInterface; using Robust.Shared.Configuration; -using Robust.Shared.Prototypes; namespace Content.Client.Administration.Systems { @@ -18,7 +17,6 @@ namespace Content.Client.Administration.Systems [Dependency] private IUserInterfaceManager _userInterfaceManager = default!; [Dependency] private IConfigurationManager _configurationManager = default!; [Dependency] private SharedRoleSystem _roles = default!; - [Dependency] private IPrototypeManager _proto = default!; private AdminNameOverlay _adminNameOverlay = default!; @@ -36,7 +34,7 @@ namespace Content.Client.Administration.Systems _userInterfaceManager, _configurationManager, _roles, - _proto); + ProtoMan); _adminManager.AdminStatusUpdated += OnAdminStatusUpdated; } diff --git a/Content.Client/Alerts/ClientAlertsSystem.cs b/Content.Client/Alerts/ClientAlertsSystem.cs index 29cd5da190..a42380180e 100644 --- a/Content.Client/Alerts/ClientAlertsSystem.cs +++ b/Content.Client/Alerts/ClientAlertsSystem.cs @@ -15,7 +15,6 @@ public sealed partial class ClientAlertsSystem : AlertsSystem public AlertOrderPrototype? AlertOrder { get; set; } [Dependency] private IPlayerManager _playerManager = default!; - [Dependency] private IPrototypeManager _prototypeManager = default!; [Dependency] private IUserInterfaceManager _ui = default!; public event EventHandler? ClearAlerts; @@ -39,7 +38,7 @@ public sealed partial class ClientAlertsSystem : AlertsSystem { base.LoadPrototypes(); - AlertOrder = _prototypeManager.EnumeratePrototypes().FirstOrDefault(); + AlertOrder = ProtoMan.EnumeratePrototypes().FirstOrDefault(); if (AlertOrder == null) Log.Error("No alertOrder prototype found, alerts will be in random order"); } diff --git a/Content.Client/Atmos/AlignAtmosPipeLayers.cs b/Content.Client/Atmos/AlignAtmosPipeLayers.cs index c8e69bc17f..d9ce52a262 100644 --- a/Content.Client/Atmos/AlignAtmosPipeLayers.cs +++ b/Content.Client/Atmos/AlignAtmosPipeLayers.cs @@ -6,7 +6,6 @@ using Robust.Client.GameObjects; using Robust.Client.Graphics; using Robust.Client.Placement; using Robust.Client.Placement.Modes; -using Robust.Client.Utility; using Robust.Shared.Enums; using Robust.Shared.Map; using Robust.Shared.Map.Components; @@ -169,7 +168,7 @@ public sealed partial class AlignAtmosPipeLayers : SnapgridCenter if (!_protoManager.TryIndex(pManager.CurrentPermission.EntityType, out var currentProto)) return; - if (!currentProto.TryGetComponent(out var atmosPipeLayers, _entityManager.ComponentFactory)) + if (!currentProto.TryComp(out var atmosPipeLayers, _entityManager.ComponentFactory)) return; if (!_pipeLayersSystem.TryGetAlternativePrototype(atmosPipeLayers, layer, out var newProtoId)) @@ -181,7 +180,7 @@ public sealed partial class AlignAtmosPipeLayers : SnapgridCenter pManager.CurrentPermission.EntityType = newProtoId; // Update the appearance of the ghost sprite - if (newProto.TryGetComponent(out var sprite, _entityManager.ComponentFactory)) + if (newProto.TryComp(out var sprite, _entityManager.ComponentFactory)) { var textures = new List(); diff --git a/Content.Client/Atmos/EntitySystems/GasCanisterAppearanceSystem.cs b/Content.Client/Atmos/EntitySystems/GasCanisterAppearanceSystem.cs index d54f4d20a6..1d0bf5d315 100644 --- a/Content.Client/Atmos/EntitySystems/GasCanisterAppearanceSystem.cs +++ b/Content.Client/Atmos/EntitySystems/GasCanisterAppearanceSystem.cs @@ -1,7 +1,6 @@ using Content.Shared.Atmos.Piping.Unary.Components; using Content.Shared.SprayPainter.Prototypes; using Robust.Client.GameObjects; -using Robust.Shared.Prototypes; namespace Content.Client.Atmos.EntitySystems; @@ -10,14 +9,12 @@ namespace Content.Client.Atmos.EntitySystems; /// public sealed partial class GasCanisterAppearanceSystem : VisualizerSystem { - [Dependency] private IPrototypeManager _prototypeManager = default!; - protected override void OnAppearanceChange(EntityUid uid, GasCanisterComponent component, ref AppearanceChangeEvent args) { if (!AppearanceSystem.TryGetData(uid, PaintableVisuals.Prototype, out var protoName, args.Component) || args.Sprite is not { } old) return; - if (!_prototypeManager.HasIndex(protoName)) + if (!ProtoMan.HasIndex(protoName)) return; // Create the given prototype and get its first layer. diff --git a/Content.Client/Audio/ContentAudioSystem.AmbientMusic.cs b/Content.Client/Audio/ContentAudioSystem.AmbientMusic.cs index f22f2fd31b..b98ad5ad74 100644 --- a/Content.Client/Audio/ContentAudioSystem.AmbientMusic.cs +++ b/Content.Client/Audio/ContentAudioSystem.AmbientMusic.cs @@ -24,7 +24,6 @@ public sealed partial class ContentAudioSystem [Dependency] private IGameTiming _timing = default!; [Dependency] private ILogManager _logManager = default!; [Dependency] private IPlayerManager _player = default!; - [Dependency] private IPrototypeManager _proto = default!; [Dependency] private IRobustRandom _random = default!; [Dependency] private IStateManager _state = default!; [Dependency] private RulesSystem _rules = default!; @@ -106,7 +105,7 @@ public sealed partial class ContentAudioSystem private void SetupAmbientSounds() { _ambientSounds.Clear(); - foreach (var ambience in _proto.EnumeratePrototypes()) + foreach (var ambience in ProtoMan.EnumeratePrototypes()) { var tracks = _ambientSounds.GetOrNew(ambience.ID); RefreshTracks(ambience.Sound, tracks, null); @@ -131,7 +130,7 @@ public sealed partial class ContentAudioSystem if (collection.Collection == null) break; - var slothCud = _proto.Index(collection.Collection); + var slothCud = ProtoMan.Index(collection.Collection); tracks.AddRange(slothCud.PickFiles); break; case SoundPathSpecifier path: @@ -167,7 +166,7 @@ public sealed partial class ContentAudioSystem { var player = _player.LocalSession?.AttachedEntity; - if (player == null || _musicProto == null || !_rules.IsTrue(player.Value, _proto.Index(_musicProto.Rules))) + if (player == null || _musicProto == null || !_rules.IsTrue(player.Value, ProtoMan.Index(_musicProto.Rules))) { FadeOut(_ambientMusicStream, duration: AmbientMusicFadeTime); _musicProto = null; @@ -241,12 +240,12 @@ public sealed partial class ContentAudioSystem if (ev.Cancelled) return null; - var ambiences = _proto.EnumeratePrototypes().ToList(); + var ambiences = ProtoMan.EnumeratePrototypes().ToList(); ambiences.Sort((x, y) => y.Priority.CompareTo(x.Priority)); foreach (var amb in ambiences) { - if (!_rules.IsTrue(player.Value, _proto.Index(amb.Rules))) + if (!_rules.IsTrue(player.Value, ProtoMan.Index(amb.Rules))) continue; return amb; diff --git a/Content.Client/Audio/Jukebox/JukeboxSystem.cs b/Content.Client/Audio/Jukebox/JukeboxSystem.cs index 0194c1ccbd..2caac59f64 100644 --- a/Content.Client/Audio/Jukebox/JukeboxSystem.cs +++ b/Content.Client/Audio/Jukebox/JukeboxSystem.cs @@ -8,7 +8,6 @@ namespace Content.Client.Audio.Jukebox; public sealed partial class JukeboxSystem : SharedJukeboxSystem { - [Dependency] private IPrototypeManager _protoManager = default!; [Dependency] private AnimationPlayerSystem _animationPlayer = default!; [Dependency] private SharedAppearanceSystem _appearanceSystem = default!; [Dependency] private SharedUserInterfaceSystem _uiSystem = default!; @@ -21,13 +20,13 @@ public sealed partial class JukeboxSystem : SharedJukeboxSystem SubscribeLocalEvent(OnAnimationCompleted); SubscribeLocalEvent(OnJukeboxAfterState); - _protoManager.PrototypesReloaded += OnProtoReload; + ProtoMan.PrototypesReloaded += OnProtoReload; } public override void Shutdown() { base.Shutdown(); - _protoManager.PrototypesReloaded -= OnProtoReload; + ProtoMan.PrototypesReloaded -= OnProtoReload; } private void OnProtoReload(PrototypesReloadedEventArgs obj) diff --git a/Content.Client/BarSign/BarSignVisualizerSystem.cs b/Content.Client/BarSign/BarSignVisualizerSystem.cs index e17d264cb5..029c4724dc 100644 --- a/Content.Client/BarSign/BarSignVisualizerSystem.cs +++ b/Content.Client/BarSign/BarSignVisualizerSystem.cs @@ -1,14 +1,11 @@ using Content.Shared.BarSign; using Content.Shared.Power; using Robust.Client.GameObjects; -using Robust.Shared.Prototypes; namespace Content.Client.BarSign; public sealed partial class BarSignVisualizerSystem : VisualizerSystem { - [Dependency] private IPrototypeManager _prototypeManager = default!; - protected override void OnAppearanceChange(EntityUid uid, BarSignComponent component, ref AppearanceChangeEvent args) { AppearanceSystem.TryGetData(uid, PowerDeviceVisuals.Powered, out var powered, args.Component); @@ -16,7 +13,7 @@ public sealed partial class BarSignVisualizerSystem : VisualizerSystem(currentSign, out var proto)) + && ProtoMan.Resolve(currentSign, out var proto)) { SpriteSystem.LayerSetSprite((uid, args.Sprite), 0, proto.Icon); args.Sprite?.LayerSetShader(0, "unshaded"); diff --git a/Content.Client/Body/VisualBodySystem.cs b/Content.Client/Body/VisualBodySystem.cs index c7b5825d14..c29a60cc97 100644 --- a/Content.Client/Body/VisualBodySystem.cs +++ b/Content.Client/Body/VisualBodySystem.cs @@ -7,7 +7,6 @@ using Content.Shared.Humanoid; using Robust.Client.GameObjects; using Robust.Client.Graphics; using Robust.Shared.Configuration; -using Robust.Shared.Prototypes; using Robust.Shared.Utility; namespace Content.Client.Body; @@ -15,7 +14,6 @@ namespace Content.Client.Body; public sealed partial class VisualBodySystem : SharedVisualBodySystem { [Dependency] private IConfigurationManager _cfg = default!; - [Dependency] private IPrototypeManager _prototype = default!; [Dependency] private DisplacementMapSystem _displacement = default!; [Dependency] private MarkingManager _marking = default!; [Dependency] private SpriteSystem _sprite = default!; @@ -149,7 +147,7 @@ public sealed partial class VisualBodySystem : SharedVisualBodySystem if (!censorNudity) yield break; - var group = _prototype.Index(ent.Comp.MarkingData.Group); + var group = ProtoMan.Index(ent.Comp.MarkingData.Group); foreach (var layer in ent.Comp.MarkingData.Layers) { if (!group.Limits.TryGetValue(layer, out var layerLimits)) diff --git a/Content.Client/Chat/TypingIndicator/TypingIndicatorVisualizerSystem.cs b/Content.Client/Chat/TypingIndicator/TypingIndicatorVisualizerSystem.cs index ebb6538ab4..4e84ce8c10 100644 --- a/Content.Client/Chat/TypingIndicator/TypingIndicatorVisualizerSystem.cs +++ b/Content.Client/Chat/TypingIndicator/TypingIndicatorVisualizerSystem.cs @@ -1,13 +1,11 @@ using Content.Shared.Chat.TypingIndicator; using Robust.Client.GameObjects; -using Robust.Shared.Prototypes; using Content.Shared.Inventory; namespace Content.Client.Chat.TypingIndicator; public sealed partial class TypingIndicatorVisualizerSystem : VisualizerSystem { - [Dependency] private IPrototypeManager _prototypeManager = default!; [Dependency] private InventorySystem _inventory = default!; protected override void OnAppearanceChange(EntityUid uid, TypingIndicatorComponent component, ref AppearanceChangeEvent args) @@ -27,7 +25,7 @@ public sealed partial class TypingIndicatorVisualizerSystem : VisualizerSystem(out var extractableComponent, EntityManager.ComponentFactory)) + if (!entProto.TryComp(out ExtractableComponent? extractableComponent, Factory)) continue; //these bloat the hell out of blood/fat - if (entProto.HasComponent()) + if (entProto.HasComp(Factory)) continue; //these feel obvious... - if (entProto.HasComponent()) + if (entProto.HasComp(Factory)) continue; if (extractableComponent.JuiceSolution is { } juiceSolution) diff --git a/Content.Client/Chemistry/EntitySystems/InjectorStatusControlSystem.cs b/Content.Client/Chemistry/EntitySystems/InjectorStatusControlSystem.cs index 87983661f2..6a7bf0ac41 100644 --- a/Content.Client/Chemistry/EntitySystems/InjectorStatusControlSystem.cs +++ b/Content.Client/Chemistry/EntitySystems/InjectorStatusControlSystem.cs @@ -2,19 +2,16 @@ using Content.Client.Items; using Content.Shared.Chemistry.Components; using Content.Shared.Chemistry.EntitySystems; -using Robust.Shared.Prototypes; namespace Content.Client.Chemistry.EntitySystems; public sealed partial class InjectorStatusControlSystem : EntitySystem { [Dependency] private SharedSolutionContainerSystem _solutionContainers = default!; - [Dependency] private IPrototypeManager _prototypeManager = default!; - public override void Initialize() { base.Initialize(); - Subs.ItemStatus(injector => new InjectorStatusControl(injector, _solutionContainers, _prototypeManager)); + Subs.ItemStatus(injector => new InjectorStatusControl(injector, _solutionContainers, ProtoMan)); } } diff --git a/Content.Client/Chemistry/Visualizers/SolutionContainerVisualsSystem.cs b/Content.Client/Chemistry/Visualizers/SolutionContainerVisualsSystem.cs index 0891dd8710..7d2874bd11 100644 --- a/Content.Client/Chemistry/Visualizers/SolutionContainerVisualsSystem.cs +++ b/Content.Client/Chemistry/Visualizers/SolutionContainerVisualsSystem.cs @@ -8,13 +8,11 @@ using Content.Shared.Hands; using Content.Shared.Item; using Content.Shared.Rounding; using Robust.Client.GameObjects; -using Robust.Shared.Prototypes; namespace Content.Client.Chemistry.Visualizers; public sealed partial class SolutionContainerVisualsSystem : VisualizerSystem { - [Dependency] private IPrototypeManager _prototype = default!; [Dependency] private ItemSystem _itemSystem = default!; public override void Initialize() @@ -131,7 +129,7 @@ public sealed partial class SolutionContainerVisualsSystem : VisualizerSystem(baseOverride); + var reagentProto = ProtoMan.Index(baseOverride); if (SpriteSystem.LayerMapTryGet(ent, component.OverlayLayer, out var overlayLayer, false)) SpriteSystem.LayerSetVisible(ent, overlayLayer, reagentProto.MetamorphicSprite is not null); diff --git a/Content.Client/Clothing/Systems/ChameleonClothingSystem.cs b/Content.Client/Clothing/Systems/ChameleonClothingSystem.cs index 08153c3b3f..deffb0de3d 100644 --- a/Content.Client/Clothing/Systems/ChameleonClothingSystem.cs +++ b/Content.Client/Clothing/Systems/ChameleonClothingSystem.cs @@ -1,8 +1,6 @@ -using System.Linq; -using Content.Client.PDA; +using Content.Client.PDA; using Content.Shared.Clothing.Components; using Content.Shared.Clothing.EntitySystems; -using Content.Shared.Inventory; using Robust.Client.GameObjects; using Robust.Shared.Prototypes; @@ -35,14 +33,14 @@ public sealed class ChameleonClothingSystem : SharedChameleonClothingSystem { base.UpdateSprite(uid, proto); if (TryComp(uid, out SpriteComponent? sprite) - && proto.TryGetComponent(out SpriteComponent? otherSprite, Factory)) + && proto.TryComp(out SpriteComponent? otherSprite, Factory)) { sprite.CopyFrom(otherSprite); } // Edgecase for PDAs to include visuals when UI is open if (TryComp(uid, out PdaBorderColorComponent? borderColor) - && proto.TryGetComponent(out PdaBorderColorComponent? otherBorderColor, Factory)) + && proto.TryComp(out PdaBorderColorComponent? otherBorderColor, Factory)) { borderColor.BorderColor = otherBorderColor.BorderColor; borderColor.AccentHColor = otherBorderColor.AccentHColor; diff --git a/Content.Client/Clothing/UI/ChameleonBoundUserInterface.cs b/Content.Client/Clothing/UI/ChameleonBoundUserInterface.cs index c46c84f42d..9fe36d683c 100644 --- a/Content.Client/Clothing/UI/ChameleonBoundUserInterface.cs +++ b/Content.Client/Clothing/UI/ChameleonBoundUserInterface.cs @@ -48,7 +48,7 @@ public sealed partial class ChameleonBoundUserInterface : BoundUserInterface if (string.IsNullOrEmpty(target) || !_proto.Resolve(target, out EntityPrototype? proto)) continue; - if (!proto.TryGetComponent(out TagComponent? tag, EntMan.ComponentFactory) || !_tag.HasTag(tag, st.RequiredTag)) + if (!proto.TryComp(out TagComponent? tag, EntMan.ComponentFactory) || !_tag.HasTag(tag, st.RequiredTag)) continue; newTargets.Add(target); diff --git a/Content.Client/Construction/ConstructionSystem.cs b/Content.Client/Construction/ConstructionSystem.cs index b803d7c7ea..08fa809a2b 100644 --- a/Content.Client/Construction/ConstructionSystem.cs +++ b/Content.Client/Construction/ConstructionSystem.cs @@ -300,7 +300,7 @@ namespace Content.Client.Construction var sprite = Comp(ghost.Value); - if (targetProto.TryGetComponent(out IconComponent? icon, EntityManager.ComponentFactory)) + if (targetProto.TryComp(out IconComponent? icon, EntityManager.ComponentFactory)) { _sprite.AddBlankLayer((ghost.Value, sprite), 0); _sprite.LayerSetSprite((ghost.Value, sprite), 0, icon.Icon); diff --git a/Content.Client/Construction/FlatpackSystem.cs b/Content.Client/Construction/FlatpackSystem.cs index 6475b667fb..5cce2e22f6 100644 --- a/Content.Client/Construction/FlatpackSystem.cs +++ b/Content.Client/Construction/FlatpackSystem.cs @@ -28,7 +28,7 @@ public sealed partial class FlatpackSystem : SharedFlatpackSystem if (!ProtoMan.TryIndex(machineBoardId, out var machineBoardPrototype)) return; - if (!machineBoardPrototype.TryGetComponent(out var sprite, EntityManager.ComponentFactory)) + if (!machineBoardPrototype.TryComp(out SpriteComponent? sprite, EntityManager.ComponentFactory)) return; Color? color = null; diff --git a/Content.Client/CrewManifest/CrewManifestSystem.cs b/Content.Client/CrewManifest/CrewManifestSystem.cs index 2899ed4cd2..9a1d94d559 100644 --- a/Content.Client/CrewManifest/CrewManifestSystem.cs +++ b/Content.Client/CrewManifest/CrewManifestSystem.cs @@ -6,8 +6,6 @@ namespace Content.Client.CrewManifest; public sealed partial class CrewManifestSystem : EntitySystem { - [Dependency] private IPrototypeManager _prototypeManager = default!; - private Dictionary> _jobDepartmentLookup = new(); private HashSet _departments = new(); @@ -40,7 +38,7 @@ public sealed partial class CrewManifestSystem : EntitySystem { _jobDepartmentLookup.Clear(); _departments.Clear(); - foreach (var department in _prototypeManager.EnumeratePrototypes()) + foreach (var department in ProtoMan.EnumeratePrototypes()) { _departments.Add(department.ID); diff --git a/Content.Client/Damage/DamageVisualsSystem.cs b/Content.Client/Damage/DamageVisualsSystem.cs index a2182dd93c..b374831059 100644 --- a/Content.Client/Damage/DamageVisualsSystem.cs +++ b/Content.Client/Damage/DamageVisualsSystem.cs @@ -28,7 +28,6 @@ namespace Content.Client.Damage; /// public sealed partial class DamageVisualsSystem : VisualizerSystem { - [Dependency] private IPrototypeManager _prototypeManager = default!; [Dependency] private DamageableSystem _damageable = default!; public override void Initialize() @@ -153,7 +152,7 @@ public sealed partial class DamageVisualsSystem : VisualizerSystem(injurableComponent.DamageContainer, out var damageContainer)) + && ProtoMan.Resolve(injurableComponent.DamageContainer, out var damageContainer)) { // Are we using damage overlay sprites by group? // Check if the container matches the supported groups, @@ -189,7 +188,7 @@ public sealed partial class DamageVisualsSystem : VisualizerSystem() + var damagePrototypeIdList = ProtoMan.EnumeratePrototypes() .Select((p, _) => p.ID) .ToList(); if (damageVisComp.DamageOverlayGroups != null) @@ -524,7 +523,7 @@ public sealed partial class DamageVisualsSystem : VisualizerSystem(damageGroup, out var damageGroupPrototype) + if (!ProtoMan.TryIndex(damageGroup, out var damageGroupPrototype) || !damage.TryGetDamageInGroup(damageGroupPrototype, out var damageTotal)) continue; diff --git a/Content.Client/Decals/DecalPlacementSystem.cs b/Content.Client/Decals/DecalPlacementSystem.cs index bab9c9b688..1e07cc1451 100644 --- a/Content.Client/Decals/DecalPlacementSystem.cs +++ b/Content.Client/Decals/DecalPlacementSystem.cs @@ -19,7 +19,6 @@ public sealed partial class DecalPlacementSystem : EntitySystem { [Dependency] private IInputManager _inputManager = default!; [Dependency] private IOverlayManager _overlay = default!; - [Dependency] private IPrototypeManager _protoMan = default!; [Dependency] private InputSystem _inputSystem = default!; [Dependency] private MetaDataSystem _metaData = default!; [Dependency] private SharedActionsSystem _actions = default!; @@ -42,7 +41,7 @@ public sealed partial class DecalPlacementSystem : EntitySystem public (DecalPrototype? Decal, bool Snap, Angle Angle, Color Color) GetActiveDecal() { return _active && _decalId != null ? - (_protoMan.Index(_decalId), _snap, _decalAngle, _decalColor) : + (ProtoMan.Index(_decalId), _snap, _decalAngle, _decalColor) : (null, false, Angle.Zero, Color.Wheat); } @@ -143,7 +142,7 @@ public sealed partial class DecalPlacementSystem : EntitySystem if (ev.Action != null) return; - if (_decalId == null || !_protoMan.TryIndex(_decalId, out var decalProto)) + if (_decalId == null || !ProtoMan.TryIndex(_decalId, out var decalProto)) return; var actionEvent = new PlaceDecalActionEvent() diff --git a/Content.Client/Delivery/DeliveryVisualizerSystem.cs b/Content.Client/Delivery/DeliveryVisualizerSystem.cs index 10935f0faa..6b6e93d6a2 100644 --- a/Content.Client/Delivery/DeliveryVisualizerSystem.cs +++ b/Content.Client/Delivery/DeliveryVisualizerSystem.cs @@ -8,7 +8,6 @@ namespace Content.Client.Delivery; public sealed partial class DeliveryVisualizerSystem : VisualizerSystem { [Dependency] private SharedAppearanceSystem _appearance = default!; - [Dependency] private IPrototypeManager _prototype = default!; private static readonly ProtoId UnknownIcon = "JobIconUnknown"; @@ -22,9 +21,9 @@ public sealed partial class DeliveryVisualizerSystem : VisualizerSystem(job, out var icon)) + if (!ProtoMan.TryIndex(job, out var icon)) { - SpriteSystem.LayerSetTexture((uid, args.Sprite), DeliveryVisualLayers.JobStamp, SpriteSystem.Frame0(_prototype.Index(UnknownIcon).Icon)); + SpriteSystem.LayerSetTexture((uid, args.Sprite), DeliveryVisualLayers.JobStamp, SpriteSystem.Frame0(ProtoMan.Index(UnknownIcon).Icon)); return; } diff --git a/Content.Client/DoAfter/DoAfterSystem.cs b/Content.Client/DoAfter/DoAfterSystem.cs index 0c6bf1fb19..7bf968115a 100644 --- a/Content.Client/DoAfter/DoAfterSystem.cs +++ b/Content.Client/DoAfter/DoAfterSystem.cs @@ -1,9 +1,7 @@ using System.Diagnostics.CodeAnalysis; using Content.Shared.DoAfter; -using Content.Shared.Hands.Components; using Robust.Client.Graphics; using Robust.Client.Player; -using Robust.Shared.Prototypes; namespace Content.Client.DoAfter; @@ -15,13 +13,12 @@ public sealed partial class DoAfterSystem : SharedDoAfterSystem { [Dependency] private IOverlayManager _overlay = default!; [Dependency] private IPlayerManager _player = default!; - [Dependency] private IPrototypeManager _prototype = default!; [Dependency] private MetaDataSystem _metadata = default!; public override void Initialize() { base.Initialize(); - _overlay.AddOverlay(new DoAfterOverlay(EntityManager, _prototype, GameTiming, _player)); + _overlay.AddOverlay(new DoAfterOverlay(EntityManager, ProtoMan, GameTiming, _player)); } public override void Shutdown() diff --git a/Content.Client/Doors/DoorSystem.cs b/Content.Client/Doors/DoorSystem.cs index 7b2ac18280..d72589fed6 100644 --- a/Content.Client/Doors/DoorSystem.cs +++ b/Content.Client/Doors/DoorSystem.cs @@ -3,15 +3,12 @@ using Content.Shared.Doors.Systems; using Content.Shared.SprayPainter.Prototypes; using Robust.Client.Animations; using Robust.Client.GameObjects; -using Robust.Shared.Prototypes; namespace Content.Client.Doors; public sealed partial class DoorSystem : SharedDoorSystem { [Dependency] private AnimationPlayerSystem _animationSystem = default!; - [Dependency] private IComponentFactory _componentFactory = default!; - [Dependency] private IPrototypeManager _prototypeManager = default!; [Dependency] private SpriteSystem _sprite = default!; public override void Initialize() @@ -209,10 +206,10 @@ public sealed partial class DoorSystem : SharedDoorSystem private void UpdateSpriteLayers(Entity sprite, string targetProto) { - if (!_prototypeManager.Resolve(targetProto, out var target)) + if (!ProtoMan.Resolve(targetProto, out var target)) return; - if (!target.TryGetComponent(out SpriteComponent? targetSprite, _componentFactory)) + if (!target.TryComp(out SpriteComponent? targetSprite, Factory)) return; _sprite.SetBaseRsi(sprite.AsNullable(), targetSprite.BaseRSI); diff --git a/Content.Client/Explosion/ExplosionOverlaySystem.cs b/Content.Client/Explosion/ExplosionOverlaySystem.cs index 98923a48dd..5cde7b5f4e 100644 --- a/Content.Client/Explosion/ExplosionOverlaySystem.cs +++ b/Content.Client/Explosion/ExplosionOverlaySystem.cs @@ -4,7 +4,6 @@ using Robust.Client.Graphics; using Robust.Client.ResourceManagement; using Robust.Shared.GameStates; using Robust.Shared.Graphics.RSI; -using Robust.Shared.Prototypes; namespace Content.Client.Explosion; @@ -14,7 +13,6 @@ namespace Content.Client.Explosion; /// public sealed partial class ExplosionOverlaySystem : EntitySystem { - [Dependency] private IPrototypeManager _protoMan = default!; [Dependency] private IResourceCache _resCache = default!; [Dependency] private IOverlayManager _overlayMan = default!; [Dependency] private SharedPointLightSystem _lights = default!; @@ -61,7 +59,7 @@ public sealed partial class ExplosionOverlaySystem : EntitySystem { EnsureComp(uid); - if (!_protoMan.TryIndex(component.ExplosionType, out ExplosionPrototype? type) || + if (!ProtoMan.TryIndex(component.ExplosionType, out ExplosionPrototype? type) || !TryComp(uid, out ExplosionVisualsTexturesComponent? textures)) { return; diff --git a/Content.Client/Holopad/HolopadSystem.cs b/Content.Client/Holopad/HolopadSystem.cs index 81a04cf36b..2f22c66d4d 100644 --- a/Content.Client/Holopad/HolopadSystem.cs +++ b/Content.Client/Holopad/HolopadSystem.cs @@ -2,7 +2,6 @@ using Content.Shared.Chat.TypingIndicator; using Content.Shared.Holopad; using Robust.Client.GameObjects; using Robust.Client.Graphics; -using Robust.Shared.Prototypes; using Robust.Shared.Timing; using System.Linq; using System.Numerics; @@ -12,7 +11,6 @@ namespace Content.Client.Holopad; public sealed partial class HolopadSystem : SharedHolopadSystem { - [Dependency] private IPrototypeManager _prototypeManager = default!; [Dependency] private IGameTiming _timing = default!; [Dependency] private SpriteSystem _sprite = default!; @@ -120,7 +118,7 @@ public sealed partial class HolopadSystem : SharedHolopadSystem // Find the texture height of the largest layer float texHeight = sprite.AllLayers.Max(x => x.PixelSize.Y); - var instance = _prototypeManager.Index(holopadHologram.ShaderName).InstanceUnique(); + var instance = ProtoMan.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); diff --git a/Content.Client/Interaction/DragDropSystem.cs b/Content.Client/Interaction/DragDropSystem.cs index 467c138b2a..c38bf138ad 100644 --- a/Content.Client/Interaction/DragDropSystem.cs +++ b/Content.Client/Interaction/DragDropSystem.cs @@ -37,7 +37,6 @@ public sealed partial class DragDropSystem : SharedDragDropSystem [Dependency] private IInputManager _inputManager = default!; [Dependency] private IEyeManager _eyeManager = default!; [Dependency] private IPlayerManager _playerManager = default!; - [Dependency] private IPrototypeManager _prototypeManager = default!; [Dependency] private IConfigurationManager _cfgMan = default!; [Dependency] private InteractionOutlineSystem _outline = default!; [Dependency] private SharedInteractionSystem _interactionSystem = default!; @@ -112,8 +111,8 @@ public sealed partial class DragDropSystem : SharedDragDropSystem Subs.CVar(_cfgMan, CCVars.DragDropDeadZone, SetDeadZone, true); - _dropTargetInRangeShader = _prototypeManager.Index(ShaderDropTargetInRange).Instance(); - _dropTargetOutOfRangeShader = _prototypeManager.Index(ShaderDropTargetOutOfRange).Instance(); + _dropTargetInRangeShader = ProtoMan.Index(ShaderDropTargetInRange).Instance(); + _dropTargetOutOfRangeShader = ProtoMan.Index(ShaderDropTargetOutOfRange).Instance(); // needs to fire on mouseup and mousedown so we can detect a drag / drop CommandBinds.Builder .BindBefore(EngineKeyFunctions.Use, new PointerInputCmdHandler(OnUse, false, true), new[] { typeof(SharedInteractionSystem) }) diff --git a/Content.Client/Machines/EntitySystems/MultipartMachineSystem.cs b/Content.Client/Machines/EntitySystems/MultipartMachineSystem.cs index 8c3ed88ee4..2d5a69fbb6 100644 --- a/Content.Client/Machines/EntitySystems/MultipartMachineSystem.cs +++ b/Content.Client/Machines/EntitySystems/MultipartMachineSystem.cs @@ -21,9 +21,8 @@ public sealed partial class MultipartMachineSystem : SharedMultipartMachineSyste private readonly Color _partiallyTransparent = new Color(255, 255, 255, 180); [Dependency] private SpriteSystem _sprite = default!; - [Dependency] private IPrototypeManager _prototype = default!; [Dependency] private MetaDataSystem _metaData = default!; - [Dependency] private ISerializationManager _serialization= default!; + [Dependency] private ISerializationManager _serialization = default!; public override void Initialize() { @@ -70,7 +69,7 @@ public sealed partial class MultipartMachineSystem : SharedMultipartMachineSyste if (part.GhostProto == null) continue; - var entProto = _prototype.Index(part.GhostProto.Value); + var entProto = ProtoMan.Index(part.GhostProto.Value); if (!entProto.Components.TryGetComponent("Sprite", out var s) || s is not SpriteComponent protoSprite) return; diff --git a/Content.Client/MapText/MapTextSystem.cs b/Content.Client/MapText/MapTextSystem.cs index c94969ad1b..909b72b46d 100644 --- a/Content.Client/MapText/MapTextSystem.cs +++ b/Content.Client/MapText/MapTextSystem.cs @@ -5,7 +5,6 @@ using Robust.Client.UserInterface; using Robust.Client.UserInterface.RichText; using Robust.Shared.Configuration; using Robust.Shared.GameStates; -using Robust.Shared.Prototypes; using Robust.Shared.Utility; namespace Content.Client.MapText; @@ -17,7 +16,6 @@ public sealed partial class MapTextSystem : SharedMapTextSystem [Dependency] private IUserInterfaceManager _uiManager = default!; [Dependency] private SharedTransformSystem _transform = default!; [Dependency] private IResourceCache _resourceCache = default!; - [Dependency] private IPrototypeManager _prototypeManager = default!; [Dependency] private IOverlayManager _overlayManager = default!; private MapTextOverlay _overlay = default!; @@ -28,18 +26,18 @@ public sealed partial class MapTextSystem : SharedMapTextSystem SubscribeLocalEvent(OnComponentStartup); SubscribeLocalEvent(HandleCompState); - _overlay = new MapTextOverlay(_configManager, EntityManager, _uiManager, _transform, _resourceCache, _prototypeManager); + _overlay = new MapTextOverlay(_configManager, EntityManager, _uiManager, _transform, _resourceCache, ProtoMan); _overlayManager.AddOverlay(_overlay); // TODO move font prototype to robust.shared, then use ProtoId - DebugTools.Assert(_prototypeManager.HasIndex(SharedMapTextComponent.DefaultFont)); + DebugTools.Assert(ProtoMan.HasIndex(SharedMapTextComponent.DefaultFont)); } private void OnComponentStartup(Entity ent, ref ComponentStartup args) { CacheText(ent.Comp); // TODO move font prototype to robust.shared, then use ProtoId - DebugTools.Assert(_prototypeManager.HasIndex(ent.Comp.FontId)); + DebugTools.Assert(ProtoMan.HasIndex(ent.Comp.FontId)); } private void HandleCompState(Entity ent, ref ComponentHandleState args) @@ -65,12 +63,12 @@ public sealed partial class MapTextSystem : SharedMapTextSystem ? Loc.GetString(component.LocText) : component.Text; - if (!_prototypeManager.TryIndex(component.FontId, out var fontPrototype)) + if (!ProtoMan.TryIndex(component.FontId, out var fontPrototype)) { component.CachedText = Loc.GetString("map-text-font-error"); component.Color = Color.Red; - if(_prototypeManager.TryIndex(SharedMapTextComponent.DefaultFont, out var @default)) + if (ProtoMan.TryIndex(SharedMapTextComponent.DefaultFont, out var @default)) component.CachedFont = new VectorFont(_resourceCache.GetResource(@default.Path), 14); return; } diff --git a/Content.Client/Movement/Systems/FloorOcclusionSystem.cs b/Content.Client/Movement/Systems/FloorOcclusionSystem.cs index e160a06fb1..ce0705e347 100644 --- a/Content.Client/Movement/Systems/FloorOcclusionSystem.cs +++ b/Content.Client/Movement/Systems/FloorOcclusionSystem.cs @@ -10,8 +10,6 @@ public sealed partial class FloorOcclusionSystem : SharedFloorOcclusionSystem { private static readonly ProtoId HorizontalCut = "HorizontalCut"; - [Dependency] private IPrototypeManager _proto = default!; - [Dependency] private EntityQuery _spriteQuery = default!; public override void Initialize() @@ -48,7 +46,7 @@ public sealed partial class FloorOcclusionSystem : SharedFloorOcclusionSystem if (!_spriteQuery.Resolve(sprite.Owner, ref sprite.Comp, false)) return; - var shader = _proto.Index(HorizontalCut).Instance(); + var shader = ProtoMan.Index(HorizontalCut).Instance(); if (sprite.Comp.PostShader is not null && sprite.Comp.PostShader != shader) return; diff --git a/Content.Client/Outline/TargetOutlineSystem.cs b/Content.Client/Outline/TargetOutlineSystem.cs index 4fc5af9153..350c3e032b 100644 --- a/Content.Client/Outline/TargetOutlineSystem.cs +++ b/Content.Client/Outline/TargetOutlineSystem.cs @@ -23,7 +23,6 @@ public sealed partial class TargetOutlineSystem : EntitySystem [Dependency] private EntityLookupSystem _lookup = default!; [Dependency] private IInputManager _inputManager = default!; [Dependency] private IPlayerManager _playerManager = default!; - [Dependency] private IPrototypeManager _prototypeManager = default!; [Dependency] private SharedInteractionSystem _interactionSystem = default!; [Dependency] private EntityWhitelistSystem _whitelistSystem = default!; [Dependency] private SharedTransformSystem _transformSystem = default!; @@ -83,8 +82,8 @@ public sealed partial class TargetOutlineSystem : EntitySystem { base.Initialize(); - _shaderTargetValid = _prototypeManager.Index(ShaderTargetValid).InstanceUnique(); - _shaderTargetInvalid = _prototypeManager.Index(ShaderTargetInvalid).InstanceUnique(); + _shaderTargetValid = ProtoMan.Index(ShaderTargetValid).InstanceUnique(); + _shaderTargetInvalid = ProtoMan.Index(ShaderTargetInvalid).InstanceUnique(); } public void Disable() diff --git a/Content.Client/Overlays/ShowCriminalRecordIconsSystem.cs b/Content.Client/Overlays/ShowCriminalRecordIconsSystem.cs index d343855ba1..cd38fee82b 100644 --- a/Content.Client/Overlays/ShowCriminalRecordIconsSystem.cs +++ b/Content.Client/Overlays/ShowCriminalRecordIconsSystem.cs @@ -1,15 +1,11 @@ using Content.Shared.Overlays; using Content.Shared.Security.Components; -using Content.Shared.StatusIcon; using Content.Shared.StatusIcon.Components; -using Robust.Shared.Prototypes; namespace Content.Client.Overlays; public sealed partial class ShowCriminalRecordIconsSystem : EquipmentHudSystem { - [Dependency] private IPrototypeManager _prototype = default!; - public override void Initialize() { base.Initialize(); @@ -22,7 +18,7 @@ public sealed partial class ShowCriminalRecordIconsSystem : EquipmentHudSystem { [Dependency] private IOverlayManager _overlayMan = default!; - [Dependency] private IPrototypeManager _prototype = default!; private EntityHealthBarOverlay _overlay = default!; @@ -21,7 +19,7 @@ public sealed partial class ShowHealthBarsSystem : EquipmentHudSystem(OnHandleState); - _overlay = new(EntityManager, _prototype); + _overlay = new(EntityManager, ProtoMan); } private void OnHandleState(Entity ent, ref AfterAutoHandleStateEvent args) diff --git a/Content.Client/Overlays/ShowHealthIconsSystem.cs b/Content.Client/Overlays/ShowHealthIconsSystem.cs index 76f3078958..88f557ac0e 100644 --- a/Content.Client/Overlays/ShowHealthIconsSystem.cs +++ b/Content.Client/Overlays/ShowHealthIconsSystem.cs @@ -4,7 +4,6 @@ using Content.Shared.Mobs.Components; using Content.Shared.Overlays; using Content.Shared.StatusIcon; using Content.Shared.StatusIcon.Components; -using Robust.Shared.Prototypes; using Content.Shared.Damage.Components; namespace Content.Client.Overlays; @@ -14,8 +13,6 @@ namespace Content.Client.Overlays; /// public sealed partial class ShowHealthIconsSystem : EquipmentHudSystem { - [Dependency] private IPrototypeManager _prototypeMan = default!; - [ViewVariables] public HashSet DamageContainers = new(); @@ -81,9 +78,9 @@ public sealed partial class ShowHealthIconsSystem : EquipmentHudSystem(entity, out var state)) { // Since there is no MobState for a rotting mob, we have to deal with this case first. - if (HasComp(entity) && _prototypeMan.Resolve(injurableComp.RottingIcon, out var rottingIcon)) + if (HasComp(entity) && ProtoMan.Resolve(injurableComp.RottingIcon, out var rottingIcon)) result.Add(rottingIcon); - else if (injurableComp.HealthIcons.TryGetValue(state.CurrentState, out var value) && _prototypeMan.Resolve(value, out var icon)) + else if (injurableComp.HealthIcons.TryGetValue(state.CurrentState, out var value) && ProtoMan.Resolve(value, out var icon)) result.Add(icon); } } diff --git a/Content.Client/Overlays/ShowMindShieldIconsSystem.cs b/Content.Client/Overlays/ShowMindShieldIconsSystem.cs index 31696393ab..6ae2b46f79 100644 --- a/Content.Client/Overlays/ShowMindShieldIconsSystem.cs +++ b/Content.Client/Overlays/ShowMindShieldIconsSystem.cs @@ -1,15 +1,11 @@ using Content.Shared.Mindshield.Components; using Content.Shared.Overlays; -using Content.Shared.StatusIcon; using Content.Shared.StatusIcon.Components; -using Robust.Shared.Prototypes; namespace Content.Client.Overlays; public sealed partial class ShowMindShieldIconsSystem : EquipmentHudSystem { - [Dependency] private IPrototypeManager _prototype = default!; - public override void Initialize() { base.Initialize(); @@ -21,9 +17,9 @@ public sealed partial class ShowMindShieldIconsSystem : EquipmentHudSystem { - [Dependency] private IPrototypeManager _prototype = default!; - public override void Initialize() { base.Initialize(); @@ -22,7 +19,7 @@ public sealed partial class ShowSyndicateIconsSystem : EquipmentHudSystem(component.SyndStatusIcon, out var iconPrototype)) + if (ProtoMan.TryIndex(component.SyndStatusIcon, out var iconPrototype)) ev.StatusIcons.Add(iconPrototype); } } diff --git a/Content.Client/Popups/PopupSystem.cs b/Content.Client/Popups/PopupSystem.cs index 32bd93cc84..90bd0f862b 100644 --- a/Content.Client/Popups/PopupSystem.cs +++ b/Content.Client/Popups/PopupSystem.cs @@ -1,5 +1,4 @@ using System.Linq; -using Content.Shared.Containers; using Content.Shared.Examine; using Content.Shared.GameTicking; using Content.Shared.Popups; @@ -12,7 +11,6 @@ using Robust.Shared.Collections; using Robust.Shared.Configuration; using Robust.Shared.Map; using Robust.Shared.Player; -using Robust.Shared.Prototypes; using Robust.Shared.Replays; using Robust.Shared.Timing; @@ -24,7 +22,6 @@ namespace Content.Client.Popups [Dependency] private IInputManager _inputManager = default!; [Dependency] private IOverlayManager _overlay = default!; [Dependency] private IPlayerManager _playerManager = default!; - [Dependency] private IPrototypeManager _prototype = default!; [Dependency] private IGameTiming _timing = default!; [Dependency] private IUserInterfaceManager _uiManager = default!; [Dependency] private IReplayRecordingManager _replayRecording = default!; @@ -52,7 +49,7 @@ namespace Content.Client.Popups _configManager, EntityManager, _playerManager, - _prototype, + ProtoMan, _uiManager, _uiManager.GetUIController(), _examine, diff --git a/Content.Client/RCD/RCDConstructionGhostSystem.cs b/Content.Client/RCD/RCDConstructionGhostSystem.cs index 2b9a31e77b..65d2545d53 100644 --- a/Content.Client/RCD/RCDConstructionGhostSystem.cs +++ b/Content.Client/RCD/RCDConstructionGhostSystem.cs @@ -5,7 +5,6 @@ using Content.Shared.RCD.Components; using Robust.Client.Placement; using Robust.Client.Player; using Robust.Shared.Enums; -using Robust.Shared.Prototypes; namespace Content.Client.RCD; @@ -18,7 +17,6 @@ public sealed partial class RCDConstructionGhostSystem : EntitySystem [Dependency] private IPlayerManager _playerManager = default!; [Dependency] private IPlacementManager _placementManager = default!; - [Dependency] private IPrototypeManager _protoManager = default!; [Dependency] private HandsSystem _hands = default!; private Direction _placementDirection = default; @@ -55,7 +53,7 @@ public sealed partial class RCDConstructionGhostSystem : EntitySystem return; } - var prototype = _protoManager.Index(rcd.ProtoId); + var prototype = ProtoMan.Index(rcd.ProtoId); // Update the direction the RCD prototype based on the placer direction if (_placementDirection != _placementManager.Direction) diff --git a/Content.Client/Revolutionary/RevolutionarySystem.cs b/Content.Client/Revolutionary/RevolutionarySystem.cs index cf2733fc01..4edd4d3669 100644 --- a/Content.Client/Revolutionary/RevolutionarySystem.cs +++ b/Content.Client/Revolutionary/RevolutionarySystem.cs @@ -1,7 +1,6 @@ using Content.Shared.Revolutionary.Components; using Content.Shared.Revolutionary; using Content.Shared.StatusIcon.Components; -using Robust.Shared.Prototypes; namespace Content.Client.Revolutionary; @@ -10,8 +9,6 @@ namespace Content.Client.Revolutionary; /// public sealed partial class RevolutionarySystem : SharedRevolutionarySystem { - [Dependency] private IPrototypeManager _prototype = default!; - public override void Initialize() { base.Initialize(); @@ -25,13 +22,13 @@ public sealed partial class RevolutionarySystem : SharedRevolutionarySystem if (HasComp(ent)) return; - if (_prototype.Resolve(ent.Comp.StatusIcon, out var iconPrototype)) + if (ProtoMan.Resolve(ent.Comp.StatusIcon, out var iconPrototype)) args.StatusIcons.Add(iconPrototype); } private void GetHeadRevIcon(Entity ent, ref GetStatusIconsEvent args) { - if (_prototype.Resolve(ent.Comp.StatusIcon, out var iconPrototype)) + if (ProtoMan.Resolve(ent.Comp.StatusIcon, out var iconPrototype)) args.StatusIcons.Add(iconPrototype); } } diff --git a/Content.Client/SSDIndicator/SSDIndicatorSystem.cs b/Content.Client/SSDIndicator/SSDIndicatorSystem.cs index 18390c3665..7e7c73f43c 100644 --- a/Content.Client/SSDIndicator/SSDIndicatorSystem.cs +++ b/Content.Client/SSDIndicator/SSDIndicatorSystem.cs @@ -3,10 +3,8 @@ using Content.Shared.Mind.Components; using Content.Shared.Mobs.Systems; using Content.Shared.NPC; using Content.Shared.SSDIndicator; -using Content.Shared.StatusIcon; using Content.Shared.StatusIcon.Components; using Robust.Shared.Configuration; -using Robust.Shared.Prototypes; namespace Content.Client.SSDIndicator; @@ -15,7 +13,6 @@ namespace Content.Client.SSDIndicator; /// public sealed partial class SSDIndicatorSystem : EntitySystem { - [Dependency] private IPrototypeManager _prototype = default!; [Dependency] private IConfigurationManager _cfg = default!; [Dependency] private MobStateSystem _mobState = default!; @@ -34,7 +31,7 @@ public sealed partial class SSDIndicatorSystem : EntitySystem !HasComp(uid) && HasComp(uid)) { - args.StatusIcons.Add(_prototype.Index(component.Icon)); + args.StatusIcons.Add(ProtoMan.Index(component.Icon)); } } } diff --git a/Content.Client/Stealth/StealthSystem.cs b/Content.Client/Stealth/StealthSystem.cs index f036fcc708..d31b998458 100644 --- a/Content.Client/Stealth/StealthSystem.cs +++ b/Content.Client/Stealth/StealthSystem.cs @@ -1,5 +1,4 @@ using Content.Client.Interactable.Components; -using Content.Client.StatusIcon; using Content.Shared.Stealth; using Content.Shared.Stealth.Components; using Robust.Client.GameObjects; @@ -12,7 +11,6 @@ public sealed partial class StealthSystem : SharedStealthSystem { private static readonly ProtoId Shader = "Stealth"; - [Dependency] private IPrototypeManager _protoMan = default!; [Dependency] private SharedTransformSystem _transformSystem = default!; [Dependency] private SpriteSystem _sprite = default!; @@ -22,7 +20,7 @@ public sealed partial class StealthSystem : SharedStealthSystem { base.Initialize(); - _shader = _protoMan.Index(Shader).InstanceUnique(); + _shader = ProtoMan.Index(Shader).InstanceUnique(); SubscribeLocalEvent(OnShutdown); SubscribeLocalEvent(OnStartup); diff --git a/Content.Client/Storage/Visualizers/EntityStorageVisualizerSystem.cs b/Content.Client/Storage/Visualizers/EntityStorageVisualizerSystem.cs index 5d70d077fd..93d47b17a6 100644 --- a/Content.Client/Storage/Visualizers/EntityStorageVisualizerSystem.cs +++ b/Content.Client/Storage/Visualizers/EntityStorageVisualizerSystem.cs @@ -1,15 +1,11 @@ using Content.Shared.SprayPainter.Prototypes; using Content.Shared.Storage; using Robust.Client.GameObjects; -using Robust.Shared.Prototypes; namespace Content.Client.Storage.Visualizers; public sealed partial class EntityStorageVisualizerSystem : VisualizerSystem { - [Dependency] private IPrototypeManager _prototypeManager = default!; - [Dependency] private IComponentFactory _componentFactory = default!; - public override void Initialize() { base.Initialize(); @@ -42,13 +38,13 @@ public sealed partial class EntityStorageVisualizerSystem : VisualizerSystem(uid, PaintableVisuals.Prototype, out var prototype, args.Component)) { - if (_prototypeManager.Resolve(prototype, out var proto)) + if (ProtoMan.Resolve(prototype, out var proto)) { - if (proto.TryGetComponent(out SpriteComponent? sprite, _componentFactory)) + if (proto.TryComp(out SpriteComponent? sprite, Factory)) { SpriteSystem.SetBaseRsi((uid, args.Sprite), sprite.BaseRSI); } - if (proto.TryGetComponent(out EntityStorageVisualsComponent? visuals, _componentFactory)) + if (proto.TryComp(out EntityStorageVisualsComponent? visuals, Factory)) { comp.StateBaseOpen = visuals.StateBaseOpen; comp.StateBaseClosed = visuals.StateBaseClosed; diff --git a/Content.Client/Zombies/ZombieSystem.cs b/Content.Client/Zombies/ZombieSystem.cs index 60c499e873..d8053a67ce 100644 --- a/Content.Client/Zombies/ZombieSystem.cs +++ b/Content.Client/Zombies/ZombieSystem.cs @@ -1,17 +1,13 @@ using System.Linq; using Content.Shared.Body; -using Content.Shared.Ghost; -using Content.Shared.StatusIcon; using Content.Shared.StatusIcon.Components; using Content.Shared.Zombies; using Robust.Client.GameObjects; -using Robust.Shared.Prototypes; namespace Content.Client.Zombies; public sealed partial class ZombieSystem : SharedZombieSystem { - [Dependency] private IPrototypeManager _prototype = default!; [Dependency] private SpriteSystem _sprite = default!; public override void Initialize() @@ -25,7 +21,7 @@ public sealed partial class ZombieSystem : SharedZombieSystem private void GetZombieIcon(Entity ent, ref GetStatusIconsEvent args) { - var iconPrototype = _prototype.Index(ent.Comp.StatusIcon); + var iconPrototype = ProtoMan.Index(ent.Comp.StatusIcon); args.StatusIcons.Add(iconPrototype); } @@ -34,7 +30,7 @@ public sealed partial class ZombieSystem : SharedZombieSystem if (HasComp(ent)) return; - var iconPrototype = _prototype.Index(ent.Comp.StatusIcon); + var iconPrototype = ProtoMan.Index(ent.Comp.StatusIcon); args.StatusIcons.Add(iconPrototype); } diff --git a/Content.IntegrationTests/Tests/Actions/RetractableItemActionTest.cs b/Content.IntegrationTests/Tests/Actions/RetractableItemActionTest.cs index 26f14d7323..d1befce12c 100644 --- a/Content.IntegrationTests/Tests/Actions/RetractableItemActionTest.cs +++ b/Content.IntegrationTests/Tests/Actions/RetractableItemActionTest.cs @@ -32,7 +32,7 @@ public sealed class RetractableItemActionTest : InteractionTest var armBladeActionProto = ProtoMan.Index(ArmBladeActionProtoId); // Find the component - Assert.That(armBladeActionProto.TryGetComponent(out var actionComp, SEntMan.ComponentFactory)); + Assert.That(armBladeActionProto.TryComp(out var actionComp, SEntMan.ComponentFactory)); // Get the item protoId from the component var spawnedProtoId = actionComp!.SpawnedPrototype; diff --git a/Content.IntegrationTests/Tests/Atmos/GasArrayTest.cs b/Content.IntegrationTests/Tests/Atmos/GasArrayTest.cs index eda9061281..a70aa5d50c 100644 --- a/Content.IntegrationTests/Tests/Atmos/GasArrayTest.cs +++ b/Content.IntegrationTests/Tests/Atmos/GasArrayTest.cs @@ -54,7 +54,7 @@ public sealed class GasArrayTest : GameTest var gasTank = prototypeManager.Index(GasTankTestDummyId); Assert.Multiple(() => { - Assert.That(gasTank.TryGetComponent(out var gasTankComponent, compFactory)); + Assert.That(gasTank.TryComp(out var gasTankComponent, compFactory)); Assert.That(gasTankComponent!.Air.GetMoles(Gas.Oxygen), Is.EqualTo(10)); Assert.That(gasTankComponent!.Air.GetMoles(Gas.Frezon), Is.EqualTo(20)); @@ -67,7 +67,7 @@ public sealed class GasArrayTest : GameTest var legacyGasTank = prototypeManager.Index(GasTankLegacyTestDummyId); Assert.Multiple(() => { - Assert.That(legacyGasTank.TryGetComponent(out var gasTankComponent, compFactory)); + Assert.That(legacyGasTank.TryComp(out var gasTankComponent, compFactory)); Assert.That(gasTankComponent!.Air.GetMoles(3), Is.EqualTo(10)); diff --git a/Content.IntegrationTests/Tests/CargoTest.cs b/Content.IntegrationTests/Tests/CargoTest.cs index 45a8e21737..4a9bf0f0e6 100644 --- a/Content.IntegrationTests/Tests/CargoTest.cs +++ b/Content.IntegrationTests/Tests/CargoTest.cs @@ -108,7 +108,7 @@ public sealed class CargoTest : GameTest foreach (var (proto, staticPriceComp) in protoIds) { if ( - proto.TryGetComponent(out var stackPriceComp, _sCompFact) + proto.TryComp(out var stackPriceComp, _sCompFact) && stackPriceComp.Price > 0 ) { @@ -243,7 +243,7 @@ public sealed class CargoTest : GameTest foreach (var (proto, comp) in Pair.GetPrototypesWithComponent()) { Assert.That( - proto.TryGetComponent(out _, _sCompFact), + proto.TryComp(out _, _sCompFact), $"Found {nameof(MobPriceComponent)} on {proto.ID}, but no {nameof(MobStateComponent)}!" ); } diff --git a/Content.IntegrationTests/Tests/ContrabandTest.cs b/Content.IntegrationTests/Tests/ContrabandTest.cs index 9f0fb1d499..02f96459c4 100644 --- a/Content.IntegrationTests/Tests/ContrabandTest.cs +++ b/Content.IntegrationTests/Tests/ContrabandTest.cs @@ -25,7 +25,7 @@ public sealed class ContrabandTest : GameTest if (proto.Abstract || pair.IsTestPrototype(proto)) continue; - if (!proto.TryGetComponent(out var contraband, componentFactory)) + if (!proto.TryComp(out var contraband, componentFactory)) continue; if (!protoMan.TryIndex(contraband.Severity, out var severity)) diff --git a/Content.IntegrationTests/Tests/DeviceLinking/DeviceLinkingTest.cs b/Content.IntegrationTests/Tests/DeviceLinking/DeviceLinkingTest.cs index 7a2a880bae..c9550d1840 100644 --- a/Content.IntegrationTests/Tests/DeviceLinking/DeviceLinkingTest.cs +++ b/Content.IntegrationTests/Tests/DeviceLinking/DeviceLinkingTest.cs @@ -43,7 +43,7 @@ public sealed class DeviceLinkingTest : GameTest using (Assert.EnterMultipleScope()) { var proto = protoMan.Index(protoKey); - Assert.That(proto.TryGetComponent(out var protoSinkComp, compFact)); + Assert.That(proto.TryComp(out var protoSinkComp, compFact)); foreach (var port in protoSinkComp!.Ports) { diff --git a/Content.IntegrationTests/Tests/FillLevelSpriteTest.cs b/Content.IntegrationTests/Tests/FillLevelSpriteTest.cs index 142ec21ddb..6bee3aad7b 100644 --- a/Content.IntegrationTests/Tests/FillLevelSpriteTest.cs +++ b/Content.IntegrationTests/Tests/FillLevelSpriteTest.cs @@ -33,7 +33,7 @@ public sealed class FillLevelSpriteTest : GameTest var protos = protoMan.EnumeratePrototypes() .Where(p => !p.Abstract) .Where(p => !pair.IsTestPrototype(p)) - .Where(p => p.TryGetComponent(out _, componentFactory)) + .Where(p => p.TryComp(out _, componentFactory)) .OrderBy(p => p.ID) .ToList(); @@ -41,8 +41,8 @@ public sealed class FillLevelSpriteTest : GameTest { foreach (var proto in protos) { - Assert.That(proto.TryGetComponent(out var visuals, componentFactory)); - Assert.That(proto.TryGetComponent(out var sprite, componentFactory)); + Assert.That(proto.TryComp(out var visuals, componentFactory)); + Assert.That(proto.TryComp(out var sprite, componentFactory)); if (!proto.HasComponent(componentFactory)) { Assert.Fail(@$"{proto.ID} has SolutionContainerVisualsComponent but no AppearanceComponent."); diff --git a/Content.IntegrationTests/Tests/GameRules/AllGamePresetsStartTest.cs b/Content.IntegrationTests/Tests/GameRules/AllGamePresetsStartTest.cs index b5c7dcfddb..5ffa82bb70 100644 --- a/Content.IntegrationTests/Tests/GameRules/AllGamePresetsStartTest.cs +++ b/Content.IntegrationTests/Tests/GameRules/AllGamePresetsStartTest.cs @@ -70,7 +70,7 @@ public sealed class AllGamePresetsStartTest : AntagTest continue; // Bruh moment // Ignore non-antag game-rules. - if (!rule.TryGetComponent(out var antag, SEntMan.ComponentFactory)) + if (!rule.TryComp(out var antag, SEntMan.ComponentFactory)) continue; var runningCount = 0; diff --git a/Content.IntegrationTests/Tests/GameRules/AntagGhostRoleTest.cs b/Content.IntegrationTests/Tests/GameRules/AntagGhostRoleTest.cs index 609746a328..c9a3ec0782 100644 --- a/Content.IntegrationTests/Tests/GameRules/AntagGhostRoleTest.cs +++ b/Content.IntegrationTests/Tests/GameRules/AntagGhostRoleTest.cs @@ -40,7 +40,7 @@ public sealed partial class AntagGhostRoleTest : AntagTest public void TestAntagGhostRoles(string ruleId) { var rule = SProtoMan.Index(ruleId); - Assert.That(rule.TryGetComponent(out var antag, SEntMan.ComponentFactory), Is.True); + Assert.That(rule.TryComp(out var antag, SEntMan.ComponentFactory), Is.True); STicker.StartGameRule(ruleId, out var gameRule); @@ -88,7 +88,7 @@ public sealed partial class AntagGhostRoleTest : AntagTest foreach (var ruleId in AntagGameRules) { var rule = SProtoMan.Index(ruleId); - Assert.That(rule.TryGetComponent(out var antag, SEntMan.ComponentFactory), Is.True); + Assert.That(rule.TryComp(out var antag, SEntMan.ComponentFactory), Is.True); STicker.StartGameRule(ruleId); } diff --git a/Content.IntegrationTests/Tests/GameRules/TraitorRuleTest.cs b/Content.IntegrationTests/Tests/GameRules/TraitorRuleTest.cs index 318c4b6b42..c76b349b64 100644 --- a/Content.IntegrationTests/Tests/GameRules/TraitorRuleTest.cs +++ b/Content.IntegrationTests/Tests/GameRules/TraitorRuleTest.cs @@ -56,10 +56,10 @@ public sealed class TraitorRuleTest : GameTest Assert.That(protoMan.TryIndex(TraitorGameRuleProtoId, out var gameRuleEnt), $"Failed to lookup traitor game rule entity prototype with ID \"{TraitorGameRuleProtoId}\"!"); - Assert.That(gameRuleEnt.TryGetComponent(out var gameRule, compFact), + Assert.That(gameRuleEnt.TryComp(out var gameRule, compFact), $"Game rule entity {TraitorGameRuleProtoId} does not have a GameRuleComponent!"); - Assert.That(gameRuleEnt.TryGetComponent(out var randomObjectives, compFact), + Assert.That(gameRuleEnt.TryComp(out var randomObjectives, compFact), $"Game rule entity {TraitorGameRuleProtoId} does not have an AntagRandomObjectivesComponent!"); minPlayers = gameRule.MinPlayers; @@ -87,7 +87,7 @@ public sealed class TraitorRuleTest : GameTest await server.WaitPost(() => { var gameRuleEnt = ticker.AddGameRule(TraitorGameRuleProtoId); - Assert.That(entMan.TryGetComponent(gameRuleEnt, out traitorRule)); + Assert.That(entMan.TryGetComponent(gameRuleEnt, out traitorRule)); // Ready up ticker.ToggleReadyAll(true); diff --git a/Content.IntegrationTests/Tests/Interaction/InteractionTest.EntitySpecifier.cs b/Content.IntegrationTests/Tests/Interaction/InteractionTest.EntitySpecifier.cs index 6823e1ac97..cb4b0d2a74 100644 --- a/Content.IntegrationTests/Tests/Interaction/InteractionTest.EntitySpecifier.cs +++ b/Content.IntegrationTests/Tests/Interaction/InteractionTest.EntitySpecifier.cs @@ -80,7 +80,7 @@ public abstract partial class InteractionTest StackComponent? stack = null; await server.WaitPost(() => { - entProto.TryGetComponent(factory.GetComponentName(), out stack); + entProto.TryComp(out stack, factory); }); if (stack != null) @@ -110,7 +110,7 @@ public abstract partial class InteractionTest StackComponent? stack = null; await Server.WaitPost(() => { - entProto.TryGetComponent(Factory.GetComponentName(), out stack); + entProto.TryComp(out stack, Factory); }); if (stack != null) diff --git a/Content.IntegrationTests/Tests/Interaction/InteractionTest.EntitySpecifierCollection.cs b/Content.IntegrationTests/Tests/Interaction/InteractionTest.EntitySpecifierCollection.cs index 34bf13e087..24561d2b12 100644 --- a/Content.IntegrationTests/Tests/Interaction/InteractionTest.EntitySpecifierCollection.cs +++ b/Content.IntegrationTests/Tests/Interaction/InteractionTest.EntitySpecifierCollection.cs @@ -134,7 +134,7 @@ public abstract partial class InteractionTest StackComponent? stack = null; await server.WaitPost(() => { - entProto.TryGetComponent(factory.GetComponentName(), out stack); + entProto.TryComp(out stack, factory); }); if (stack == null) diff --git a/Content.IntegrationTests/Tests/Lathe/LatheTest.cs b/Content.IntegrationTests/Tests/Lathe/LatheTest.cs index f0a5c04237..3f614d21b8 100644 --- a/Content.IntegrationTests/Tests/Lathe/LatheTest.cs +++ b/Content.IntegrationTests/Tests/Lathe/LatheTest.cs @@ -55,10 +55,10 @@ public sealed class LatheTest : GameTest // Check each lathe individually foreach (var latheProto in latheProtos) { - if (!latheProto.TryGetComponent(out var latheComp, compFactory)) + if (!latheProto.TryComp(out var latheComp, compFactory)) continue; - if (!latheProto.TryGetComponent(out var storageComp, compFactory)) + if (!latheProto.TryComp(out var storageComp, compFactory)) continue; // Test which material-containing entities are accepted by this lathe @@ -80,7 +80,7 @@ public sealed class LatheTest : GameTest var recipes = new HashSet>(); latheSystem.AddRecipesFromPacks(recipes, latheComp.StaticPacks); latheSystem.AddRecipesFromPacks(recipes, latheComp.DynamicPacks); - if (latheProto.TryGetComponent(out var emagRecipesComp, compFactory)) + if (latheProto.TryComp(out var emagRecipesComp, compFactory)) { latheSystem.AddRecipesFromPacks(recipes, emagRecipesComp.EmagStaticPacks); latheSystem.AddRecipesFromPacks(recipes, emagRecipesComp.EmagDynamicPacks); diff --git a/Content.IntegrationTests/Tests/MachineBoardTest.cs b/Content.IntegrationTests/Tests/MachineBoardTest.cs index 9554357ece..5d3bc29b66 100644 --- a/Content.IntegrationTests/Tests/MachineBoardTest.cs +++ b/Content.IntegrationTests/Tests/MachineBoardTest.cs @@ -46,7 +46,7 @@ public sealed class MachineBoardTest : GameTest .Where(p => !pair.IsTestPrototype(p)) .Where(p => !_ignoredPrototypes.Contains(p.ID))) { - if (!p.TryGetComponent(out var mbc, compFact)) + if (!p.TryComp(out var mbc, compFact)) continue; var mId = mbc.Prototype; @@ -54,7 +54,7 @@ public sealed class MachineBoardTest : GameTest { Assert.That(protoMan.TryIndex(mId, out var mProto), $"Machine board {p.ID}'s corresponding machine has an invalid prototype."); - Assert.That(mProto.TryGetComponent(out var mComp, compFact), + Assert.That(mProto.TryComp(out var mComp, compFact), $"Machine board {p.ID}'s corresponding machine {mId} does not have MachineComponent"); Assert.That(mComp.Board, Is.EqualTo(p.ID), $"Machine {mId}'s BoardPrototype is not equal to it's corresponding machine board, {p.ID}"); @@ -83,7 +83,7 @@ public sealed class MachineBoardTest : GameTest .Where(p => !pair.IsTestPrototype(p)) .Where(p => !_ignoredPrototypes.Contains(p.ID))) { - if (!p.TryGetComponent(out var cbc, compFact)) + if (!p.TryComp(out var cbc, compFact)) continue; var cId = cbc.Prototype; @@ -92,7 +92,7 @@ public sealed class MachineBoardTest : GameTest Assert.That(cId, Is.Not.Null, $"Computer board \"{p.ID}\" does not have a corresponding computer."); Assert.That(protoMan.TryIndex(cId, out var cProto), $"Computer board \"{p.ID}\"'s corresponding computer has an invalid prototype."); - Assert.That(cProto.TryGetComponent(out var cComp, compFact), + Assert.That(cProto.TryComp(out var cComp, compFact), $"Computer board {p.ID}'s corresponding computer \"{cId}\" does not have ComputerComponent"); Assert.That(cComp.BoardPrototype, Is.EqualTo(p.ID), $"Computer \"{cId}\"'s BoardPrototype is not equal to it's corresponding computer board, \"{p.ID}\""); @@ -121,7 +121,7 @@ public sealed class MachineBoardTest : GameTest .Where(p => !pair.IsTestPrototype(p)) .Where(p => !_ignoredPrototypes.Contains(p.ID))) { - if (!p.TryGetComponent(out var board, entMan.ComponentFactory)) + if (!p.TryComp(out var board, entMan.ComponentFactory)) continue; Assert.Multiple(() => diff --git a/Content.IntegrationTests/Tests/Power/PowerStatePrototypeTest.cs b/Content.IntegrationTests/Tests/Power/PowerStatePrototypeTest.cs index e991801330..2910310d82 100644 --- a/Content.IntegrationTests/Tests/Power/PowerStatePrototypeTest.cs +++ b/Content.IntegrationTests/Tests/Power/PowerStatePrototypeTest.cs @@ -33,12 +33,12 @@ public sealed class PowerStatePrototypeTest : GameTest .Where(p => !p.Abstract) .Where(p => !pair.IsTestPrototype(p))) { - if (!prototype.TryGetComponent(out var powerStateComp, entMan.ComponentFactory)) + if (!prototype.TryComp(out var powerStateComp, entMan.ComponentFactory)) continue; // LESSON LEARNED: // ENSURE THAT THE COMPONENT YOU ARE TRYING TO GET IS THE SERVER-SIDE VARIANT - if (!prototype.TryGetComponent(out var powerReceiverComp, entMan.ComponentFactory)) + if (!prototype.TryComp(out var powerReceiverComp, entMan.ComponentFactory)) { Assert.Fail( $"Entity prototype '{prototype.ID}' has a PowerStateComponent but is missing the required ApcPowerReceiverComponent."); diff --git a/Content.IntegrationTests/Tests/PrototypeTests/PrototypeUploadTest.cs b/Content.IntegrationTests/Tests/PrototypeTests/PrototypeUploadTest.cs index ac7bdcd24d..caaa68cf22 100644 --- a/Content.IntegrationTests/Tests/PrototypeTests/PrototypeUploadTest.cs +++ b/Content.IntegrationTests/Tests/PrototypeTests/PrototypeUploadTest.cs @@ -69,16 +69,16 @@ public sealed class PrototypeUploadTest : GameTest await pair.Server.WaitPost(() => { - Assert.That(sProtoA!.TryGetComponent(out _, sCompFact), Is.True); - Assert.That(sProtoB!.TryGetComponent(out _, sCompFact), Is.False); - Assert.That(sProtoD!.TryGetComponent(out _, sCompFact), Is.True); + Assert.That(sProtoA!.TryComp(out _, sCompFact), Is.True); + Assert.That(sProtoB!.TryComp(out _, sCompFact), Is.False); + Assert.That(sProtoD!.TryComp(out _, sCompFact), Is.True); }); await pair.Client.WaitPost(() => { - Assert.That(cProtoA!.TryGetComponent(out _, cCompFact), Is.True); - Assert.That(cProtoB!.TryGetComponent(out _, cCompFact), Is.False); - Assert.That(cProtoD!.TryGetComponent(out _, cCompFact), Is.True); + Assert.That(cProtoA!.TryComp(out _, cCompFact), Is.True); + Assert.That(cProtoB!.TryComp(out _, cCompFact), Is.False); + Assert.That(cProtoD!.TryComp(out _, cCompFact), Is.True); }); } } diff --git a/Content.IntegrationTests/Tests/Puller/PullerTest.cs b/Content.IntegrationTests/Tests/Puller/PullerTest.cs index 541417354a..e6d6655661 100644 --- a/Content.IntegrationTests/Tests/Puller/PullerTest.cs +++ b/Content.IntegrationTests/Tests/Puller/PullerTest.cs @@ -30,7 +30,7 @@ public sealed class PullerTest : GameTest { foreach (var proto in protoManager.EnumeratePrototypes()) { - if (!proto.TryGetComponent(out PullerComponent? puller, compFactory)) + if (!proto.TryComp(out PullerComponent? puller, compFactory)) continue; if (!puller.NeedsHands) diff --git a/Content.IntegrationTests/Tests/ResearchTest.cs b/Content.IntegrationTests/Tests/ResearchTest.cs index c95d68d9e2..aa1dee8e83 100644 --- a/Content.IntegrationTests/Tests/ResearchTest.cs +++ b/Content.IntegrationTests/Tests/ResearchTest.cs @@ -69,12 +69,12 @@ public sealed class ResearchTest : GameTest if (pair.IsTestPrototype(proto)) continue; - if (!proto.TryGetComponent(out var lathe, compFact)) + if (!proto.TryComp(out var lathe, compFact)) continue; latheSys.AddRecipesFromPacks(latheTechs, lathe.DynamicPacks); - if (proto.TryGetComponent(out var emag, compFact)) + if (proto.TryComp(out var emag, compFact)) latheSys.AddRecipesFromPacks(latheTechs, emag.EmagDynamicPacks); } diff --git a/Content.IntegrationTests/Tests/Storage/StorageTest.cs b/Content.IntegrationTests/Tests/Storage/StorageTest.cs index c0ef6a3691..11b0e98139 100644 --- a/Content.IntegrationTests/Tests/Storage/StorageTest.cs +++ b/Content.IntegrationTests/Tests/Storage/StorageTest.cs @@ -27,6 +27,7 @@ public sealed class StorageTest : GameTest var protoManager = server.ResolveDependency(); var entMan = server.ResolveDependency(); + var compFact = server.ResolveDependency(); var itemSys = entMan.System(); @@ -34,10 +35,10 @@ public sealed class StorageTest : GameTest { foreach (var proto in protoManager.EnumeratePrototypes()) { - if (!proto.TryGetComponent("Storage", out var storage) || + if (!proto.TryComp(out var storage, compFact) || storage.Whitelist != null || storage.MaxItemSize == null || - !proto.TryGetComponent("Item", out var item)) + !proto.TryComp(out var item, compFact)) continue; Assert.That(itemSys.GetSizePrototype(storage.MaxItemSize.Value).Weight, @@ -54,6 +55,7 @@ public sealed class StorageTest : GameTest var server = pair.Server; var protoManager = server.ResolveDependency(); + var compFact = server.ResolveDependency(); await server.WaitAssertion(() => { @@ -61,7 +63,7 @@ public sealed class StorageTest : GameTest { foreach (var proto in protoManager.EnumeratePrototypes()) { - if (!proto.TryGetComponent("StorageFill", out var storage)) + if (!proto.TryComp(out var storage, compFact)) continue; foreach (var entry in storage.Contents) @@ -102,14 +104,14 @@ public sealed class StorageTest : GameTest var size = 0; await server.WaitAssertion(() => { - if (!proto.TryGetComponent("Storage", out storage)) + if (!proto.TryComp(out storage, compFact)) { Assert.Fail($"Entity {proto.ID} has storage-fill without a storage component!"); return; } - proto.TryGetComponent("Item", out item); - size = GetFillSize(fill, false, protoMan, itemSys); + proto.TryComp(out item, compFact); + size = GetFillSize(fill, false, protoMan, compFact, itemSys); }); if (storage == null) @@ -146,7 +148,7 @@ public sealed class StorageTest : GameTest ItemComponent? entryItem = null; await server.WaitPost(() => { - fillItem.TryGetComponent("Item", out entryItem); + fillItem.TryComp(out entryItem, compFact); }); if (entryItem == null) @@ -180,20 +182,20 @@ public sealed class StorageTest : GameTest await server.WaitAssertion(() => { - if (!proto.TryGetComponent("EntityStorage", out EntityStorageComponent? entStorage)) + if (!proto.TryComp(out EntityStorageComponent? entStorage, compFact)) Assert.Fail($"Entity {proto.ID} has storage-fill without a storage component!"); if (entStorage == null) return; - var size = GetFillSize(fill, true, protoMan, itemSys); + var size = GetFillSize(fill, true, protoMan, compFact, itemSys); Assert.That(size, Is.LessThanOrEqualTo(entStorage.Capacity), $"{proto.ID} storage fill is too large."); }); } } - private int GetEntrySize(EntitySpawnEntry entry, bool getCount, IPrototypeManager protoMan, SharedItemSystem itemSystem) + private int GetEntrySize(EntitySpawnEntry entry, bool getCount, IPrototypeManager protoMan, IComponentFactory compFact, SharedItemSystem itemSystem) { if (entry.PrototypeId == null) return 0; @@ -208,20 +210,20 @@ public sealed class StorageTest : GameTest return entry.Amount; - if (proto.TryGetComponent("Item", out var item)) + if (proto.TryComp(out var item, compFact)) return itemSystem.GetItemShape(item).GetArea() * entry.Amount; Assert.Fail($"Prototype is missing item comp: {entry.PrototypeId}"); return 0; } - private int GetFillSize(StorageFillComponent fill, bool getCount, IPrototypeManager protoMan, SharedItemSystem itemSystem) + private int GetFillSize(StorageFillComponent fill, bool getCount, IPrototypeManager protoMan, IComponentFactory compFact, SharedItemSystem itemSystem) { var totalSize = 0; var groups = new Dictionary(); foreach (var entry in fill.Contents) { - var size = GetEntrySize(entry, getCount, protoMan, itemSystem); + var size = GetEntrySize(entry, getCount, protoMan, compFact, itemSystem); if (entry.GroupId == null) totalSize += size; @@ -245,13 +247,13 @@ public sealed class StorageTest : GameTest { foreach (var (proto, fill) in pair.GetPrototypesWithComponent()) { - Assert.That(!proto.HasComponent(compFact), $"Prototype {proto.ID} has both {nameof(EntityTableContainerFillComponent)} and {nameof(StorageFillComponent)}."); - Assert.That(!proto.HasComponent(compFact), $"Prototype {proto.ID} has both {nameof(EntityTableContainerFillComponent)} and {nameof(ContainerFillComponent)}."); + Assert.That(!proto.HasComp(compFact), $"Prototype {proto.ID} has both {nameof(EntityTableContainerFillComponent)} and {nameof(StorageFillComponent)}."); + Assert.That(!proto.HasComp(compFact), $"Prototype {proto.ID} has both {nameof(EntityTableContainerFillComponent)} and {nameof(ContainerFillComponent)}."); } foreach (var (proto, fill) in pair.GetPrototypesWithComponent()) { - Assert.That(!proto.HasComponent(compFact), $"Prototype {proto.ID} has both {nameof(ContainerFillComponent)} and {nameof(StorageFillComponent)}."); + Assert.That(!proto.HasComp(compFact), $"Prototype {proto.ID} has both {nameof(ContainerFillComponent)} and {nameof(StorageFillComponent)}."); } }); } diff --git a/Content.IntegrationTests/Tests/VendingMachineRestockTest.cs b/Content.IntegrationTests/Tests/VendingMachineRestockTest.cs index 70bff34f63..ec6ff3ba59 100644 --- a/Content.IntegrationTests/Tests/VendingMachineRestockTest.cs +++ b/Content.IntegrationTests/Tests/VendingMachineRestockTest.cs @@ -141,7 +141,7 @@ namespace Content.IntegrationTests.Tests List>> entitiesWhichSpawnRestocks = new(); foreach (var proto in prototypeManager.EnumeratePrototypes()) { - if (!proto.TryGetComponent(out var fill, compFact)) + if (!proto.TryComp(out var fill, compFact)) continue; var containers = fill.Containers; @@ -320,7 +320,7 @@ namespace Content.IntegrationTests.Tests #pragma warning disable NUnit2045 Assert.That(!damageResult.Empty, "Received empty damageResult when attempting to damage restock box."); - Assert.That((int) damageResult.GetTotal(), Is.GreaterThan(0), "Box damage result was not greater than 0."); + Assert.That((int)damageResult.GetTotal(), Is.GreaterThan(0), "Box damage result was not greater than 0."); #pragma warning restore NUnit2045 }); await server.WaitRunTicks(15); diff --git a/Content.Server/Access/Systems/AgentIDCardSystem.cs b/Content.Server/Access/Systems/AgentIDCardSystem.cs index c0e8e8d00f..7377f2b9af 100644 --- a/Content.Server/Access/Systems/AgentIDCardSystem.cs +++ b/Content.Server/Access/Systems/AgentIDCardSystem.cs @@ -16,7 +16,6 @@ using Content.Shared.StatusIcon; using Content.Shared.UserInterface; using Content.Shared.VoiceMask; using Robust.Server.GameObjects; -using Robust.Shared.Prototypes; namespace Content.Server.Access.Systems { @@ -25,7 +24,6 @@ namespace Content.Server.Access.Systems [Dependency] private PopupSystem _popupSystem = default!; [Dependency] private IdCardSystem _cardSystem = default!; [Dependency] private UserInterfaceSystem _uiSystem = default!; - [Dependency] private IPrototypeManager _prototypeManager = default!; [Dependency] private ChameleonClothingSystem _chameleon = default!; [Dependency] private ChameleonControllerSystem _chamController = default!; [Dependency] private LockSystem _lock = default!; @@ -49,13 +47,13 @@ namespace Content.Server.Access.Systems if (!TryComp(ent, out var idCardComp)) return; - _prototypeManager.Resolve(args.Args.ChameleonOutfit.Job, out var jobProto); + ProtoMan.Resolve(args.Args.ChameleonOutfit.Job, out var jobProto); var jobIcon = args.Args.ChameleonOutfit.Icon ?? jobProto?.Icon; var jobName = args.Args.ChameleonOutfit.Name ?? jobProto?.Name ?? ""; if (jobIcon != null) - _cardSystem.TryChangeJobIcon(ent, _prototypeManager.Index(jobIcon.Value), idCardComp); + _cardSystem.TryChangeJobIcon(ent, ProtoMan.Index(jobIcon.Value), idCardComp); if (jobName != "") _cardSystem.TryChangeJobTitle(ent, Loc.GetString(jobName), idCardComp); @@ -76,8 +74,8 @@ namespace Content.Server.Access.Systems if (idSlotGear == null) return; - var proto = _prototypeManager.Index(idSlotGear); - if (!proto.TryGetComponent(out var comp, EntityManager.ComponentFactory)) + var proto = ProtoMan.Index(idSlotGear); + if (!proto.TryComp(out var comp, EntityManager.ComponentFactory)) return; if (TryComp(ent, out var chameleonComp) && chameleonComp.CanBeSetByController) @@ -146,7 +144,7 @@ namespace Content.Server.Access.Systems if (!TryComp(uid, out var idCard)) return; - if (!_prototypeManager.Resolve(args.JobIconId, out var jobIcon)) + if (!ProtoMan.Resolve(args.JobIconId, out var jobIcon)) return; _cardSystem.TryChangeJobIcon(uid, jobIcon, idCard); @@ -159,7 +157,7 @@ namespace Content.Server.Access.Systems private bool TryFindJobProtoFromIcon(JobIconPrototype jobIcon, [NotNullWhen(true)] out JobPrototype? job) { - foreach (var jobPrototype in _prototypeManager.EnumeratePrototypes()) + foreach (var jobPrototype in ProtoMan.EnumeratePrototypes()) { if (jobPrototype.Icon == jobIcon.ID) { diff --git a/Content.Server/Access/Systems/IdCardConsoleSystem.cs b/Content.Server/Access/Systems/IdCardConsoleSystem.cs index 2a182af9fc..6e7a059663 100644 --- a/Content.Server/Access/Systems/IdCardConsoleSystem.cs +++ b/Content.Server/Access/Systems/IdCardConsoleSystem.cs @@ -30,7 +30,6 @@ namespace Content.Server.Access.Systems; public sealed partial class IdCardConsoleSystem : SharedIdCardConsoleSystem { [Dependency] private IConfigurationManager _cfgManager = default!; - [Dependency] private IPrototypeManager _prototype = default!; [Dependency] private StationRecordsSystem _record = default!; [Dependency] private UserInterfaceSystem _userInterface = default!; [Dependency] private AccessReaderSystem _accessReader = default!; @@ -158,8 +157,8 @@ public sealed partial class IdCardConsoleSystem : SharedIdCardConsoleSystem _idCard.TryChangeFullName(targetId, newFullName, player: player); _idCard.TryChangeJobTitle(targetId, newJobTitle, player: player); - if (_prototype.TryIndex(newJobProto, out var job) - && _prototype.Resolve(job.Icon, out var jobIcon)) + if (ProtoMan.TryIndex(newJobProto, out var job) + && ProtoMan.Resolve(job.Icon, out var jobIcon)) { _idCard.TryChangeJobIcon(targetId, jobIcon, player: player); _idCard.TryChangeJobDepartment(targetId, job); diff --git a/Content.Server/Access/Systems/IdCardSystem.cs b/Content.Server/Access/Systems/IdCardSystem.cs index 776075fab3..dd865b3f06 100644 --- a/Content.Server/Access/Systems/IdCardSystem.cs +++ b/Content.Server/Access/Systems/IdCardSystem.cs @@ -10,7 +10,6 @@ using Content.Shared.Chat; using Content.Shared.Database; using Content.Shared.Kitchen; using Content.Shared.Popups; -using Robust.Shared.Prototypes; using Robust.Shared.Random; using Content.Server.Kitchen.EntitySystems; @@ -20,7 +19,6 @@ public sealed partial class IdCardSystem : SharedIdCardSystem { [Dependency] private PopupSystem _popupSystem = default!; [Dependency] private IRobustRandom _random = default!; - [Dependency] private IPrototypeManager _prototypeManager = default!; [Dependency] private IAdminLogManager _adminLogger = default!; [Dependency] private ChatSystem _chat = default!; [Dependency] private MicrowaveSystem _microwave = default!; @@ -82,7 +80,7 @@ public sealed partial class IdCardSystem : SharedIdCardSystem } // Give them a wonderful new access to compensate for everything - var ids = _prototypeManager.EnumeratePrototypes().Where(x => x.CanAddToIdCard).ToArray(); + var ids = ProtoMan.EnumeratePrototypes().Where(x => x.CanAddToIdCard).ToArray(); if (ids.Length == 0) return; diff --git a/Content.Server/Access/Systems/PresetIdCardSystem.cs b/Content.Server/Access/Systems/PresetIdCardSystem.cs index c0a9eb5e16..63a355546e 100644 --- a/Content.Server/Access/Systems/PresetIdCardSystem.cs +++ b/Content.Server/Access/Systems/PresetIdCardSystem.cs @@ -4,14 +4,11 @@ using Content.Server.Station.Components; using Content.Server.Station.Systems; using Content.Shared.Access.Systems; using Content.Shared.Roles; -using Content.Shared.StatusIcon; -using Robust.Shared.Prototypes; namespace Content.Server.Access.Systems; public sealed partial class PresetIdCardSystem : EntitySystem { - [Dependency] private IPrototypeManager _prototypeManager = default!; [Dependency] private IdCardSystem _cardSystem = default!; [Dependency] private SharedAccessSystem _accessSystem = default!; [Dependency] private StationSystem _stationSystem = default!; @@ -71,7 +68,7 @@ public sealed partial class PresetIdCardSystem : EntitySystem if (id.JobName == null) return; - if (!_prototypeManager.TryIndex(id.JobName, out JobPrototype? job)) + if (!ProtoMan.TryIndex(id.JobName, out JobPrototype? job)) { Log.Error($"Invalid job id ({id.JobName}) for preset card"); return; @@ -82,7 +79,7 @@ public sealed partial class PresetIdCardSystem : EntitySystem _cardSystem.TryChangeJobTitle(uid, job.LocalizedName); _cardSystem.TryChangeJobDepartment(uid, job); - if (_prototypeManager.Resolve(job.Icon, out var jobIcon)) + if (ProtoMan.Resolve(job.Icon, out var jobIcon)) _cardSystem.TryChangeJobIcon(uid, jobIcon); } } diff --git a/Content.Server/Administration/Systems/AdminSystem.cs b/Content.Server/Administration/Systems/AdminSystem.cs index a07411c0c3..f5425e4af6 100644 --- a/Content.Server/Administration/Systems/AdminSystem.cs +++ b/Content.Server/Administration/Systems/AdminSystem.cs @@ -20,7 +20,6 @@ using Content.Shared.PDA; using Content.Shared.Players.PlayTimeTracking; using Content.Shared.Popups; using Content.Shared.Roles; -using Content.Shared.Roles.Components; using Content.Shared.Roles.Jobs; using Content.Shared.StationRecords; using Content.Shared.Throwing; @@ -32,7 +31,6 @@ using Robust.Shared.Configuration; using Robust.Shared.Enums; using Robust.Shared.Network; using Robust.Shared.Player; -using Robust.Shared.Prototypes; namespace Content.Server.Administration.Systems; @@ -49,7 +47,6 @@ public sealed partial class AdminSystem : EntitySystem [Dependency] private PopupSystem _popup = default!; [Dependency] private PhysicsSystem _physics = default!; [Dependency] private PlayTimeTrackingManager _playTime = default!; - [Dependency] private IPrototypeManager _proto = default!; [Dependency] private SharedRoleSystem _role = default!; [Dependency] private GameTicker _gameTicker = default!; [Dependency] private SharedAudioSystem _audio = default!; @@ -238,7 +235,7 @@ public sealed partial class AdminSystem : EntitySystem { sortWeight = _role.GetRoleCompByTime(mindComp)?.Comp.SortWeight ?? 0; - if (_proto.TryIndex(mindComp.RoleType, out var role)) + if (ProtoMan.TryIndex(mindComp.RoleType, out var role)) { roleType = role; subtype = mindComp.Subtype; diff --git a/Content.Server/Administration/Systems/AdminVerbSystem.Tools.cs b/Content.Server/Administration/Systems/AdminVerbSystem.Tools.cs index 6e75ae62e8..da4b442382 100644 --- a/Content.Server/Administration/Systems/AdminVerbSystem.Tools.cs +++ b/Content.Server/Administration/Systems/AdminVerbSystem.Tools.cs @@ -12,7 +12,6 @@ using Content.Shared.Access.Components; using Content.Shared.Access.Systems; using Content.Shared.Administration; using Content.Shared.Administration.Components; -using Content.Shared.Administration.Systems; using Content.Shared.Atmos; using Content.Shared.Atmos.Components; using Content.Shared.Construction.Components; @@ -832,7 +831,7 @@ public sealed partial class AdminVerbSystem private void GiveAllAccess(EntityUid entity) { - var allAccess = _prototypeManager + var allAccess = ProtoMan .EnumeratePrototypes() .Select(p => new ProtoId(p.ID)).ToArray(); diff --git a/Content.Server/Administration/Systems/AdminVerbSystem.cs b/Content.Server/Administration/Systems/AdminVerbSystem.cs index a274dd3d0f..e357d5a870 100644 --- a/Content.Server/Administration/Systems/AdminVerbSystem.cs +++ b/Content.Server/Administration/Systems/AdminVerbSystem.cs @@ -31,7 +31,6 @@ using Robust.Shared.Console; using Robust.Shared.Map.Components; using Robust.Shared.Physics.Components; using Robust.Shared.Player; -using Robust.Shared.Prototypes; using Robust.Shared.Timing; using Robust.Shared.Toolshed; using Robust.Shared.Utility; @@ -51,7 +50,6 @@ namespace Content.Server.Administration.Systems [Dependency] private IAdminManager _adminManager = default!; [Dependency] private IGameTiming _gameTiming = default!; [Dependency] private SharedMapSystem _map = default!; - [Dependency] private IPrototypeManager _prototypeManager = default!; [Dependency] private AdminSystem _adminSystem = default!; [Dependency] private DisposalTubeSystem _disposalTubes = default!; [Dependency] private EuiManager _euiManager = default!; diff --git a/Content.Server/Advertise/EntitySystems/SpeakOnUIClosedSystem.cs b/Content.Server/Advertise/EntitySystems/SpeakOnUIClosedSystem.cs index c5b01a7e0b..ce2a669cc6 100644 --- a/Content.Server/Advertise/EntitySystems/SpeakOnUIClosedSystem.cs +++ b/Content.Server/Advertise/EntitySystems/SpeakOnUIClosedSystem.cs @@ -3,7 +3,6 @@ using Content.Shared.Advertise.Components; using Content.Shared.Advertise.Systems; using Content.Shared.Chat; using Content.Shared.UserInterface; -using Robust.Shared.Prototypes; using Robust.Shared.Random; namespace Content.Server.Advertise.EntitySystems; @@ -11,7 +10,6 @@ namespace Content.Server.Advertise.EntitySystems; public sealed partial class SpeakOnUIClosedSystem : SharedSpeakOnUIClosedSystem { [Dependency] private IRobustRandom _random = default!; - [Dependency] private IPrototypeManager _prototypeManager = default!; [Dependency] private ChatSystem _chat = default!; public override void Initialize() @@ -39,7 +37,7 @@ public sealed partial class SpeakOnUIClosedSystem : SharedSpeakOnUIClosedSystem if (!entity.Comp.Enabled) return false; - if (!_prototypeManager.Resolve(entity.Comp.Pack, out var messagePack)) + if (!ProtoMan.Resolve(entity.Comp.Pack, out var messagePack)) return false; var message = Loc.GetString(_random.Pick(messagePack.Values), ("name", Name(entity))); diff --git a/Content.Server/AlertLevel/AlertLevelSystem.cs b/Content.Server/AlertLevel/AlertLevelSystem.cs index 9da3b67743..21284de4bf 100644 --- a/Content.Server/AlertLevel/AlertLevelSystem.cs +++ b/Content.Server/AlertLevel/AlertLevelSystem.cs @@ -2,7 +2,6 @@ using System.Linq; using Content.Server.Chat.Systems; using Content.Server.Station.Systems; using Content.Shared.CCVar; -using Robust.Shared.Audio; using Robust.Shared.Audio.Systems; using Robust.Shared.Configuration; using Robust.Shared.Prototypes; @@ -12,7 +11,6 @@ namespace Content.Server.AlertLevel; public sealed partial class AlertLevelSystem : EntitySystem { [Dependency] private IConfigurationManager _cfg = default!; - [Dependency] private IPrototypeManager _prototypeManager = default!; [Dependency] private ChatSystem _chatSystem = default!; [Dependency] private SharedAudioSystem _audio = default!; [Dependency] private StationSystem _stationSystem = default!; @@ -51,7 +49,7 @@ public sealed partial class AlertLevelSystem : EntitySystem if (!TryComp(args.Station, out var alertLevelComponent)) return; - if (!_prototypeManager.TryIndex(alertLevelComponent.AlertLevelPrototype, out AlertLevelPrototype? alerts)) + if (!ProtoMan.TryIndex(alertLevelComponent.AlertLevelPrototype, out AlertLevelPrototype? alerts)) { return; } diff --git a/Content.Server/Anomaly/AnomalySystem.Generator.cs b/Content.Server/Anomaly/AnomalySystem.Generator.cs index e8788f57a4..a9cf014aa8 100644 --- a/Content.Server/Anomaly/AnomalySystem.Generator.cs +++ b/Content.Server/Anomaly/AnomalySystem.Generator.cs @@ -176,7 +176,7 @@ public sealed partial class AnomalySystem Audio.PlayPvs(component.GeneratingFinishedSound, uid); var message = Loc.GetString("anomaly-generator-announcement"); - _radio.SendRadioMessage(uid, message, _prototype.Index(component.ScienceChannel), uid); + _radio.SendRadioMessage(uid, message, ProtoMan.Index(component.ScienceChannel), uid); } private void UpdateGenerator() diff --git a/Content.Server/Anomaly/AnomalySystem.cs b/Content.Server/Anomaly/AnomalySystem.cs index 6ed1578caf..e1514bfeaf 100644 --- a/Content.Server/Anomaly/AnomalySystem.cs +++ b/Content.Server/Anomaly/AnomalySystem.cs @@ -27,7 +27,6 @@ namespace Content.Server.Anomaly; public sealed partial class AnomalySystem : SharedAnomalySystem { [Dependency] private IConfigurationManager _configuration = default!; - [Dependency] private IPrototypeManager _prototype = default!; [Dependency] private AmbientSoundSystem _ambient = default!; [Dependency] private AtmosphereSystem _atmosphere = default!; [Dependency] private ExplosionSystem _explosion = default!; @@ -101,7 +100,7 @@ public sealed partial class AnomalySystem : SharedAnomalySystem var behaviorMod = 1f; if (anomaly.Comp.CurrentBehavior != null) { - var b = _prototype.Index(anomaly.Comp.CurrentBehavior.Value); + var b = ProtoMan.Index(anomaly.Comp.CurrentBehavior.Value); behaviorMod = b.ParticleSensivity; } // small function to randomize because it's easier to read like this @@ -152,7 +151,7 @@ public sealed partial class AnomalySystem : SharedAnomalySystem //Apply behavior modifier if (component.CurrentBehavior != null) { - var behavior = _prototype.Index(component.CurrentBehavior.Value); + var behavior = ProtoMan.Index(component.CurrentBehavior.Value); multiplier *= behavior.EarnPointModifier; } @@ -189,7 +188,7 @@ public sealed partial class AnomalySystem : SharedAnomalySystem #region Behavior private string GetRandomBehavior() { - var weightList = _prototype.Index(WeightListProto); + var weightList = ProtoMan.Index(WeightListProto); return weightList.Pick(_random); } @@ -202,7 +201,7 @@ public sealed partial class AnomalySystem : SharedAnomalySystem RemoveBehavior(anomaly, anomaly.Comp.CurrentBehavior.Value); anomaly.Comp.CurrentBehavior = behaviorProto; - var behavior = _prototype.Index(behaviorProto); + var behavior = ProtoMan.Index(behaviorProto); EntityManager.AddComponents(anomaly, behavior.Components); var ev = new AnomalyBehaviorChangedEvent(anomaly, anomaly.Comp.CurrentBehavior, behaviorProto); @@ -214,7 +213,7 @@ public sealed partial class AnomalySystem : SharedAnomalySystem if (anomaly.Comp.CurrentBehavior == null) return; - var behavior = _prototype.Index(behaviorProto); + var behavior = ProtoMan.Index(behaviorProto); EntityManager.RemoveComponents(anomaly, behavior.Components); } @@ -347,7 +346,7 @@ public sealed partial class AnomalySystem : SharedAnomalySystem { if (anomalyComp.CurrentBehavior != null) { - var behavior = _prototype.Index(anomalyComp.CurrentBehavior.Value); + var behavior = ProtoMan.Index(anomalyComp.CurrentBehavior.Value); msg.AddMarkupOrThrow("- " + Loc.GetString(behavior.Description)); msg.PushNewline(); diff --git a/Content.Server/Anomaly/Effects/InnerBodyAnomalySystem.cs b/Content.Server/Anomaly/Effects/InnerBodyAnomalySystem.cs index caa7f006b2..d5467edfe8 100644 --- a/Content.Server/Anomaly/Effects/InnerBodyAnomalySystem.cs +++ b/Content.Server/Anomaly/Effects/InnerBodyAnomalySystem.cs @@ -1,5 +1,4 @@ using Content.Server.Administration.Logs; -using Content.Server.Body.Systems; using Content.Server.Chat.Managers; using Content.Server.Jittering; using Content.Server.Mind; @@ -7,7 +6,6 @@ using Content.Server.Stunnable; using Content.Shared.Anomaly; using Content.Shared.Anomaly.Components; using Content.Shared.Anomaly.Effects; -using Content.Shared.Body.Components; using Content.Shared.Chat; using Content.Shared.Database; using Content.Shared.Gibbing; @@ -17,7 +15,6 @@ using Content.Shared.Whitelist; using Robust.Shared.Audio.Systems; using Robust.Shared.Physics.Events; using Robust.Shared.Player; -using Robust.Shared.Prototypes; namespace Content.Server.Anomaly.Effects; @@ -33,7 +30,6 @@ public sealed partial class InnerBodyAnomalySystem : SharedInnerBodyAnomalySyste [Dependency] private JitteringSystem _jitter = default!; [Dependency] private MindSystem _mind = default!; [Dependency] private SharedPopupSystem _popup = default!; - [Dependency] private IPrototypeManager _proto = default!; [Dependency] private StunSystem _stun = default!; private readonly Color _messageColor = Color.FromSrgb(new Color(201, 22, 94)); @@ -87,7 +83,7 @@ public sealed partial class InnerBodyAnomalySystem : SharedInnerBodyAnomalySyste private void AddAnomalyToBody(Entity ent) { - if (!_proto.Resolve(ent.Comp.InjectionProto, out var injectedAnom)) + if (!ProtoMan.Resolve(ent.Comp.InjectionProto, out var injectedAnom)) return; if (ent.Comp.Injected) @@ -208,7 +204,7 @@ public sealed partial class InnerBodyAnomalySystem : SharedInnerBodyAnomalySyste if (!ent.Comp.Injected) return; - if (_proto.Resolve(ent.Comp.InjectionProto, out var injectedAnom)) + if (ProtoMan.Resolve(ent.Comp.InjectionProto, out var injectedAnom)) EntityManager.RemoveComponents(ent, injectedAnom.Components); _stun.TryUpdateParalyzeDuration(ent, TimeSpan.FromSeconds(ent.Comp.StunDuration)); diff --git a/Content.Server/Anomaly/Effects/ReagentProducerAnomalySystem.cs b/Content.Server/Anomaly/Effects/ReagentProducerAnomalySystem.cs index 588ffc95ca..bdf7a90860 100644 --- a/Content.Server/Anomaly/Effects/ReagentProducerAnomalySystem.cs +++ b/Content.Server/Anomaly/Effects/ReagentProducerAnomalySystem.cs @@ -5,7 +5,6 @@ using Content.Shared.Chemistry.Components; using Content.Shared.Sprite; using Robust.Server.GameObjects; using Robust.Shared.Audio.Systems; -using Robust.Shared.Prototypes; using Robust.Shared.Random; namespace Content.Server.Anomaly.Effects; @@ -31,7 +30,6 @@ public sealed partial class ReagentProducerAnomalySystem : EntitySystem [Dependency] private SharedSolutionContainerSystem _solutionContainer = default!; [Dependency] private IRobustRandom _random = default!; [Dependency] private PointLightSystem _light = default!; - [Dependency] private IPrototypeManager _prototypeManager = default!; [Dependency] private SharedAudioSystem _audio = default!; public const string FallbackReagent = "Water"; @@ -87,7 +85,7 @@ public sealed partial class ReagentProducerAnomalySystem : EntitySystem // and nothing worked out for me. So for now it will be like this. if (component.NeedRecolor) { - var color = producerSolution.GetColor(_prototypeManager); + var color = producerSolution.GetColor(ProtoMan); _light.SetColor(uid, color); if (TryComp(uid, out var randomSprite)) { diff --git a/Content.Server/Antag/AntagSelectionSystem.API.Assignment.cs b/Content.Server/Antag/AntagSelectionSystem.API.Assignment.cs index c33808d010..46741d1978 100644 --- a/Content.Server/Antag/AntagSelectionSystem.API.Assignment.cs +++ b/Content.Server/Antag/AntagSelectionSystem.API.Assignment.cs @@ -33,7 +33,7 @@ public sealed partial class AntagSelectionSystem bool checkPref = true) { // Can't be this antag if it doesn't exist :) - if (!Proto.Resolve(proto, out var antag)) + if (!ProtoMan.Resolve(proto, out var antag)) return false; return CanBeAntag(player, gameRule, antag, checkPref); @@ -71,7 +71,7 @@ public sealed partial class AntagSelectionSystem Entity gameRule, ProtoId def) { - if (!Proto.Resolve(def, out var antag)) + if (!ProtoMan.Resolve(def, out var antag)) return false; return IsSessionValid(player, gameRule, antag); @@ -159,7 +159,7 @@ public sealed partial class AntagSelectionSystem /// public bool IsEntityValid([NotNullWhen(true)] EntityUid? uid, ProtoId def) { - if (!Proto.Resolve(def, out var antag)) + if (!ProtoMan.Resolve(def, out var antag)) return false; return IsEntityValid(uid, antag); @@ -221,7 +221,7 @@ public sealed partial class AntagSelectionSystem ICommonSession session, bool checkPref = true) { - if (!Proto.Resolve(proto, out var def)) + if (!ProtoMan.Resolve(proto, out var def)) return false; return TryMakeAntag(gameRule, def, session, checkPref); @@ -265,7 +265,7 @@ public sealed partial class AntagSelectionSystem { foreach (var selector in gameRule.Comp.Antags) { - if (!Proto.Resolve(selector.Proto, out var antag)) + if (!ProtoMan.Resolve(selector.Proto, out var antag)) continue; // Because this value can theoretically fluctuate as players leave and join, we don't want to cache it. @@ -361,7 +361,7 @@ public sealed partial class AntagSelectionSystem int count, bool assert = false) { - if (!Proto.Resolve(protoId, out var antag)) + if (!ProtoMan.Resolve(protoId, out var antag)) return; SpawnGhostRoles(gameRule, antag, count, assert); @@ -432,7 +432,7 @@ public sealed partial class AntagSelectionSystem if (TryAssignNextAvailableAntag(rule, player)) return; - if (rule.Comp.Antags.LastOrDefault() is not { } antag || !Proto.Resolve(antag.Proto, out var proto)) + if (rule.Comp.Antags.LastOrDefault() is not { } antag || !ProtoMan.Resolve(antag.Proto, out var proto)) return; PreSelectSession(rule, proto, player); @@ -442,7 +442,7 @@ public sealed partial class AntagSelectionSystem /// public void ForceMakeAntag(ICommonSession player, EntProtoId ruleProto, ProtoId antagProto) where T : Component { - if (!Proto.Resolve(antagProto, out var antag)) + if (!ProtoMan.Resolve(antagProto, out var antag)) return; ForceMakeAntag(player, ruleProto, antag); diff --git a/Content.Server/Antag/AntagSelectionSystem.API.cs b/Content.Server/Antag/AntagSelectionSystem.API.cs index 4bd31f4218..a20319871c 100644 --- a/Content.Server/Antag/AntagSelectionSystem.API.cs +++ b/Content.Server/Antag/AntagSelectionSystem.API.cs @@ -91,7 +91,7 @@ public sealed partial class AntagSelectionSystem // This is how the system worked when I got here, and I decided not to change it to avoid fucking with team antag balance foreach (var antag in gameRule.Comp.Antags) { - if (!Proto.Resolve(antag.Proto, out _)) + if (!ProtoMan.Resolve(antag.Proto, out _)) continue; count += GetTargetAntagCount(antag, playerCount, ref runningCount); @@ -110,7 +110,7 @@ public sealed partial class AntagSelectionSystem [PublicAPI] public int GetTargetAntagCount(Entity gameRule, int playerCount, ProtoId proto) { - if (!Proto.Resolve(proto, out var antag)) + if (!ProtoMan.Resolve(proto, out var antag)) return 0; return GetTargetAntagCount(gameRule, playerCount, antag); @@ -127,7 +127,7 @@ public sealed partial class AntagSelectionSystem // This is how the system worked when I got here, and I decided not to change it to avoid fucking with team antag balance foreach (var antag in gameRule.Comp.Antags) { - if (!Proto.Resolve(antag.Proto, out _)) + if (!ProtoMan.Resolve(antag.Proto, out _)) continue; // We need to update our running count which is why we get the count for definitions we may not be assigning. @@ -404,7 +404,7 @@ public sealed partial class AntagSelectionSystem if (except.Contains(antag)) continue; - if (!comp.PreSelectedSessions.TryGetValue(antag, out var set) || !Proto.Resolve(antag.Proto, out var proto)) + if (!comp.PreSelectedSessions.TryGetValue(antag, out var set) || !ProtoMan.Resolve(antag.Proto, out var proto)) continue; // Check this here so we don't make a dictionary entry for a bunch of players, with empty blacklists and whitelists. @@ -468,7 +468,7 @@ public sealed partial class AntagSelectionSystem if (!comp.PreSelectedSessions.TryGetValue(antag, out var set) || !set.Contains(player)) continue; - if (!Proto.Resolve(antag.Proto, out var proto)) + if (!ProtoMan.Resolve(antag.Proto, out var proto)) continue; if (proto.JobWhitelist != null) @@ -654,7 +654,7 @@ public sealed partial class AntagSelectionSystem foreach (var (proto, sessions) in comp.PreSelectedSessions) { - if (!Proto.Resolve(proto, out var def)) + if (!ProtoMan.Resolve(proto, out var def)) continue; // How did you even get here? if (!sessions.Contains(player)) diff --git a/Content.Server/Antag/AntagSelectionSystem.cs b/Content.Server/Antag/AntagSelectionSystem.cs index e9c01a71c2..0ec6e2603c 100644 --- a/Content.Server/Antag/AntagSelectionSystem.cs +++ b/Content.Server/Antag/AntagSelectionSystem.cs @@ -148,7 +148,7 @@ public sealed partial class AntagSelectionSystem : GameRuleSystemA fight-verb. public string GenerateFightVerb(SpaceVillainArcadeComponent arcade) { - return _random.Pick(_prototypeManager.Index(arcade.PossibleFightVerbs)); + return _random.Pick(ProtoMan.Index(arcade.PossibleFightVerbs)); } /// @@ -64,8 +62,8 @@ public sealed partial class SpaceVillainArcadeSystem : EntitySystem /// An enemy-name. public string GenerateEnemyName(SpaceVillainArcadeComponent arcade) { - var possibleFirstEnemyNames = _prototypeManager.Index(arcade.PossibleFirstEnemyNames); - var possibleLastEnemyNames = _prototypeManager.Index(arcade.PossibleLastEnemyNames); + var possibleFirstEnemyNames = ProtoMan.Index(arcade.PossibleFirstEnemyNames); + var possibleLastEnemyNames = ProtoMan.Index(arcade.PossibleLastEnemyNames); return $"{_random.Pick(possibleFirstEnemyNames)} {_random.Pick(possibleLastEnemyNames)}"; } diff --git a/Content.Server/Armor/ArmorSystem.cs b/Content.Server/Armor/ArmorSystem.cs index b188d91374..4ce933eb9b 100644 --- a/Content.Server/Armor/ArmorSystem.cs +++ b/Content.Server/Armor/ArmorSystem.cs @@ -1,6 +1,5 @@ using Content.Shared.Armor; using Content.Shared.Cargo; -using Robust.Shared.Prototypes; using Content.Shared.Damage.Prototypes; namespace Content.Server.Armor; @@ -8,8 +7,6 @@ namespace Content.Server.Armor; /// public sealed partial class ArmorSystem : SharedArmorSystem { - [Dependency] private IPrototypeManager _protoManager = default!; - public override void Initialize() { base.Initialize(); @@ -21,13 +18,13 @@ public sealed partial class ArmorSystem : SharedArmorSystem { foreach (var modifier in component.Modifiers.Coefficients) { - var damageType = _protoManager.Index(modifier.Key); + var damageType = ProtoMan.Index(modifier.Key); args.Price += component.PriceMultiplier * damageType.ArmorPriceCoefficient * 100 * (1 - modifier.Value); } foreach (var modifier in component.Modifiers.FlatReduction) { - var damageType = _protoManager.Index(modifier.Key); + var damageType = ProtoMan.Index(modifier.Key); args.Price += component.PriceMultiplier * damageType.ArmorPriceFlat * modifier.Value; } } diff --git a/Content.Server/Atmos/Monitor/Systems/AtmosMonitoringSystem.cs b/Content.Server/Atmos/Monitor/Systems/AtmosMonitoringSystem.cs index 27135dfffa..ff34828877 100644 --- a/Content.Server/Atmos/Monitor/Systems/AtmosMonitoringSystem.cs +++ b/Content.Server/Atmos/Monitor/Systems/AtmosMonitoringSystem.cs @@ -16,7 +16,6 @@ using Content.Shared.DeviceNetwork; using Content.Shared.DeviceNetwork.Events; using Content.Shared.Power; using Content.Shared.Tag; -using Robust.Shared.Prototypes; namespace Content.Server.Atmos.Monitor.Systems; @@ -30,7 +29,6 @@ public sealed partial class AtmosMonitorSystem : EntitySystem [Dependency] private AtmosphereSystem _atmosphereSystem = default!; [Dependency] private AtmosDeviceSystem _atmosDeviceSystem = default!; [Dependency] private DeviceNetworkSystem _deviceNetSystem = default!; - [Dependency] private IPrototypeManager _prototypeManager = default!; [Dependency] private NodeContainerSystem _nodeContainerSystem = default!; // Commands @@ -84,13 +82,13 @@ public sealed partial class AtmosMonitorSystem : EntitySystem { if (component.TemperatureThresholdId != null) { - var proto = _prototypeManager.Index(component.TemperatureThresholdId); + var proto = ProtoMan.Index(component.TemperatureThresholdId); component.TemperatureThreshold ??= new(proto); } if (component.PressureThresholdId != null) { - var proto = _prototypeManager.Index(component.PressureThresholdId); + var proto = ProtoMan.Index(component.PressureThresholdId); component.PressureThreshold ??= new(proto); } @@ -100,7 +98,7 @@ public sealed partial class AtmosMonitorSystem : EntitySystem component.GasThresholds ??= new(); foreach (var (gas, id) in component.GasThresholdPrototypes) { - var proto = _prototypeManager.Index(id); + var proto = ProtoMan.Index(id); component.GasThresholds.TryAdd(gas, new(proto)); } } diff --git a/Content.Server/Audio/ContentAudioSystem.cs b/Content.Server/Audio/ContentAudioSystem.cs index 8d1eb590b7..90451fde77 100644 --- a/Content.Server/Audio/ContentAudioSystem.cs +++ b/Content.Server/Audio/ContentAudioSystem.cs @@ -18,7 +18,6 @@ public sealed partial class ContentAudioSystem : SharedContentAudioSystem { [Dependency] private AudioSystem _serverAudio = default!; [Dependency] private IRobustRandom _robustRandom = default!; - [Dependency] private IPrototypeManager _prototypeManager = default!; [Dependency] private IConfigurationManager _cfg = default!; private SoundCollectionPrototype? _lobbyMusicCollection = default!; @@ -36,7 +35,7 @@ public sealed partial class ContentAudioSystem : SharedContentAudioSystem { //Checks to see if the sound collection exists. If it does change it if not defaults to null // as the new _lobbyMusicCollection meaning it wont play anything in the lobby. - if(_prototypeManager.TryIndex(x, out var outputSoundCollection)) + if(ProtoMan.TryIndex(x, out var outputSoundCollection)) { _lobbyMusicCollection = outputSoundCollection; } diff --git a/Content.Server/Audio/Jukebox/JukeboxSystem.cs b/Content.Server/Audio/Jukebox/JukeboxSystem.cs index 5fcf35c8d5..af61131892 100644 --- a/Content.Server/Audio/Jukebox/JukeboxSystem.cs +++ b/Content.Server/Audio/Jukebox/JukeboxSystem.cs @@ -12,7 +12,6 @@ namespace Content.Server.Audio.Jukebox; public sealed partial class JukeboxSystem : SharedJukeboxSystem { - [Dependency] private IPrototypeManager _protoManager = default!; [Dependency] private AppearanceSystem _appearanceSystem = default!; public override void Initialize() @@ -156,7 +155,7 @@ public sealed partial class JukeboxSystem : SharedJukeboxSystem else { if (string.IsNullOrEmpty(ent.Comp.SelectedSongId) || - !_protoManager.Resolve(ent.Comp.SelectedSongId, out var jukeboxProto)) + !ProtoMan.Resolve(ent.Comp.SelectedSongId, out var jukeboxProto)) { return false; } diff --git a/Content.Server/Body/Systems/RespiratorSystem.cs b/Content.Server/Body/Systems/RespiratorSystem.cs index 74c2208d59..3cad0bb135 100644 --- a/Content.Server/Body/Systems/RespiratorSystem.cs +++ b/Content.Server/Body/Systems/RespiratorSystem.cs @@ -32,7 +32,6 @@ public sealed partial class RespiratorSystem : EntitySystem { [Dependency] private IAdminLogManager _adminLogger = default!; [Dependency] private IGameTiming _gameTiming = default!; - [Dependency] private IPrototypeManager _protoMan = default!; [Dependency] private AlertsSystem _alertsSystem = default!; [Dependency] private AtmosphereSystem _atmosSys = default!; [Dependency] private BodySystem _body = default!; @@ -283,7 +282,7 @@ public sealed partial class RespiratorSystem : EntitySystem float saturation = 0; foreach (var (id, quantity) in solution.Contents) { - var reagent = _protoMan.Index(id.Prototype); + var reagent = ProtoMan.Index(id.Prototype); if (reagent.Metabolisms == null) continue; diff --git a/Content.Server/Botany/Systems/BotanySystem.Seed.cs b/Content.Server/Botany/Systems/BotanySystem.Seed.cs index 210ad28715..1feae4fd92 100644 --- a/Content.Server/Botany/Systems/BotanySystem.Seed.cs +++ b/Content.Server/Botany/Systems/BotanySystem.Seed.cs @@ -22,7 +22,6 @@ namespace Content.Server.Botany.Systems; public sealed partial class BotanySystem : EntitySystem { - [Dependency] private IPrototypeManager _prototypeManager = default!; [Dependency] private IRobustRandom _robustRandom = default!; [Dependency] private AppearanceSystem _appearance = default!; [Dependency] private PopupSystem _popupSystem = default!; @@ -52,7 +51,7 @@ public sealed partial class BotanySystem : EntitySystem } if (comp.SeedId != null - && _prototypeManager.TryIndex(comp.SeedId, out SeedPrototype? protoSeed)) + && ProtoMan.TryIndex(comp.SeedId, out SeedPrototype? protoSeed)) { seed = protoSeed; return true; @@ -71,7 +70,7 @@ public sealed partial class BotanySystem : EntitySystem } if (comp.SeedId != null - && _prototypeManager.TryIndex(comp.SeedId, out SeedPrototype? protoSeed)) + && ProtoMan.TryIndex(comp.SeedId, out SeedPrototype? protoSeed)) { seed = protoSeed; return true; diff --git a/Content.Server/Botany/Systems/MutationSystem.cs b/Content.Server/Botany/Systems/MutationSystem.cs index 2b14f0c950..f31492565a 100644 --- a/Content.Server/Botany/Systems/MutationSystem.cs +++ b/Content.Server/Botany/Systems/MutationSystem.cs @@ -9,16 +9,15 @@ namespace Content.Server.Botany; public sealed partial class MutationSystem : EntitySystem { - private static ProtoId RandomPlantMutations = "RandomPlantMutations"; + private static ProtoId _randomPlantMutations = "RandomPlantMutations"; [Dependency] private IRobustRandom _robustRandom = default!; - [Dependency] private IPrototypeManager _prototypeManager = default!; [Dependency] private SharedEntityEffectsSystem _entityEffects = default!; private RandomPlantMutationListPrototype _randomMutations = default!; public override void Initialize() { - _randomMutations = _prototypeManager.Index(RandomPlantMutations); + _randomMutations = ProtoMan.Index(_randomPlantMutations); } /// diff --git a/Content.Server/Botany/Systems/PlantHolderSystem.cs b/Content.Server/Botany/Systems/PlantHolderSystem.cs index 3007811b1f..b7b25e5e90 100644 --- a/Content.Server/Botany/Systems/PlantHolderSystem.cs +++ b/Content.Server/Botany/Systems/PlantHolderSystem.cs @@ -34,7 +34,6 @@ public sealed partial class PlantHolderSystem : EntitySystem { [Dependency] private AtmosphereSystem _atmosphere = default!; [Dependency] private BotanySystem _botany = default!; - [Dependency] private IPrototypeManager _prototype = default!; [Dependency] private MutationSystem _mutation = default!; [Dependency] private AppearanceSystem _appearance = default!; [Dependency] private SharedAudioSystem _audio = default!; @@ -895,7 +894,7 @@ public sealed partial class PlantHolderSystem : EntitySystem if (entry.Quantity < PlantMetabolismRate) continue; - var reagentProto = _prototype.Index(entry.Reagent.Prototype); + var reagentProto = ProtoMan.Index(entry.Reagent.Prototype); _entityEffects.ApplyEffects(uid, reagentProto.PlantMetabolisms.ToArray(), entry.Quantity); } diff --git a/Content.Server/Cargo/Systems/CargoSystem.Bounty.cs b/Content.Server/Cargo/Systems/CargoSystem.Bounty.cs index cd5b4f626e..3a5fd34eb3 100644 --- a/Content.Server/Cargo/Systems/CargoSystem.Bounty.cs +++ b/Content.Server/Cargo/Systems/CargoSystem.Bounty.cs @@ -107,7 +107,7 @@ public sealed partial class CargoSystem public void SetupBountyLabel(EntityUid uid, EntityUid stationId, CargoBountyData bounty, PaperComponent? paper = null, CargoBountyLabelComponent? label = null) { - if (!Resolve(uid, ref paper, ref label) || !_protoMan.Resolve(bounty.Bounty, out var prototype)) + if (!Resolve(uid, ref paper, ref label) || !ProtoMan.Resolve(bounty.Bounty, out var prototype)) return; label.Id = bounty.Id; @@ -150,7 +150,7 @@ public sealed partial class CargoSystem if (!TryGetBountyFromId(station, component.Id, out var bounty, database)) return; - if (!_protoMan.Resolve(bounty.Value.Bounty, out var bountyPrototype) || + if (!ProtoMan.Resolve(bounty.Value.Bounty, out var bountyPrototype) || !IsBountyComplete(container.Owner, bountyPrototype)) return; @@ -269,7 +269,7 @@ public sealed partial class CargoSystem public bool IsBountyComplete(EntityUid container, CargoBountyData data, out HashSet bountyEntities) { - if (!_protoMan.Resolve(data.Bounty, out var proto)) + if (!ProtoMan.Resolve(data.Bounty, out var proto)) { bountyEntities = new(); return false; @@ -280,7 +280,7 @@ public sealed partial class CargoSystem public bool IsBountyComplete(EntityUid container, string id) { - if (!_protoMan.TryIndex(id, out var proto)) + if (!ProtoMan.TryIndex(id, out var proto)) return false; return IsBountyComplete(container, proto.Entries); @@ -288,7 +288,7 @@ public sealed partial class CargoSystem public bool IsBountyComplete(EntityUid container, ProtoId prototypeId) { - var prototype = _protoMan.Index(prototypeId); + var prototype = ProtoMan.Index(prototypeId); return IsBountyComplete(container, prototype.Entries); } @@ -393,7 +393,7 @@ public sealed partial class CargoSystem return false; // todo: consider making the cargo bounties weighted. - var allBounties = _protoMan.EnumeratePrototypes() + var allBounties = ProtoMan.EnumeratePrototypes() .Where(p => p.Group == component.Group) .ToList(); var filteredBounties = new List(); @@ -412,7 +412,7 @@ public sealed partial class CargoSystem [PublicAPI] public bool TryAddBounty(EntityUid uid, string bountyId, StationCargoBountyDatabaseComponent? component = null) { - if (!_protoMan.TryIndex(bountyId, out var bounty)) + if (!ProtoMan.TryIndex(bountyId, out var bounty)) { return false; } diff --git a/Content.Server/Cargo/Systems/CargoSystem.Funds.cs b/Content.Server/Cargo/Systems/CargoSystem.Funds.cs index 10ddcdb54f..2e98e636e0 100644 --- a/Content.Server/Cargo/Systems/CargoSystem.Funds.cs +++ b/Content.Server/Cargo/Systems/CargoSystem.Funds.cs @@ -48,12 +48,12 @@ public sealed partial class CargoSystem UpdateBankAccount((station, bank), -args.Amount, ent.Comp.Account, dirty: false); _audio.PlayPvs(ApproveSound, ent); - var ourAccount = _protoMan.Index(ent.Comp.Account); + var ourAccount = ProtoMan.Index(ent.Comp.Account); var name = _identity.GetIdentityShortInfo(args.Actor, ent) ?? Loc.GetString("cargo-console-fund-transfer-user-unknown"); if (args.Account == null) { - var stackPrototype = _protoMan.Index(ent.Comp.CashType); + var stackPrototype = ProtoMan.Index(ent.Comp.CashType); _stack.SpawnAtPosition(args.Amount, stackPrototype, Transform(ent).Coordinates); if (!_emag.CheckFlag(ent, EmagType.Interaction)) @@ -68,7 +68,7 @@ public sealed partial class CargoSystem } else { - var otherAccount = _protoMan.Index(args.Account.Value); + var otherAccount = ProtoMan.Index(args.Account.Value); UpdateBankAccount((station, bank), args.Amount, args.Account.Value); if (!_emag.CheckFlag(ent, EmagType.Interaction)) diff --git a/Content.Server/Cargo/Systems/CargoSystem.Orders.cs b/Content.Server/Cargo/Systems/CargoSystem.Orders.cs index da3b9377e8..60de957307 100644 --- a/Content.Server/Cargo/Systems/CargoSystem.Orders.cs +++ b/Content.Server/Cargo/Systems/CargoSystem.Orders.cs @@ -65,7 +65,7 @@ namespace Content.Server.Cargo.Systems if (!TryGetOrderDatabase(stationUid, out var orderDatabase)) return; - if (!_protoMan.TryIndex(slip.Product, out var product)) + if (!ProtoMan.TryIndex(slip.Product, out var product)) { Log.Error($"Tried to add invalid cargo product {slip.Product} as order!"); return; @@ -166,13 +166,13 @@ namespace Content.Server.Cargo.Systems // Find our order again. It might have been dispatched or approved already var order = orderDatabase.Orders[component.Account].Find(order => args.OrderId == order.OrderId && !order.Approved); - if (order == null || !_protoMan.Resolve(order.Account, out var account)) + if (order == null || !ProtoMan.Resolve(order.Account, out var account)) { return; } // Invalid order - if (!_protoMan.Resolve(order.Product, out var product)) + if (!ProtoMan.Resolve(order.Product, out var product)) { ConsolePopup(args.Actor, Loc.GetString("cargo-console-invalid-product")); PlayDenySound(uid, component); @@ -330,7 +330,7 @@ namespace Content.Server.Cargo.Systems private void OnAddOrderMessageSlipPrinter(EntityUid uid, CargoOrderConsoleComponent component, CargoConsoleAddOrderMessage args, CargoProductPrototype product) { - if (!_protoMan.Resolve(component.Account, out var account)) + if (!ProtoMan.Resolve(component.Account, out var account)) return; if (Timing.CurTime < component.NextPrintTime) @@ -377,7 +377,7 @@ namespace Content.Server.Cargo.Systems if (!TryComp(stationUid, out var bank)) return; - if (!_protoMan.TryIndex(args.CargoProductId, out var product)) + if (!ProtoMan.TryIndex(args.CargoProductId, out var product)) { Log.Error($"Tried to add invalid cargo product {args.CargoProductId} as order!"); return; @@ -623,7 +623,7 @@ namespace Content.Server.Cargo.Systems /// private bool FulfillOrder(CargoOrderData order, ProtoId account, EntityCoordinates spawn, string? paperProto) { - if (!_protoMan.Resolve(order.Product, out var product)) + if (!ProtoMan.Resolve(order.Product, out var product)) return false; // Create the item itself @@ -660,7 +660,7 @@ namespace Content.Server.Cargo.Systems var val = Loc.GetString("cargo-console-paper-print-name", ("orderNumber", order.OrderId)); _metaSystem.SetEntityName(printed, val); - var accountProto = _protoMan.Index(account); + var accountProto = ProtoMan.Index(account); _paperSystem.SetContent((printed, paper), Loc.GetString( "cargo-console-paper-print-text", @@ -696,7 +696,7 @@ namespace Content.Server.Cargo.Systems // Note that a market must be both on the station and on the console to be available. var markets = ent.Comp.AllowedGroups.Intersect(db.Markets).ToList(); - foreach (var product in _protoMan.EnumeratePrototypes()) + foreach (var product in ProtoMan.EnumeratePrototypes()) { if (!markets.Contains(product.Group)) continue; diff --git a/Content.Server/Cargo/Systems/CargoSystem.cs b/Content.Server/Cargo/Systems/CargoSystem.cs index a573eda6f0..a753f785cf 100644 --- a/Content.Server/Cargo/Systems/CargoSystem.cs +++ b/Content.Server/Cargo/Systems/CargoSystem.cs @@ -15,7 +15,6 @@ using Content.Shared.Paper; using Robust.Server.GameObjects; using Robust.Shared.Audio.Systems; using Robust.Shared.Configuration; -using Robust.Shared.Prototypes; using Robust.Shared.Random; namespace Content.Server.Cargo.Systems; @@ -23,7 +22,6 @@ namespace Content.Server.Cargo.Systems; public sealed partial class CargoSystem : SharedCargoSystem { [Dependency] private IConfigurationManager _cfg = default!; - [Dependency] private IPrototypeManager _protoMan = default!; [Dependency] private IRobustRandom _random = default!; [Dependency] private ISharedAdminLogManager _adminLogger = default!; [Dependency] private AccessReaderSystem _accessReaderSystem = default!; diff --git a/Content.Server/Cargo/Systems/PricingSystem.cs b/Content.Server/Cargo/Systems/PricingSystem.cs index 2c5278e42c..4ee27bb546 100644 --- a/Content.Server/Cargo/Systems/PricingSystem.cs +++ b/Content.Server/Cargo/Systems/PricingSystem.cs @@ -25,7 +25,6 @@ public sealed partial class PricingSystem : EntitySystem { [Dependency] private IConsoleHost _consoleHost = default!; [Dependency] private IRobustRandom _random = default!; - [Dependency] private IPrototypeManager _prototypeManager = default!; [Dependency] private MobStateSystem _mobStateSystem = default!; [Dependency] private SharedSolutionContainerSystem _solutionContainerSystem = default!; @@ -134,7 +133,7 @@ public sealed partial class PricingSystem : EntitySystem double price = 0; foreach (var (id, quantity) in component.MaterialComposition) { - price += _prototypeManager.Index(id).Price * quantity; + price += ProtoMan.Index(id).Price * quantity; } return price; } @@ -145,14 +144,14 @@ public sealed partial class PricingSystem : EntitySystem if (recipe.Result is { } result) { - price += GetEstimatedPrice(_prototypeManager.Index(result)); + price += GetEstimatedPrice(ProtoMan.Index(result)); } if (recipe.ResultReagents is { } resultReagents) { foreach (var (reagent, amount) in resultReagents) { - price += (_prototypeManager.Index(reagent).PricePerUnit * amount).Double(); + price += (ProtoMan.Index(reagent).PricePerUnit * amount).Double(); } } @@ -285,7 +284,7 @@ public sealed partial class PricingSystem : EntitySystem var solution = soln.Comp.Solution; foreach (var (reagent, quantity) in solution.Contents) { - if (!_prototypeManager.TryIndex(reagent.Prototype, out var reagentProto)) + if (!ProtoMan.TryIndex(reagent.Prototype, out var reagentProto)) continue; // TODO check ReagentData for price information? @@ -307,7 +306,7 @@ public sealed partial class PricingSystem : EntitySystem { foreach (var (reagent, quantity) in solution.Contents) { - if (!_prototypeManager.TryIndex(reagent.Prototype, out var reagentProto)) + if (!ProtoMan.TryIndex(reagent.Prototype, out var reagentProto)) continue; // TODO check ReagentData for price information? diff --git a/Content.Server/CharacterInfo/CharacterInfoSystem.cs b/Content.Server/CharacterInfo/CharacterInfoSystem.cs index 9cc1488265..0e3b0ce4fa 100644 --- a/Content.Server/CharacterInfo/CharacterInfoSystem.cs +++ b/Content.Server/CharacterInfo/CharacterInfoSystem.cs @@ -5,7 +5,6 @@ using Content.Shared.CharacterInfo; using Content.Shared.Objectives; using Content.Shared.Objectives.Components; using Content.Shared.Objectives.Systems; -using Robust.Shared.Prototypes; namespace Content.Server.CharacterInfo; @@ -15,7 +14,6 @@ public sealed partial class CharacterInfoSystem : EntitySystem [Dependency] private MindSystem _minds = default!; [Dependency] private RoleSystem _roles = default!; [Dependency] private SharedObjectivesSystem _objectives = default!; - [Dependency] private IPrototypeManager _protoMan = default!; public override void Initialize() { @@ -44,7 +42,7 @@ public sealed partial class CharacterInfoSystem : EntitySystem if (info == null) continue; - if (!_protoMan.TryIndex(Comp(objective).Issuer, out var issuerProto)) + if (!ProtoMan.TryIndex(Comp(objective).Issuer, out var issuerProto)) { Log.Error($"Found incorrect objective issuer {issuerProto} when generating character info for objective {MetaData(objective).EntityPrototype}."); continue; diff --git a/Content.Server/Chat/Systems/AutoEmoteSystem.cs b/Content.Server/Chat/Systems/AutoEmoteSystem.cs index a72c321476..0bd0a65796 100644 --- a/Content.Server/Chat/Systems/AutoEmoteSystem.cs +++ b/Content.Server/Chat/Systems/AutoEmoteSystem.cs @@ -1,7 +1,6 @@ using System.Linq; using Content.Shared.Chat; using Content.Shared.Chat.Prototypes; -using Robust.Shared.Prototypes; using Robust.Shared.Random; using Robust.Shared.Timing; using Robust.Shared.Utility; @@ -11,7 +10,6 @@ namespace Content.Server.Chat.Systems; public sealed partial class AutoEmoteSystem : EntitySystem { [Dependency] private IGameTiming _gameTiming = default!; - [Dependency] private IPrototypeManager _prototypeManager = default!; [Dependency] private IRobustRandom _random = default!; [Dependency] private ChatSystem _chatSystem = default!; @@ -39,7 +37,7 @@ public sealed partial class AutoEmoteSystem : EntitySystem if (time > curTime) continue; - var autoEmotePrototype = _prototypeManager.Index(key); + var autoEmotePrototype = ProtoMan.Index(key); ResetTimer(uid, key, autoEmote, autoEmotePrototype); if (!_random.Prob(autoEmotePrototype.Chance)) @@ -106,7 +104,7 @@ public sealed partial class AutoEmoteSystem : EntitySystem if (!Resolve(uid, ref autoEmote, logMissing: false)) return false; - DebugTools.Assert(_prototypeManager.HasIndex(autoEmotePrototypeId), "Prototype not found. Did you make a typo?"); + DebugTools.Assert(ProtoMan.HasIndex(autoEmotePrototypeId), "Prototype not found. Did you make a typo?"); if (!autoEmote.EmoteTimers.Remove(autoEmotePrototypeId)) return false; @@ -132,7 +130,7 @@ public sealed partial class AutoEmoteSystem : EntitySystem if (!autoEmote.Emotes.Contains(autoEmotePrototypeId)) return false; - autoEmotePrototype ??= _prototypeManager.Index(autoEmotePrototypeId); + autoEmotePrototype ??= ProtoMan.Index(autoEmotePrototypeId); var curTime = _gameTiming.CurTime; var time = curTime + autoEmotePrototype.Interval; diff --git a/Content.Server/Chat/Systems/ChatNotificationSystem.cs b/Content.Server/Chat/Systems/ChatNotificationSystem.cs index 6726363640..53f523abcc 100644 --- a/Content.Server/Chat/Systems/ChatNotificationSystem.cs +++ b/Content.Server/Chat/Systems/ChatNotificationSystem.cs @@ -14,7 +14,6 @@ namespace Content.Server.Chat.Systems; /// public sealed partial class ChatNotificationSystem : EntitySystem { - [Dependency] private IPrototypeManager _proto = default!; [Dependency] private IChatManager _chats = default!; [Dependency] private SharedMindSystem _mind = default!; [Dependency] private SharedRoleSystem _roles = default!; @@ -49,7 +48,7 @@ public sealed partial class ChatNotificationSystem : EntitySystem /// The chat notification event public void OnChatNotification(Entity ent, ref ChatNotificationEvent args) { - if (!_proto.TryIndex(args.ChatNotification, out var chatNotification)) + if (!ProtoMan.TryIndex(args.ChatNotification, out var chatNotification)) { _sawmill.Warning("Attempted to index ChatNotificationPrototype " + args.ChatNotification + " but the prototype does not exist."); return; diff --git a/Content.Server/Chat/Systems/ChatSystem.PrivateAPI.cs b/Content.Server/Chat/Systems/ChatSystem.PrivateAPI.cs index 7dec4b0cac..50d7fd1b14 100644 --- a/Content.Server/Chat/Systems/ChatSystem.PrivateAPI.cs +++ b/Content.Server/Chat/Systems/ChatSystem.PrivateAPI.cs @@ -43,7 +43,7 @@ public sealed partial class ChatSystem RaiseLocalEvent(source, nameEv); name = nameEv.VoiceName; // Check for a speech verb override - if (nameEv.SpeechVerb != null && _prototypeManager.Resolve(nameEv.SpeechVerb, out var proto)) + if (nameEv.SpeechVerb != null && ProtoMan.Resolve(nameEv.SpeechVerb, out var proto)) speech = proto; } diff --git a/Content.Server/Chat/Systems/ChatSystem.cs b/Content.Server/Chat/Systems/ChatSystem.cs index 547378ee2a..5432b552e5 100644 --- a/Content.Server/Chat/Systems/ChatSystem.cs +++ b/Content.Server/Chat/Systems/ChatSystem.cs @@ -18,7 +18,6 @@ using Robust.Shared.Audio.Systems; using Robust.Shared.Configuration; using Robust.Shared.Console; using Robust.Shared.Player; -using Robust.Shared.Prototypes; using Robust.Shared.Random; using Robust.Shared.Replays; @@ -37,7 +36,6 @@ public sealed partial class ChatSystem : SharedChatSystem [Dependency] private IChatSanitizationManager _sanitizer = default!; [Dependency] private IAdminManager _adminManager = default!; [Dependency] private IPlayerManager _playerManager = default!; - [Dependency] private IPrototypeManager _prototypeManager = default!; [Dependency] private IRobustRandom _random = default!; [Dependency] private IAdminLogManager _adminLogger = default!; [Dependency] private ActionBlockerSystem _actionBlocker = default!; diff --git a/Content.Server/Chat/Systems/EmoteOnDamageSystem.cs b/Content.Server/Chat/Systems/EmoteOnDamageSystem.cs index 20183c485b..f7279ec0fb 100644 --- a/Content.Server/Chat/Systems/EmoteOnDamageSystem.cs +++ b/Content.Server/Chat/Systems/EmoteOnDamageSystem.cs @@ -1,19 +1,15 @@ using Content.Shared.Damage.Systems; - -namespace Content.Server.Chat.Systems; - using Content.Shared.Chat; using Content.Shared.Chat.Prototypes; -using Content.Shared.Damage; -using Robust.Shared.Prototypes; using Robust.Shared.Random; using Robust.Shared.Timing; using Robust.Shared.Utility; +namespace Content.Server.Chat.Systems; + public sealed partial class EmoteOnDamageSystem : EntitySystem { [Dependency] private IGameTiming _gameTiming = default!; - [Dependency] private IPrototypeManager _prototypeManager = default!; [Dependency] private IRobustRandom _random = default!; [Dependency] private ChatSystem _chatSystem = default!; @@ -60,7 +56,7 @@ public sealed partial class EmoteOnDamageSystem : EntitySystem return false; DebugTools.Assert(emoteOnDamage.LifeStage <= ComponentLifeStage.Running); - DebugTools.Assert(_prototypeManager.HasIndex(emotePrototypeId), "Prototype not found. Did you make a typo?"); + DebugTools.Assert(ProtoMan.HasIndex(emotePrototypeId), "Prototype not found. Did you make a typo?"); return emoteOnDamage.Emotes.Add(emotePrototypeId); } @@ -73,7 +69,7 @@ public sealed partial class EmoteOnDamageSystem : EntitySystem if (!Resolve(uid, ref emoteOnDamage, logMissing: false)) return false; - DebugTools.Assert(_prototypeManager.HasIndex(emotePrototypeId), "Prototype not found. Did you make a typo?"); + DebugTools.Assert(ProtoMan.HasIndex(emotePrototypeId), "Prototype not found. Did you make a typo?"); if (!emoteOnDamage.Emotes.Remove(emotePrototypeId)) return false; diff --git a/Content.Server/Chemistry/EntitySystems/ReagentDispenserSystem.cs b/Content.Server/Chemistry/EntitySystems/ReagentDispenserSystem.cs index e24d1bc052..0b9ba4c45f 100644 --- a/Content.Server/Chemistry/EntitySystems/ReagentDispenserSystem.cs +++ b/Content.Server/Chemistry/EntitySystems/ReagentDispenserSystem.cs @@ -11,7 +11,6 @@ using Robust.Server.Audio; using Robust.Server.GameObjects; using Robust.Shared.Audio; using Robust.Shared.Containers; -using Robust.Shared.Prototypes; using Content.Shared.Labels.Components; using Content.Shared.Storage; using Content.Server.Hands.Systems; @@ -30,7 +29,6 @@ namespace Content.Server.Chemistry.EntitySystems [Dependency] private SolutionTransferSystem _solutionTransferSystem = default!; [Dependency] private ItemSlotsSystem _itemSlotsSystem = default!; [Dependency] private UserInterfaceSystem _userInterfaceSystem = default!; - [Dependency] private IPrototypeManager _prototypeManager = default!; [Dependency] private OpenableSystem _openable = default!; [Dependency] private HandsSystem _handsSystem = default!; @@ -107,7 +105,7 @@ namespace Content.Server.Chemistry.EntitySystems if (_solutionContainerSystem.TryGetDrainableSolution(storedContainer, out _, out var sol)) { quantity = sol.Volume; - reagentColor = sol.GetColor(_prototypeManager); + reagentColor = sol.GetColor(ProtoMan); } inventory.Add(new ReagentInventoryItem(storageLocation, reagentLabel, quantity, reagentColor)); diff --git a/Content.Server/Chemistry/EntitySystems/SolutionRandomFillSystem.cs b/Content.Server/Chemistry/EntitySystems/SolutionRandomFillSystem.cs index d428007d6f..109f1c4933 100644 --- a/Content.Server/Chemistry/EntitySystems/SolutionRandomFillSystem.cs +++ b/Content.Server/Chemistry/EntitySystems/SolutionRandomFillSystem.cs @@ -3,8 +3,6 @@ using Content.Shared.Chemistry.EntitySystems; using Content.Shared.Chemistry.Reagent; using Content.Shared.Random; using Content.Shared.Random.Helpers; -using Content.Shared.Storage.Components; -using Robust.Shared.Prototypes; using Robust.Shared.Random; namespace Content.Server.Chemistry.EntitySystems; @@ -12,7 +10,6 @@ namespace Content.Server.Chemistry.EntitySystems; public sealed partial class SolutionRandomFillSystem : EntitySystem { [Dependency] private SharedSolutionContainerSystem _solutionsSystem = default!; - [Dependency] private IPrototypeManager _proto = default!; [Dependency] private IRobustRandom _random = default!; public override void Initialize() @@ -27,12 +24,12 @@ public sealed partial class SolutionRandomFillSystem : EntitySystem if (entity.Comp.WeightedRandomId == null) return; - var pick = _proto.Index(entity.Comp.WeightedRandomId).Pick(_random); + var pick = ProtoMan.Index(entity.Comp.WeightedRandomId).Pick(_random); var reagent = pick.reagent; var quantity = pick.quantity; - if (!_proto.HasIndex(reagent)) + if (!ProtoMan.HasIndex(reagent)) { Log.Error($"Tried to add invalid reagent Id {reagent} using SolutionRandomFill."); return; diff --git a/Content.Server/Chemistry/EntitySystems/TransformableContainerSystem.cs b/Content.Server/Chemistry/EntitySystems/TransformableContainerSystem.cs index adf7c851c0..64aa621181 100644 --- a/Content.Server/Chemistry/EntitySystems/TransformableContainerSystem.cs +++ b/Content.Server/Chemistry/EntitySystems/TransformableContainerSystem.cs @@ -2,13 +2,11 @@ using Content.Server.Chemistry.Components; using Content.Shared.Chemistry.EntitySystems; using Content.Shared.Chemistry.Reagent; using Content.Shared.NameModifier.EntitySystems; -using Robust.Shared.Prototypes; namespace Content.Server.Chemistry.EntitySystems; public sealed partial class TransformableContainerSystem : EntitySystem { - [Dependency] private IPrototypeManager _prototypeManager = default!; [Dependency] private SharedSolutionContainerSystem _solutionsSystem = default!; [Dependency] private MetaDataSystem _metadataSystem = default!; [Dependency] private NameModifierSystem _nameMod = default!; @@ -53,7 +51,7 @@ public sealed partial class TransformableContainerSystem : EntitySystem //Only reagents with spritePath property can change appearance of transformable containers! if (!string.IsNullOrWhiteSpace(reagentId?.Prototype) - && _prototypeManager.TryIndex(reagentId.Value.Prototype, out ReagentPrototype? proto)) + && ProtoMan.TryIndex(reagentId.Value.Prototype, out ReagentPrototype? proto)) { var metadata = MetaData(entity.Owner); _metadataSystem.SetEntityDescription(entity.Owner, proto.LocalizedDescription, metadata); @@ -66,7 +64,7 @@ public sealed partial class TransformableContainerSystem : EntitySystem private void OnRefreshNameModifiers(Entity entity, ref RefreshNameModifiersEvent args) { - if (_prototypeManager.Resolve(entity.Comp.CurrentReagent, out var currentReagent)) + if (ProtoMan.Resolve(entity.Comp.CurrentReagent, out var currentReagent)) { args.AddModifier("transformable-container-component-glass", priority: -1, ("reagent", currentReagent.LocalizedName)); } diff --git a/Content.Server/Chemistry/EntitySystems/VaporSystem.cs b/Content.Server/Chemistry/EntitySystems/VaporSystem.cs index fbcb14e4e6..5defaecb19 100644 --- a/Content.Server/Chemistry/EntitySystems/VaporSystem.cs +++ b/Content.Server/Chemistry/EntitySystems/VaporSystem.cs @@ -11,8 +11,6 @@ using Robust.Shared.Map; using Robust.Shared.Map.Components; using Robust.Shared.Physics.Components; using Robust.Shared.Physics.Events; -using Robust.Shared.Physics.Systems; -using Robust.Shared.Prototypes; using Robust.Shared.Spawners; using System.Numerics; using Content.Shared.Vapor; @@ -22,12 +20,10 @@ namespace Content.Server.Chemistry.EntitySystems [UsedImplicitly] internal sealed partial class VaporSystem : EntitySystem { - [Dependency] private IPrototypeManager _protoManager = default!; [Dependency] private ReactiveSystem _reactive = default!; [Dependency] private ThrowingSystem _throwing = default!; [Dependency] private SharedAppearanceSystem _appearance = default!; [Dependency] private SharedMapSystem _map = default!; - [Dependency] private SharedPhysicsSystem _physics = default!; [Dependency] private SharedSolutionContainerSystem _solutionContainer = default!; [Dependency] private SharedTransformSystem _transformSystem = default!; @@ -85,7 +81,7 @@ namespace Content.Server.Chemistry.EntitySystems if (TryComp(vapor, out var appearance)) { - _appearance.SetData(vapor, VaporVisuals.Color, newSolution.GetColor(_protoManager).WithAlpha(1f), appearance); + _appearance.SetData(vapor, VaporVisuals.Color, newSolution.GetColor(ProtoMan).WithAlpha(1f), appearance); _appearance.SetData(vapor, VaporVisuals.State, true, appearance); } @@ -126,7 +122,7 @@ namespace Content.Server.Chemistry.EntitySystems if (reagentQuantity.Quantity == FixedPoint2.Zero) continue; - var reagent = _protoManager.Index(reagentQuantity.Reagent.Prototype); + var reagent = ProtoMan.Index(reagentQuantity.Reagent.Prototype); // Limit the reaction amount to a minimum value to ensure no floating point funnies. // Ex: A solution with a low percentage transfer amount will slowly approach 0.01... and never get deleted diff --git a/Content.Server/Cloning/CloningSystem.cs b/Content.Server/Cloning/CloningSystem.cs index 6e4738fc51..758f5577a4 100644 --- a/Content.Server/Cloning/CloningSystem.cs +++ b/Content.Server/Cloning/CloningSystem.cs @@ -29,7 +29,6 @@ public sealed partial class CloningSystem : SharedCloningSystem { [Dependency] private InventorySystem _inventory = default!; [Dependency] private MetaDataSystem _metaData = default!; - [Dependency] private IPrototypeManager _prototype = default!; [Dependency] private EntityWhitelistSystem _whitelist = default!; [Dependency] private ISharedAdminLogManager _adminLogger = default!; [Dependency] private SharedContainerSystem _container = default!; @@ -46,13 +45,13 @@ public sealed partial class CloningSystem : SharedCloningSystem [NotNullWhen(true)] out EntityUid? clone) { clone = null; - if (!_prototype.Resolve(settingsId, out var settings)) + if (!ProtoMan.Resolve(settingsId, out var settings)) return false; // invalid settings if (!TryComp(original, out var humanoid)) return false; // whatever body was to be cloned, was not a humanoid - if (!_prototype.Resolve(humanoid.Species, out var speciesPrototype)) + if (!ProtoMan.Resolve(humanoid.Species, out var speciesPrototype)) return false; // invalid species if (!settings.ForceCloning) @@ -100,7 +99,7 @@ public sealed partial class CloningSystem : SharedCloningSystem EntityUid clone, ProtoId settings) { - if (!_prototype.Resolve(settings, out var proto)) + if (!ProtoMan.Resolve(settings, out var proto)) return; CloneComponents(original, clone, proto); diff --git a/Content.Server/Cloning/RandomCloneSpawnerSystem.cs b/Content.Server/Cloning/RandomCloneSpawnerSystem.cs index a5f9c2fb0b..eb6c9e91d4 100644 --- a/Content.Server/Cloning/RandomCloneSpawnerSystem.cs +++ b/Content.Server/Cloning/RandomCloneSpawnerSystem.cs @@ -1,8 +1,5 @@ using Content.Server.Cloning.Components; -using Content.Shared.Mind; -using Content.Shared.Mobs.Systems; using Content.Shared.Objectives.Systems; -using Robust.Shared.Prototypes; using Robust.Shared.Random; namespace Content.Server.Cloning; @@ -13,7 +10,6 @@ namespace Content.Server.Cloning; public sealed partial class RandomCloneSpawnerSystem : EntitySystem { [Dependency] private CloningSystem _cloning = default!; - [Dependency] private IPrototypeManager _prototypeManager = default!; [Dependency] private IRobustRandom _random = default!; [Dependency] private SharedTransformSystem _transformSystem = default!; [Dependency] private TargetSystem _target = default!; @@ -29,7 +25,7 @@ public sealed partial class RandomCloneSpawnerSystem : EntitySystem { QueueDel(ent.Owner); - if (!_prototypeManager.TryIndex(ent.Comp.Settings, out var settings)) + if (!ProtoMan.TryIndex(ent.Comp.Settings, out var settings)) { Log.Error($"Used invalid cloning settings {ent.Comp.Settings} for RandomCloneSpawner"); return; diff --git a/Content.Server/Clothing/Systems/ChameleonClothingSystem.cs b/Content.Server/Clothing/Systems/ChameleonClothingSystem.cs index 8e92f24ac2..19792af166 100644 --- a/Content.Server/Clothing/Systems/ChameleonClothingSystem.cs +++ b/Content.Server/Clothing/Systems/ChameleonClothingSystem.cs @@ -3,14 +3,12 @@ using Content.Shared.Clothing.EntitySystems; using Content.Shared.Emp; using Content.Shared.IdentityManagement; using Content.Shared.IdentityManagement.Components; -using Content.Shared.Prototypes; using Robust.Shared.Prototypes; namespace Content.Server.Clothing.Systems; public sealed partial class ChameleonClothingSystem : SharedChameleonClothingSystem { - [Dependency] private IPrototypeManager _proto = default!; [Dependency] private IdentitySystem _identity = default!; public override void Initialize() @@ -51,7 +49,7 @@ public sealed partial class ChameleonClothingSystem : SharedChameleonClothingSys return; // make sure that it is valid change - if (string.IsNullOrEmpty(protoId) || !_proto.TryIndex(protoId, out EntityPrototype? proto)) + if (string.IsNullOrEmpty(protoId) || !ProtoMan.TryIndex(protoId, out EntityPrototype? proto)) return; if (validate && !IsValidTarget(proto, component.Slot, component.RequireTag)) @@ -88,7 +86,7 @@ public sealed partial class ChameleonClothingSystem : SharedChameleonClothingSys private void UpdateIdentityBlocker(EntityUid uid, ChameleonClothingComponent component, EntityPrototype proto) { - if (proto.HasComponent(Factory)) + if (proto.HasComp(Factory)) EnsureComp(uid); else RemComp(uid); diff --git a/Content.Server/Clothing/Systems/OutfitSystem.cs b/Content.Server/Clothing/Systems/OutfitSystem.cs index a973590d92..ff2b19f7b9 100644 --- a/Content.Server/Clothing/Systems/OutfitSystem.cs +++ b/Content.Server/Clothing/Systems/OutfitSystem.cs @@ -15,14 +15,12 @@ using Content.Shared.Station; using Content.Shared.Containers.ItemSlots; using Content.Shared.Storage; using Robust.Shared.Player; -using Robust.Shared.Prototypes; namespace Content.Server.Clothing.Systems; public sealed partial class OutfitSystem : EntitySystem { [Dependency] private IServerPreferencesManager _preferenceManager = default!; - [Dependency] private IPrototypeManager _prototypeManager = default!; [Dependency] private HandsSystem _handSystem = default!; [Dependency] private InventorySystem _invSystem = default!; [Dependency] private SharedStationSpawningSystem _spawningSystem = default!; @@ -34,7 +32,7 @@ public sealed partial class OutfitSystem : EntitySystem if (!TryComp(target, out InventoryComponent? inventoryComponent)) return false; - if (!_prototypeManager.TryIndex(gear, out var startingGear)) + if (!ProtoMan.TryIndex(gear, out var startingGear)) return false; HumanoidCharacterProfile? profile = null; @@ -110,14 +108,14 @@ public sealed partial class OutfitSystem : EntitySystem } // See if this starting gear is associated with a job - var jobs = _prototypeManager.EnumeratePrototypes(); + var jobs = ProtoMan.EnumeratePrototypes(); foreach (var job in jobs) { if (job.StartingGear != gear) continue; var jobProtoId = LoadoutSystem.GetJobPrototype(job.ID); - if (!_prototypeManager.TryIndex(jobProtoId, out var jobProto)) + if (!ProtoMan.TryIndex(jobProtoId, out var jobProto)) break; // Don't require a player, so this works on Urists @@ -131,7 +129,7 @@ public sealed partial class OutfitSystem : EntitySystem { // If they don't have a loadout for the role, make a default one roleLoadout = new RoleLoadout(jobProtoId); - roleLoadout.SetDefault(profile, session, _prototypeManager); + roleLoadout.SetDefault(profile, session, ProtoMan); } // Equip the target with the job loadout diff --git a/Content.Server/Cluwne/CluwneSystem.cs b/Content.Server/Cluwne/CluwneSystem.cs index 9c5e45474d..3e38f382dd 100644 --- a/Content.Server/Cluwne/CluwneSystem.cs +++ b/Content.Server/Cluwne/CluwneSystem.cs @@ -15,7 +15,6 @@ using Content.Shared.Popups; using Content.Shared.Stunnable; using Robust.Shared.Audio.Systems; using Robust.Shared.Random; -using Robust.Shared.Prototypes; namespace Content.Server.Cluwne; @@ -27,7 +26,6 @@ public sealed partial class CluwneSystem : EntitySystem [Dependency] private IRobustRandom _robustRandom = default!; [Dependency] private SharedStunSystem _stunSystem = default!; [Dependency] private DamageableSystem _damageableSystem = default!; - [Dependency] private IPrototypeManager _prototypeManager = default!; [Dependency] private ChatSystem _chat = default!; [Dependency] private AutoEmoteSystem _autoEmote = default!; [Dependency] private NameModifierSystem _nameMod = default!; @@ -68,7 +66,7 @@ public sealed partial class CluwneSystem : EntitySystem if (ent.Comp.EmoteSoundsId == null) return; - _prototypeManager.TryIndex(ent.Comp.EmoteSoundsId, out EmoteSounds); + ProtoMan.TryIndex(ent.Comp.EmoteSoundsId, out EmoteSounds); if (ent.Comp.RandomEmote && ent.Comp.AutoEmoteId != null) diff --git a/Content.Server/Codewords/CodewordSystem.cs b/Content.Server/Codewords/CodewordSystem.cs index 43ca738e82..2b8251bd99 100644 --- a/Content.Server/Codewords/CodewordSystem.cs +++ b/Content.Server/Codewords/CodewordSystem.cs @@ -13,7 +13,6 @@ namespace Content.Server.Codewords; /// public sealed partial class CodewordSystem : EntitySystem { - [Dependency] private IPrototypeManager _prototypeManager = default!; [Dependency] private IAdminLogManager _adminLogger = default!; [Dependency] private IRobustRandom _random = default!; @@ -53,7 +52,7 @@ public sealed partial class CodewordSystem : EntitySystem private string[] GenerateForFaction(ProtoId faction, ref CodewordManagerComponent manager) { - var factionProto = _prototypeManager.Index(faction.Id); + var factionProto = ProtoMan.Index(faction.Id); var codewords = GenerateCodewords(factionProto.Generator); var codewordsContainer = Spawn(prototype: null, MapCoordinates.Nullspace); @@ -70,11 +69,11 @@ public sealed partial class CodewordSystem : EntitySystem /// public string[] GenerateCodewords(ProtoId generatorId) { - var generator = _prototypeManager.Index(generatorId); + var generator = ProtoMan.Index(generatorId); var codewordPool = new List(); foreach (var dataset in generator.Words - .Select(datasetPrototype => _prototypeManager.Index(datasetPrototype))) + .Select(datasetPrototype => ProtoMan.Index(datasetPrototype))) { codewordPool.AddRange(dataset.Values); } diff --git a/Content.Server/Communications/CommsHackerSystem.cs b/Content.Server/Communications/CommsHackerSystem.cs index e639b1460c..19613078ce 100644 --- a/Content.Server/Communications/CommsHackerSystem.cs +++ b/Content.Server/Communications/CommsHackerSystem.cs @@ -6,9 +6,7 @@ using Content.Shared.DoAfter; using Content.Shared.Interaction; using Content.Shared.Random; using Content.Shared.Random.Helpers; -using Robust.Shared.Prototypes; using Robust.Shared.Random; -using Robust.Shared.Serialization; namespace Content.Server.Communications; @@ -16,7 +14,6 @@ public sealed partial class CommsHackerSystem : SharedCommsHackerSystem { [Dependency] private ChatSystem _chat = default!; [Dependency] private GameTicker _gameTicker = default!; - [Dependency] private IPrototypeManager _proto = default!; [Dependency] private IRobustRandom _random = default!; // TODO: remove when generic check event is used [Dependency] private NinjaGlovesSystem _gloves = default!; @@ -62,9 +59,9 @@ public sealed partial class CommsHackerSystem : SharedCommsHackerSystem if (args.Cancelled || args.Handled || args.Target == null) return; - var threats = _proto.Index(comp.Threats); + var threats = ProtoMan.Index(comp.Threats); var threat = threats.Pick(_random); - CallInThreat(_proto.Index(threat)); + CallInThreat(ProtoMan.Index(threat)); // prevent calling in multiple threats RemComp(uid); diff --git a/Content.Server/Crayon/CrayonSystem.cs b/Content.Server/Crayon/CrayonSystem.cs index 5af04d56e1..8d3ca130f2 100644 --- a/Content.Server/Crayon/CrayonSystem.cs +++ b/Content.Server/Crayon/CrayonSystem.cs @@ -13,14 +13,12 @@ using Content.Shared.Nutrition.EntitySystems; using Robust.Server.GameObjects; using Robust.Shared.Audio; using Robust.Shared.Audio.Systems; -using Robust.Shared.Prototypes; namespace Content.Server.Crayon; public sealed partial class CrayonSystem : SharedCrayonSystem { [Dependency] private IAdminLogManager _adminLogger = default!; - [Dependency] private IPrototypeManager _prototypeManager = default!; [Dependency] private DecalSystem _decals = default!; [Dependency] private PopupSystem _popup = default!; [Dependency] private SharedAudioSystem _audio = default!; @@ -42,7 +40,7 @@ public sealed partial class CrayonSystem : SharedCrayonSystem private void OnMapInit(Entity ent, ref MapInitEvent args) { // Get the first one from the catalog and set it as default - var decal = _prototypeManager.EnumeratePrototypes().FirstOrDefault(x => x.Tags.Contains("crayon")); + var decal = ProtoMan.EnumeratePrototypes().FirstOrDefault(x => x.Tags.Contains("crayon")); ent.Comp.SelectedState = decal?.ID ?? string.Empty; Dirty(ent); } @@ -106,7 +104,7 @@ public sealed partial class CrayonSystem : SharedCrayonSystem private void OnCrayonBoundUI(EntityUid uid, CrayonComponent component, CrayonSelectMessage args) { // Check if the selected state is valid - if (!_prototypeManager.TryIndex(args.State, out var prototype) || !prototype.Tags.Contains("crayon")) + if (!ProtoMan.TryIndex(args.State, out var prototype) || !prototype.Tags.Contains("crayon")) return; component.SelectedState = args.State; diff --git a/Content.Server/CrewManifest/CrewManifestSystem.cs b/Content.Server/CrewManifest/CrewManifestSystem.cs index ad42df4540..121896481b 100644 --- a/Content.Server/CrewManifest/CrewManifestSystem.cs +++ b/Content.Server/CrewManifest/CrewManifestSystem.cs @@ -2,7 +2,6 @@ using System.Linq; using Content.Server.Administration; using Content.Server.EUI; using Content.Server.Station.Systems; -using Content.Server.StationRecords; using Content.Server.StationRecords.Systems; using Content.Shared.Administration; using Content.Shared.CCVar; @@ -14,7 +13,6 @@ using Content.Shared.StationRecords; using Robust.Shared.Configuration; using Robust.Shared.Console; using Robust.Shared.Player; -using Robust.Shared.Prototypes; namespace Content.Server.CrewManifest; @@ -24,7 +22,6 @@ public sealed partial class CrewManifestSystem : EntitySystem [Dependency] private StationRecordsSystem _recordsSystem = default!; [Dependency] private EuiManager _euiManager = default!; [Dependency] private IConfigurationManager _configManager = default!; - [Dependency] private IPrototypeManager _prototypeManager = default!; /// /// Cached crew manifest entries. The alternative is to outright @@ -231,7 +228,7 @@ public sealed partial class CrewManifestSystem : EntitySystem var record = recordObject.Item2; var entry = new CrewManifestEntry(record.Name, record.JobTitle, record.JobIcon, record.JobPrototype); - _prototypeManager.TryIndex(record.JobPrototype, out JobPrototype? job); + ProtoMan.TryIndex(record.JobPrototype, out JobPrototype? job); entriesSort.Add((job, entry)); } diff --git a/Content.Server/CriminalRecords/Systems/CriminalRecordsHackerSystem.cs b/Content.Server/CriminalRecords/Systems/CriminalRecordsHackerSystem.cs index 3123da944d..af46913b62 100644 --- a/Content.Server/CriminalRecords/Systems/CriminalRecordsHackerSystem.cs +++ b/Content.Server/CriminalRecords/Systems/CriminalRecordsHackerSystem.cs @@ -7,7 +7,6 @@ using Content.Shared.CriminalRecords.Systems; using Content.Shared.Random.Helpers; using Content.Shared.Security; using Content.Shared.StationRecords; -using Robust.Shared.Prototypes; using Robust.Shared.Random; namespace Content.Server.CriminalRecords.Systems; @@ -16,7 +15,6 @@ public sealed partial class CriminalRecordsHackerSystem : SharedCriminalRecordsH { [Dependency] private ChatSystem _chat = default!; [Dependency] private CriminalRecordsSystem _criminalRecords = default!; - [Dependency] private IPrototypeManager _proto = default!; [Dependency] private IRobustRandom _random = default!; [Dependency] private StationSystem _station = default!; [Dependency] private StationRecordsSystem _records = default!; @@ -36,7 +34,7 @@ public sealed partial class CriminalRecordsHackerSystem : SharedCriminalRecordsH if (_station.GetOwningStation(ent) is not {} station) return; - var reasons = _proto.Index(ent.Comp.Reasons); + var reasons = ProtoMan.Index(ent.Comp.Reasons); foreach (var (key, record) in _records.GetRecordsOfType(station)) { var reason = _random.Pick(reasons); diff --git a/Content.Server/Damage/ForceSay/DamageForceSaySystem.cs b/Content.Server/Damage/ForceSay/DamageForceSaySystem.cs index 412b298cb4..db94f6006b 100644 --- a/Content.Server/Damage/ForceSay/DamageForceSaySystem.cs +++ b/Content.Server/Damage/ForceSay/DamageForceSaySystem.cs @@ -1,5 +1,4 @@ using Content.Shared.Bed.Sleep; -using Content.Shared.Damage; using Content.Shared.Damage.Events; using Content.Shared.Damage.ForceSay; using Content.Shared.Damage.Systems; @@ -9,7 +8,6 @@ using Content.Shared.Mobs.Components; using Content.Shared.Mobs.Systems; using Content.Shared.Stunnable; using Robust.Shared.Player; -using Robust.Shared.Prototypes; using Robust.Shared.Random; using Robust.Shared.Timing; @@ -19,7 +17,6 @@ namespace Content.Server.Damage.ForceSay; public sealed partial class DamageForceSaySystem : EntitySystem { [Dependency] private IGameTiming _timing = default!; - [Dependency] private IPrototypeManager _prototype = default!; [Dependency] private IRobustRandom _random = default!; public override void Initialize() @@ -63,7 +60,7 @@ public sealed partial class DamageForceSaySystem : EntitySystem var ev = new BeforeForceSayEvent(component.ForceSayStringDataset); RaiseLocalEvent(uid, ev); - if (!_prototype.Resolve(ev.Prefix, out var prefixList)) + if (!ProtoMan.Resolve(ev.Prefix, out var prefixList)) return; var suffix = Loc.GetString(_random.Pick(prefixList.Values)); @@ -109,7 +106,7 @@ public sealed partial class DamageForceSaySystem : EntitySystem if (component.ValidDamageGroups != null) { var totalApplicableDamage = FixedPoint2.Zero; - foreach (var (group, value) in args.DamageDelta.GetDamagePerGroup(_prototype)) + foreach (var (group, value) in args.DamageDelta.GetDamagePerGroup(ProtoMan)) { if (!component.ValidDamageGroups.Contains(group)) continue; diff --git a/Content.Server/Damage/Systems/ExaminableDamageSystem.cs b/Content.Server/Damage/Systems/ExaminableDamageSystem.cs index 3f619739bf..6225ced3dc 100644 --- a/Content.Server/Damage/Systems/ExaminableDamageSystem.cs +++ b/Content.Server/Damage/Systems/ExaminableDamageSystem.cs @@ -4,14 +4,12 @@ using Content.Shared.Damage.Components; using Content.Shared.Damage.Systems; using Content.Shared.Examine; using Content.Shared.Rounding; -using Robust.Shared.Prototypes; namespace Content.Server.Damage.Systems; public sealed partial class ExaminableDamageSystem : EntitySystem { [Dependency] private DestructibleSystem _destructible = default!; - [Dependency] private IPrototypeManager _prototype = default!; [Dependency] private DamageableSystem _damageable = default!; public override void Initialize() @@ -22,7 +20,7 @@ public sealed partial class ExaminableDamageSystem : EntitySystem private void OnExamine(Entity ent, ref ExaminedEvent args) { - if (!_prototype.Resolve(ent.Comp.Messages, out var proto) || proto.Values.Count == 0) + if (!ProtoMan.Resolve(ent.Comp.Messages, out var proto) || proto.Values.Count == 0) return; var percent = GetDamagePercent(ent); diff --git a/Content.Server/Delivery/DeliverySystem.cs b/Content.Server/Delivery/DeliverySystem.cs index b5ccd1a6fc..3e20cd6656 100644 --- a/Content.Server/Delivery/DeliverySystem.cs +++ b/Content.Server/Delivery/DeliverySystem.cs @@ -30,7 +30,6 @@ public sealed partial class DeliverySystem : SharedDeliverySystem [Dependency] private LabelSystem _label = default!; [Dependency] private SharedContainerSystem _container = default!; [Dependency] private ChatSystem _chat = default!; - [Dependency] private IPrototypeManager _protoMan = default!; /// /// Default reason to use if the penalization is triggered @@ -103,7 +102,7 @@ public sealed partial class DeliverySystem : SharedDeliverySystem if (ent.Comp.WasPenalized) return; - if (!_protoMan.Resolve(ent.Comp.PenaltyBankAccount, out var accountInfo)) + if (!ProtoMan.Resolve(ent.Comp.PenaltyBankAccount, out var accountInfo)) return; var multiplier = GetDeliveryMultiplier(ent); diff --git a/Content.Server/Destructible/DestructibleSystem.cs b/Content.Server/Destructible/DestructibleSystem.cs index 4d6e707ffb..e4cf7be139 100644 --- a/Content.Server/Destructible/DestructibleSystem.cs +++ b/Content.Server/Destructible/DestructibleSystem.cs @@ -28,9 +28,9 @@ namespace Content.Server.Destructible; public sealed partial class DestructibleSystem : SharedDestructibleSystem { [Dependency] public IAdminLogManager AdminLogger = default!; - [Dependency] public IPrototypeManager PrototypeManager = default!; [Dependency] public IRobustRandom Random = default!; public new IEntityManager EntityManager => base.EntityManager; + public IPrototypeManager PrototypeManager => ProtoMan; [Dependency] public AtmosphereSystem AtmosphereSystem = default!; [Dependency] public ConstructionSystem ConstructionSystem = default!; diff --git a/Content.Server/Destructible/Thresholds/Behaviors/WeightedSpawnEntityBehavior.cs b/Content.Server/Destructible/Thresholds/Behaviors/WeightedSpawnEntityBehavior.cs index 2e04971972..fc79fc9646 100644 --- a/Content.Server/Destructible/Thresholds/Behaviors/WeightedSpawnEntityBehavior.cs +++ b/Content.Server/Destructible/Thresholds/Behaviors/WeightedSpawnEntityBehavior.cs @@ -1,11 +1,10 @@ -using System.Numerics; +using System.Numerics; using Content.Server.Spawners.Components; using Content.Server.Spawners.EntitySystems; using Content.Shared.Random; using Content.Shared.Random.Helpers; using Robust.Server.GameObjects; using Robust.Shared.Prototypes; -using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; using Robust.Shared.Spawners; using Robust.Shared.Random; diff --git a/Content.Server/DeviceNetwork/Systems/DeviceNetworkSystem.cs b/Content.Server/DeviceNetwork/Systems/DeviceNetworkSystem.cs index d26cd3ab18..aa58f568ff 100644 --- a/Content.Server/DeviceNetwork/Systems/DeviceNetworkSystem.cs +++ b/Content.Server/DeviceNetwork/Systems/DeviceNetworkSystem.cs @@ -1,13 +1,12 @@ -using Content.Shared.DeviceNetwork; -using JetBrains.Annotations; -using Robust.Shared.Prototypes; -using Robust.Shared.Random; using System.Buffers; using System.Diagnostics.CodeAnalysis; +using Content.Shared.DeviceNetwork; using Content.Shared.DeviceNetwork.Components; using Content.Shared.DeviceNetwork.Events; using Content.Shared.DeviceNetwork.Systems; using Content.Shared.Examine; +using JetBrains.Annotations; +using Robust.Shared.Random; namespace Content.Server.DeviceNetwork.Systems { @@ -19,7 +18,6 @@ namespace Content.Server.DeviceNetwork.Systems public sealed partial class DeviceNetworkSystem : SharedDeviceNetworkSystem { [Dependency] private IRobustRandom _random = default!; - [Dependency] private IPrototypeManager _protoMan = default!; [Dependency] private SharedTransformSystem _transformSystem = default!; [Dependency] private DeviceListSystem _deviceLists = default!; [Dependency] private NetworkConfiguratorSystem _configurator = default!; @@ -107,14 +105,14 @@ namespace Content.Server.DeviceNetwork.Systems { if (device.ReceiveFrequency == null && device.ReceiveFrequencyId != null - && _protoMan.TryIndex(device.ReceiveFrequencyId, out var receive)) + && ProtoMan.TryIndex(device.ReceiveFrequencyId, out var receive)) { device.ReceiveFrequency = receive.Frequency; } if (device.TransmitFrequency == null && device.TransmitFrequencyId != null - && _protoMan.TryIndex(device.TransmitFrequencyId, out var xmit)) + && ProtoMan.TryIndex(device.TransmitFrequencyId, out var xmit)) { device.TransmitFrequency = xmit.Frequency; } diff --git a/Content.Server/Electrocution/ElectrocutionSystem.cs b/Content.Server/Electrocution/ElectrocutionSystem.cs index b59ac40f22..a85814e7f7 100644 --- a/Content.Server/Electrocution/ElectrocutionSystem.cs +++ b/Content.Server/Electrocution/ElectrocutionSystem.cs @@ -37,7 +37,6 @@ namespace Content.Server.Electrocution; public sealed partial class ElectrocutionSystem : SharedElectrocutionSystem { [Dependency] private IAdminLogManager _adminLogger = default!; - [Dependency] private IPrototypeManager _prototypeManager = default!; [Dependency] private IRobustRandom _random = default!; [Dependency] private DamageableSystem _damageable = default!; [Dependency] private EntityLookupSystem _entityLookup = default!; @@ -405,7 +404,7 @@ public sealed partial class ElectrocutionSystem : SharedElectrocutionSystem if (shockDamage is { } dmg) { - if (_damageable.TryChangeDamage(uid, new DamageSpecifier(_prototypeManager.Index(DamageType), dmg), out var damage, origin: sourceUid)) + if (_damageable.TryChangeDamage(uid, new DamageSpecifier(ProtoMan.Index(DamageType), dmg), out var damage, origin: sourceUid)) { _adminLogger.Add(LogType.Electrocution, $"{ToPrettyString(uid):entity} received {damage:damage} powered electrocution damage{(sourceUid != null ? " from " + ToPrettyString(sourceUid.Value) : ""):source}"); diff --git a/Content.Server/Emoting/Systems/BodyEmotesSystem.cs b/Content.Server/Emoting/Systems/BodyEmotesSystem.cs index 17d145aa79..d0a4dc5d4a 100644 --- a/Content.Server/Emoting/Systems/BodyEmotesSystem.cs +++ b/Content.Server/Emoting/Systems/BodyEmotesSystem.cs @@ -9,7 +9,6 @@ namespace Content.Server.Emoting.Systems; public sealed partial class BodyEmotesSystem : EntitySystem { - [Dependency] private IPrototypeManager _proto = default!; [Dependency] private ChatSystem _chat = default!; public override void Initialize() @@ -37,7 +36,7 @@ public sealed partial class BodyEmotesSystem : EntitySystem if (!TryComp(uid, out HandsComponent? hands) || hands.Count <= 0) return false; - if (!_proto.Resolve(component.SoundsId, out var sounds)) + if (!ProtoMan.Resolve(component.SoundsId, out var sounds)) return false; return _chat.TryPlayEmoteSound(uid, sounds, emote); diff --git a/Content.Server/EntityEffects/Effects/Botany/PlantMutateChemicalsEntityEffectSystem.cs b/Content.Server/EntityEffects/Effects/Botany/PlantMutateChemicalsEntityEffectSystem.cs index 6454d9adf7..e24a19d803 100644 --- a/Content.Server/EntityEffects/Effects/Botany/PlantMutateChemicalsEntityEffectSystem.cs +++ b/Content.Server/EntityEffects/Effects/Botany/PlantMutateChemicalsEntityEffectSystem.cs @@ -4,14 +4,12 @@ using Content.Shared.EntityEffects; using Content.Shared.EntityEffects.Effects.Botany; using Content.Shared.FixedPoint; using Content.Shared.Random.Helpers; -using Robust.Shared.Prototypes; using Robust.Shared.Random; namespace Content.Server.EntityEffects.Effects.Botany; public sealed partial class PlantMutateChemicalsEntityEffectSystem : EntityEffectSystem { - [Dependency] private IPrototypeManager _proto = default!; [Dependency] private IRobustRandom _random = default!; protected override void Effect(Entity entity, ref EntityEffectEvent args) @@ -20,7 +18,7 @@ public sealed partial class PlantMutateChemicalsEntityEffectSystem : EntityEffec return; var chemicals = entity.Comp.Seed.Chemicals; - var randomChems = _proto.Index(args.Effect.RandomPickBotanyReagent); + var randomChems = ProtoMan.Index(args.Effect.RandomPickBotanyReagent); // Add a random amount of a random chemical to this set of chemicals var (chemicalId, quantity) = randomChems.Pick(_random); diff --git a/Content.Server/EntityEffects/Effects/Botany/PlantMutateSpeciesChangeEntityEffectSystem.cs b/Content.Server/EntityEffects/Effects/Botany/PlantMutateSpeciesChangeEntityEffectSystem.cs index 509e5c2cf7..5493d07cc3 100644 --- a/Content.Server/EntityEffects/Effects/Botany/PlantMutateSpeciesChangeEntityEffectSystem.cs +++ b/Content.Server/EntityEffects/Effects/Botany/PlantMutateSpeciesChangeEntityEffectSystem.cs @@ -2,14 +2,12 @@ using Content.Server.Botany; using Content.Server.Botany.Components; using Content.Shared.EntityEffects; using Content.Shared.EntityEffects.Effects.Botany; -using Robust.Shared.Prototypes; using Robust.Shared.Random; namespace Content.Server.EntityEffects.Effects.Botany; public sealed partial class PlantMutateSpeciesChangeEntityEffectSystem : EntityEffectSystem { - [Dependency] private IPrototypeManager _proto = default!; [Dependency] private IRobustRandom _random = default!; protected override void Effect(Entity entity, ref EntityEffectEvent args) @@ -18,7 +16,7 @@ public sealed partial class PlantMutateSpeciesChangeEntityEffectSystem : EntityE return; var targetProto = _random.Pick(entity.Comp.Seed.MutationPrototypes); - _proto.TryIndex(targetProto, out SeedPrototype? protoSeed); + ProtoMan.TryIndex(targetProto, out SeedPrototype? protoSeed); if (protoSeed == null) { diff --git a/Content.Server/Explosion/EntitySystems/ExplosionSystem.Airtight.cs b/Content.Server/Explosion/EntitySystems/ExplosionSystem.Airtight.cs index 2b420bde1b..9a9452ef0c 100644 --- a/Content.Server/Explosion/EntitySystems/ExplosionSystem.Airtight.cs +++ b/Content.Server/Explosion/EntitySystems/ExplosionSystem.Airtight.cs @@ -38,7 +38,7 @@ public sealed partial class ExplosionSystem _explosionTypes.Clear(); int index = 0; - foreach (var prototype in _prototypeManager.EnumeratePrototypes()) + foreach (var prototype in ProtoMan.EnumeratePrototypes()) { _explosionTypes.Add(prototype.ID, index); index++; @@ -241,7 +241,7 @@ public sealed partial class ExplosionSystem { // TODO EXPLOSION SYSTEM // cache explosion type damage. - if (!_prototypeManager.Resolve(id, out var explosionType)) + if (!ProtoMan.Resolve(id, out var explosionType)) continue; // evaluate the damage that this damage type would do to this entity diff --git a/Content.Server/Explosion/EntitySystems/ExplosionSystem.cs b/Content.Server/Explosion/EntitySystems/ExplosionSystem.cs index 2d25d22455..e51574c6f5 100644 --- a/Content.Server/Explosion/EntitySystems/ExplosionSystem.cs +++ b/Content.Server/Explosion/EntitySystems/ExplosionSystem.cs @@ -19,7 +19,6 @@ using Content.Shared.Explosion.EntitySystems; using Content.Shared.GameTicking; using Content.Shared.Inventory; using Content.Shared.Maps; -using Content.Shared.Projectiles; using Content.Shared.Throwing; using Robust.Server.GameStates; using Robust.Server.Player; @@ -28,7 +27,6 @@ using Robust.Shared.Configuration; using Robust.Shared.Map; using Robust.Shared.Physics.Components; using Robust.Shared.Player; -using Robust.Shared.Prototypes; using Robust.Shared.Random; using Robust.Shared.Timing; using Robust.Shared.Utility; @@ -40,7 +38,6 @@ public sealed partial class ExplosionSystem : SharedExplosionSystem [Dependency] private IMapManager _mapManager = default!; [Dependency] private IRobustRandom _robustRandom = default!; [Dependency] private ITileDefinitionManager _tileDefinitionManager = default!; - [Dependency] private IPrototypeManager _prototypeManager = default!; [Dependency] private IConfigurationManager _cfg = default!; [Dependency] private IPlayerManager _playerManager = default!; [Dependency] private IAdminLogManager _adminLogger = default!; @@ -81,7 +78,7 @@ public sealed partial class ExplosionSystem : SharedExplosionSystem { base.Initialize(); - DebugTools.Assert(_prototypeManager.HasIndex(DefaultExplosionPrototypeId)); + DebugTools.Assert(ProtoMan.HasIndex(DefaultExplosionPrototypeId)); // handled in ExplosionSystem.GridMap.cs SubscribeLocalEvent(OnGridRemoved); @@ -104,7 +101,7 @@ public sealed partial class ExplosionSystem : SharedExplosionSystem InitAirtightMap(); InitVisuals(); - _prototypeManager.PrototypesReloaded += ReloadExplosionPrototypes; + ProtoMan.PrototypesReloaded += ReloadExplosionPrototypes; } private void OnReset(RoundRestartCleanupEvent ev) @@ -123,7 +120,7 @@ public sealed partial class ExplosionSystem : SharedExplosionSystem base.Shutdown(); _nodeGroupSystem.PauseUpdating = false; _pathfindingSystem.PauseUpdating = false; - _prototypeManager.PrototypesReloaded -= ReloadExplosionPrototypes; + ProtoMan.PrototypesReloaded -= ReloadExplosionPrototypes; } private void RelayedResistance(EntityUid uid, ExplosionResistanceComponent component, @@ -284,7 +281,7 @@ public sealed partial class ExplosionSystem : SharedExplosionSystem if (totalIntensity <= 0 || slope <= 0) return; - if (!_prototypeManager.TryIndex(typeId, out var type)) + if (!ProtoMan.TryIndex(typeId, out var type)) { Log.Error($"Attempted to spawn unknown explosion prototype: {type}"); return; diff --git a/Content.Server/FeedbackSystem/FeedbackSystem.cs b/Content.Server/FeedbackSystem/FeedbackSystem.cs index 379878e942..4c9aae7d64 100644 --- a/Content.Server/FeedbackSystem/FeedbackSystem.cs +++ b/Content.Server/FeedbackSystem/FeedbackSystem.cs @@ -9,7 +9,6 @@ public sealed partial class FeedbackSystem : EntitySystem { [Dependency] private ServerFeedbackManager _feedbackManager = null!; [Dependency] private GameTicker _gameTicker = null!; - [Dependency] private IPrototypeManager _prototypeManager = null!; public override void Initialize() { @@ -24,7 +23,7 @@ public sealed partial class FeedbackSystem : EntitySystem foreach (var feedback in _feedbackManager.GetOriginFeedbackPrototypes(true, true)) { - if (_gameTicker.IsGameRuleAdded(_prototypeManager.Index(feedback).RuleWhitelist)) + if (_gameTicker.IsGameRuleAdded(ProtoMan.Index(feedback).RuleWhitelist)) validPopups.Add(feedback); else notValidPopups.Add(feedback); diff --git a/Content.Server/Fluids/EntitySystems/PuddleSystem.cs b/Content.Server/Fluids/EntitySystems/PuddleSystem.cs index 3bef3e594e..64a0aab420 100644 --- a/Content.Server/Fluids/EntitySystems/PuddleSystem.cs +++ b/Content.Server/Fluids/EntitySystems/PuddleSystem.cs @@ -2,7 +2,6 @@ using Content.Server.Fluids.Components; using Content.Server.Spreader; using Content.Shared.Chemistry; using Content.Shared.Chemistry.Components; -using Content.Shared.Chemistry.Components.SolutionManager; using Content.Shared.Chemistry.EntitySystems; using Content.Shared.Chemistry.Reaction; using Content.Shared.Database; @@ -18,7 +17,6 @@ using Robust.Shared.Collections; using Robust.Shared.Map; using Robust.Shared.Map.Components; using Robust.Shared.Player; -using Robust.Shared.Prototypes; using Robust.Shared.Random; namespace Content.Server.Fluids.EntitySystems; @@ -29,7 +27,6 @@ namespace Content.Server.Fluids.EntitySystems; public sealed partial class PuddleSystem : SharedPuddleSystem { [Dependency] private SharedMapSystem _map = default!; - [Dependency] private IPrototypeManager _prototypeManager = default!; [Dependency] private IRobustRandom _random = default!; [Dependency] private EntityLookupSystem _lookup = default!; [Dependency] private SharedColorFlashEffectSystem _color = default!; @@ -436,7 +433,7 @@ public sealed partial class PuddleSystem : SharedPuddleSystem PopupType.SmallCaution); } - _color.RaiseEffect(spilled.GetColor(_prototypeManager), targets, + _color.RaiseEffect(spilled.GetColor(ProtoMan), targets, Filter.Pvs(entity, entityManager: EntityManager)); return TrySpillAt(coordinates, spilled, out puddleUid, sound); diff --git a/Content.Server/Fluids/EntitySystems/SmokeSystem.cs b/Content.Server/Fluids/EntitySystems/SmokeSystem.cs index d132b0f63e..c23658ae38 100644 --- a/Content.Server/Fluids/EntitySystems/SmokeSystem.cs +++ b/Content.Server/Fluids/EntitySystems/SmokeSystem.cs @@ -16,7 +16,6 @@ using Robust.Shared.Physics; using Robust.Shared.Physics.Components; using Robust.Shared.Physics.Events; using Robust.Shared.Physics.Systems; -using Robust.Shared.Prototypes; using Robust.Shared.Random; using Robust.Shared.Timing; using System.Linq; @@ -34,7 +33,6 @@ public sealed partial class SmokeSystem : EntitySystem [Dependency] private IAdminLogManager _logger = default!; [Dependency] private IGameTiming _timing = default!; [Dependency] private SharedMapSystem _map = default!; - [Dependency] private IPrototypeManager _prototype = default!; [Dependency] private IRobustRandom _random = default!; [Dependency] private AppearanceSystem _appearance = default!; [Dependency] private BloodstreamSystem _blood = default!; @@ -306,7 +304,7 @@ public sealed partial class SmokeSystem : EntitySystem if (reagentQuantity.Quantity == FixedPoint2.Zero) continue; - var reagent = _prototype.Index(reagentQuantity.Reagent.Prototype); + var reagent = ProtoMan.Index(reagentQuantity.Reagent.Prototype); reagent.ReactionTile(tile, reagentQuantity.Quantity, EntityManager, reagentQuantity.Reagent.Data); } } @@ -337,7 +335,7 @@ public sealed partial class SmokeSystem : EntitySystem !_solutionContainerSystem.ResolveSolution(smoke.Owner, SmokeComponent.SolutionName, ref smoke.Comp1.Solution, out var solution)) return; - var color = solution.GetColor(_prototype); + var color = solution.GetColor(ProtoMan); _appearance.SetData(smoke.Owner, SmokeVisuals.Color, color, smoke.Comp2); } } diff --git a/Content.Server/GameTicking/GameTicker.GamePreset.cs b/Content.Server/GameTicking/GameTicker.GamePreset.cs index 4b28075ea8..9a473cd4e6 100644 --- a/Content.Server/GameTicking/GameTicker.GamePreset.cs +++ b/Content.Server/GameTicking/GameTicker.GamePreset.cs @@ -147,10 +147,10 @@ public sealed partial class GameTicker public GamePresetPrototype? FindGamePreset(string preset) { - if (_prototypeManager.TryIndex(preset, out GamePresetPrototype? presetProto)) + if (ProtoMan.TryIndex(preset, out GamePresetPrototype? presetProto)) return presetProto; - foreach (var proto in _prototypeManager.EnumeratePrototypes()) + foreach (var proto in ProtoMan.EnumeratePrototypes()) { foreach (var alias in proto.Alias) { @@ -174,7 +174,7 @@ public sealed partial class GameTicker if (Preset == null) return true; - if (Preset.MapPool == null || !_prototypeManager.TryIndex(Preset.MapPool, out var pool)) + if (Preset.MapPool == null || !ProtoMan.TryIndex(Preset.MapPool, out var pool)) return true; return pool.Maps.Contains(map.ID); @@ -186,7 +186,7 @@ public sealed partial class GameTicker return; if (Preset.MapPool == null || - !_prototypeManager.TryIndex(Preset.MapPool, out var pool)) + !ProtoMan.TryIndex(Preset.MapPool, out var pool)) return; if (pool.Maps.Contains(map.ID)) @@ -232,7 +232,7 @@ public sealed partial class GameTicker [PublicAPI] public int GetMinimumPlayerCount(ProtoId proto) { - if (!_prototypeManager.Resolve(proto, out var preset)) + if (!ProtoMan.Resolve(proto, out var preset)) return 0; return GetMinimumPlayerCount(preset); @@ -250,10 +250,10 @@ public sealed partial class GameTicker var min = proto.MinPlayers ?? 0; foreach (var entProto in proto.Rules) { - if (!_prototypeManager.Resolve(entProto, out var ent)) + if (!ProtoMan.Resolve(entProto, out var ent)) continue; - if (!ent.TryGetComponent(out var rule, Factory)) + if (!ent.TryComp(out var rule, Factory)) continue; min = Math.Max(min, rule.MinPlayers); diff --git a/Content.Server/GameTicking/GameTicker.GameRule.cs b/Content.Server/GameTicking/GameTicker.GameRule.cs index 90972614ff..5c2d93078c 100644 --- a/Content.Server/GameTicking/GameTicker.GameRule.cs +++ b/Content.Server/GameTicking/GameTicker.GameRule.cs @@ -402,7 +402,7 @@ public sealed partial class GameTicker /// public IEnumerable GetAllGameRulePrototypes() { - foreach (var proto in _prototypeManager.EnumeratePrototypes()) + foreach (var proto in ProtoMan.EnumeratePrototypes()) { if (proto.Abstract) continue; @@ -465,7 +465,7 @@ public sealed partial class GameTicker foreach (var rule in args) { - if (!_prototypeManager.HasIndex(rule)) + if (!ProtoMan.HasIndex(rule)) { shell.WriteError($"Invalid game rule {rule} was skipped."); diff --git a/Content.Server/GameTicking/GameTicker.LobbyBackground.cs b/Content.Server/GameTicking/GameTicker.LobbyBackground.cs index 82460572f7..bf522919a3 100644 --- a/Content.Server/GameTicking/GameTicker.LobbyBackground.cs +++ b/Content.Server/GameTicking/GameTicker.LobbyBackground.cs @@ -1,7 +1,6 @@ using Content.Shared.GameTicking.Prototypes; using Robust.Shared.Prototypes; using Robust.Shared.Random; -using Robust.Shared.Utility; using System.Linq; namespace Content.Server.GameTicking; @@ -18,7 +17,7 @@ public sealed partial class GameTicker private void InitializeLobbyBackground() { - var allprotos = _prototypeManager.EnumeratePrototypes().ToList(); + var allprotos = ProtoMan.EnumeratePrototypes().ToList(); _lobbyBackgrounds ??= new List>(); //create protoids from them diff --git a/Content.Server/GameTicking/GameTicker.RoundFlow.cs b/Content.Server/GameTicking/GameTicker.RoundFlow.cs index dd57e83d5d..8c47add01e 100644 --- a/Content.Server/GameTicking/GameTicker.RoundFlow.cs +++ b/Content.Server/GameTicking/GameTicker.RoundFlow.cs @@ -119,7 +119,7 @@ namespace Content.Server.GameTicking } if (CurrentPreset?.MapPool != null && - _prototypeManager.TryIndex(CurrentPreset.MapPool, out var pool) && + ProtoMan.TryIndex(CurrentPreset.MapPool, out var pool) && !pool.Maps.Contains(mainStationMap.ID)) { var msg = Loc.GetString("game-ticker-start-round-invalid-map", @@ -791,7 +791,7 @@ namespace Content.Server.GameTicking { if (CurrentPreset == null) return; - var options = _prototypeManager.EnumeratePrototypes().ToList(); + var options = ProtoMan.EnumeratePrototypes().ToList(); if (options.Count == 0) return; diff --git a/Content.Server/GameTicking/GameTicker.Spawning.cs b/Content.Server/GameTicking/GameTicker.Spawning.cs index ffb7c22f6b..626af6dd3a 100644 --- a/Content.Server/GameTicking/GameTicker.Spawning.cs +++ b/Content.Server/GameTicking/GameTicker.Spawning.cs @@ -192,7 +192,7 @@ namespace Content.Server.GameTicking { var roundStart = new List>(); - var speciesPrototypes = _prototypeManager.EnumeratePrototypes(); + var speciesPrototypes = ProtoMan.EnumeratePrototypes(); foreach (var proto in speciesPrototypes) { if (proto.RoundStart) @@ -205,7 +205,7 @@ namespace Content.Server.GameTicking } else { - var weights = _prototypeManager.Index(weightId); + var weights = ProtoMan.Index(weightId); speciesId = weights.Pick(_robustRandom); } @@ -345,7 +345,7 @@ namespace Content.Server.GameTicking DebugTools.AssertNotNull(data); - jobPrototype = _prototypeManager.Index(jobId); + jobPrototype = ProtoMan.Index(jobId); var mobMaybe = _stationSpawning.SpawnPlayerCharacterOnStation(station, jobId, character); DebugTools.AssertNotNull(mobMaybe); diff --git a/Content.Server/GameTicking/GameTicker.cs b/Content.Server/GameTicking/GameTicker.cs index 8ce5137794..b3b88f29a2 100644 --- a/Content.Server/GameTicking/GameTicker.cs +++ b/Content.Server/GameTicking/GameTicker.cs @@ -15,13 +15,11 @@ using Content.Shared.GameTicking; using Content.Shared.Mind; using Content.Shared.Roles; using Robust.Server; -using Robust.Server.GameObjects; using Robust.Server.GameStates; using Robust.Shared.Audio.Systems; using Robust.Shared.Console; using Robust.Shared.EntitySerialization.Systems; using Robust.Shared.Map; -using Robust.Shared.Prototypes; using Robust.Shared.Random; using Robust.Shared.Timing; using Robust.Shared.Utility; @@ -42,7 +40,6 @@ namespace Content.Server.GameTicking [Dependency] private IGameTiming _gameTiming = default!; [Dependency] private ILogManager _logManager = default!; [Dependency] private IMapManager _mapManager = default!; - [Dependency] private IPrototypeManager _prototypeManager = default!; [Dependency] private IRobustRandom _robustRandom = default!; #if EXCEPTION_TOLERANCE [Dependency] private IRuntimeLog _runtimeLog = default!; @@ -93,7 +90,7 @@ namespace Content.Server.GameTicking InitializePlayer(); InitializeLobbyBackground(); InitializeGamePreset(); - DebugTools.Assert(_prototypeManager.Index(FallbackOverflowJob).Name == FallbackOverflowJobName, + DebugTools.Assert(ProtoMan.Index(FallbackOverflowJob).Name == FallbackOverflowJobName, "Overflow role does not have the correct name!"); InitializeGameRules(); InitializeReplays(); diff --git a/Content.Server/GameTicking/Rules/AntagLoadProfileRuleSystem.cs b/Content.Server/GameTicking/Rules/AntagLoadProfileRuleSystem.cs index 9d72624351..6216abebb3 100644 --- a/Content.Server/GameTicking/Rules/AntagLoadProfileRuleSystem.cs +++ b/Content.Server/GameTicking/Rules/AntagLoadProfileRuleSystem.cs @@ -1,6 +1,5 @@ using Content.Server.Antag; using Content.Server.GameTicking.Rules.Components; -using Content.Server.Humanoid; using Content.Server.Preferences.Managers; using Content.Shared.Body; using Content.Shared.Humanoid; @@ -33,15 +32,15 @@ public sealed partial class AntagLoadProfileRuleSystem : GameRuleSystem(species.ID)) ?? false)) { - species = Proto.Index(ent.Comp.SpeciesOverride.Value); + species = ProtoMan.Index(ent.Comp.SpeciesOverride.Value); } args.Entity = Spawn(species.Prototype, args.Coords); diff --git a/Content.Server/GameTicking/Rules/GameRuleSystem.cs b/Content.Server/GameTicking/Rules/GameRuleSystem.cs index eb9c22ce69..5398503ea8 100644 --- a/Content.Server/GameTicking/Rules/GameRuleSystem.cs +++ b/Content.Server/GameTicking/Rules/GameRuleSystem.cs @@ -1,8 +1,6 @@ using Content.Server.Atmos.EntitySystems; -using Content.Server.Chat.Managers; using Content.Shared.GameTicking.Components; using Robust.Server.GameObjects; -using Robust.Shared.Prototypes; using Robust.Shared.Random; using Robust.Shared.Timing; @@ -11,7 +9,6 @@ namespace Content.Server.GameTicking.Rules; public abstract partial class GameRuleSystem : EntitySystem where T : IComponent { [Dependency] protected IGameTiming Timing = default!; - [Dependency] protected IPrototypeManager Proto = default!; [Dependency] protected IRobustRandom RobustRandom = default!; [Dependency] protected GameTicker GameTicker = default!; diff --git a/Content.Server/GameTicking/Rules/LoadMapRuleSystem.cs b/Content.Server/GameTicking/Rules/LoadMapRuleSystem.cs index 66310670e7..a583b79909 100644 --- a/Content.Server/GameTicking/Rules/LoadMapRuleSystem.cs +++ b/Content.Server/GameTicking/Rules/LoadMapRuleSystem.cs @@ -7,14 +7,12 @@ using Robust.Server.GameObjects; using Robust.Shared.EntitySerialization; using Robust.Shared.EntitySerialization.Systems; using Robust.Shared.Map; -using Robust.Shared.Prototypes; using Robust.Shared.Utility; namespace Content.Server.GameTicking.Rules; public sealed partial class LoadMapRuleSystem : StationEventSystem { - [Dependency] private IPrototypeManager _prototypeManager = default!; [Dependency] private MapSystem _map = default!; [Dependency] private MapLoaderSystem _mapLoader = default!; [Dependency] private TransformSystem _transform = default!; @@ -39,7 +37,7 @@ public sealed partial class LoadMapRuleSystem : StationEventSystem { - [Dependency] private IPrototypeManager _prototypeManager = default!; [Dependency] private IRobustRandom _random = default!; [Dependency] private IConfigurationManager _configurationManager = default!; [Dependency] private IAdminLogManager _adminLogger = default!; @@ -76,7 +74,7 @@ public sealed partial class SecretRuleSystem : GameRuleSystem weights, [NotNullWhen(true)] out GamePresetPrototype? preset) { - var options = _prototypeManager.Index(weights).Weights.ShallowClone(); + var options = ProtoMan.Index(weights).Weights.ShallowClone(); var players = GameTicker.ReadyPlayerCount(); GamePresetPrototype? selectedPreset = null; @@ -91,7 +89,7 @@ public sealed partial class SecretRuleSystem : GameRuleSystem public bool CanPickAny(ProtoId weightedPresets) { - var ids = _prototypeManager.Index(weightedPresets).Weights.Keys + var ids = ProtoMan.Index(weightedPresets).Weights.Keys .Select(x => new ProtoId(x)); return CanPickAny(ids); @@ -138,7 +136,7 @@ public sealed partial class SecretRuleSystem : GameRuleSystem { [Dependency] private PuddleSystem _puddle = default!; - [Dependency] private IPrototypeManager _proto = default!; protected override void ApplyVariation(Entity ent, ref StationVariationPassEvent args) { var totalTiles = Stations.GetTileCount(args.Station.AsNullable()); - if (!_proto.Resolve(ent.Comp.RandomPuddleSolutionFill, out var proto)) + if (!ProtoMan.Resolve(ent.Comp.RandomPuddleSolutionFill, out var proto)) return; var puddleMod = Random.NextGaussian(ent.Comp.TilesPerSpillAverage, ent.Comp.TilesPerSpillStdDev); diff --git a/Content.Server/Gateway/Systems/GatewayGeneratorSystem.cs b/Content.Server/Gateway/Systems/GatewayGeneratorSystem.cs index 6b4d53967a..fd1919f6f7 100644 --- a/Content.Server/Gateway/Systems/GatewayGeneratorSystem.cs +++ b/Content.Server/Gateway/Systems/GatewayGeneratorSystem.cs @@ -25,7 +25,6 @@ public sealed partial class GatewayGeneratorSystem : EntitySystem { [Dependency] private IConfigurationManager _cfgManager = default!; [Dependency] private IGameTiming _timing = default!; - [Dependency] private IPrototypeManager _protoManager = default!; [Dependency] private IRobustRandom _random = default!; [Dependency] private ITileDefinitionManager _tileDefManager = default!; [Dependency] private BiomeSystem _biome = default!; @@ -103,7 +102,7 @@ public sealed partial class GatewayGeneratorSystem : EntitySystem random.SetSeed(seed); var mapUid = _maps.CreateMap(); - var gatewayName = _salvage.GetFTLName(_protoManager.Index(PlanetNames), seed); + var gatewayName = _salvage.GetFTLName(ProtoMan.Index(PlanetNames), seed); _metadata.SetEntityName(mapUid, gatewayName); var origin = new Vector2i(random.Next(-MaxOffset, MaxOffset), random.Next(-MaxOffset, MaxOffset)); @@ -113,7 +112,7 @@ public sealed partial class GatewayGeneratorSystem : EntitySystem }; AddComp(mapUid, restricted); - _biome.EnsurePlanet(mapUid, _protoManager.Index(BiomeTemplate), seed); + _biome.EnsurePlanet(mapUid, ProtoMan.Index(BiomeTemplate), seed); var grid = Comp(mapUid); @@ -185,7 +184,7 @@ public sealed partial class GatewayGeneratorSystem : EntitySystem var dungeonRotation = _dungeon.GetDungeonRotation(seed); var dungeonPosition = (origin + dungeonRotation.RotateVec(new Vector2i(0, dungeonDistance))).Floored(); - _dungeon.GenerateDungeon(_protoManager.Index(DungeonConfig), args.MapUid, grid, dungeonPosition, seed); + _dungeon.GenerateDungeon(ProtoMan.Index(DungeonConfig), args.MapUid, grid, dungeonPosition, seed); // TODO: Dungeon mobs + loot. diff --git a/Content.Server/Ghost/GhostSystem.cs b/Content.Server/Ghost/GhostSystem.cs index 460dd3caf8..8568ecd6cd 100644 --- a/Content.Server/Ghost/GhostSystem.cs +++ b/Content.Server/Ghost/GhostSystem.cs @@ -56,7 +56,6 @@ namespace Content.Server.Ghost [Dependency] private VisibilitySystem _visibilitySystem = default!; [Dependency] private MetaDataSystem _metaData = default!; [Dependency] private MobThresholdSystem _mobThresholdSystem = default!; - [Dependency] private IPrototypeManager _prototypeManager = default!; [Dependency] private IConfigurationManager _configurationManager = default!; [Dependency] private IChatManager _chatManager = default!; [Dependency] private SharedMindSystem _mind = default!; @@ -593,7 +592,7 @@ namespace Content.Server.Ghost _damageable.GetTotalDamage((playerEntity.Value, damageable)); } - DamageSpecifier damage = new(_prototypeManager.Index(AsphyxiationDamageType), dealtDamage); + DamageSpecifier damage = new(ProtoMan.Index(AsphyxiationDamageType), dealtDamage); _damageable.ChangeDamage(playerEntity.Value, damage, true); } diff --git a/Content.Server/Ghost/Roles/GhostRoleSystem.cs b/Content.Server/Ghost/Roles/GhostRoleSystem.cs index a5802e44bb..caeeba8181 100644 --- a/Content.Server/Ghost/Roles/GhostRoleSystem.cs +++ b/Content.Server/Ghost/Roles/GhostRoleSystem.cs @@ -54,7 +54,6 @@ public sealed partial class GhostRoleSystem : EntitySystem [Dependency] private SharedRoleSystem _roleSystem = default!; [Dependency] private IGameTiming _timing = default!; [Dependency] private PopupSystem _popupSystem = default!; - [Dependency] private IPrototypeManager _prototype = default!; private uint _nextRoleIdentifier; private bool _needsUpdateGhostRoleCount = true; @@ -246,7 +245,7 @@ public sealed partial class GhostRoleSystem : EntitySystem } var foundWinner = false; - var deciderPrototype = _prototype.Index(ghostRole.RaffleConfig.Decider); + var deciderPrototype = ProtoMan.Index(ghostRole.RaffleConfig.Decider); // use the ghost role's chosen winner picker to find a winner deciderPrototype.Decider.PickWinner( @@ -355,7 +354,7 @@ public sealed partial class GhostRoleSystem : EntitySystem return; // should, realistically, never be reached but you never know var settings = config.SettingsOverride - ?? _prototype.Index(config.Settings).Settings; + ?? ProtoMan.Index(config.Settings).Settings; if (settings.MaxDuration < settings.InitialDuration) { @@ -532,8 +531,8 @@ public sealed partial class GhostRoleSystem : EntitySystem // If there is no mind, check the mindRole prototypes foreach (var proto in roleEnt.Comp.MindRoles) { - if (!_prototype.TryIndex(proto, out var indexed) - || !indexed.TryGetComponent(out var comp, _ent.ComponentFactory)) + if (!ProtoMan.TryIndex(proto, out var indexed) + || !indexed.TryComp(out var comp, _ent.ComponentFactory)) continue; var roleComp = (MindRoleComponent)comp; @@ -856,7 +855,7 @@ public sealed partial class GhostRoleSystem : EntitySystem foreach (var prototypeID in prototypes) { - if (_prototype.TryIndex(prototypeID, out var prototype)) + if (ProtoMan.TryIndex(prototypeID, out var prototype)) { var verb = CreateVerb(uid, component, args.User, prototype); verbs.Add(verb); @@ -902,7 +901,7 @@ public sealed partial class GhostRoleSystem : EntitySystem public void OnGhostRoleRadioMessage(Entity entity, ref GhostRoleRadioMessage args) { - if (!_prototype.Resolve(args.ProtoId, out var ghostRoleProto)) + if (!ProtoMan.Resolve(args.ProtoId, out var ghostRoleProto)) return; // if the prototype chosen isn't actually part of the selectable options, ignore it diff --git a/Content.Server/Ghost/SpookySpeakerSystem.cs b/Content.Server/Ghost/SpookySpeakerSystem.cs index e347e705bb..e7800c6f90 100644 --- a/Content.Server/Ghost/SpookySpeakerSystem.cs +++ b/Content.Server/Ghost/SpookySpeakerSystem.cs @@ -2,7 +2,6 @@ using Content.Server.Chat.Systems; using Content.Server.Ghost.Components; using Content.Shared.Chat; using Content.Shared.Random.Helpers; -using Robust.Shared.Prototypes; using Robust.Shared.Random; using Robust.Shared.Timing; @@ -10,7 +9,6 @@ namespace Content.Server.Ghost; public sealed partial class SpookySpeakerSystem : EntitySystem { - [Dependency] private IPrototypeManager _proto = default!; [Dependency] private IRobustRandom _random = default!; [Dependency] private IGameTiming _timing = default!; [Dependency] private ChatSystem _chat = default!; @@ -33,7 +31,7 @@ public sealed partial class SpookySpeakerSystem : EntitySystem if (curTime < entity.Comp.NextSpeakTime) return; - if (!_proto.Resolve(entity.Comp.MessageSet, out var messages)) + if (!ProtoMan.Resolve(entity.Comp.MessageSet, out var messages)) return; // Grab a random localized message from the set diff --git a/Content.Server/GridPreloader/GridPreloaderSystem.cs b/Content.Server/GridPreloader/GridPreloaderSystem.cs index feaed8a177..ac66355731 100644 --- a/Content.Server/GridPreloader/GridPreloaderSystem.cs +++ b/Content.Server/GridPreloader/GridPreloaderSystem.cs @@ -5,7 +5,6 @@ using Content.Shared.GridPreloader.Systems; using Robust.Server.GameObjects; using Robust.Shared.Configuration; using Robust.Shared.Map; -using Robust.Shared.Map.Components; using Robust.Shared.Physics.Components; using Robust.Shared.Prototypes; using System.Numerics; @@ -15,13 +14,13 @@ using JetBrains.Annotations; using Robust.Shared.EntitySerialization.Systems; namespace Content.Server.GridPreloader; + public sealed partial class GridPreloaderSystem : SharedGridPreloaderSystem { [Dependency] private IConfigurationManager _cfg = default!; [Dependency] private MapSystem _map = default!; [Dependency] private MapLoaderSystem _mapLoader = default!; [Dependency] private MetaDataSystem _meta = default!; - [Dependency] private IPrototypeManager _prototype = default!; [Dependency] private SharedTransformSystem _transform = default!; /// @@ -68,7 +67,7 @@ public sealed partial class GridPreloaderSystem : SharedGridPreloaderSystem _map.SetPaused(mapId, true); var globalXOffset = 0f; - foreach (var proto in _prototype.EnumeratePrototypes()) + foreach (var proto in ProtoMan.EnumeratePrototypes()) { for (var i = 0; i < proto.Copies; i++) { diff --git a/Content.Server/Guidebook/GuidebookDataSystem.cs b/Content.Server/Guidebook/GuidebookDataSystem.cs index 29c9f1facb..cf6761ab7d 100644 --- a/Content.Server/Guidebook/GuidebookDataSystem.cs +++ b/Content.Server/Guidebook/GuidebookDataSystem.cs @@ -11,8 +11,6 @@ namespace Content.Server.Guidebook; /// public sealed partial class GuidebookDataSystem : EntitySystem { - [Dependency] private IPrototypeManager _protoMan = default!; - private readonly Dictionary> _tagged = []; private GuidebookData _cachedData = new(); @@ -72,7 +70,7 @@ public sealed partial class GuidebookDataSystem : EntitySystem } // Scan entity prototypes for the component-member pairs we noted - var entityPrototypes = _protoMan.EnumeratePrototypes(); + var entityPrototypes = ProtoMan.EnumeratePrototypes(); foreach (var prototype in entityPrototypes) { foreach (var (component, entry) in prototype.Components) diff --git a/Content.Server/Holiday/Christmas/RandomGiftSystem.cs b/Content.Server/Holiday/Christmas/RandomGiftSystem.cs index 5e288b4116..d4105af4a9 100644 --- a/Content.Server/Holiday/Christmas/RandomGiftSystem.cs +++ b/Content.Server/Holiday/Christmas/RandomGiftSystem.cs @@ -20,7 +20,6 @@ public sealed partial class RandomGiftSystem : EntitySystem { [Dependency] private AudioSystem _audio = default!; [Dependency] private HandsSystem _hands = default!; - [Dependency] private IPrototypeManager _prototype = default!; [Dependency] private IRobustRandom _random = default!; [Dependency] private IAdminLogManager _adminLogger = default!; [Dependency] private EntityWhitelistSystem _whitelistSystem = default!; @@ -44,7 +43,7 @@ public sealed partial class RandomGiftSystem : EntitySystem if (_whitelistSystem.IsWhitelistFail(component.ContentsViewers, args.Examiner) || component.SelectedEntity is null) return; - var name = _prototype.Index(component.SelectedEntity).Name; + var name = ProtoMan.Index(component.SelectedEntity).Name; args.PushText(Loc.GetString("gift-packin-contains", ("name", name))); } @@ -96,7 +95,7 @@ public sealed partial class RandomGiftSystem : EntitySystem var mapGridCompName = Factory.GetComponentName(); var physicsCompName = Factory.GetComponentName(); - foreach (var proto in _prototype.EnumeratePrototypes()) + foreach (var proto in ProtoMan.EnumeratePrototypes()) { if (proto.Abstract || proto.HideSpawnMenu || proto.Components.ContainsKey(mapGridCompName) || !proto.Components.ContainsKey(physicsCompName)) continue; diff --git a/Content.Server/Holiday/HolidaySystem.cs b/Content.Server/Holiday/HolidaySystem.cs index 453c2a44fb..bafc821138 100644 --- a/Content.Server/Holiday/HolidaySystem.cs +++ b/Content.Server/Holiday/HolidaySystem.cs @@ -4,14 +4,12 @@ using Content.Server.GameTicking; using Content.Shared.CCVar; using Content.Shared.Holiday; using Robust.Shared.Configuration; -using Robust.Shared.Prototypes; namespace Content.Server.Holiday { public sealed partial class HolidaySystem : EntitySystem { [Dependency] private IConfigurationManager _configManager = default!; - [Dependency] private IPrototypeManager _prototypeManager = default!; [Dependency] private IChatManager _chatManager = default!; [Dependency] private SharedAppearanceSystem _appearance = default!; @@ -40,7 +38,7 @@ namespace Content.Server.Holiday var now = DateTime.Now; - foreach (var holiday in _prototypeManager.EnumeratePrototypes()) + foreach (var holiday in ProtoMan.EnumeratePrototypes()) { if (holiday.ShouldCelebrate(now)) { @@ -74,7 +72,7 @@ namespace Content.Server.Holiday public bool IsCurrentlyHoliday(string holiday) { - if (!_prototypeManager.TryIndex(holiday, out HolidayPrototype? prototype)) + if (!ProtoMan.TryIndex(holiday, out HolidayPrototype? prototype)) return false; return _currentHolidays.Contains(prototype); diff --git a/Content.Server/Humanoid/Systems/RandomHumanoidSystem.cs b/Content.Server/Humanoid/Systems/RandomHumanoidSystem.cs index 90b077c402..8a2bce9fec 100644 --- a/Content.Server/Humanoid/Systems/RandomHumanoidSystem.cs +++ b/Content.Server/Humanoid/Systems/RandomHumanoidSystem.cs @@ -5,7 +5,6 @@ using Content.Shared.Humanoid.Prototypes; using Content.Shared.Humanoid; using Content.Shared.Preferences; using Robust.Shared.Map; -using Robust.Shared.Prototypes; using Robust.Shared.Serialization.Manager; namespace Content.Server.Humanoid.Systems; @@ -16,7 +15,6 @@ namespace Content.Server.Humanoid.Systems; public sealed partial class RandomHumanoidSystem : EntitySystem { [Dependency] private HumanoidProfileSystem _humanoidProfile = default!; - [Dependency] private IPrototypeManager _prototypeManager = default!; [Dependency] private ISerializationManager _serialization = default!; [Dependency] private MetaDataSystem _metaData = default!; [Dependency] private SharedVisualBodySystem _visualBody = default!; @@ -37,11 +35,11 @@ public sealed partial class RandomHumanoidSystem : EntitySystem public EntityUid SpawnRandomHumanoid(string prototypeId, EntityCoordinates coordinates, string name) { - if (!_prototypeManager.TryIndex(prototypeId, out var prototype)) + if (!ProtoMan.TryIndex(prototypeId, out var prototype)) throw new ArgumentException("Could not get random humanoid settings"); var profile = HumanoidCharacterProfile.Random(prototype.SpeciesBlacklist); - var speciesProto = _prototypeManager.Index(profile.Species); + var speciesProto = ProtoMan.Index(profile.Species); var humanoid = EntityManager.CreateEntityUninitialized(speciesProto.Prototype, coordinates); _metaData.SetEntityName(humanoid, prototype.RandomizeName ? profile.Name : name); diff --git a/Content.Server/Implants/ChameleonControllerSystem.cs b/Content.Server/Implants/ChameleonControllerSystem.cs index 997c03eb86..4bf9939150 100644 --- a/Content.Server/Implants/ChameleonControllerSystem.cs +++ b/Content.Server/Implants/ChameleonControllerSystem.cs @@ -4,7 +4,6 @@ using Content.Shared.Clothing; using Content.Shared.Clothing.Components; using Content.Shared.Implants; using Content.Shared.Implants.Components; -using Content.Shared.Interaction; using Content.Shared.Inventory; using Content.Shared.Preferences; using Content.Shared.Preferences.Loadouts; @@ -18,7 +17,6 @@ namespace Content.Server.Implants; public sealed partial class ChameleonControllerSystem : SharedChameleonControllerSystem { - [Dependency] private IPrototypeManager _proto = default!; [Dependency] private InventorySystem _inventory = default!; [Dependency] private SharedStationSpawningSystem _stationSpawningSystem = default!; [Dependency] private ChameleonClothingSystem _chameleonClothingSystem = default!; @@ -47,10 +45,10 @@ public sealed partial class ChameleonControllerSystem : SharedChameleonControlle /// private void ChangeChameleonClothingToOutfit(EntityUid user, ProtoId outfit) { - var outfitPrototype = _proto.Index(outfit); + var outfitPrototype = ProtoMan.Index(outfit); - _proto.Resolve(outfitPrototype.Job, out var jobPrototype); - _proto.Resolve(outfitPrototype.StartingGear, out var startingGearPrototype); + ProtoMan.Resolve(outfitPrototype.Job, out var jobPrototype); + ProtoMan.Resolve(outfitPrototype.StartingGear, out var startingGearPrototype); GetJobEquipmentInformation(jobPrototype, user, out var customRoleLoadout, out var defaultRoleLoadout, out var jobStartingGearPrototype); @@ -81,7 +79,7 @@ public sealed partial class ChameleonControllerSystem : SharedChameleonControlle if (jobPrototype == null) return; - _proto.Resolve(jobPrototype.StartingGear, out jobStartingGearPrototype); + ProtoMan.Resolve(jobPrototype.StartingGear, out jobStartingGearPrototype); if (!TryComp(user, out var actorComponent)) return; @@ -96,11 +94,11 @@ public sealed partial class ChameleonControllerSystem : SharedChameleonControlle profile.Loadouts.TryGetValue(jobProtoId, out customRoleLoadout); - if (!_proto.HasIndex(jobProtoId)) + if (!ProtoMan.HasIndex(jobProtoId)) return; defaultRoleLoadout = new RoleLoadout(jobProtoId); - defaultRoleLoadout.SetDefault(profile, null, _proto); // only sets the default if the player has no loadout + defaultRoleLoadout.SetDefault(profile, null, ProtoMan); // only sets the default if the player has no loadout } private void ChameleonControllerOutfitItemSelected(Entity ent, ref InventoryRelayedEvent args) diff --git a/Content.Server/Kitchen/EntitySystems/MicrowaveSystem.cs b/Content.Server/Kitchen/EntitySystems/MicrowaveSystem.cs index 5ccb4d255d..e28f0f0f78 100644 --- a/Content.Server/Kitchen/EntitySystems/MicrowaveSystem.cs +++ b/Content.Server/Kitchen/EntitySystems/MicrowaveSystem.cs @@ -62,7 +62,6 @@ namespace Content.Server.Kitchen.EntitySystems [Dependency] private HandsSystem _handsSystem = default!; [Dependency] private SharedItemSystem _item = default!; [Dependency] private SharedStackSystem _stack = default!; - [Dependency] private IPrototypeManager _prototype = default!; [Dependency] private IAdminLogManager _adminLogger = default!; [Dependency] private SharedSuicideSystem _suicide = default!; [Dependency] private SharedPowerStateSystem _powerState = default!; @@ -238,7 +237,7 @@ namespace Content.Server.Kitchen.EntitySystems // If an entity has a stack component, use the stacktype instead of prototype id if (TryComp(item, out var stackComp)) { - itemID = _prototype.Index(stackComp.StackTypeId).Spawn; + itemID = ProtoMan.Index(stackComp.StackTypeId).Spawn; } else { @@ -558,7 +557,7 @@ namespace Content.Server.Kitchen.EntitySystems // If a microwave recipe uses a stacked item, use the default stack prototype id instead of prototype id if (TryComp(item, out var stackComp)) { - solidID = _prototype.Index(stackComp.StackTypeId).Spawn; + solidID = ProtoMan.Index(stackComp.StackTypeId).Spawn; amountToAdd = stackComp.Count; } else @@ -705,7 +704,7 @@ namespace Content.Server.Kitchen.EntitySystems { foreach (ProtoId recipeId in ent.Comp.ProvidedRecipes) { - if (_prototype.Resolve(recipeId, out var recipeProto)) + if (ProtoMan.Resolve(recipeId, out var recipeProto)) { args.Recipes.Add(recipeProto); } diff --git a/Content.Server/Lathe/LatheSystem.cs b/Content.Server/Lathe/LatheSystem.cs index 7ecd05d810..1a14b07a08 100644 --- a/Content.Server/Lathe/LatheSystem.cs +++ b/Content.Server/Lathe/LatheSystem.cs @@ -6,7 +6,6 @@ using Content.Server.Fluids.EntitySystems; using Content.Server.Lathe.Components; using Content.Server.Materials; using Content.Server.Popups; -using Content.Server.Power.Components; using Content.Server.Power.EntitySystems; using Content.Server.Radio.EntitySystems; using Content.Server.Stack; @@ -16,9 +15,7 @@ using Content.Shared.Chemistry.EntitySystems; using Content.Shared.Chemistry.Reagent; using Content.Shared.UserInterface; using Content.Shared.Database; -using Content.Shared.Emag.Components; using Content.Shared.Emag.Systems; -using Content.Shared.Examine; using Content.Shared.Lathe; using Content.Shared.Lathe.Prototypes; using Content.Shared.Localizations; @@ -40,7 +37,6 @@ namespace Content.Server.Lathe public sealed partial class LatheSystem : SharedLatheSystem { [Dependency] private IGameTiming _timing = default!; - [Dependency] private IPrototypeManager _proto = default!; [Dependency] private IAdminLogManager _adminLogger = default!; [Dependency] private AtmosphereSystem _atmosphere = default!; [Dependency] private SharedAppearanceSystem _appearance = default!; @@ -137,7 +133,7 @@ namespace Content.Server.Lathe var recipes = GetAvailableRecipes(uid, component, true); foreach (var id in recipes) { - if (!_proto.Resolve(id, out var proto)) + if (!ProtoMan.Resolve(id, out var proto)) continue; foreach (var (mat, _) in proto.Materials) { @@ -204,7 +200,7 @@ namespace Content.Server.Lathe batch.ItemsPrinted++; if (batch.ItemsPrinted >= batch.ItemsRequested || batch.ItemsPrinted < 0) // Rollover sanity check component.Queue.RemoveFirst(); - var recipe = _proto.Index(batch.Recipe); + var recipe = ProtoMan.Index(batch.Recipe); var time = _reagentSpeed.ApplySpeed(uid, recipe.CompleteTime) * component.TimeMultiplier; @@ -234,7 +230,7 @@ namespace Content.Server.Lathe if (comp.CurrentRecipe != null) { - var currentRecipe = _proto.Index(comp.CurrentRecipe.Value); + var currentRecipe = ProtoMan.Index(comp.CurrentRecipe.Value); if (currentRecipe.Result is { } resultProto) { var result = Spawn(resultProto, Transform(uid).Coordinates); @@ -293,7 +289,7 @@ namespace Content.Server.Lathe { foreach (var id in packs) { - var pack = _proto.Index(id); + var pack = ProtoMan.Index(id); foreach (var recipe in pack.Recipes) { if (args.GetUnavailable || database.UnlockedRecipes.Contains(recipe)) @@ -384,7 +380,7 @@ namespace Content.Server.Lathe if (!potentialRecipes.Contains(new(recipeId))) continue; - if (!_proto.TryIndex(recipeId, out LatheRecipePrototype? recipe)) + if (!ProtoMan.TryIndex(recipeId, out LatheRecipePrototype? recipe)) continue; var itemName = GetRecipeName(recipe!); @@ -444,7 +440,7 @@ namespace Content.Server.Lathe /// private void RefundCurrentRecipe(EntityUid uid, LatheComponent lathe) { - _proto.Resolve(lathe.CurrentRecipe, out var recipe); + ProtoMan.Resolve(lathe.CurrentRecipe, out var recipe); foreach (var (mat, amount) in GetAdjustedAmount(lathe, recipe!)) _materialStorage.TryChangeMaterialAmount(uid, mat, amount); @@ -458,7 +454,7 @@ namespace Content.Server.Lathe { var delta = batch.ItemsRequested - batch.ItemsPrinted; - _proto.Resolve(batch.Recipe, out var recipe); + ProtoMan.Resolve(batch.Recipe, out var recipe); foreach (var (mat, amount) in GetAdjustedAmount(lathe, recipe!)) _materialStorage.TryChangeMaterialAmount(uid, mat, amount * delta); @@ -498,7 +494,7 @@ namespace Content.Server.Lathe private void OnLatheQueueRecipeMessage(EntityUid uid, LatheComponent component, LatheQueueRecipeMessage args) { - if (_proto.TryIndex(args.ID, out LatheRecipePrototype? recipe)) + if (ProtoMan.TryIndex(args.ID, out LatheRecipePrototype? recipe)) { if (TryAddToQueue(uid, recipe, args.Quantity, component)) { diff --git a/Content.Server/Machines/EntitySystems/MultipartMachineSystem.cs b/Content.Server/Machines/EntitySystems/MultipartMachineSystem.cs index 46e1896ccb..bce139a07f 100644 --- a/Content.Server/Machines/EntitySystems/MultipartMachineSystem.cs +++ b/Content.Server/Machines/EntitySystems/MultipartMachineSystem.cs @@ -15,7 +15,6 @@ namespace Content.Server.Machines.EntitySystems; /// public sealed partial class MultipartMachineSystem : SharedMultipartMachineSystem { - [Dependency] private IComponentFactory _factory = default!; [Dependency] private MapSystem _mapSystem = default!; [Dependency] private EntityLookupSystem _lookupSystem = default!; @@ -99,7 +98,7 @@ public sealed partial class MultipartMachineSystem : SharedMultipartMachineSyste var originalPart = part.Entity; part.Entity = null; - if (!_factory.TryGetRegistration(part.Component, out var registration)) + if (!Factory.TryGetRegistration(part.Component, out var registration)) break; var query = EntityManager.GetEntityQuery(registration.Type); diff --git a/Content.Server/Maps/MapMigrationSystem.cs b/Content.Server/Maps/MapMigrationSystem.cs index f03f7097ad..fdaa58709f 100644 --- a/Content.Server/Maps/MapMigrationSystem.cs +++ b/Content.Server/Maps/MapMigrationSystem.cs @@ -17,9 +17,6 @@ namespace Content.Server.Maps; /// public sealed partial class MapMigrationSystem : EntitySystem { -#if DEBUG - [Dependency] private IPrototypeManager _protoMan = default!; -#endif [Dependency] private IResourceManager _resMan = default!; private const string MigrationFile = "/migration.yml"; @@ -38,7 +35,7 @@ public sealed partial class MapMigrationSystem : EntitySystem { var newId = ((ValueDataNode) node).Value; if (!string.IsNullOrEmpty(newId) && newId != "null") - DebugTools.Assert(_protoMan.HasIndex(newId), $"{newId} is not an entity prototype."); + DebugTools.Assert(ProtoMan.HasIndex(newId), $"{newId} is not an entity prototype."); } #endif } diff --git a/Content.Server/Materials/MaterialReclaimerSystem.cs b/Content.Server/Materials/MaterialReclaimerSystem.cs index 7b0fbbec61..216bc10074 100644 --- a/Content.Server/Materials/MaterialReclaimerSystem.cs +++ b/Content.Server/Materials/MaterialReclaimerSystem.cs @@ -19,7 +19,6 @@ using Content.Shared.Repairable; using Content.Shared.Stacks; using Robust.Server.GameObjects; using Robust.Shared.Player; -using Robust.Shared.Prototypes; using Robust.Shared.Utility; namespace Content.Server.Materials; @@ -27,7 +26,6 @@ namespace Content.Server.Materials; /// public sealed partial class MaterialReclaimerSystem : SharedMaterialReclaimerSystem { - [Dependency] private IPrototypeManager _prototype = default!; [Dependency] private AppearanceSystem _appearance = default!; [Dependency] private GhostSystem _ghostSystem = default!; [Dependency] private MaterialStorageSystem _materialStorage = default!; @@ -242,7 +240,7 @@ public sealed partial class MaterialReclaimerSystem : SharedMaterialReclaimerSys // Are we a recycler? Only use drainable solution. if (_solutionContainer.TryGetDrainableSolution(item, out _, out var drainableSolution)) { - totalChemicals.AddSolution(drainableSolution, _prototype); + totalChemicals.AddSolution(drainableSolution, ProtoMan); } } else @@ -250,7 +248,7 @@ public sealed partial class MaterialReclaimerSystem : SharedMaterialReclaimerSys // Are we an industrial reagent grinder? Use extractable solution. if (_solutionContainer.TryGetExtractableSolution(item, out _, out var extractableSolution)) { - totalChemicals.AddSolution(extractableSolution, _prototype); + totalChemicals.AddSolution(extractableSolution, ProtoMan); } } diff --git a/Content.Server/Materials/MaterialStorageSystem.cs b/Content.Server/Materials/MaterialStorageSystem.cs index f3e84e99ec..d962f7f0f0 100644 --- a/Content.Server/Materials/MaterialStorageSystem.cs +++ b/Content.Server/Materials/MaterialStorageSystem.cs @@ -21,7 +21,6 @@ namespace Content.Server.Materials; public sealed partial class MaterialStorageSystem : SharedMaterialStorageSystem { [Dependency] private IAdminLogManager _adminLogger = default!; - [Dependency] private IPrototypeManager _prototypeManager = default!; [Dependency] private ActionBlockerSystem _actionBlocker = default!; [Dependency] private SharedAudioSystem _audio = default!; [Dependency] private SharedPopupSystem _popup = default!; @@ -62,14 +61,14 @@ public sealed partial class MaterialStorageSystem : SharedMaterialStorageSystem if (!_actionBlocker.CanInteract(player, uid)) return; - if (!component.CanEjectStoredMaterials || !_prototypeManager.TryIndex(msg.Material, out var material)) + if (!component.CanEjectStoredMaterials || !ProtoMan.TryIndex(msg.Material, out var material)) return; var volume = 0; if (material.StackEntity != null) { - if (!_prototypeManager.Index(material.StackEntity).TryGetComponent(out var composition, EntityManager.ComponentFactory)) + if (!ProtoMan.Index(material.StackEntity.Value).TryComp(out PhysicalCompositionComponent? composition, EntityManager.ComponentFactory)) return; var volumePerSheet = composition.MaterialComposition.FirstOrDefault(kvp => kvp.Key == msg.Material).Value; @@ -138,7 +137,7 @@ public sealed partial class MaterialStorageSystem : SharedMaterialStorageSystem public List SpawnMultipleFromMaterial(int amount, string material, EntityCoordinates coordinates, out int overflowMaterial) { overflowMaterial = 0; - if (!_prototypeManager.TryIndex(material, out var stackType)) + if (!ProtoMan.TryIndex(material, out var stackType)) { Log.Error("Failed to index material prototype " + material); return new List(); @@ -172,8 +171,8 @@ public sealed partial class MaterialStorageSystem : SharedMaterialStorageSystem if (amount <= 0 || materialProto.StackEntity == null) return new List(); - var entProto = _prototypeManager.Index(materialProto.StackEntity); - if (!entProto.TryGetComponent(out var composition, EntityManager.ComponentFactory)) + var entProto = ProtoMan.Index(materialProto.StackEntity); + if (!entProto.TryComp(out var composition, EntityManager.ComponentFactory)) return new List(); var materialPerStack = composition.MaterialComposition[materialProto.ID]; diff --git a/Content.Server/Mining/MiningSystem.cs b/Content.Server/Mining/MiningSystem.cs index e7a6c0df5f..6a118469ed 100644 --- a/Content.Server/Mining/MiningSystem.cs +++ b/Content.Server/Mining/MiningSystem.cs @@ -13,7 +13,6 @@ namespace Content.Server.Mining; /// public sealed partial class MiningSystem : EntitySystem { - [Dependency] private IPrototypeManager _proto = default!; [Dependency] private IRobustRandom _random = default!; /// @@ -29,7 +28,7 @@ public sealed partial class MiningSystem : EntitySystem if (component.CurrentOre == null) return; - var proto = _proto.Index(component.CurrentOre); + var proto = ProtoMan.Index(component.CurrentOre); if (proto.OreEntity == null) return; @@ -47,6 +46,6 @@ public sealed partial class MiningSystem : EntitySystem if (component.CurrentOre != null || component.OreRarityPrototypeId == null || !_random.Prob(component.OreChance)) return; - component.CurrentOre = _proto.Index(component.OreRarityPrototypeId).Pick(_random); + component.CurrentOre = ProtoMan.Index(component.OreRarityPrototypeId).Pick(_random); } } diff --git a/Content.Server/NPC/HTN/HTNSystem.cs b/Content.Server/NPC/HTN/HTNSystem.cs index 1ff0d0deb1..13dd5dd740 100644 --- a/Content.Server/NPC/HTN/HTNSystem.cs +++ b/Content.Server/NPC/HTN/HTNSystem.cs @@ -19,7 +19,6 @@ namespace Content.Server.NPC.HTN; public sealed partial class HTNSystem : EntitySystem { [Dependency] private IAdminManager _admin = default!; - [Dependency] private IPrototypeManager _prototypeManager = default!; [Dependency] private NPCSystem _npc = default!; [Dependency] private NPCUtilitySystem _utility = default!; @@ -78,7 +77,7 @@ public sealed partial class HTNSystem : EntitySystem // Add dependencies for all operators. // We put code on operators as I couldn't think of a clean way to put it on systems. - foreach (var compound in _prototypeManager.EnumeratePrototypes()) + foreach (var compound in ProtoMan.EnumeratePrototypes()) { UpdateCompound(compound); } @@ -314,7 +313,7 @@ public sealed partial class HTNSystem : EntitySystem if (task is HTNCompoundTask compTask) { - var compound = _prototypeManager.Index(compTask.Task); + var compound = ProtoMan.Index(compTask.Task); level++; text.AppendLine(compound.ID); var branches = compound.Branches; @@ -487,7 +486,7 @@ public sealed partial class HTNSystem : EntitySystem var job = new HTNPlanJob( 0.02, - _prototypeManager, + ProtoMan, component.RootTask, component.Blackboard.ShallowClone(), branchTraversal, cancelToken.Token); @@ -517,7 +516,7 @@ public sealed partial class HTNSystem : EntitySystem } else if (task is HTNCompoundTask compTask) { - var compound = _prototypeManager.Index(compTask.Task); + var compound = ProtoMan.Index(compTask.Task); builder.AppendLine(buffer + $"Compound: {task}"); for (var i = 0; i < compound.Branches.Count; i++) diff --git a/Content.Server/NPC/Systems/NPCUtilitySystem.cs b/Content.Server/NPC/Systems/NPCUtilitySystem.cs index eecf1d538d..c0e7db0120 100644 --- a/Content.Server/NPC/Systems/NPCUtilitySystem.cs +++ b/Content.Server/NPC/Systems/NPCUtilitySystem.cs @@ -42,7 +42,6 @@ namespace Content.Server.NPC.Systems; /// public sealed partial class NPCUtilitySystem : EntitySystem { - [Dependency] private IPrototypeManager _proto = default!; [Dependency] private ContainerSystem _container = default!; [Dependency] private EntityLookupSystem _lookup = default!; [Dependency] private HandsSystem _hands = default!; @@ -81,7 +80,7 @@ public sealed partial class NPCUtilitySystem : EntitySystem { // TODO: PickHostilesop or whatever needs to juse be UtilityQueryOperator - var weh = _proto.Index(proto); + var weh = ProtoMan.Index(proto); var ents = _entPool.Get(); foreach (var query in weh.Query) @@ -152,7 +151,7 @@ public sealed partial class NPCUtilitySystem : EntitySystem case InverseBoolCurve: return conScore.Equals(0f) ? 1f : 0f; case PresetCurve presetCurve: - return GetScore(_proto.Index(presetCurve.Preset).Curve, conScore); + return GetScore(ProtoMan.Index(presetCurve.Preset).Curve, conScore); case QuadraticCurve quadraticCurve: return Math.Clamp(quadraticCurve.Slope * MathF.Pow(conScore - quadraticCurve.XOffset, quadraticCurve.Exponent) + quadraticCurve.YOffset, 0f, 1f); default: diff --git a/Content.Server/NameIdentifier/NameIdentifierSystem.cs b/Content.Server/NameIdentifier/NameIdentifierSystem.cs index 5ab69aed37..c8ab73fdf5 100644 --- a/Content.Server/NameIdentifier/NameIdentifierSystem.cs +++ b/Content.Server/NameIdentifier/NameIdentifierSystem.cs @@ -9,7 +9,6 @@ namespace Content.Server.NameIdentifier; public sealed partial class NameIdentifierSystem : SharedNameIdentifierSystem { - [Dependency] private IPrototypeManager _prototypeManager = default!; [Dependency] private IRobustRandom _robustRandom = default!; [Dependency] private NameModifierSystem _nameModifier = default!; @@ -55,7 +54,7 @@ public sealed partial class NameIdentifierSystem : SharedNameIdentifierSystem /// public string GenerateUniqueName(EntityUid uid, ProtoId proto, out int randomVal) { - return GenerateUniqueName(uid, _prototypeManager.Index(proto), out randomVal); + return GenerateUniqueName(uid, ProtoMan.Index(proto), out randomVal); } /// @@ -88,7 +87,7 @@ public sealed partial class NameIdentifierSystem : SharedNameIdentifierSystem if (ent.Comp.Group is null) return; - if (!_prototypeManager.Resolve(ent.Comp.Group, out var group)) + if (!ProtoMan.Resolve(ent.Comp.Group, out var group)) return; int id; @@ -147,7 +146,7 @@ public sealed partial class NameIdentifierSystem : SharedNameIdentifierSystem private void EnsureIds() { - foreach (var proto in _prototypeManager.EnumeratePrototypes()) + foreach (var proto in ProtoMan.EnumeratePrototypes()) { var ids = GetOrCreateIdList(proto); @@ -164,7 +163,7 @@ public sealed partial class NameIdentifierSystem : SharedNameIdentifierSystem foreach (var proto in CurrentIds.Keys) { - if (!_prototypeManager.HasIndex(proto)) + if (!ProtoMan.HasIndex(proto)) { toRemove.Add(proto); } diff --git a/Content.Server/Objectives/ObjectivesSystem.cs b/Content.Server/Objectives/ObjectivesSystem.cs index f7c9d41fe3..c2efbd8e4e 100644 --- a/Content.Server/Objectives/ObjectivesSystem.cs +++ b/Content.Server/Objectives/ObjectivesSystem.cs @@ -25,7 +25,6 @@ public sealed partial class ObjectivesSystem : SharedObjectivesSystem { [Dependency] private IConfigurationManager _cfg = default!; [Dependency] private IPlayerManager _player = default!; - [Dependency] private IPrototypeManager _prototypeManager = default!; [Dependency] private IRobustRandom _random = default!; [Dependency] private EmergencyShuttleSystem _emergencyShuttle = default!; [Dependency] private SharedJobSystem _job = default!; @@ -42,14 +41,14 @@ public sealed partial class ObjectivesSystem : SharedObjectivesSystem Subs.CVar(_cfg, CCVars.GameShowGreentext, value => _showGreentext = value, true); - _prototypeManager.PrototypesReloaded += CreateCompletions; + ProtoMan.PrototypesReloaded += CreateCompletions; } public override void Shutdown() { base.Shutdown(); - _prototypeManager.PrototypesReloaded -= CreateCompletions; + ProtoMan.PrototypesReloaded -= CreateCompletions; } /// @@ -152,7 +151,7 @@ public sealed partial class ObjectivesSystem : SharedObjectivesSystem //TO DO: //check for the right group here. Getting the target issuer is easy: objectiveGroup.Key //It should be compared to the type of the group's issuer. - if (!_prototypeManager.TryIndex(objectiveGroup.Key, out var issuer)) + if (!ProtoMan.TryIndex(objectiveGroup.Key, out var issuer)) { Log.Error($"Found incorrect objective issuer {issuer} when generating round end text."); continue; @@ -226,7 +225,7 @@ public sealed partial class ObjectivesSystem : SharedObjectivesSystem public EntityUid? GetRandomObjective(EntityUid mindId, MindComponent mind, ProtoId objectiveGroupProto, float maxDifficulty) { - if (!_prototypeManager.TryIndex(objectiveGroupProto, out var groupsProto)) + if (!ProtoMan.TryIndex(objectiveGroupProto, out var groupsProto)) { Log.Error($"Tried to get a random objective, but can't index WeightedRandomPrototype {objectiveGroupProto}"); return null; @@ -237,7 +236,7 @@ public sealed partial class ObjectivesSystem : SharedObjectivesSystem while (_random.TryPickAndTake(groups, out var groupName)) { - if (!_prototypeManager.TryIndex(groupName, out var group)) + if (!ProtoMan.TryIndex(groupName, out var group)) { Log.Error($"Couldn't index objective group prototype {groupName}"); return null; @@ -246,7 +245,7 @@ public sealed partial class ObjectivesSystem : SharedObjectivesSystem var objectives = group.Weights.ShallowClone(); while (_random.TryPickAndTake(objectives, out var objectiveProto)) { - if (!_prototypeManager.Index(objectiveProto).TryGetComponent(out var objectiveComp, EntityManager.ComponentFactory)) + if (!ProtoMan.Index(objectiveProto).TryComp(out var objectiveComp, EntityManager.ComponentFactory)) continue; if (objectiveComp.Difficulty <= maxDifficulty && TryCreateObjective((mindId, mind), objectiveProto, out var objective)) @@ -320,7 +319,7 @@ public sealed partial class ObjectivesSystem : SharedObjectivesSystem private void CreateCompletions() { - _objectives = _prototypeManager.EnumeratePrototypes() + _objectives = ProtoMan.EnumeratePrototypes() .Where(p => p.HasComponent()) .Select(p => p.ID) .Order(); diff --git a/Content.Server/Objectives/Systems/StealConditionSystem.cs b/Content.Server/Objectives/Systems/StealConditionSystem.cs index c7e7790cf1..e374ec072e 100644 --- a/Content.Server/Objectives/Systems/StealConditionSystem.cs +++ b/Content.Server/Objectives/Systems/StealConditionSystem.cs @@ -5,7 +5,6 @@ using Content.Shared.Mind; using Content.Shared.Objectives.Components; using Content.Shared.Objectives.Systems; using Robust.Shared.Containers; -using Robust.Shared.Prototypes; using Robust.Shared.Random; using Content.Shared.Mind.Components; using Content.Shared.Mobs.Systems; @@ -18,7 +17,6 @@ namespace Content.Server.Objectives.Systems; public sealed partial class StealConditionSystem : EntitySystem { [Dependency] private IRobustRandom _random = default!; - [Dependency] private IPrototypeManager _proto = default!; [Dependency] private MetaDataSystem _metaData = default!; [Dependency] private MobStateSystem _mobState = default!; [Dependency] private SharedInteractionSystem _interaction = default!; @@ -73,7 +71,7 @@ public sealed partial class StealConditionSystem : EntitySystem //Set the visual, name, icon for the objective. private void OnAfterAssign(Entity condition, ref ObjectiveAfterAssignEvent args) { - var group = _proto.Index(condition.Comp.StealGroup); + var group = ProtoMan.Index(condition.Comp.StealGroup); string localizedName = Loc.GetString(group.Name); var title = condition.Comp.OwnerText == null diff --git a/Content.Server/Parallax/BiomeSystem.cs b/Content.Server/Parallax/BiomeSystem.cs index 9866934d8a..d37164a1c6 100644 --- a/Content.Server/Parallax/BiomeSystem.cs +++ b/Content.Server/Parallax/BiomeSystem.cs @@ -36,9 +36,7 @@ public sealed partial class BiomeSystem : SharedBiomeSystem { [Dependency] private IConfigurationManager _configManager = default!; [Dependency] private IConsoleHost _console = default!; - [Dependency] private IMapManager _mapManager = default!; [Dependency] private IParallelManager _parallel = default!; - [Dependency] private IPrototypeManager _proto = default!; [Dependency] private IPlayerManager _playerManager = default!; [Dependency] private IRobustRandom _random = default!; [Dependency] private AtmosphereSystem _atmos = default!; @@ -119,7 +117,7 @@ public sealed partial class BiomeSystem : SharedBiomeSystem SetSeed(uid, component, _random.Next()); } - if (_proto.Resolve(component.Template, out var biome)) + if (ProtoMan.Resolve(component.Template, out var biome)) SetTemplate(uid, component, biome); var xform = Transform(uid); @@ -129,7 +127,7 @@ public sealed partial class BiomeSystem : SharedBiomeSystem { var setTiles = new List<(Vector2i Index, Tile tile)>(); - foreach (var grid in _mapManager.GetAllGrids(mapId)) + foreach (var grid in _mapSystem.GetAllGrids(mapId)) { if (!_fixturesQuery.TryGetComponent(grid.Owner, out var fixtures)) continue; diff --git a/Content.Server/Players/JobWhitelist/JobWhitelistSystem.cs b/Content.Server/Players/JobWhitelist/JobWhitelistSystem.cs index 4b6a43b71e..4910b17a16 100644 --- a/Content.Server/Players/JobWhitelist/JobWhitelistSystem.cs +++ b/Content.Server/Players/JobWhitelist/JobWhitelistSystem.cs @@ -15,7 +15,6 @@ public sealed partial class JobWhitelistSystem : EntitySystem [Dependency] private IConfigurationManager _config = default!; [Dependency] private JobWhitelistManager _manager = default!; [Dependency] private IPlayerManager _player = default!; - [Dependency] private IPrototypeManager _prototypes = default!; private ImmutableArray> _whitelistedJobs = []; @@ -79,7 +78,7 @@ public sealed partial class JobWhitelistSystem : EntitySystem private void CacheJobs() { var builder = ImmutableArray.CreateBuilder>(); - foreach (var job in _prototypes.EnumeratePrototypes()) + foreach (var job in ProtoMan.EnumeratePrototypes()) { if (job.Whitelisted) builder.Add(job.ID); diff --git a/Content.Server/Players/PlayTimeTracking/PlayTimeTrackingSystem.cs b/Content.Server/Players/PlayTimeTracking/PlayTimeTrackingSystem.cs index 827c756972..3cf55ecac5 100644 --- a/Content.Server/Players/PlayTimeTracking/PlayTimeTrackingSystem.cs +++ b/Content.Server/Players/PlayTimeTracking/PlayTimeTrackingSystem.cs @@ -34,7 +34,6 @@ public sealed partial class PlayTimeTrackingSystem : EntitySystem [Dependency] private IConfigurationManager _cfg = default!; [Dependency] private IPlayerManager _playerManager = default!; [Dependency] private IServerPreferencesManager _preferencesManager = default!; - [Dependency] private IPrototypeManager _prototypes = default!; [Dependency] private SharedRoleSystem _roles = default!; [Dependency] private PlayTimeTrackingManager _tracking = default!; @@ -110,7 +109,7 @@ public sealed partial class PlayTimeTrackingSystem : EntitySystem if (string.IsNullOrWhiteSpace(role.PlayTimeTrackerId)) continue; - yield return _prototypes.Index(role.PlayTimeTrackerId).ID; + yield return ProtoMan.Index(role.PlayTimeTrackerId).ID; } } @@ -255,7 +254,7 @@ public sealed partial class PlayTimeTrackingSystem : EntitySystem playTimes, out _, EntityManager, - _prototypes, + ProtoMan, (HumanoidCharacterProfile?) _preferencesManager.GetPreferences(player.UserId).SelectedCharacter); } @@ -283,7 +282,7 @@ public sealed partial class PlayTimeTrackingSystem : EntitySystem playTimes, out _, EntityManager, - _prototypes, + ProtoMan, (HumanoidCharacterProfile?) _preferencesManager.GetPreferences(player.UserId).SelectedCharacter); } @@ -300,9 +299,9 @@ public sealed partial class PlayTimeTrackingSystem : EntitySystem playTimes = new Dictionary(); } - foreach (var job in _prototypes.EnumeratePrototypes()) + foreach (var job in ProtoMan.EnumeratePrototypes()) { - if (JobRequirements.TryRequirementsMet(job, playTimes, out _, EntityManager, _prototypes, (HumanoidCharacterProfile?) _preferencesManager.GetPreferences(player.UserId).SelectedCharacter)) + if (JobRequirements.TryRequirementsMet(job, playTimes, out _, EntityManager, ProtoMan, (HumanoidCharacterProfile?) _preferencesManager.GetPreferences(player.UserId).SelectedCharacter)) roles.Add(job.ID); } @@ -324,8 +323,8 @@ public sealed partial class PlayTimeTrackingSystem : EntitySystem for (var i = 0; i < jobs.Count; i++) { - if (_prototypes.Resolve(jobs[i], out var job) - && JobRequirements.TryRequirementsMet(job, playTimes, out _, EntityManager, _prototypes, (HumanoidCharacterProfile?) _preferencesManager.GetPreferences(userId).SelectedCharacter)) + if (ProtoMan.Resolve(jobs[i], out var job) + && JobRequirements.TryRequirementsMet(job, playTimes, out _, EntityManager, ProtoMan, (HumanoidCharacterProfile?) _preferencesManager.GetPreferences(userId).SelectedCharacter)) { continue; } diff --git a/Content.Server/Polymorph/Systems/PolymorphSystem.cs b/Content.Server/Polymorph/Systems/PolymorphSystem.cs index 3e65dcbe15..b8bd562c8f 100644 --- a/Content.Server/Polymorph/Systems/PolymorphSystem.cs +++ b/Content.Server/Polymorph/Systems/PolymorphSystem.cs @@ -27,7 +27,6 @@ namespace Content.Server.Polymorph.Systems; public sealed partial class PolymorphSystem : EntitySystem { [Dependency] private SharedMapSystem _map = default!; - [Dependency] private IPrototypeManager _proto = default!; [Dependency] private IGameTiming _gameTiming = default!; [Dependency] private ActionsSystem _actions = default!; [Dependency] private AudioSystem _audio = default!; @@ -113,7 +112,7 @@ public sealed partial class PolymorphSystem : EntitySystem private void OnPolymorphActionEvent(Entity ent, ref PolymorphActionEvent args) { - if (!_proto.Resolve(args.ProtoId, out var prototype) || args.Handled) + if (!ProtoMan.Resolve(args.ProtoId, out var prototype) || args.Handled) return; PolymorphEntity(ent, prototype.Configuration); @@ -168,7 +167,7 @@ public sealed partial class PolymorphSystem : EntitySystem /// The id of the polymorph prototype public EntityUid? PolymorphEntity(EntityUid uid, ProtoId protoId) { - var config = _proto.Index(protoId).Configuration; + var config = ProtoMan.Index(protoId).Configuration; return PolymorphEntity(uid, config); } @@ -390,10 +389,10 @@ public sealed partial class PolymorphSystem : EntitySystem if (target.Comp.PolymorphActions.ContainsKey(id)) return; - if (!_proto.Resolve(id, out var polyProto)) + if (!ProtoMan.Resolve(id, out var polyProto)) return; - var entProto = _proto.Index(polyProto.Configuration.Entity); + var entProto = ProtoMan.Index(polyProto.Configuration.Entity); EntityUid? actionId = default!; if (!_actions.AddAction(target, ref actionId, RevertPolymorphId, target)) diff --git a/Content.Server/Procedural/DungeonSystem.Commands.cs b/Content.Server/Procedural/DungeonSystem.Commands.cs index 01cc6d3676..a6dd3fd1fe 100644 --- a/Content.Server/Procedural/DungeonSystem.Commands.cs +++ b/Content.Server/Procedural/DungeonSystem.Commands.cs @@ -29,7 +29,7 @@ public sealed partial class DungeonSystem var mapId = new MapId(mapInt); - if (!_prototype.TryIndex(args[1], out var dungeon)) + if (!ProtoMan.TryIndex(args[1], out var dungeon)) { shell.WriteError(Loc.GetString("cmd-dungen-config")); return; @@ -81,7 +81,7 @@ public sealed partial class DungeonSystem if (args.Length == 2) { - return CompletionResult.FromHintOptions(CompletionHelper.PrototypeIDs(proto: _prototype), Loc.GetString("cmd-dungen-hint-config")); + return CompletionResult.FromHintOptions(CompletionHelper.PrototypeIDs(proto: ProtoMan), Loc.GetString("cmd-dungen-hint-config")); } if (args.Length == 3) @@ -118,7 +118,7 @@ public sealed partial class DungeonSystem var mapId = new MapId(mapInt); var mapUid = _maps.GetMapOrInvalid(mapId); - if (!_prototype.TryIndex(args[1], out var pack)) + if (!ProtoMan.TryIndex(args[1], out var pack)) { return; } @@ -174,7 +174,7 @@ public sealed partial class DungeonSystem var mapId = new MapId(mapInt); var mapUid =_maps.GetMapOrInvalid(mapId); - if (!_prototype.TryIndex(args[1], out var preset)) + if (!ProtoMan.TryIndex(args[1], out var preset)) { return; } @@ -208,7 +208,7 @@ public sealed partial class DungeonSystem if (args.Length == 2) { - return CompletionResult.FromOptions(CompletionHelper.PrototypeIDs(proto: _prototype)); + return CompletionResult.FromOptions(CompletionHelper.PrototypeIDs(proto: ProtoMan)); } return CompletionResult.Empty; @@ -223,7 +223,7 @@ public sealed partial class DungeonSystem if (args.Length == 2) { - return CompletionResult.FromOptions(CompletionHelper.PrototypeIDs(proto: _prototype)); + return CompletionResult.FromOptions(CompletionHelper.PrototypeIDs(proto: ProtoMan)); } return CompletionResult.Empty; diff --git a/Content.Server/Procedural/DungeonSystem.Rooms.cs b/Content.Server/Procedural/DungeonSystem.Rooms.cs index 7894520412..feaef1f51f 100644 --- a/Content.Server/Procedural/DungeonSystem.Rooms.cs +++ b/Content.Server/Procedural/DungeonSystem.Rooms.cs @@ -40,7 +40,7 @@ public sealed partial class DungeonSystem _availableRooms.Clear(); - foreach (var proto in _prototype.EnumeratePrototypes()) + foreach (var proto in ProtoMan.EnumeratePrototypes()) { if (minSize is not null && (proto.Size.X < minSize.Value.X || proto.Size.Y < minSize.Value.Y)) continue; diff --git a/Content.Server/Procedural/DungeonSystem.cs b/Content.Server/Procedural/DungeonSystem.cs index 6b4287d4e7..4f59df5fd9 100644 --- a/Content.Server/Procedural/DungeonSystem.cs +++ b/Content.Server/Procedural/DungeonSystem.cs @@ -25,7 +25,6 @@ public sealed partial class DungeonSystem : SharedDungeonSystem { [Dependency] private IConfigurationManager _configManager = default!; [Dependency] private IConsoleHost _console = default!; - [Dependency] private IPrototypeManager _prototype = default!; [Dependency] private IRobustRandom _random = default!; [Dependency] private ITileDefinitionManager _tileDefManager = default!; [Dependency] private AnchorableSystem _anchorable = default!; @@ -95,7 +94,7 @@ public sealed partial class DungeonSystem : SharedDungeonSystem return; // Force all templates to be setup. - foreach (var room in _prototype.EnumeratePrototypes()) + foreach (var room in ProtoMan.EnumeratePrototypes()) { GetOrCreateTemplate(room); } @@ -201,7 +200,7 @@ public sealed partial class DungeonSystem : SharedDungeonSystem Log, DungeonJobTime, EntityManager, - _prototype, + ProtoMan, _tileDefManager, _anchorable, _decals, @@ -234,7 +233,7 @@ public sealed partial class DungeonSystem : SharedDungeonSystem Log, DungeonJobTime, EntityManager, - _prototype, + ProtoMan, _tileDefManager, _anchorable, _decals, diff --git a/Content.Server/Radio/EntitySystems/RadioDeviceSystem.cs b/Content.Server/Radio/EntitySystems/RadioDeviceSystem.cs index 3c93a89a2f..04d516a983 100644 --- a/Content.Server/Radio/EntitySystems/RadioDeviceSystem.cs +++ b/Content.Server/Radio/EntitySystems/RadioDeviceSystem.cs @@ -21,7 +21,6 @@ namespace Content.Server.Radio.EntitySystems; /// public sealed partial class RadioDeviceSystem : SharedRadioDeviceSystem { - [Dependency] private IPrototypeManager _protoMan = default!; [Dependency] private PopupSystem _popup = default!; [Dependency] private ChatSystem _chat = default!; [Dependency] private RadioSystem _radio = default!; @@ -139,7 +138,7 @@ public sealed partial class RadioDeviceSystem : SharedRadioDeviceSystem if (!args.IsInDetailsRange) return; - var proto = _protoMan.Index(component.BroadcastChannel); + var proto = ProtoMan.Index(component.BroadcastChannel); using (args.PushGroup(nameof(RadioMicrophoneComponent))) { @@ -154,7 +153,7 @@ public sealed partial class RadioDeviceSystem : SharedRadioDeviceSystem if (HasComp(args.Source)) return; // no feedback loops please. - var channel = _protoMan.Index(component.BroadcastChannel)!; + var channel = ProtoMan.Index(component.BroadcastChannel)!; if (_recentlySent.Add((args.Message, args.Source, channel))) _radio.SendRadioMessage(args.Source, args.Message, channel, uid); } @@ -220,7 +219,7 @@ public sealed partial class RadioDeviceSystem : SharedRadioDeviceSystem if (ent.Comp.RequiresPower && !this.IsPowered(ent, EntityManager)) return; - if (!_protoMan.HasIndex(args.Channel) || !ent.Comp.SupportedChannels.Contains(args.Channel)) + if (!ProtoMan.HasIndex(args.Channel) || !ent.Comp.SupportedChannels.Contains(args.Channel)) return; SetIntercomChannel(ent, args.Channel); diff --git a/Content.Server/Radio/EntitySystems/RadioSystem.cs b/Content.Server/Radio/EntitySystems/RadioSystem.cs index 1285a8fe49..e512715e6e 100644 --- a/Content.Server/Radio/EntitySystems/RadioSystem.cs +++ b/Content.Server/Radio/EntitySystems/RadioSystem.cs @@ -26,7 +26,6 @@ public sealed partial class RadioSystem : EntitySystem [Dependency] private INetManager _netMan = default!; [Dependency] private IReplayRecordingManager _replay = default!; [Dependency] private IAdminLogManager _adminLogger = default!; - [Dependency] private IPrototypeManager _prototype = default!; [Dependency] private IRobustRandom _random = default!; [Dependency] private ChatSystem _chat = default!; [Dependency] private IChatManager _chatManager = default!; @@ -80,7 +79,7 @@ public sealed partial class RadioSystem : EntitySystem /// public void SendRadioMessage(EntityUid messageSource, string message, ProtoId channel, EntityUid radioSource, bool escapeMarkup = true) { - SendRadioMessage(messageSource, message, _prototype.Index(channel), radioSource, escapeMarkup: escapeMarkup); + SendRadioMessage(messageSource, message, ProtoMan.Index(channel), radioSource, escapeMarkup: escapeMarkup); } /// @@ -101,7 +100,7 @@ public sealed partial class RadioSystem : EntitySystem name = FormattedMessage.EscapeText(name); SpeechVerbPrototype speech; - if (evt.SpeechVerb != null && _prototype.Resolve(evt.SpeechVerb, out var evntProto)) + if (evt.SpeechVerb != null && ProtoMan.Resolve(evt.SpeechVerb, out var evntProto)) speech = evntProto; else speech = _chat.GetSpeechVerb(messageSource, message); diff --git a/Content.Server/RandomMetadata/RandomMetadataSystem.cs b/Content.Server/RandomMetadata/RandomMetadataSystem.cs index e52030208d..40e61cd668 100644 --- a/Content.Server/RandomMetadata/RandomMetadataSystem.cs +++ b/Content.Server/RandomMetadata/RandomMetadataSystem.cs @@ -8,7 +8,6 @@ namespace Content.Server.RandomMetadata; public sealed partial class RandomMetadataSystem : EntitySystem { - [Dependency] private IPrototypeManager _prototype = default!; [Dependency] private IRobustRandom _random = default!; [Dependency] private MetaDataSystem _metaData = default!; @@ -50,7 +49,7 @@ public sealed partial class RandomMetadataSystem : EntitySystem _outputSegments.Clear(); for (var i = 0; i < segments.Count; ++i) { - var localizedProto = _prototype.Index(segments[i]); + var localizedProto = ProtoMan.Index(segments[i]); _outputSegments.Add(($"part{i}", _random.Pick(localizedProto))); } diff --git a/Content.Server/Research/Disk/ResearchDiskSystem.cs b/Content.Server/Research/Disk/ResearchDiskSystem.cs index 5fa34ae587..d91b14584d 100644 --- a/Content.Server/Research/Disk/ResearchDiskSystem.cs +++ b/Content.Server/Research/Disk/ResearchDiskSystem.cs @@ -4,13 +4,11 @@ using Content.Server.Popups; using Content.Shared.Research.Prototypes; using Content.Server.Research.Systems; using Content.Shared.Research.Components; -using Robust.Shared.Prototypes; namespace Content.Server.Research.Disk { public sealed partial class ResearchDiskSystem : EntitySystem { - [Dependency] private IPrototypeManager _prototype = default!; [Dependency] private PopupSystem _popupSystem = default!; [Dependency] private ResearchSystem _research = default!; public override void Initialize() @@ -39,7 +37,7 @@ namespace Content.Server.Research.Disk if (!component.UnlockAllTech) return; - component.Points = _prototype.EnumeratePrototypes() + component.Points = ProtoMan.EnumeratePrototypes() .Sum(tech => tech.Cost); } } diff --git a/Content.Server/Respawn/SpecialRespawnSystem.cs b/Content.Server/Respawn/SpecialRespawnSystem.cs index 201113b7b1..9ba5dea3ee 100644 --- a/Content.Server/Respawn/SpecialRespawnSystem.cs +++ b/Content.Server/Respawn/SpecialRespawnSystem.cs @@ -9,7 +9,6 @@ using Content.Shared.Respawn; using Content.Shared.Station.Components; using Robust.Shared.Map; using Robust.Shared.Map.Components; -using Robust.Shared.Prototypes; using Robust.Shared.Random; namespace Content.Server.Respawn; @@ -23,7 +22,6 @@ public sealed partial class SpecialRespawnSystem : SharedSpecialRespawnSystem [Dependency] private SharedMapSystem _map = default!; [Dependency] private TurfSystem _turf = default!; [Dependency] private IChatManager _chat = default!; - [Dependency] private IPrototypeManager _proto = default!; public override void Initialize() { @@ -89,7 +87,7 @@ public sealed partial class SpecialRespawnSystem : SharedSpecialRespawnSystem return; //Invalid prototype - if (!_proto.HasIndex(component.Prototype)) + if (!ProtoMan.HasIndex(component.Prototype)) return; if (TryFindRandomTile(entityGridUid.Value, entityMapUid.Value, 10, out var coords)) diff --git a/Content.Server/Roles/RoleSystem.cs b/Content.Server/Roles/RoleSystem.cs index 96eaecfbba..6f1ea657cb 100644 --- a/Content.Server/Roles/RoleSystem.cs +++ b/Content.Server/Roles/RoleSystem.cs @@ -2,14 +2,12 @@ using Content.Server.Chat.Managers; using Content.Shared.Chat; using Content.Shared.Mind; using Content.Shared.Roles; -using Robust.Shared.Prototypes; namespace Content.Server.Roles; public sealed partial class RoleSystem : SharedRoleSystem { [Dependency] private IChatManager _chat = default!; - [Dependency] private IPrototypeManager _proto = default!; public string? MindGetBriefing(EntityUid? mindId) { @@ -49,7 +47,7 @@ public sealed partial class RoleSystem : SharedRoleSystem if (!Player.TryGetSessionById(mind.UserId, out var session)) return; - if (!_proto.Resolve(mind.RoleType, out var proto)) + if (!ProtoMan.Resolve(mind.RoleType, out var proto)) return; var roleText = Loc.GetString(proto.Name); diff --git a/Content.Server/RoundEnd/RoundEndSystem.cs b/Content.Server/RoundEnd/RoundEndSystem.cs index 854a998a07..b5c364a847 100644 --- a/Content.Server/RoundEnd/RoundEndSystem.cs +++ b/Content.Server/RoundEnd/RoundEndSystem.cs @@ -16,7 +16,6 @@ using Content.Shared.GameTicking; using Robust.Shared.Audio.Systems; using Robust.Shared.Configuration; using Robust.Shared.Player; -using Robust.Shared.Prototypes; using Robust.Shared.Timing; using Content.Shared.DeviceNetwork.Components; using Content.Shared.Station.Components; @@ -34,7 +33,6 @@ namespace Content.Server.RoundEnd [Dependency] private IConfigurationManager _cfg = default!; [Dependency] private IChatManager _chatManager = default!; [Dependency] private IGameTiming _gameTiming = default!; - [Dependency] private IPrototypeManager _protoManager = default!; [Dependency] private ChatSystem _chatSystem = default!; [Dependency] private GameTicker _gameTicker = default!; [Dependency] private DeviceNetworkSystem _deviceNetworkSystem = default!; @@ -149,7 +147,7 @@ namespace Content.Server.RoundEnd var stationUid = _stationSystem.GetOwningStation(requester.Value); if (TryComp(stationUid, out var alertLevel)) { - duration = _protoManager + duration = ProtoMan .Index(AlertLevelSystem.DefaultAlertLevelSet) .Levels[alertLevel.CurrentLevel].ShuttleTime; } diff --git a/Content.Server/Salvage/JobBoard/SalvageJobBoardSystem.cs b/Content.Server/Salvage/JobBoard/SalvageJobBoardSystem.cs index 4117d8a023..f2e19d8d63 100644 --- a/Content.Server/Salvage/JobBoard/SalvageJobBoardSystem.cs +++ b/Content.Server/Salvage/JobBoard/SalvageJobBoardSystem.cs @@ -21,7 +21,6 @@ namespace Content.Server.Salvage.JobBoard; public sealed partial class SalvageJobBoardSystem : EntitySystem { [Dependency] private IGameTiming _timing = default!; - [Dependency] private IPrototypeManager _prototypeManager = default!; [Dependency] private AudioSystem _audio = default!; [Dependency] private CargoSystem _cargo = default!; [Dependency] private LabelSystem _label = default!; @@ -78,7 +77,7 @@ public sealed partial class SalvageJobBoardSystem : EntitySystem availableGroups.Add(rank.BountyGroup.Value); } - foreach (var bounty in _prototypeManager.EnumeratePrototypes()) + foreach (var bounty in ProtoMan.EnumeratePrototypes()) { if (ent.Comp.CompletedJobs.Contains(bounty)) continue; @@ -110,7 +109,7 @@ public sealed partial class SalvageJobBoardSystem : EntitySystem // don't worry abooouuuuut it (it'll be O K !) var high = i != ent.Comp.RankThresholds.Count - 1 ? ent.Comp.RankThresholds.Keys.ElementAt(i + 1) - : _prototypeManager.EnumeratePrototypes() + : ProtoMan.EnumeratePrototypes() .Count(p => ent.Comp.RankThresholds.Values .Select(r => r.BountyGroup) .Contains(p.Group)); @@ -160,7 +159,7 @@ public sealed partial class SalvageJobBoardSystem : EntitySystem if (!GetAvailableJobs(ent).Contains(job)) return false; - var jobProto = _prototypeManager.Index(job); + var jobProto = ProtoMan.Index(job); var oldRank = GetRank(ent); @@ -260,7 +259,7 @@ public sealed partial class SalvageJobBoardSystem : EntitySystem !TryComp(station, out var jobsData)) return; - if (!_prototypeManager.TryIndex(args.JobId, out var job)) + if (!ProtoMan.TryIndex(args.JobId, out var job)) return; if (!GetAvailableJobs((station, jobsData)).Contains(args.JobId)) diff --git a/Content.Server/Salvage/SalvageSystem.ExpeditionConsole.cs b/Content.Server/Salvage/SalvageSystem.ExpeditionConsole.cs index aa501368de..bb7e221bd1 100644 --- a/Content.Server/Salvage/SalvageSystem.ExpeditionConsole.cs +++ b/Content.Server/Salvage/SalvageSystem.ExpeditionConsole.cs @@ -1,4 +1,3 @@ -using Content.Shared.Shuttles.Components; using Content.Shared.Procedural; using Content.Shared.Salvage.Expeditions; using Content.Shared.Dataset; @@ -25,10 +24,10 @@ public sealed partial class SalvageSystem SpawnMission(missionparams, station.Value, cdUid); data.ActiveMission = args.Index; - var mission = GetMission(_prototypeManager.Index(missionparams.Difficulty), missionparams.Seed); + var mission = GetMission(ProtoMan.Index(missionparams.Difficulty), missionparams.Seed); data.NextOffer = _timing.CurTime + mission.Duration + TimeSpan.FromSeconds(1); - _labelSystem.Label(cdUid, GetFTLName(_prototypeManager.Index(PlanetNames), missionparams.Seed)); + _labelSystem.Label(cdUid, GetFTLName(ProtoMan.Index(PlanetNames), missionparams.Seed)); _audio.PlayPvs(component.PrintSound, uid); UpdateConsoles((station.Value, data)); diff --git a/Content.Server/Salvage/SalvageSystem.Expeditions.cs b/Content.Server/Salvage/SalvageSystem.Expeditions.cs index adc97ac824..2977e54b08 100644 --- a/Content.Server/Salvage/SalvageSystem.Expeditions.cs +++ b/Content.Server/Salvage/SalvageSystem.Expeditions.cs @@ -169,7 +169,7 @@ public sealed partial class SalvageSystem EntityManager, _timing, _logManager, - _prototypeManager, + ProtoMan, _anchorable, _biome, _dungeon, diff --git a/Content.Server/Salvage/SalvageSystem.Magnet.cs b/Content.Server/Salvage/SalvageSystem.Magnet.cs index 644d7b9ea8..ff66c75a48 100644 --- a/Content.Server/Salvage/SalvageSystem.Magnet.cs +++ b/Content.Server/Salvage/SalvageSystem.Magnet.cs @@ -296,7 +296,7 @@ public sealed partial class SalvageSystem await _dungeon.GenerateDungeonAsync(asteroid.DungeonConfig, grid.Owner, grid.Comp, Vector2i.Zero, seed); break; case DebrisOffering debris: - var debrisProto = _prototypeManager.Index(debris.Id); + var debrisProto = ProtoMan.Index(debris.Id); var debrisGrid = _mapManager.CreateGridEntity(salvMap); await _dungeon.GenerateDungeonAsync(debrisProto, debrisGrid.Owner, debrisGrid.Comp, Vector2i.Zero, seed); break; diff --git a/Content.Server/Salvage/SalvageSystem.cs b/Content.Server/Salvage/SalvageSystem.cs index 23ad01b315..5fbf7b1a72 100644 --- a/Content.Server/Salvage/SalvageSystem.cs +++ b/Content.Server/Salvage/SalvageSystem.cs @@ -4,7 +4,6 @@ using Content.Shared.Salvage; using Robust.Server.GameObjects; using Robust.Shared.Configuration; using Robust.Shared.Map; -using Robust.Shared.Prototypes; using Robust.Shared.Random; using Content.Server.Chat.Managers; using Content.Server.Gravity; @@ -28,7 +27,6 @@ namespace Content.Server.Salvage [Dependency] private IGameTiming _timing = default!; [Dependency] private ILogManager _logManager = default!; [Dependency] private IMapManager _mapManager = default!; - [Dependency] private IPrototypeManager _prototypeManager = default!; [Dependency] private IRobustRandom _random = default!; [Dependency] private AnchorableSystem _anchorable = default!; [Dependency] private BiomeSystem _biome = default!; @@ -59,7 +57,7 @@ namespace Content.Server.Salvage private void Report(EntityUid source, string channelName, string messageKey, params (string, object)[] args) { var message = args.Length == 0 ? Loc.GetString(messageKey) : Loc.GetString(messageKey, args); - var channel = _prototypeManager.Index(channelName); + var channel = ProtoMan.Index(channelName); _radioSystem.SendRadioMessage(source, message, channel, source); } diff --git a/Content.Server/Shuttles/Systems/ArrivalsSystem.cs b/Content.Server/Shuttles/Systems/ArrivalsSystem.cs index 824ac48d26..4820b0946f 100644 --- a/Content.Server/Shuttles/Systems/ArrivalsSystem.cs +++ b/Content.Server/Shuttles/Systems/ArrivalsSystem.cs @@ -49,7 +49,6 @@ public sealed partial class ArrivalsSystem : EntitySystem [Dependency] private IConfigurationManager _cfgManager = default!; [Dependency] private IConsoleHost _console = default!; [Dependency] private IGameTiming _timing = default!; - [Dependency] private IPrototypeManager _protoManager = default!; [Dependency] private IRobustRandom _random = default!; [Dependency] private ActorSystem _actor = default!; [Dependency] private BiomeSystem _biomes = default!; @@ -550,7 +549,7 @@ public sealed partial class ArrivalsSystem : EntitySystem if (_cfgManager.GetCVar(CCVars.ArrivalsPlanet)) { var template = _random.Pick(_arrivalsBiomeOptions); - _biomes.EnsurePlanet(mapUid, _protoManager.Index(template)); + _biomes.EnsurePlanet(mapUid, ProtoMan.Index(template)); var restricted = new RestrictedRangeComponent { Range = 32f diff --git a/Content.Server/Shuttles/Systems/ShuttleSystem.GridFill.cs b/Content.Server/Shuttles/Systems/ShuttleSystem.GridFill.cs index 1f74cc64ea..021a90fe6a 100644 --- a/Content.Server/Shuttles/Systems/ShuttleSystem.GridFill.cs +++ b/Content.Server/Shuttles/Systems/ShuttleSystem.GridFill.cs @@ -91,7 +91,7 @@ public sealed partial class ShuttleSystem var dungeonProtoId = _random.Pick(group.Protos); - if (!_protoManager.Resolve(dungeonProtoId, out var dungeonProto)) + if (!ProtoMan.Resolve(dungeonProtoId, out var dungeonProto)) { return false; } @@ -194,7 +194,7 @@ public sealed partial class ShuttleSystem throw new NotImplementedException(); } - if (_protoManager.Resolve(group.NameDataset, out var dataset)) + if (ProtoMan.Resolve(group.NameDataset, out var dataset)) { _metadata.SetEntityName(spawned, _salvage.GetFTLName(dataset, _random.Next())); } diff --git a/Content.Server/Shuttles/Systems/ShuttleSystem.Impact.cs b/Content.Server/Shuttles/Systems/ShuttleSystem.Impact.cs index 3e1d18592b..02d8ec9bc6 100644 --- a/Content.Server/Shuttles/Systems/ShuttleSystem.Impact.cs +++ b/Content.Server/Shuttles/Systems/ShuttleSystem.Impact.cs @@ -77,7 +77,7 @@ public sealed partial class ShuttleSystem Subs.CVar(_cfg, CCVars.ImpactMassBias, value => _massBias = value, true); Subs.CVar(_cfg, CCVars.ImpactInertiaScaling, value => _inertiaScaling = value, true); - _platingMass = _protoManager.Index(_platingId).Mass; + _platingMass = ProtoMan.Index(_platingId).Mass; } /// diff --git a/Content.Server/Shuttles/Systems/ShuttleSystem.cs b/Content.Server/Shuttles/Systems/ShuttleSystem.cs index 0ff09e9e8b..6d8d004c9a 100644 --- a/Content.Server/Shuttles/Systems/ShuttleSystem.cs +++ b/Content.Server/Shuttles/Systems/ShuttleSystem.cs @@ -39,7 +39,6 @@ public sealed partial class ShuttleSystem : SharedShuttleSystem [Dependency] private IConfigurationManager _cfg = default!; [Dependency] private IGameTiming _gameTiming = default!; [Dependency] private IMapManager _mapManager = default!; - [Dependency] private IPrototypeManager _protoManager = default!; [Dependency] private IRobustRandom _random = default!; [Dependency] private BiomeSystem _biomes = default!; [Dependency] private GibbingSystem _gibbing = default!; diff --git a/Content.Server/Silicons/Laws/IonLawSystem.cs b/Content.Server/Silicons/Laws/IonLawSystem.cs index 5d1b54c2bd..59ac1a242d 100644 --- a/Content.Server/Silicons/Laws/IonLawSystem.cs +++ b/Content.Server/Silicons/Laws/IonLawSystem.cs @@ -14,7 +14,6 @@ namespace Content.Server.Silicons.Laws; /// public sealed partial class IonLawSystem : EntitySystem { - [Dependency] private IPrototypeManager _prototypeManager = default!; [Dependency] private IRobustRandom _random = default!; [Dependency] private SharedStationSystem _stationSystem = default!; [Dependency] private StationRecordsSystem _stationRecordsSystem = default!; @@ -134,7 +133,7 @@ public sealed partial class IonLawSystem : EntitySystem /// A formatted string representing the new ion law. public string GetIonLaw() { - var laws = _prototypeManager.EnumeratePrototypes().ToList(); + var laws = ProtoMan.EnumeratePrototypes().ToList(); if (laws.Count == 0) { _sawmill.Error("No Ion Laws found"); @@ -255,7 +254,7 @@ public sealed partial class IonLawSystem : EntitySystem switch (selector) { case DatasetFill datasetFill: - if (_prototypeManager.TryIndex(datasetFill.Dataset, out var dataset) && dataset.Values.Any()) + if (ProtoMan.TryIndex(datasetFill.Dataset, out var dataset) && dataset.Values.Any()) { return _random.Pick(dataset.Values); } @@ -275,7 +274,7 @@ public sealed partial class IonLawSystem : EntitySystem } // Fallback to dataset if no manifest record found or stations are empty - if (_prototypeManager.TryIndex(randomManifestFill.FallbackDataset, out var fallbackDataset) && fallbackDataset.Values.Any()) + if (ProtoMan.TryIndex(randomManifestFill.FallbackDataset, out var fallbackDataset) && fallbackDataset.Values.Any()) { return _random.Pick(fallbackDataset.Values); } diff --git a/Content.Server/Silicons/Laws/IonStormSystem.cs b/Content.Server/Silicons/Laws/IonStormSystem.cs index f4de80ea97..2ba8c97878 100644 --- a/Content.Server/Silicons/Laws/IonStormSystem.cs +++ b/Content.Server/Silicons/Laws/IonStormSystem.cs @@ -7,13 +7,11 @@ using Robust.Shared.Random; using System.Linq; using Content.Shared.Random; using Content.Shared.Random.Helpers; -using Robust.Shared.Prototypes; namespace Content.Server.Silicons.Laws; public sealed partial class IonStormSystem : EntitySystem { - [Dependency] private IPrototypeManager _proto = default!; [Dependency] private ISharedAdminLogManager _adminLogger = default!; [Dependency] private SiliconLawSystem _siliconLaw = default!; [Dependency] private IRobustRandom _robustRandom = default!; @@ -36,7 +34,7 @@ public sealed partial class IonStormSystem : EntitySystem // try to swap it out with a random lawset if (_robustRandom.Prob(target.RandomLawsetChance)) { - var lawsets = _proto.Index(target.RandomLawsets); + var lawsets = ProtoMan.Index(target.RandomLawsets); var lawset = lawsets.Pick(_robustRandom); laws = _siliconLaw.GetLawset(lawset); } diff --git a/Content.Server/Silicons/Laws/SiliconLawSystem.cs b/Content.Server/Silicons/Laws/SiliconLawSystem.cs index c9bda1864e..d7b1425e3c 100644 --- a/Content.Server/Silicons/Laws/SiliconLawSystem.cs +++ b/Content.Server/Silicons/Laws/SiliconLawSystem.cs @@ -28,7 +28,6 @@ public sealed partial class SiliconLawSystem : SharedSiliconLawSystem { [Dependency] private IChatManager _chatManager = default!; [Dependency] private SharedMindSystem _mind = default!; - [Dependency] private IPrototypeManager _prototype = default!; [Dependency] private SharedRoleSystem _roles = default!; [Dependency] private StationSystem _station = default!; [Dependency] private UserInterfaceSystem _userInterface = default!; @@ -265,14 +264,14 @@ public sealed partial class SiliconLawSystem : SharedSiliconLawSystem /// public SiliconLawset GetLawset(ProtoId lawset) { - var proto = _prototype.Index(lawset); + var proto = ProtoMan.Index(lawset); var laws = new SiliconLawset() { Laws = new List(proto.Laws.Count) }; foreach (var law in proto.Laws) { - laws.Laws.Add(_prototype.Index(law).ShallowClone()); + laws.Laws.Add(ProtoMan.Index(law).ShallowClone()); } laws.ObeysTo = proto.ObeysTo; diff --git a/Content.Server/Silicons/StationAi/StationAiSystem.cs b/Content.Server/Silicons/StationAi/StationAiSystem.cs index f65fa7907b..3e2efa0189 100644 --- a/Content.Server/Silicons/StationAi/StationAiSystem.cs +++ b/Content.Server/Silicons/StationAi/StationAiSystem.cs @@ -57,7 +57,6 @@ public sealed partial class StationAiSystem : SharedStationAiSystem [Dependency] private SharedPopupSystem _popups = default!; [Dependency] private StationSystem _station = default!; [Dependency] private StationJobsSystem _stationJobs = default!; - [Dependency] private IPrototypeManager _proto = default!; [Dependency] private MobStateSystem _mobState = default!; [Dependency] private SharedAppearanceSystem _appearance = default!; @@ -269,7 +268,7 @@ public sealed partial class StationAiSystem : SharedStationAiSystem if (!TryGetHeld((ent.Owner, ent.Comp), out var held)) return; - if (!_proto.TryIndex(_batteryAlert, out var proto)) + if (!ProtoMan.TryIndex(_batteryAlert, out var proto)) return; var chargePercent = _battery.GetChargeLevel((ent.Owner, battery)); @@ -297,7 +296,7 @@ public sealed partial class StationAiSystem : SharedStationAiSystem if (!TryGetHeld((ent.Owner, ent.Comp), out var held)) return; - if (!_proto.TryIndex(_damageAlert, out var proto)) + if (!ProtoMan.TryIndex(_damageAlert, out var proto)) return; var damagePercent = _damageable.GetTotalDamage((ent, damageable)) / _destructible.DestroyedAt(ent, destructible); diff --git a/Content.Server/Spawners/EntitySystems/ContainerSpawnPointSystem.cs b/Content.Server/Spawners/EntitySystems/ContainerSpawnPointSystem.cs index 28740ebfa3..7af415147a 100644 --- a/Content.Server/Spawners/EntitySystems/ContainerSpawnPointSystem.cs +++ b/Content.Server/Spawners/EntitySystems/ContainerSpawnPointSystem.cs @@ -4,7 +4,6 @@ using Content.Server.Station.Systems; using Content.Shared.Preferences; using Robust.Server.Containers; using Robust.Shared.Containers; -using Robust.Shared.Prototypes; using Robust.Shared.Random; namespace Content.Server.Spawners.EntitySystems; @@ -13,7 +12,6 @@ public sealed partial class ContainerSpawnPointSystem : EntitySystem { [Dependency] private ContainerSystem _container = default!; [Dependency] private GameTicker _gameTicker = default!; - [Dependency] private IPrototypeManager _proto = default!; [Dependency] private IRobustRandom _random = default!; [Dependency] private StationSystem _station = default!; [Dependency] private StationSpawningSystem _stationSpawning = default!; @@ -31,7 +29,7 @@ public sealed partial class ContainerSpawnPointSystem : EntitySystem // If it's just a spawn pref check if it's for cryo (silly). if (args.HumanoidCharacterProfile?.SpawnPriority != SpawnPriorityPreference.Cryosleep && - (!_proto.Resolve(args.Job, out var jobProto) || jobProto.JobEntity == null)) + (!ProtoMan.Resolve(args.Job, out var jobProto) || jobProto.JobEntity == null)) { return; } diff --git a/Content.Server/Spawners/EntitySystems/RandomDecalSpawnerSystem.cs b/Content.Server/Spawners/EntitySystems/RandomDecalSpawnerSystem.cs index 00dd5ef4d4..1c86af21fa 100644 --- a/Content.Server/Spawners/EntitySystems/RandomDecalSpawnerSystem.cs +++ b/Content.Server/Spawners/EntitySystems/RandomDecalSpawnerSystem.cs @@ -3,7 +3,6 @@ using Content.Server.Decals; using Content.Server.Spawners.Components; using Robust.Shared.Map; using Robust.Shared.Map.Components; -using Robust.Shared.Prototypes; using Robust.Shared.Random; namespace Content.Server.Spawners.EntitySystems; @@ -12,7 +11,6 @@ public sealed partial class RandomDecalSpawnerSystem : EntitySystem { [Dependency] private DecalSystem _decal = default!; [Dependency] private SharedMapSystem _map = default!; - [Dependency] private IPrototypeManager _prototypes = default!; [Dependency] private IRobustRandom _random = default!; [Dependency] private ITileDefinitionManager _tileDefs = default!; @@ -89,7 +87,7 @@ public sealed partial class RandomDecalSpawnerSystem : EntitySystem } var decalProtoId = _random.Pick(comp.Decals); - var decalProto = _prototypes.Index(decalProtoId); + var decalProto = ProtoMan.Index(decalProtoId); var snapPosition = comp.SnapPosition ?? decalProto.DefaultSnap; if (snapPosition) { diff --git a/Content.Server/Species/Systems/NymphSystem.cs b/Content.Server/Species/Systems/NymphSystem.cs index 0bdc22f607..46c7495da3 100644 --- a/Content.Server/Species/Systems/NymphSystem.cs +++ b/Content.Server/Species/Systems/NymphSystem.cs @@ -9,7 +9,6 @@ namespace Content.Server.Species.Systems; public sealed partial class NymphSystem : EntitySystem { - [Dependency] private IPrototypeManager _protoManager = default!; [Dependency] private MindSystem _mindSystem = default!; [Dependency] private ZombieSystem _zombie = default!; @@ -25,7 +24,7 @@ public sealed partial class NymphSystem : EntitySystem if (TerminatingOrDeleted(uid) || TerminatingOrDeleted(args.Target)) return; - if (!_protoManager.TryIndex(comp.EntityPrototype, out var entityProto)) + if (!ProtoMan.TryIndex(comp.EntityPrototype, out var entityProto)) return; // Get the organs' position & spawn a nymph there diff --git a/Content.Server/Speech/EmotesMenuSystem.cs b/Content.Server/Speech/EmotesMenuSystem.cs index 40de669c4e..8a4841d82a 100644 --- a/Content.Server/Speech/EmotesMenuSystem.cs +++ b/Content.Server/Speech/EmotesMenuSystem.cs @@ -1,12 +1,10 @@ using Content.Shared.Chat; using Content.Server.Chat.Systems; -using Robust.Shared.Prototypes; namespace Content.Server.Speech; public sealed partial class EmotesMenuSystem : EntitySystem { - [Dependency] private IPrototypeManager _prototypeManager = default!; [Dependency] private ChatSystem _chat = default!; public override void Initialize() @@ -22,7 +20,7 @@ public sealed partial class EmotesMenuSystem : EntitySystem if (!player.HasValue) return; - if (!_prototypeManager.Resolve(msg.ProtoId, out var proto) || proto.ChatTriggers.Count == 0) + if (!ProtoMan.Resolve(msg.ProtoId, out var proto) || proto.ChatTriggers.Count == 0) return; _chat.TryEmoteWithChat(player.Value, msg.ProtoId); diff --git a/Content.Server/Speech/EntitySystems/MumbleAccentSystem.cs b/Content.Server/Speech/EntitySystems/MumbleAccentSystem.cs index 8574bd896d..4d24694ddb 100644 --- a/Content.Server/Speech/EntitySystems/MumbleAccentSystem.cs +++ b/Content.Server/Speech/EntitySystems/MumbleAccentSystem.cs @@ -4,7 +4,6 @@ using Content.Shared.Chat; using Content.Shared.Chat.Prototypes; using Content.Shared.Speech; using Content.Shared.Speech.Components; -using Robust.Shared.Prototypes; namespace Content.Server.Speech.EntitySystems; @@ -12,7 +11,6 @@ public sealed partial class MumbleAccentSystem : EntitySystem { [Dependency] private ChatSystem _chat = default!; [Dependency] private ReplacementAccentSystem _replacement = default!; - [Dependency] private IPrototypeManager _prototype = default!; public override void Initialize() { @@ -32,7 +30,7 @@ public sealed partial class MumbleAccentSystem : EntitySystem // play a muffled version of the vocal emote args.Handled = _chat.TryPlayEmoteSound( ent.Owner, - _prototype.Index(sounds), + ProtoMan.Index(sounds), args.Emote, ent.Comp.EmoteAudioParams); } diff --git a/Content.Server/Speech/EntitySystems/ReplacementAccentSystem.cs b/Content.Server/Speech/EntitySystems/ReplacementAccentSystem.cs index dbe38a8653..7ecfc2cddb 100644 --- a/Content.Server/Speech/EntitySystems/ReplacementAccentSystem.cs +++ b/Content.Server/Speech/EntitySystems/ReplacementAccentSystem.cs @@ -15,7 +15,6 @@ namespace Content.Server.Speech.EntitySystems /// public sealed partial class ReplacementAccentSystem : EntitySystem { - [Dependency] private IPrototypeManager _proto = default!; [Dependency] private IRobustRandom _random = default!; [Dependency] private ILocalizationManager _loc = default!; @@ -26,14 +25,14 @@ namespace Content.Server.Speech.EntitySystems { SubscribeLocalEvent(OnAccent); - _proto.PrototypesReloaded += OnPrototypesReloaded; + ProtoMan.PrototypesReloaded += OnPrototypesReloaded; } public override void Shutdown() { base.Shutdown(); - _proto.PrototypesReloaded -= OnPrototypesReloaded; + ProtoMan.PrototypesReloaded -= OnPrototypesReloaded; } private void OnAccent(EntityUid uid, ReplacementAccentComponent component, AccentGetEvent args) @@ -47,7 +46,7 @@ namespace Content.Server.Speech.EntitySystems [PublicAPI] public string ApplyReplacements(string message, string accent) { - if (!_proto.TryIndex(accent, out var prototype)) + if (!ProtoMan.TryIndex(accent, out var prototype)) return message; if (!_random.Prob(prototype.ReplacementChance)) diff --git a/Content.Server/Speech/EntitySystems/VocalSystem.cs b/Content.Server/Speech/EntitySystems/VocalSystem.cs index b74f7fec79..e68cc680e4 100644 --- a/Content.Server/Speech/EntitySystems/VocalSystem.cs +++ b/Content.Server/Speech/EntitySystems/VocalSystem.cs @@ -6,7 +6,6 @@ using Content.Shared.Humanoid; using Content.Shared.Speech; using Content.Shared.Speech.Components; using Robust.Shared.Audio.Systems; -using Robust.Shared.Prototypes; using Robust.Shared.Random; namespace Content.Server.Speech.EntitySystems; @@ -14,7 +13,6 @@ namespace Content.Server.Speech.EntitySystems; public sealed partial class VocalSystem : EntitySystem { [Dependency] private IRobustRandom _random = default!; - [Dependency] private IPrototypeManager _proto = default!; [Dependency] private SharedAudioSystem _audio = default!; [Dependency] private ChatSystem _chat = default!; [Dependency] private ActionsSystem _actions = default!; @@ -86,7 +84,7 @@ public sealed partial class VocalSystem : EntitySystem return; // just play regular sound based on emote proto - args.Handled = _chat.TryPlayEmoteSound(uid, _proto.Index(sounds), args.Emote); + args.Handled = _chat.TryPlayEmoteSound(uid, ProtoMan.Index(sounds), args.Emote); } private void OnEmoteAction(EntityUid uid, VocalComponent component, EmoteActionEvent args) @@ -109,7 +107,7 @@ public sealed partial class VocalSystem : EntitySystem if (component.EmoteSounds is not { } sounds) return false; - return _chat.TryPlayEmoteSound(uid, _proto.Index(sounds), component.ScreamId); + return _chat.TryPlayEmoteSound(uid, ProtoMan.Index(sounds), component.ScreamId); } private void LoadSounds(EntityUid uid, VocalComponent component, Sex? sex = null) @@ -122,7 +120,7 @@ public sealed partial class VocalSystem : EntitySystem if (!component.Sounds.TryGetValue(sex.Value, out var protoId)) return; - if (!_proto.HasIndex(protoId)) + if (!ProtoMan.HasIndex(protoId)) return; component.EmoteSounds = protoId; diff --git a/Content.Server/Speech/Muting/MutingSystem.cs b/Content.Server/Speech/Muting/MutingSystem.cs index ef5214f3a0..5ccd30bd76 100644 --- a/Content.Server/Speech/Muting/MutingSystem.cs +++ b/Content.Server/Speech/Muting/MutingSystem.cs @@ -13,7 +13,6 @@ namespace Content.Server.Speech.Muting public sealed partial class MutingSystem : EntitySystem { [Dependency] private PopupSystem _popupSystem = default!; - [Dependency] private IPrototypeManager _prototypeManager = default!; public override void Initialize() { @@ -38,7 +37,7 @@ namespace Content.Server.Speech.Muting if (args.Handled) return; - if (!_prototypeManager.Resolve(args.Emote, out var emote)) + if (!ProtoMan.Resolve(args.Emote, out var emote)) return; if (!emote.Category.HasFlag(EmoteCategory.Vocal)) diff --git a/Content.Server/Speech/SpeechNoiseSystem.cs b/Content.Server/Speech/SpeechNoiseSystem.cs index f4a8553188..79d4cadc19 100644 --- a/Content.Server/Speech/SpeechNoiseSystem.cs +++ b/Content.Server/Speech/SpeechNoiseSystem.cs @@ -2,7 +2,6 @@ using Content.Shared.Chat; using Content.Shared.Speech; using Robust.Shared.Audio; using Robust.Shared.Audio.Systems; -using Robust.Shared.Prototypes; using Robust.Shared.Random; using Robust.Shared.Timing; @@ -11,7 +10,6 @@ namespace Content.Server.Speech public sealed partial class SpeechSoundSystem : EntitySystem { [Dependency] private IGameTiming _gameTiming = default!; - [Dependency] private IPrototypeManager _protoManager = default!; [Dependency] private IRobustRandom _random = default!; [Dependency] private SharedAudioSystem _audio = default!; @@ -29,7 +27,7 @@ namespace Content.Server.Speech // Play speech sound SoundSpecifier? contextSound; - var prototype = _protoManager.Index(ent.Comp.SpeechSounds); + var prototype = ProtoMan.Index(ent.Comp.SpeechSounds); // Different sounds for ask/exclaim based on last character contextSound = message[^1] switch diff --git a/Content.Server/Spreader/SpreaderSystem.cs b/Content.Server/Spreader/SpreaderSystem.cs index 9120b30b63..6117d1a8c6 100644 --- a/Content.Server/Spreader/SpreaderSystem.cs +++ b/Content.Server/Spreader/SpreaderSystem.cs @@ -19,7 +19,6 @@ namespace Content.Server.Spreader; /// public sealed partial class SpreaderSystem : EntitySystem { - [Dependency] private IPrototypeManager _prototype = default!; [Dependency] private IRobustRandom _robustRandom = default!; [Dependency] private SharedMapSystem _map = default!; [Dependency] private TagSystem _tag = default!; @@ -64,7 +63,7 @@ public sealed partial class SpreaderSystem : EntitySystem private void SetupPrototypes() { _prototypeUpdates = []; - foreach (var proto in _prototype.EnumeratePrototypes()) + foreach (var proto in ProtoMan.EnumeratePrototypes()) { _prototypeUpdates.Add(proto.ID, proto.UpdatesPerSecond); } @@ -178,7 +177,7 @@ public sealed partial class SpreaderSystem : EntitySystem occupiedTiles = []; neighbors = []; // TODO remove occupiedTiles -- its currently unused and just slows this method down. - if (!_prototype.Resolve(prototype, out var spreaderPrototype)) + if (!ProtoMan.Resolve(prototype, out var spreaderPrototype)) return; if (!TryComp(comp.GridUid, out var grid)) @@ -348,9 +347,9 @@ public sealed partial class SpreaderSystem : EntitySystem public bool RequiresFloorToSpread(EntProtoId spreader) { - if (!_prototype.Index(spreader).TryGetComponent(out var spreaderComp, EntityManager.ComponentFactory)) + if (!ProtoMan.Index(spreader).TryComp(out var spreaderComp, EntityManager.ComponentFactory)) return false; - return _prototype.Index(spreaderComp.Id).PreventSpreadOnSpaced; + return ProtoMan.Index(spreaderComp.Id).PreventSpreadOnSpaced; } } diff --git a/Content.Server/Sprite/RandomSpriteSystem.cs b/Content.Server/Sprite/RandomSpriteSystem.cs index 28f1e16c9a..b7c9e1462c 100644 --- a/Content.Server/Sprite/RandomSpriteSystem.cs +++ b/Content.Server/Sprite/RandomSpriteSystem.cs @@ -2,14 +2,12 @@ using Content.Shared.Decals; using Content.Shared.Random.Helpers; using Content.Shared.Sprite; using Robust.Shared.GameStates; -using Robust.Shared.Prototypes; using Robust.Shared.Random; namespace Content.Server.Sprite; -public sealed partial class RandomSpriteSystem: SharedRandomSpriteSystem +public sealed partial class RandomSpriteSystem : SharedRandomSpriteSystem { - [Dependency] private IPrototypeManager _prototype = default!; [Dependency] private IRobustRandom _random = default!; public override void Initialize() @@ -54,7 +52,7 @@ public sealed partial class RandomSpriteSystem: SharedRandomSpriteSystem color = previousColor; else { - color = _random.Pick(_prototype.Index(selectedState.Value).Colors.Values); + color = _random.Pick(ProtoMan.Index(selectedState.Value).Colors.Values); previousColor = color; } } diff --git a/Content.Server/Stack/StackSystem.cs b/Content.Server/Stack/StackSystem.cs index de500e6c6a..96ccc8d6b3 100644 --- a/Content.Server/Stack/StackSystem.cs +++ b/Content.Server/Stack/StackSystem.cs @@ -13,8 +13,6 @@ namespace Content.Server.Stack [UsedImplicitly] public sealed partial class StackSystem : SharedStackSystem { - [Dependency] private IPrototypeManager _prototypeManager = default!; - #region Spawning /// @@ -35,7 +33,7 @@ namespace Content.Server.Stack if (!TryUse(ent, amount)) return null; - if (!_prototypeManager.Resolve(ent.Comp.StackTypeId, out var stackType)) + if (!ProtoMan.Resolve(ent.Comp.StackTypeId, out var stackType)) return null; // Set the output parameter in the event instance to the newly split stack. @@ -73,7 +71,7 @@ namespace Content.Server.Stack [PublicAPI] public EntityUid SpawnAtPosition(int count, ProtoId id, EntityCoordinates spawnPosition) { - var proto = _prototypeManager.Index(id); + var proto = ProtoMan.Index(id); return SpawnAtPosition(count, proto, spawnPosition); } @@ -145,7 +143,7 @@ namespace Content.Server.Stack int amount, EntityCoordinates spawnPosition) { - var stackProto = _prototypeManager.Index(stackId); + var stackProto = ProtoMan.Index(stackId); return SpawnMultipleAtPosition(stackProto.Spawn, CalculateSpawns(stackProto, amount), spawnPosition); @@ -167,7 +165,7 @@ namespace Content.Server.Stack [PublicAPI] public EntityUid SpawnNextToOrDrop(int amount, ProtoId id, EntityUid source) { - var proto = _prototypeManager.Index(id); + var proto = ProtoMan.Index(id); return SpawnNextToOrDrop(amount, proto, source); } @@ -234,7 +232,7 @@ namespace Content.Server.Stack int amount, EntityUid target) { - var stackProto = _prototypeManager.Index(stackId); + var stackProto = ProtoMan.Index(stackId); return SpawnMultipleNextToOrDrop(stackProto.Spawn, CalculateSpawns(stackProto, amount), target); diff --git a/Content.Server/Station/Systems/StationBiomeSystem.cs b/Content.Server/Station/Systems/StationBiomeSystem.cs index 5b97e68f98..29d6a1af25 100644 --- a/Content.Server/Station/Systems/StationBiomeSystem.cs +++ b/Content.Server/Station/Systems/StationBiomeSystem.cs @@ -1,14 +1,12 @@ using Content.Server.Parallax; using Content.Server.Station.Components; using Content.Server.Station.Events; -using Robust.Shared.Prototypes; namespace Content.Server.Station.Systems; public sealed partial class StationBiomeSystem : EntitySystem { [Dependency] private BiomeSystem _biome = default!; - [Dependency] private IPrototypeManager _proto = default!; [Dependency] private StationSystem _station = default!; [Dependency] private SharedMapSystem _map = default!; @@ -27,6 +25,6 @@ public sealed partial class StationBiomeSystem : EntitySystem var mapId = Transform(station.Value).MapID; var mapUid = _map.GetMapOrInvalid(mapId); - _biome.EnsurePlanet(mapUid, _proto.Index(map.Comp.Biome), map.Comp.Seed, mapLight: map.Comp.MapLightColor); + _biome.EnsurePlanet(mapUid, ProtoMan.Index(map.Comp.Biome), map.Comp.Seed, mapLight: map.Comp.MapLightColor); } } diff --git a/Content.Server/Station/Systems/StationJobsSystem.Roundstart.cs b/Content.Server/Station/Systems/StationJobsSystem.Roundstart.cs index 1318ff68fb..803b6e12c3 100644 --- a/Content.Server/Station/Systems/StationJobsSystem.Roundstart.cs +++ b/Content.Server/Station/Systems/StationJobsSystem.Roundstart.cs @@ -1,12 +1,10 @@ using System.Linq; using Content.Server.Administration.Managers; using Content.Server.Antag; -using Content.Server.Players.PlayTimeTracking; using Content.Server.Station.Components; using Content.Server.Station.Events; using Content.Shared.Preferences; using Content.Shared.Roles; -using Robust.Server.Player; using Robust.Shared.Network; using Robust.Shared.Prototypes; using Robust.Shared.Random; @@ -17,7 +15,6 @@ namespace Content.Server.Station.Systems; // Contains code for round-start spawning. public sealed partial class StationJobsSystem { - [Dependency] private IPrototypeManager _prototypeManager = default!; [Dependency] private IBanManager _banManager = default!; [Dependency] private AntagSelectionSystem _antag = default!; @@ -30,7 +27,7 @@ public sealed partial class StationJobsSystem private void InitializeRoundStart() { _jobsByWeight = new Dictionary>(); - foreach (var job in _prototypeManager.EnumeratePrototypes()) + foreach (var job in ProtoMan.EnumeratePrototypes()) { if (!_jobsByWeight.ContainsKey(job.Weight)) _jobsByWeight.Add(job.Weight, new HashSet()); @@ -369,7 +366,7 @@ public sealed partial class StationJobsSystem if (!(priority == selectedPriority || selectedPriority is null)) continue; - if (!_prototypeManager.Resolve(jobId, out var job)) + if (!ProtoMan.Resolve(jobId, out var job)) continue; if (whitelist != null && !whitelist.Contains(jobId)) diff --git a/Content.Server/Station/Systems/StationSpawningSystem.cs b/Content.Server/Station/Systems/StationSpawningSystem.cs index ba515ffcd0..2e04d6d142 100644 --- a/Content.Server/Station/Systems/StationSpawningSystem.cs +++ b/Content.Server/Station/Systems/StationSpawningSystem.cs @@ -42,7 +42,6 @@ public sealed partial class StationSpawningSystem : SharedStationSpawningSystem [Dependency] private IdentitySystem _identity = default!; [Dependency] private MetaDataSystem _metaSystem = default!; [Dependency] private PdaSystem _pdaSystem = default!; - [Dependency] private IPrototypeManager _prototypeManager = default!; [Dependency] private MindSystem _mindSystem = default!; /// @@ -90,13 +89,13 @@ public sealed partial class StationSpawningSystem : SharedStationSpawningSystem EntityUid? station, EntityUid? entity = null) { - _prototypeManager.Resolve(job, out var prototype); + ProtoMan.Resolve(job, out var prototype); RoleLoadout? loadout = null; // Need to get the loadout up-front to handle names if we use an entity spawn override. var jobLoadout = LoadoutSystem.GetJobPrototype(prototype?.ID); - if (_prototypeManager.TryIndex(jobLoadout, out RoleLoadoutPrototype? roleProto)) + if (ProtoMan.TryIndex(jobLoadout, out RoleLoadoutPrototype? roleProto)) { profile?.Loadouts.TryGetValue(jobLoadout, out loadout); @@ -104,7 +103,7 @@ public sealed partial class StationSpawningSystem : SharedStationSpawningSystem if (loadout == null) { loadout = new RoleLoadout(jobLoadout); - loadout.SetDefault(profile, _actors.GetSession(entity), _prototypeManager); + loadout.SetDefault(profile, _actors.GetSession(entity), ProtoMan); } } @@ -128,7 +127,7 @@ public sealed partial class StationSpawningSystem : SharedStationSpawningSystem string speciesId = profile != null ? profile.Species : HumanoidCharacterProfile.DefaultSpecies; - if (!_prototypeManager.TryIndex(speciesId, out var species)) + if (!ProtoMan.TryIndex(speciesId, out var species)) throw new ArgumentException($"Invalid species prototype was used: {speciesId}"); entity ??= Spawn(species.Prototype, coordinates); @@ -152,7 +151,7 @@ public sealed partial class StationSpawningSystem : SharedStationSpawningSystem if (prototype?.StartingGear != null) { - var startingGear = _prototypeManager.Index(prototype.StartingGear); + var startingGear = ProtoMan.Index(prototype.StartingGear); EquipStartingGear(entity.Value, startingGear, raiseEvent: false); } @@ -171,7 +170,7 @@ public sealed partial class StationSpawningSystem : SharedStationSpawningSystem private void DoJobSpecials(ProtoId? job, EntityUid entity) { - if (!_prototypeManager.Resolve(job, out JobPrototype? prototype)) + if (!ProtoMan.Resolve(job, out JobPrototype? prototype)) return; foreach (var jobSpecial in prototype.Special) @@ -202,7 +201,7 @@ public sealed partial class StationSpawningSystem : SharedStationSpawningSystem _cardSystem.TryChangeFullName(cardId, characterName, card); _cardSystem.TryChangeJobTitle(cardId, jobPrototype.LocalizedName, card); - if (_prototypeManager.Resolve(jobPrototype.Icon, out var jobIcon)) + if (ProtoMan.Resolve(jobPrototype.Icon, out var jobIcon)) _cardSystem.TryChangeJobIcon(cardId, jobIcon, card); var extendedAccess = false; diff --git a/Content.Server/StationEvents/BasicStationEventSchedulerSystem.cs b/Content.Server/StationEvents/BasicStationEventSchedulerSystem.cs index 591ea1ae5a..e88a333ead 100644 --- a/Content.Server/StationEvents/BasicStationEventSchedulerSystem.cs +++ b/Content.Server/StationEvents/BasicStationEventSchedulerSystem.cs @@ -10,8 +10,6 @@ using JetBrains.Annotations; using Robust.Shared.Prototypes; using Robust.Shared.Random; using Robust.Shared.Toolshed; -using Robust.Shared.Toolshed.TypeParsers; -using Robust.Shared.Utility; namespace Content.Server.StationEvents { @@ -113,7 +111,7 @@ namespace Content.Server.StationEvents var eventScheduler = _protoMan.Index(eventSchedulerProto); - if (!eventScheduler.TryGetComponent(out var basicScheduler, _compFac)) + if (!eventScheduler.TryComp(out var basicScheduler, _compFac)) { return occurrences.Select(p => (p.Key, (float)p.Value)).OrderByDescending(p => p.Item2); } @@ -159,7 +157,7 @@ namespace Content.Server.StationEvents var eventScheduler = _protoMan.Index(eventSchedulerProto); - if (!eventScheduler.TryGetComponent(out var basicScheduler, _compFac)) + if (!eventScheduler.TryComp(out var basicScheduler, _compFac)) yield break; var sortedEvents @@ -181,7 +179,7 @@ namespace Content.Server.StationEvents var eventScheduler = _protoMan.Index(eventSchedulerProto); - if (!eventScheduler.TryGetComponent(out var basicScheduler, _compFac)) + if (!eventScheduler.TryComp(out var basicScheduler, _compFac)) yield break; var timemins = time * 60; @@ -208,7 +206,7 @@ namespace Content.Server.StationEvents var eventScheduler = _protoMan.Index(eventSchedulerProto); - if (!eventScheduler.TryGetComponent(out var basicScheduler, _compFac)) + if (!eventScheduler.TryComp(out var basicScheduler, _compFac)) return 0f; foreach (var (proto, prob) in _stationEvent.ListLimitedEvents(basicScheduler.ScheduledGameRules)) diff --git a/Content.Server/StationEvents/EventManagerSystem.cs b/Content.Server/StationEvents/EventManagerSystem.cs index 5bcd9a786b..3b26be61bf 100644 --- a/Content.Server/StationEvents/EventManagerSystem.cs +++ b/Content.Server/StationEvents/EventManagerSystem.cs @@ -17,7 +17,6 @@ public sealed partial class EventManagerSystem : EntitySystem [Dependency] private IConfigurationManager _configurationManager = default!; [Dependency] private IPlayerManager _playerManager = default!; [Dependency] private IRobustRandom _random = default!; - [Dependency] private IPrototypeManager _prototype = default!; [Dependency] private EntityTableSystem _entityTable = default!; [Dependency] public GameTicker GameTicker = default!; [Dependency] private RoundEndSystem _roundEnd = default!; @@ -62,7 +61,7 @@ public sealed partial class EventManagerSystem : EntitySystem return; } - if (!_prototype.Resolve(randomLimitedEvent, out _)) + if (!ProtoMan.Resolve(randomLimitedEvent, out _)) { Log.Warning("A requested event is not available!"); return; @@ -112,13 +111,13 @@ public sealed partial class EventManagerSystem : EntitySystem foreach (var (eventId, prob) in selectedEvents) { - if (!_prototype.Resolve(eventId, out var eventproto)) + if (!ProtoMan.Resolve(eventId, out var eventproto)) continue; if (eventproto.Abstract) continue; - if (!eventproto.TryGetComponent(out var stationEvent, EntityManager.ComponentFactory)) + if (!eventproto.TryComp(out var stationEvent, EntityManager.ComponentFactory)) continue; if (!CanRun(eventproto, stationEvent, playerCount.Value, currentTime.Value)) @@ -166,7 +165,7 @@ public sealed partial class EventManagerSystem : EntitySystem if (GameTicker.IsIgnored(eventid)) continue; - if (!_prototype.Resolve(eventid, out var eventproto)) + if (!ProtoMan.Resolve(eventid, out var eventproto)) { Log.Warning("An event ID has no prototype index!"); continue; @@ -178,7 +177,7 @@ public sealed partial class EventManagerSystem : EntitySystem if (eventproto.Abstract) continue; - if (!eventproto.TryGetComponent(out var stationEvent, EntityManager.ComponentFactory)) + if (!eventproto.TryComp(out var stationEvent, EntityManager.ComponentFactory)) continue; if (!CanRun(eventproto, stationEvent, playerCount.Value, currentTime.Value)) @@ -281,12 +280,12 @@ public sealed partial class EventManagerSystem : EntitySystem private Dictionary GetAllEvents() { var allEvents = new Dictionary(); - foreach (var prototype in _prototype.EnumeratePrototypes()) + foreach (var prototype in ProtoMan.EnumeratePrototypes()) { if (prototype.Abstract) continue; - if (!prototype.TryGetComponent(out var stationEvent, EntityManager.ComponentFactory)) + if (!prototype.TryComp(out var stationEvent, EntityManager.ComponentFactory)) continue; allEvents.Add(prototype, stationEvent); diff --git a/Content.Server/StationEvents/Events/ImmovableRodRule.cs b/Content.Server/StationEvents/Events/ImmovableRodRule.cs index 45c9d03539..47d39da0a8 100644 --- a/Content.Server/StationEvents/Events/ImmovableRodRule.cs +++ b/Content.Server/StationEvents/Events/ImmovableRodRule.cs @@ -1,12 +1,10 @@ using System.Numerics; -using Content.Server.GameTicking.Rules.Components; using Content.Server.ImmovableRod; using Content.Server.StationEvents.Components; using Content.Server.Weapons.Ranged.Systems; using Content.Shared.GameTicking.Components; using Content.Shared.Storage; using Robust.Shared.Prototypes; -using Robust.Shared.Random; using TimedDespawnComponent = Robust.Shared.Spawners.TimedDespawnComponent; using System.Linq; @@ -26,8 +24,8 @@ public sealed partial class ImmovableRodRule : StationEventSystem(protoName); - if (proto.TryGetComponent(out var rod, EntityManager.ComponentFactory) && - proto.TryGetComponent(out var despawn, EntityManager.ComponentFactory)) + if (proto.TryComp(out var rod, EntityManager.ComponentFactory) && + proto.TryComp(out var despawn, EntityManager.ComponentFactory)) { if (!TryFindRandomTile(out _, out _, out _, out var targetCoords)) return; diff --git a/Content.Server/StationEvents/Events/StationEventSystem.cs b/Content.Server/StationEvents/Events/StationEventSystem.cs index 1643cbaf46..192e77fb35 100644 --- a/Content.Server/StationEvents/Events/StationEventSystem.cs +++ b/Content.Server/StationEvents/Events/StationEventSystem.cs @@ -8,8 +8,6 @@ using Content.Shared.Database; using Content.Shared.GameTicking.Components; using Robust.Shared.Audio.Systems; using Robust.Shared.Player; -using Robust.Shared.Prototypes; -using Robust.Shared.Random; namespace Content.Server.StationEvents.Events; @@ -19,7 +17,6 @@ namespace Content.Server.StationEvents.Events; public abstract partial class StationEventSystem : GameRuleSystem where T : IComponent { [Dependency] protected IAdminLogManager AdminLogManager = default!; - [Dependency] protected IPrototypeManager PrototypeManager = default!; [Dependency] protected ChatSystem ChatSystem = default!; [Dependency] protected SharedAudioSystem Audio = default!; [Dependency] protected StationSystem StationSystem = default!; diff --git a/Content.Server/StationEvents/Events/VentClogRule.cs b/Content.Server/StationEvents/Events/VentClogRule.cs index 90a946d1f9..dbd4c53fa9 100644 --- a/Content.Server/StationEvents/Events/VentClogRule.cs +++ b/Content.Server/StationEvents/Events/VentClogRule.cs @@ -26,7 +26,7 @@ public sealed partial class VentClogRule : StationEventSystem() + var allReagents = ProtoMan.EnumeratePrototypes() .Where(x => !x.Abstract) .Select(x => new ProtoId(x.ID)).ToList(); diff --git a/Content.Server/StationRecords/Systems/StationRecordsSystem.cs b/Content.Server/StationRecords/Systems/StationRecordsSystem.cs index 0721d440b8..df558e2f6d 100644 --- a/Content.Server/StationRecords/Systems/StationRecordsSystem.cs +++ b/Content.Server/StationRecords/Systems/StationRecordsSystem.cs @@ -9,7 +9,6 @@ using Content.Shared.Preferences; using Content.Shared.Roles; using Content.Shared.StationRecords; using Robust.Shared.Enums; -using Robust.Shared.Prototypes; using Robust.Shared.Random; namespace Content.Server.StationRecords.Systems; @@ -37,7 +36,6 @@ public sealed partial class StationRecordsSystem : SharedStationRecordsSystem { [Dependency] private InventorySystem _inventory = default!; [Dependency] private StationRecordKeyStorageSystem _keyStorage = default!; - [Dependency] private IPrototypeManager _prototypeManager = default!; [Dependency] private IdCardSystem _idCard = default!; [Dependency] private IRobustRandom _random = default!; @@ -87,7 +85,7 @@ public sealed partial class StationRecordsSystem : SharedStationRecordsSystem { // TODO make PlayerSpawnCompleteEvent.JobId a ProtoId if (string.IsNullOrEmpty(jobId) - || !_prototypeManager.HasIndex(jobId)) + || !ProtoMan.HasIndex(jobId)) return; if (!_inventory.TryGetSlotEntity(player, "id", out var idUid)) @@ -140,7 +138,7 @@ public sealed partial class StationRecordsSystem : SharedStationRecordsSystem HumanoidCharacterProfile profile, StationRecordsComponent records) { - if (!_prototypeManager.TryIndex(jobId, out var jobPrototype)) + if (!ProtoMan.TryIndex(jobId, out var jobPrototype)) throw new ArgumentException($"Invalid job prototype ID: {jobId}"); // when adding a record that already exists use the old one diff --git a/Content.Server/Storage/EntitySystems/StorageSystem.Fill.cs b/Content.Server/Storage/EntitySystems/StorageSystem.Fill.cs index 768491f987..c48b396435 100644 --- a/Content.Server/Storage/EntitySystems/StorageSystem.Fill.cs +++ b/Content.Server/Storage/EntitySystems/StorageSystem.Fill.cs @@ -1,6 +1,5 @@ using System.Linq; using Content.Server.Spawners.Components; -using Content.Server.Storage.Components; using Content.Shared.Item; using Content.Shared.Prototypes; using Content.Shared.Storage; @@ -48,7 +47,7 @@ public sealed partial class StorageSystem var ent = Spawn(spawnPrototype, coordinates); // No, you are not allowed to fill a container with entity spawners. - DebugTools.Assert(!_prototype.Index(spawnPrototype) + DebugTools.Assert(!ProtoMan.Index(spawnPrototype) .HasComponent(typeof(RandomSpawnerComponent))); if (!TryComp(ent, out var itemComp)) @@ -99,7 +98,7 @@ public sealed partial class StorageSystem foreach (var item in spawnItems) { // No, you are not allowed to fill a container with entity spawners. - DebugTools.Assert(!_prototype.Index(item) + DebugTools.Assert(!ProtoMan.Index(item) .HasComponent(typeof(RandomSpawnerComponent))); var ent = Spawn(item, coordinates); diff --git a/Content.Server/Storage/EntitySystems/StorageSystem.cs b/Content.Server/Storage/EntitySystems/StorageSystem.cs index 3d78552cb2..84ed8984fc 100644 --- a/Content.Server/Storage/EntitySystems/StorageSystem.cs +++ b/Content.Server/Storage/EntitySystems/StorageSystem.cs @@ -5,13 +5,10 @@ using Content.Shared.Storage.Components; using Content.Shared.Storage.EntitySystems; using Robust.Shared.Map; using Robust.Shared.Player; -using Robust.Shared.Prototypes; namespace Content.Server.Storage.EntitySystems; public sealed partial class StorageSystem : SharedStorageSystem { - [Dependency] private IPrototypeManager _prototype = default!; - public override void Initialize() { base.Initialize(); diff --git a/Content.Server/Store/Systems/StoreSystem.Ui.cs b/Content.Server/Store/Systems/StoreSystem.Ui.cs index e8e2797e6b..51bb5827db 100644 --- a/Content.Server/Store/Systems/StoreSystem.Ui.cs +++ b/Content.Server/Store/Systems/StoreSystem.Ui.cs @@ -13,7 +13,6 @@ using Content.Shared.Store; using Content.Shared.Store.Components; using Content.Shared.UserInterface; using Robust.Shared.Audio.Systems; -using Robust.Shared.Prototypes; namespace Content.Server.Store.Systems; @@ -27,7 +26,6 @@ public sealed partial class StoreSystem [Dependency] private SharedAudioSystem _audio = default!; [Dependency] private SharedHandsSystem _hands = default!; [Dependency] private StackSystem _stack = default!; - [Dependency] private IPrototypeManager _proto = default!; private void InitializeUi() { @@ -126,7 +124,7 @@ public sealed partial class StoreSystem //apply components if (listing.ProductComponents != null) { - if (_proto.Resolve(listing.ProductComponents, out var productComponentsEntity)) + if (ProtoMan.Resolve(listing.ProductComponents, out var productComponentsEntity)) EntityManager.AddComponents(buyer, productComponentsEntity.Components); } diff --git a/Content.Server/StoreDiscount/Systems/StoreDiscountSystem.cs b/Content.Server/StoreDiscount/Systems/StoreDiscountSystem.cs index e240872914..51240a0ca0 100644 --- a/Content.Server/StoreDiscount/Systems/StoreDiscountSystem.cs +++ b/Content.Server/StoreDiscount/Systems/StoreDiscountSystem.cs @@ -17,7 +17,6 @@ public sealed partial class StoreDiscountSystem : EntitySystem private static readonly ProtoId DiscountedStoreCategoryPrototypeKey = "DiscountedItems"; [Dependency] private IRobustRandom _random = default!; - [Dependency] private IPrototypeManager _prototypeManager = default!; /// public override void Initialize() @@ -80,7 +79,7 @@ public sealed partial class StoreDiscountSystem : EntitySystem // each category, and after that - roll exact items in categories // and their cost - var prototypes = _prototypeManager.EnumeratePrototypes(); + var prototypes = ProtoMan.EnumeratePrototypes(); var categoriesWithCumulativeWeight = new CategoriesWithCumulativeWeightMap(prototypes); var uniqueListingItemCountByCategory = PickCategoriesToRoll(totalAvailableDiscounts, categoriesWithCumulativeWeight); diff --git a/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraRouterSystem.cs b/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraRouterSystem.cs index f26d2bb1b5..c259b3b6c9 100644 --- a/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraRouterSystem.cs +++ b/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraRouterSystem.cs @@ -6,7 +6,6 @@ using Content.Shared.Power; using Content.Shared.SurveillanceCamera; using Content.Shared.Verbs; using Robust.Server.GameObjects; -using Robust.Shared.Prototypes; using Content.Shared.DeviceNetwork.Components; namespace Content.Server.SurveillanceCamera; @@ -15,7 +14,6 @@ public sealed partial class SurveillanceCameraRouterSystem : EntitySystem { [Dependency] private DeviceNetworkSystem _deviceNetworkSystem = default!; [Dependency] private ActionBlockerSystem _actionBlocker = default!; - [Dependency] private IPrototypeManager _prototypeManager = default!; [Dependency] private UserInterfaceSystem _userInterface = default!; public override void Initialize() { @@ -29,7 +27,7 @@ public sealed partial class SurveillanceCameraRouterSystem : EntitySystem private void OnInitialize(EntityUid uid, SurveillanceCameraRouterComponent router, ComponentInit args) { if (router.SubnetFrequencyId == null || - !_prototypeManager.TryIndex(router.SubnetFrequencyId, out DeviceFrequencyPrototype? subnetFrequency)) + !ProtoMan.TryIndex(router.SubnetFrequencyId, out DeviceFrequencyPrototype? subnetFrequency)) { return; } @@ -121,7 +119,7 @@ public sealed partial class SurveillanceCameraRouterSystem : EntitySystem return; } - if (!_prototypeManager.Resolve(component.AvailableNetworks[args.Network], + if (!ProtoMan.Resolve(component.AvailableNetworks[args.Network], out var frequency)) { return; diff --git a/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraSystem.cs b/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraSystem.cs index 66bf7dd59a..b041448823 100644 --- a/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraSystem.cs +++ b/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraSystem.cs @@ -8,14 +8,12 @@ using Content.Shared.SurveillanceCamera; using Content.Shared.SurveillanceCamera.Components; using Robust.Server.GameObjects; using Robust.Shared.Player; -using Robust.Shared.Prototypes; using Content.Shared.DeviceNetwork.Components; namespace Content.Server.SurveillanceCamera; public sealed partial class SurveillanceCameraSystem : SharedSurveillanceCameraSystem { - [Dependency] private IPrototypeManager _prototypeManager = default!; [Dependency] private ViewSubscriberSystem _viewSubscriberSystem = default!; [Dependency] private DeviceNetworkSystem _deviceNetworkSystem = default!; [Dependency] private UserInterfaceSystem _userInterface = default!; @@ -168,7 +166,7 @@ public sealed partial class SurveillanceCameraSystem : SharedSurveillanceCameraS return; } - if (!_prototypeManager.Resolve(component.AvailableNetworks[args.Network], + if (!ProtoMan.Resolve(component.AvailableNetworks[args.Network], out var frequency)) { return; diff --git a/Content.Server/Telephone/TelephoneSystem.cs b/Content.Server/Telephone/TelephoneSystem.cs index 050961677e..1c64d6c40d 100644 --- a/Content.Server/Telephone/TelephoneSystem.cs +++ b/Content.Server/Telephone/TelephoneSystem.cs @@ -17,7 +17,6 @@ using Robust.Server.GameObjects; using Robust.Shared.Audio.Systems; using Robust.Shared.Timing; using Robust.Shared.Utility; -using Robust.Shared.Prototypes; using Robust.Shared.Random; using Robust.Shared.Replays; using System.Linq; @@ -31,7 +30,6 @@ public sealed partial class TelephoneSystem : SharedTelephoneSystem [Dependency] private IdCardSystem _idCardSystem = default!; [Dependency] private SharedAudioSystem _audio = default!; [Dependency] private ChatSystem _chat = default!; - [Dependency] private IPrototypeManager _prototype = default!; [Dependency] private IGameTiming _timing = default!; [Dependency] private IRobustRandom _random = default!; [Dependency] private IAdminLogManager _adminLogger = default!; @@ -365,7 +363,7 @@ public sealed partial class TelephoneSystem : SharedTelephoneSystem name = FormattedMessage.EscapeText(name); SpeechVerbPrototype speech; - if (ev.SpeechVerb != null && _prototype.Resolve(ev.SpeechVerb, out var evntProto)) + if (ev.SpeechVerb != null && ProtoMan.Resolve(ev.SpeechVerb, out var evntProto)) speech = evntProto; else speech = _chat.GetSpeechVerb(messageSource, message); diff --git a/Content.Server/Thief/Systems/ThiefUndeterminedBackpackSystem.cs b/Content.Server/Thief/Systems/ThiefUndeterminedBackpackSystem.cs index 5f9ce08873..428eca15fb 100644 --- a/Content.Server/Thief/Systems/ThiefUndeterminedBackpackSystem.cs +++ b/Content.Server/Thief/Systems/ThiefUndeterminedBackpackSystem.cs @@ -5,7 +5,6 @@ using Content.Shared.Storage.EntitySystems; using Content.Shared.Thief; using Robust.Server.GameObjects; using Robust.Server.Audio; -using Robust.Shared.Prototypes; namespace Content.Server.Thief.Systems; @@ -16,7 +15,6 @@ namespace Content.Server.Thief.Systems; public sealed partial class ThiefUndeterminedBackpackSystem : EntitySystem { [Dependency] private AudioSystem _audio = default!; - [Dependency] private IPrototypeManager _proto = default!; [Dependency] private SharedTransformSystem _transform = default!; [Dependency] private UserInterfaceSystem _ui = default!; [Dependency] private SharedStorageSystem _storage = default!; @@ -47,7 +45,7 @@ public sealed partial class ThiefUndeterminedBackpackSystem : EntitySystem foreach (var i in backpack.Comp.SelectedSets) { - var set = _proto.Index(backpack.Comp.PossibleSets[i]); + var set = ProtoMan.Index(backpack.Comp.PossibleSets[i]); foreach (var item in set.Content) { var ent = Spawn(item, _transform.GetMapCoordinates(backpack.Owner)); @@ -86,7 +84,7 @@ public sealed partial class ThiefUndeterminedBackpackSystem : EntitySystem for (int i = 0; i < component.PossibleSets.Count; i++) { - var set = _proto.Index(component.PossibleSets[i]); + var set = ProtoMan.Index(component.PossibleSets[i]); var selected = component.SelectedSets.Contains(i); var info = new ThiefBackpackSetInfo( set.Name, diff --git a/Content.Server/Tips/TipsSystem.cs b/Content.Server/Tips/TipsSystem.cs index 84eafad83b..f1e3753132 100644 --- a/Content.Server/Tips/TipsSystem.cs +++ b/Content.Server/Tips/TipsSystem.cs @@ -15,7 +15,6 @@ namespace Content.Server.Tips; public sealed partial class TipsSystem : SharedTipsSystem { [Dependency] private IChatManager _chat = default!; - [Dependency] private IPrototypeManager _prototype = default!; [Dependency] private IConfigurationManager _cfg = default!; [Dependency] private IGameTiming _timing = default!; [Dependency] private IRobustRandom _random = default!; @@ -113,7 +112,7 @@ public sealed partial class TipsSystem : SharedTipsSystem public override void AnnounceRandomTip() { - if (!_prototype.TryIndex(_tipsDataset, out var tips)) + if (!ProtoMan.TryIndex(_tipsDataset, out var tips)) return; var tip = _random.Pick(tips.Values); diff --git a/Content.Server/Traitor/Uplink/UplinkSystem.cs b/Content.Server/Traitor/Uplink/UplinkSystem.cs index 8b19669175..a4c879bcc5 100644 --- a/Content.Server/Traitor/Uplink/UplinkSystem.cs +++ b/Content.Server/Traitor/Uplink/UplinkSystem.cs @@ -19,7 +19,6 @@ public sealed partial class UplinkSystem : EntitySystem { [Dependency] private InventorySystem _inventorySystem = default!; [Dependency] private SharedHandsSystem _handsSystem = default!; - [Dependency] private IPrototypeManager _proto = default!; [Dependency] private StoreSystem _store = default!; [Dependency] private SharedSubdermalImplantSystem _subdermalImplant = default!; [Dependency] private SharedMindSystem _mind = default!; @@ -162,7 +161,7 @@ public sealed partial class UplinkSystem : EntitySystem /// public bool TryImplantUplink(EntityUid user, EntityUid storeEntity, FixedPoint2 balance, bool giveDiscounts) { - if (!_proto.Resolve(FallbackUplinkCatalog, out var catalog)) + if (!ProtoMan.Resolve(FallbackUplinkCatalog, out var catalog)) return false; if (!catalog.Cost.TryGetValue(TelecrystalCurrencyPrototype, out var cost)) diff --git a/Content.Server/Traits/TraitSystem.cs b/Content.Server/Traits/TraitSystem.cs index 4f8895c738..be5142146b 100644 --- a/Content.Server/Traits/TraitSystem.cs +++ b/Content.Server/Traits/TraitSystem.cs @@ -10,7 +10,6 @@ namespace Content.Server.Traits; public sealed partial class TraitSystem : EntitySystem { - [Dependency] private IPrototypeManager _prototypeManager = default!; [Dependency] private SharedHandsSystem _sharedHandsSystem = default!; [Dependency] private EntityWhitelistSystem _whitelistSystem = default!; @@ -26,7 +25,7 @@ public sealed partial class TraitSystem : EntitySystem { // Check if player's job allows to apply traits if (args.JobId == null || - !_prototypeManager.Resolve(args.JobId, out var protoJob) || + !ProtoMan.Resolve(args.JobId, out var protoJob) || !protoJob.ApplyTraits) { return; @@ -34,7 +33,7 @@ public sealed partial class TraitSystem : EntitySystem foreach (var traitId in args.Profile.TraitPreferences) { - if (!_prototypeManager.TryIndex(traitId, out var traitPrototype)) + if (!ProtoMan.TryIndex(traitId, out var traitPrototype)) { Log.Error($"No trait found with ID {traitId}!"); return; diff --git a/Content.Server/Trigger/Systems/RattleOnTriggerSystem.cs b/Content.Server/Trigger/Systems/RattleOnTriggerSystem.cs index 5fc18313e4..8cb8948b10 100644 --- a/Content.Server/Trigger/Systems/RattleOnTriggerSystem.cs +++ b/Content.Server/Trigger/Systems/RattleOnTriggerSystem.cs @@ -10,7 +10,6 @@ namespace Content.Server.Trigger.Systems; public sealed partial class RattleOnTriggerSystem : EntitySystem { - [Dependency] private IPrototypeManager _prototypeManager = default!; [Dependency] private RadioSystem _radio = default!; [Dependency] private NavMapSystem _navMap = default!; @@ -44,6 +43,6 @@ public sealed partial class RattleOnTriggerSystem : EntitySystem var message = Loc.GetString(messageId, ("user", target.Value), ("position", posText)); // Sends a message to the radio channel specified by the implant - _radio.SendRadioMessage(ent.Owner, message, _prototypeManager.Index(ent.Comp.RadioChannel), ent.Owner); + _radio.SendRadioMessage(ent.Owner, message, ProtoMan.Index(ent.Comp.RadioChannel), ent.Owner); } } diff --git a/Content.Server/Trigger/Systems/SpeakOnTriggerSystem.cs b/Content.Server/Trigger/Systems/SpeakOnTriggerSystem.cs index 7194db977f..9121255d25 100644 --- a/Content.Server/Trigger/Systems/SpeakOnTriggerSystem.cs +++ b/Content.Server/Trigger/Systems/SpeakOnTriggerSystem.cs @@ -2,7 +2,6 @@ using Content.Server.Chat.Systems; using Content.Shared.Chat; using Content.Shared.Trigger; using Content.Shared.Trigger.Components.Effects; -using Robust.Shared.Prototypes; using Robust.Shared.Random; namespace Content.Server.Trigger.Systems; @@ -10,7 +9,6 @@ namespace Content.Server.Trigger.Systems; public sealed partial class SpeakOnTriggerSystem : EntitySystem { [Dependency] private IRobustRandom _random = default!; - [Dependency] private IPrototypeManager _prototypeManager = default!; [Dependency] private ChatSystem _chat = default!; public override void Initialize() @@ -35,7 +33,7 @@ public sealed partial class SpeakOnTriggerSystem : EntitySystem message = Loc.GetString(ent.Comp.Text); else { - if (!_prototypeManager.Resolve(ent.Comp.Pack, out var messagePack)) + if (!ProtoMan.Resolve(ent.Comp.Pack, out var messagePack)) return; message = Loc.GetString(_random.Pick(messagePack.Values)); } diff --git a/Content.Server/Vocalization/Systems/DatasetVocalizationSystem.cs b/Content.Server/Vocalization/Systems/DatasetVocalizationSystem.cs index 95500a5e1a..77a55959eb 100644 --- a/Content.Server/Vocalization/Systems/DatasetVocalizationSystem.cs +++ b/Content.Server/Vocalization/Systems/DatasetVocalizationSystem.cs @@ -8,7 +8,6 @@ namespace Content.Server.Vocalization.Systems; /// public sealed partial class DatasetVocalizationSystem : EntitySystem { - [Dependency] private IPrototypeManager _protoMan = default!; [Dependency] private IRobustRandom _random = default!; public override void Initialize() @@ -23,7 +22,7 @@ public sealed partial class DatasetVocalizationSystem : EntitySystem if (args.Handled) return; - var dataset = _protoMan.Index(ent.Comp.Dataset); + var dataset = ProtoMan.Index(ent.Comp.Dataset); args.Message = _random.Pick(dataset); args.Handled = true; diff --git a/Content.Server/Vocalization/Systems/RadioVocalizationSystem.cs b/Content.Server/Vocalization/Systems/RadioVocalizationSystem.cs index a8869a829d..f1ea55dcd6 100644 --- a/Content.Server/Vocalization/Systems/RadioVocalizationSystem.cs +++ b/Content.Server/Vocalization/Systems/RadioVocalizationSystem.cs @@ -15,7 +15,6 @@ namespace Content.Server.Vocalization.Systems; public sealed partial class RadioVocalizationSystem : EntitySystem { [Dependency] private ChatSystem _chat = default!; - [Dependency] private IPrototypeManager _proto = default!; [Dependency] private IRobustRandom _random = default!; [Dependency] private InventorySystem _inventory = default!; @@ -83,7 +82,7 @@ public sealed partial class RadioVocalizationSystem : EntitySystem if (!TryPickRandomRadioChannel(entity, out var channel)) return false; - var channelPrefix = _proto.Index(channel).KeyCode; + var channelPrefix = ProtoMan.Index(channel).KeyCode; // send a whisper using the radio channel prefix and whatever relevant radio channel character // along with the message. This is analogous to how radio messages are sent by players diff --git a/Content.Server/VoiceMask/VoiceMaskSystem.cs b/Content.Server/VoiceMask/VoiceMaskSystem.cs index 6826e925ff..25da4b516d 100644 --- a/Content.Server/VoiceMask/VoiceMaskSystem.cs +++ b/Content.Server/VoiceMask/VoiceMaskSystem.cs @@ -15,7 +15,6 @@ using Content.Shared.Speech; using Content.Shared.VoiceMask; using Robust.Shared.Configuration; using Robust.Shared.Containers; -using Robust.Shared.Prototypes; namespace Content.Server.VoiceMask; @@ -25,7 +24,6 @@ public sealed partial class VoiceMaskSystem : EntitySystem [Dependency] private SharedPopupSystem _popupSystem = default!; [Dependency] private IConfigurationManager _cfgManager = default!; [Dependency] private ISharedAdminLogManager _adminLogger = default!; - [Dependency] private IPrototypeManager _proto = default!; [Dependency] private SharedActionsSystem _actions = default!; [Dependency] private LockSystem _lock = default!; [Dependency] private SharedContainerSystem _container = default!; @@ -190,7 +188,7 @@ public sealed partial class VoiceMaskSystem : EntitySystem #region User inputs from UI private void OnChangeVerb(Entity entity, ref VoiceMaskChangeVerbMessage msg) { - if (msg.Verb is { } id && !_proto.HasIndex(id)) + if (msg.Verb is { } id && !ProtoMan.HasIndex(id)) return; entity.Comp.VoiceMaskSpeechVerb = msg.Verb; diff --git a/Content.Server/Wagging/WaggingSystem.cs b/Content.Server/Wagging/WaggingSystem.cs index 7463c07f18..8aa401e571 100644 --- a/Content.Server/Wagging/WaggingSystem.cs +++ b/Content.Server/Wagging/WaggingSystem.cs @@ -17,7 +17,6 @@ public sealed partial class WaggingSystem : EntitySystem { [Dependency] private ActionsSystem _actions = default!; [Dependency] private SharedVisualBodySystem _visualBody = default!; - [Dependency] private IPrototypeManager _prototype = default!; public override void Initialize() { @@ -115,7 +114,7 @@ public sealed partial class WaggingSystem : EntitySystem } } - if (!_prototype.HasIndex(newMarkingId)) + if (!ProtoMan.HasIndex(newMarkingId)) { Log.Warning($"{ToPrettyString(ent):ent} tried toggling wagging but {newMarkingId} marking doesn't exist"); continue; diff --git a/Content.Server/Wires/WiresSystem.cs b/Content.Server/Wires/WiresSystem.cs index 2ca7d8a248..25e77ed11d 100644 --- a/Content.Server/Wires/WiresSystem.cs +++ b/Content.Server/Wires/WiresSystem.cs @@ -24,7 +24,6 @@ namespace Content.Server.Wires; public sealed partial class WiresSystem : SharedWiresSystem { - [Dependency] private IPrototypeManager _protoMan = default!; [Dependency] private SharedDoAfterSystem _doAfter = default!; [Dependency] private HandsSystem _hands = default!; [Dependency] private SharedPopupSystem _popupSystem = default!; @@ -74,7 +73,7 @@ public sealed partial class WiresSystem : SharedWiresSystem List wireActions = new(); var dummyWires = 0; - if (!_protoMan.Resolve(wires.LayoutId, out WireLayoutPrototype? layoutPrototype)) + if (!ProtoMan.Resolve(wires.LayoutId, out WireLayoutPrototype? layoutPrototype)) { return; } @@ -88,7 +87,7 @@ public sealed partial class WiresSystem : SharedWiresSystem // does the prototype have a parent (and are the wires empty?) if so, we just create // a new layout based on that - foreach (var parentLayout in _protoMan.EnumerateParents(wires.LayoutId)) + foreach (var parentLayout in ProtoMan.EnumerateParents(wires.LayoutId)) { if (parentLayout.Wires != null) { diff --git a/Content.Server/Xenoarchaeology/Artifact/XAE/XAECreatePuddleSystem.cs b/Content.Server/Xenoarchaeology/Artifact/XAE/XAECreatePuddleSystem.cs index a5b20c897e..70904370c6 100644 --- a/Content.Server/Xenoarchaeology/Artifact/XAE/XAECreatePuddleSystem.cs +++ b/Content.Server/Xenoarchaeology/Artifact/XAE/XAECreatePuddleSystem.cs @@ -11,12 +11,11 @@ namespace Content.Server.Xenoarchaeology.Artifact.XAE; /// /// System for xeno artifact effect that creates puddle of chemical reagents under artifact. /// -public sealed partial class XAECreatePuddleSystem: BaseXAESystem +public sealed partial class XAECreatePuddleSystem : BaseXAESystem { [Dependency] private IRobustRandom _random = default!; [Dependency] private PuddleSystem _puddle = default!; - [Dependency] private MetaDataSystem _metaData= default!; - [Dependency] private IPrototypeManager _prototypeManager= default!; + [Dependency] private MetaDataSystem _metaData = default!; /// public override void Initialize() @@ -49,7 +48,7 @@ public sealed partial class XAECreatePuddleSystem: BaseXAESystem(); foreach (var chemProtoId in component.SelectedChemicals) { - var reagent = _prototypeManager.Index(chemProtoId); + var reagent = ProtoMan.Index(chemProtoId); reagentNames.Add(reagent.LocalizedName); } diff --git a/Content.Server/Xenoarchaeology/Artifact/XAE/XAEFoamSystem.cs b/Content.Server/Xenoarchaeology/Artifact/XAE/XAEFoamSystem.cs index bcacd98f75..d1ffd3c45f 100644 --- a/Content.Server/Xenoarchaeology/Artifact/XAE/XAEFoamSystem.cs +++ b/Content.Server/Xenoarchaeology/Artifact/XAE/XAEFoamSystem.cs @@ -17,7 +17,6 @@ public sealed partial class XAEFoamSystem : BaseXAESystem { [Dependency] private IRobustRandom _random = default!; [Dependency] private SmokeSystem _smoke = default!; - [Dependency] private IPrototypeManager _prototypeManager= default!; [Dependency] private MetaDataSystem _metaData = default!; /// @@ -40,7 +39,7 @@ public sealed partial class XAEFoamSystem : BaseXAESystem if (component.ReplaceDescription) { - var reagent = _prototypeManager.Index(component.SelectedReagent); + var reagent = ProtoMan.Index(component.SelectedReagent); var newEntityDescription = Loc.GetString("xenoarch-effect-foam", ("reagent", reagent.LocalizedName)); _metaData.SetEntityDescription(uid, newEntityDescription); } diff --git a/Content.Server/Zombies/ZombieSystem.cs b/Content.Server/Zombies/ZombieSystem.cs index 099258f3f1..19b7e323d0 100644 --- a/Content.Server/Zombies/ZombieSystem.cs +++ b/Content.Server/Zombies/ZombieSystem.cs @@ -11,7 +11,6 @@ using Content.Shared.Bed.Sleep; using Content.Shared.Cloning.Events; using Content.Shared.Chat; using Content.Shared.Damage.Systems; -using Content.Shared.Humanoid; using Content.Shared.Inventory; using Content.Shared.Mind; using Content.Shared.Mind.Components; @@ -33,7 +32,6 @@ namespace Content.Server.Zombies public sealed partial class ZombieSystem : SharedZombieSystem { [Dependency] private IGameTiming _timing = default!; - [Dependency] private IPrototypeManager _protoManager = default!; [Dependency] private IRobustRandom _random = default!; [Dependency] private BloodstreamSystem _bloodstream = default!; [Dependency] private DamageableSystem _damageable = default!; @@ -185,7 +183,7 @@ namespace Content.Server.Zombies if (args.Handled) return; - _protoManager.Resolve(component.EmoteSoundsId, out var sounds); + ProtoMan.Resolve(component.EmoteSoundsId, out var sounds); args.Handled = _chat.TryPlayEmoteSound(uid, sounds, args.Emote); } diff --git a/Content.Shared/Item/SharedItemSystem.cs b/Content.Shared/Item/SharedItemSystem.cs index f326c52f5f..a1db9fa82c 100644 --- a/Content.Shared/Item/SharedItemSystem.cs +++ b/Content.Shared/Item/SharedItemSystem.cs @@ -15,7 +15,6 @@ public abstract partial class SharedItemSystem : EntitySystem { [Dependency] private SharedHandsSystem _handsSystem = default!; [Dependency] protected SharedContainerSystem Container = default!; - [Dependency] private IComponentFactory _compFactory = default!; public override void Initialize() { @@ -282,8 +281,8 @@ public abstract partial class SharedItemSystem : EntitySystem { var protoA = ProtoMan.Index(a); var protoB = ProtoMan.Index(b); - if (!protoA.TryComp(out var compA, _compFactory) || - !protoB.TryComp(out var compB, _compFactory)) + if (!protoA.TryComp(out var compA, Factory) || + !protoB.TryComp(out var compB, Factory)) { return 0; } diff --git a/Content.Shared/StatusEffectNew/StatusEffectsSystem.cs b/Content.Shared/StatusEffectNew/StatusEffectsSystem.cs index d966d7c88a..f54a13d162 100644 --- a/Content.Shared/StatusEffectNew/StatusEffectsSystem.cs +++ b/Content.Shared/StatusEffectNew/StatusEffectsSystem.cs @@ -14,7 +14,6 @@ namespace Content.Shared.StatusEffectNew; /// public sealed partial class StatusEffectsSystem : EntitySystem { - [Dependency] private IComponentFactory _factory = default!; [Dependency] private IGameTiming _timing = default!; [Dependency] private SharedContainerSystem _container = default!; [Dependency] private EntityWhitelistSystem _whitelist = default!; @@ -78,7 +77,7 @@ public sealed partial class StatusEffectsSystem : EntitySystem foreach (var ent in ProtoMan.EnumeratePrototypes()) { - if (ent.TryGetComponent(out _, _factory)) + if (ent.HasComp(Factory)) StatusEffectPrototypes.Add(ent.ID); } } @@ -167,7 +166,7 @@ public sealed partial class StatusEffectsSystem : EntitySystem if (!ProtoMan.Resolve(effectProto, out var effectProtoData)) return false; - if (!effectProtoData.TryGetComponent(out var effectProtoComp, Factory)) + if (!effectProtoData.TryComp(out var effectProtoComp, Factory)) return false; if (!_whitelist.CheckBoth(uid, effectProtoComp.Blacklist, effectProtoComp.Whitelist)) diff --git a/Content.Shared/Whitelist/EntityWhitelistSystem.cs b/Content.Shared/Whitelist/EntityWhitelistSystem.cs index bc6fcb53d4..9a885c7708 100644 --- a/Content.Shared/Whitelist/EntityWhitelistSystem.cs +++ b/Content.Shared/Whitelist/EntityWhitelistSystem.cs @@ -6,7 +6,6 @@ namespace Content.Shared.Whitelist; public sealed partial class EntityWhitelistSystem : EntitySystem { - [Dependency] private IComponentFactory _factory = default!; [Dependency] private TagSystem _tag = default!; [Dependency] private EntityQuery _itemQuery; @@ -18,8 +17,8 @@ public sealed partial class EntityWhitelistSystem : EntitySystem base.Initialize(); // caching for minor performance improvement - _itemComponentName = CompName.Get(_factory); - _tagComponentName = CompName.Get(_factory); + _itemComponentName = CompName.Get(Factory); + _tagComponentName = CompName.Get(Factory); } /// From 22a2c131b87f7f9d8d966f909bf02df080c091fa Mon Sep 17 00:00:00 2001 From: Centronias Date: Mon, 29 Jun 2026 14:49:02 -0700 Subject: [PATCH 16/47] Paramedic + emergency EVA suit get their helmets back (#44425) paramedic + emergency EVA suit get their helmets back --- .../Clothing/OuterClothing/base_clothingouter.yml | 13 +++++++++++++ .../Entities/Clothing/OuterClothing/softsuits.yml | 11 ++--------- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/base_clothingouter.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/base_clothingouter.yml index 57ae050233..18b6030372 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/base_clothingouter.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/base_clothingouter.yml @@ -201,6 +201,19 @@ slots: - Tail +- type: entity + parent: ClothingOuterEVASuitBase + id: ClothingOuterEVASuitBaseToggleable + abstract: true + components: + - type: ToggleableClothing + slot: head + verbText: toggle-clothing-verb-helmet + action: ActionToggleSuitPiece + - type: ContainerContainer + containers: + toggleable-clothing: !type:ContainerSlot {} + - type: entity parent: ClothingOuterBase id: ClothingOuterBaseToggleable diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/softsuits.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/softsuits.yml index 3f55f1204e..bd9b01cd58 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/softsuits.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/softsuits.yml @@ -36,7 +36,7 @@ #Emergency EVA - type: entity - parent: ClothingOuterEVASuitBase + parent: ClothingOuterEVASuitBaseToggleable id: ClothingOuterSuitEmergency name: emergency EVA suit description: An emergency EVA suit with a built-in helmet. It's horribly slow and lacking in temperature protection, but enough to buy you time from the harsh vacuum of space. @@ -54,10 +54,6 @@ coolingCoefficient: 0.5 - type: ToggleableClothing clothingPrototype: ClothingHeadHelmetEVALarge - slot: head - - type: ContainerContainer - containers: - toggleable-clothing: !type:ContainerSlot {} - type: Tag tags: - CorgiWearable @@ -107,7 +103,7 @@ #Paramedic Voidsuit - type: entity - parent: [ClothingOuterEVASuitBase, BaseMedicalContraband] #Despite "Voidsuits are light hardsuits", since it parents of EVA Suits, it goes with the other softsuits + parent: [ClothingOuterEVASuitBaseToggleable, BaseMedicalContraband] #Despite "Voidsuits are light hardsuits", since it parents of EVA Suits, it goes with the other softsuits id: ClothingOuterHardsuitVoidParamed name: paramedic void suit description: A void suit made for paramedics. @@ -165,9 +161,6 @@ mask: /Textures/Effects/LightMasks/double_cone.png - type: RotatingLight speed: 360 - - type: ContainerContainer - containers: - toggleable-clothing: !type:ContainerSlot {} - type: Tag tags: - WhitelistChameleon From 74f6b4db265c98c071575bb6bb91137d04634e33 Mon Sep 17 00:00:00 2001 From: Connor Huffine Date: Mon, 29 Jun 2026 23:53:22 -0400 Subject: [PATCH 17/47] Revert "new shell scripts for running client and server" (#44433) Revert "new shell scripts for running client and server (#44295)" This reverts commit 17a1d086dafd20e4687388ff087f0bd8fe77a50a. --- run-build-debug.bat | 3 --- run-build-debug.sh | 3 --- run-build-release.bat | 3 --- run-build-release.sh | 3 --- run-build-tools.bat | 3 --- run-build-tools.sh | 3 --- run-client-debug.bat | 3 --- run-client-debug.sh | 3 --- run-client-nobuild.bat | 3 --- run-client-release.bat | 3 --- run-client-release.sh | 3 --- run-client-tools.bat | 3 --- run-client-tools.sh | 3 --- run-nobuild.bat | 3 --- run-nobuild.sh | 3 --- run-server-debug.bat | 3 --- run-server-debug.sh | 3 --- run-server-nobuild.bat | 3 --- run-server-release.bat | 3 --- run-server-release.sh | 3 --- run-server-tools.bat | 3 --- run-server-tools.sh | 3 --- runclient-Tools.bat | 3 +++ runclient-Tools.sh | 3 +++ runclient.bat | 3 +++ run-client-nobuild.sh => runclient.sh | 2 +- runserver-Tools.bat | 3 +++ runserver-Tools.sh | 3 +++ runserver.bat | 3 +++ run-server-nobuild.sh => runserver.sh | 2 +- 30 files changed, 20 insertions(+), 68 deletions(-) delete mode 100644 run-build-debug.bat delete mode 100644 run-build-debug.sh delete mode 100644 run-build-release.bat delete mode 100644 run-build-release.sh delete mode 100644 run-build-tools.bat delete mode 100644 run-build-tools.sh delete mode 100644 run-client-debug.bat delete mode 100644 run-client-debug.sh delete mode 100644 run-client-nobuild.bat delete mode 100644 run-client-release.bat delete mode 100644 run-client-release.sh delete mode 100644 run-client-tools.bat delete mode 100644 run-client-tools.sh delete mode 100644 run-nobuild.bat delete mode 100644 run-nobuild.sh delete mode 100644 run-server-debug.bat delete mode 100644 run-server-debug.sh delete mode 100644 run-server-nobuild.bat delete mode 100644 run-server-release.bat delete mode 100644 run-server-release.sh delete mode 100644 run-server-tools.bat delete mode 100644 run-server-tools.sh create mode 100644 runclient-Tools.bat create mode 100755 runclient-Tools.sh create mode 100644 runclient.bat rename run-client-nobuild.sh => runclient.sh (53%) mode change 100644 => 100755 create mode 100644 runserver-Tools.bat create mode 100755 runserver-Tools.sh create mode 100644 runserver.bat rename run-server-nobuild.sh => runserver.sh (53%) mode change 100644 => 100755 diff --git a/run-build-debug.bat b/run-build-debug.bat deleted file mode 100644 index f827d9e419..0000000000 --- a/run-build-debug.bat +++ /dev/null @@ -1,3 +0,0 @@ -@echo OFF -dotnet build --configuration Debug -start run-nobuild.bat \ No newline at end of file diff --git a/run-build-debug.sh b/run-build-debug.sh deleted file mode 100644 index 3792ceb81f..0000000000 --- a/run-build-debug.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env bash -dotnet build --configuration Debug -./run-nobuild.sh \ No newline at end of file diff --git a/run-build-release.bat b/run-build-release.bat deleted file mode 100644 index c7c64f39f5..0000000000 --- a/run-build-release.bat +++ /dev/null @@ -1,3 +0,0 @@ -@echo OFF -dotnet build --configuration Release -start run-nobuild.bat \ No newline at end of file diff --git a/run-build-release.sh b/run-build-release.sh deleted file mode 100644 index cc131f47a3..0000000000 --- a/run-build-release.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env bash -dotnet build --configuration Release -./run-nobuild.sh \ No newline at end of file diff --git a/run-build-tools.bat b/run-build-tools.bat deleted file mode 100644 index e36874a8c5..0000000000 --- a/run-build-tools.bat +++ /dev/null @@ -1,3 +0,0 @@ -@echo OFF -dotnet build --configuration Tools -start run-nobuild.bat \ No newline at end of file diff --git a/run-build-tools.sh b/run-build-tools.sh deleted file mode 100644 index 32a18dfe7b..0000000000 --- a/run-build-tools.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env bash -dotnet build --configuration Tools -./run-nobuild.sh \ No newline at end of file diff --git a/run-client-debug.bat b/run-client-debug.bat deleted file mode 100644 index 960f57a278..0000000000 --- a/run-client-debug.bat +++ /dev/null @@ -1,3 +0,0 @@ -@echo off -dotnet run --configuration Debug --project Content.Client -pause \ No newline at end of file diff --git a/run-client-debug.sh b/run-client-debug.sh deleted file mode 100644 index 22a4ce092a..0000000000 --- a/run-client-debug.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env bash -dotnet run --configuration Debug --project Content.Client -read -p "Press enter to continue" diff --git a/run-client-nobuild.bat b/run-client-nobuild.bat deleted file mode 100644 index 1a13500e06..0000000000 --- a/run-client-nobuild.bat +++ /dev/null @@ -1,3 +0,0 @@ -@echo off -dotnet run --no-build --project Content.Client -pause \ No newline at end of file diff --git a/run-client-release.bat b/run-client-release.bat deleted file mode 100644 index 6a29efc915..0000000000 --- a/run-client-release.bat +++ /dev/null @@ -1,3 +0,0 @@ -@echo off -dotnet run --configuration Release --project Content.Client -pause \ No newline at end of file diff --git a/run-client-release.sh b/run-client-release.sh deleted file mode 100644 index cf7253401c..0000000000 --- a/run-client-release.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env bash -dotnet run --configuration Release --project Content.Client -read -p "Press enter to continue" diff --git a/run-client-tools.bat b/run-client-tools.bat deleted file mode 100644 index f2b19c21bc..0000000000 --- a/run-client-tools.bat +++ /dev/null @@ -1,3 +0,0 @@ -@echo off -dotnet run --configuration Tools --project Content.Client -pause \ No newline at end of file diff --git a/run-client-tools.sh b/run-client-tools.sh deleted file mode 100644 index 31fff90ea3..0000000000 --- a/run-client-tools.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env bash -dotnet run --configuration Tools --project Content.Client -read -p "Press enter to continue" diff --git a/run-nobuild.bat b/run-nobuild.bat deleted file mode 100644 index 877f4dfad7..0000000000 --- a/run-nobuild.bat +++ /dev/null @@ -1,3 +0,0 @@ -@echo OFF -start run-server-nobuild.bat -start run-client-nobuild.bat \ No newline at end of file diff --git a/run-nobuild.sh b/run-nobuild.sh deleted file mode 100644 index 783d513200..0000000000 --- a/run-nobuild.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env bash -./run-client-nobuild.sh & -./run-server-nobuild.sh \ No newline at end of file diff --git a/run-server-debug.bat b/run-server-debug.bat deleted file mode 100644 index 4c21ed6a4e..0000000000 --- a/run-server-debug.bat +++ /dev/null @@ -1,3 +0,0 @@ -@echo off -dotnet run --configuration Debug --project Content.Server -pause \ No newline at end of file diff --git a/run-server-debug.sh b/run-server-debug.sh deleted file mode 100644 index 1b07ed4151..0000000000 --- a/run-server-debug.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env bash -dotnet run --configuration Debug --project Content.Server -read -p "Press enter to continue" diff --git a/run-server-nobuild.bat b/run-server-nobuild.bat deleted file mode 100644 index 589e613a47..0000000000 --- a/run-server-nobuild.bat +++ /dev/null @@ -1,3 +0,0 @@ -@echo off -dotnet run --no-build --project Content.Server -pause \ No newline at end of file diff --git a/run-server-release.bat b/run-server-release.bat deleted file mode 100644 index f3319e4d19..0000000000 --- a/run-server-release.bat +++ /dev/null @@ -1,3 +0,0 @@ -@echo off -dotnet run --configuration Release --project Content.Server -pause \ No newline at end of file diff --git a/run-server-release.sh b/run-server-release.sh deleted file mode 100644 index f5b72a346f..0000000000 --- a/run-server-release.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env bash -dotnet run --configuration Release --project Content.Server -read -p "Press enter to continue" diff --git a/run-server-tools.bat b/run-server-tools.bat deleted file mode 100644 index 9900ee31f3..0000000000 --- a/run-server-tools.bat +++ /dev/null @@ -1,3 +0,0 @@ -@echo off -dotnet run --configuration Tools --project Content.Server -pause \ No newline at end of file diff --git a/run-server-tools.sh b/run-server-tools.sh deleted file mode 100644 index 3cb3d74bd7..0000000000 --- a/run-server-tools.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env bash -dotnet run --configuration Tools --project Content.Server -read -p "Press enter to continue" diff --git a/runclient-Tools.bat b/runclient-Tools.bat new file mode 100644 index 0000000000..5c3da54611 --- /dev/null +++ b/runclient-Tools.bat @@ -0,0 +1,3 @@ +@echo off +dotnet run --project Content.Client --configuration Tools +pause diff --git a/runclient-Tools.sh b/runclient-Tools.sh new file mode 100755 index 0000000000..b564c35438 --- /dev/null +++ b/runclient-Tools.sh @@ -0,0 +1,3 @@ +#!/usr/bin/env bash +dotnet run --project Content.Client --configuration Tools +read -p "Press enter to continue" diff --git a/runclient.bat b/runclient.bat new file mode 100644 index 0000000000..2925ababb0 --- /dev/null +++ b/runclient.bat @@ -0,0 +1,3 @@ +@echo off +dotnet run --project Content.Client +pause diff --git a/run-client-nobuild.sh b/runclient.sh old mode 100644 new mode 100755 similarity index 53% rename from run-client-nobuild.sh rename to runclient.sh index 150ecd45d5..5df80bb08e --- a/run-client-nobuild.sh +++ b/runclient.sh @@ -1,3 +1,3 @@ #!/usr/bin/env bash -dotnet run --no-build --project Content.Client +dotnet run --project Content.Client read -p "Press enter to continue" diff --git a/runserver-Tools.bat b/runserver-Tools.bat new file mode 100644 index 0000000000..8ea3d7c04b --- /dev/null +++ b/runserver-Tools.bat @@ -0,0 +1,3 @@ +@echo off +dotnet run --project Content.Server --configuration Tools +pause diff --git a/runserver-Tools.sh b/runserver-Tools.sh new file mode 100755 index 0000000000..3a786920a7 --- /dev/null +++ b/runserver-Tools.sh @@ -0,0 +1,3 @@ +#!/usr/bin/env bash +dotnet run --project Content.Server --configuration Tools +read -p "Press enter to continue" diff --git a/runserver.bat b/runserver.bat new file mode 100644 index 0000000000..5c3f8acecd --- /dev/null +++ b/runserver.bat @@ -0,0 +1,3 @@ +@echo off +dotnet run --project Content.Server +pause diff --git a/run-server-nobuild.sh b/runserver.sh old mode 100644 new mode 100755 similarity index 53% rename from run-server-nobuild.sh rename to runserver.sh index bbc3b0eae6..33638d6bb5 --- a/run-server-nobuild.sh +++ b/runserver.sh @@ -1,3 +1,3 @@ #!/usr/bin/env bash -dotnet run --no-build --project Content.Server +dotnet run --project Content.Server read -p "Press enter to continue" From 254f6570c7be318d2fc85c39ca33a08b4c8b2ace Mon Sep 17 00:00:00 2001 From: Ewanderer <6307595+Ewanderer@users.noreply.github.com> Date: Tue, 30 Jun 2026 09:40:35 +0200 Subject: [PATCH 18/47] added ammonia electrolysis (#43736) * added ammonia electrolysis, adjusted ammonia synthesis to complement the reaction cycle. adjusted tutorial text for agrichemkit for ammonia * fixed small styling issue. cut down on comments to bring them more on point. --- Resources/Locale/en-US/paper/paper-misc.ftl | 6 +++--- .../Prototypes/Recipes/Reactions/chemicals.yml | 16 ++++++++++++++++ 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/Resources/Locale/en-US/paper/paper-misc.ftl b/Resources/Locale/en-US/paper/paper-misc.ftl index ab87e13b12..fab53dba0b 100644 --- a/Resources/Locale/en-US/paper/paper-misc.ftl +++ b/Resources/Locale/en-US/paper/paper-misc.ftl @@ -39,16 +39,16 @@ book-text-agrichemkit-manual = Thank you for choosing the safe-for-all-ages Nano A little bottle of EZ Nutrient replaces a big stack of produce you'd otherwise compost to keep your plants growing strong. And crops you compost are crops you didn't make a profit on, so keep that EZ Nutrient flowing. Second Experiment: Ammonia and Diethylamine - Mix 3 parts hydrogen to 1 part nitrogen to make ammonia. It's a healthy, nutritious treat for your crops that aren't at their best. + Mix 3 parts hydrogen to 1 part nitrogen and microwave for 30 seconds to make ammonia. It's a healthy, nutritious treat for your crops that aren't at their best. But if you want to impress the judges at your local NanoTrasen-sponsored County Fair, you'll need to add an equal amount of ethanol to your ammonia. This will mix into Diethylamine, a miracle fertilizer that can make plants grow faster AND live longer! Keep the crops you love with you longer thanks to Diethylamine. Third Experiment: Unstable Mutagen When you're ready to show everyone you're the greatest botanist on the station, you'll need to mix up some unstable mutagen and hope for the best. Despite the scary name, unstable mutagen is entirely safe when applied to plants, but do not drink the appealingly green chemical yourself. - + Mix equal parts radium, phosphorus, and chlorine together to get a bright green batch of unstable mutagen, the safe and fun way to get the most of your farm. The 15u this kit lets you make could be your introduction to agrichemical stardom! Unstable mutagen can have a wide variety of effects on plant life, including drastic changes to all sorts of growth parameters, produce full of helpful pharmaceuticals, plants that glow in the dark, or creating entirely new species. - + Each individual plant responds to unstable mutagen differently, so you may want to use small doses on multiple crops and try to crossbreed the best traits from each of those. Applying multiple doses to one plant can stack multiple changes and make it harder to single out desirable traits. Unstable mutagen is entirely safe when used as a fertilizer, and NanoTrasen takes no responsibility for dead crops, excessive water bills, newly sentient plants asking existential questions, or flora-strangled farmhands that may coincidentally occur while using it. Do not drink unstable mutagen. Wash your hands thoroughly after handling. Wash your eyes if you have looked at unstable mutagen for over 30 minutes in a 24 hour period. Store in a dark room between 293–295K. Do not use on corporate holidays. If you begin hearing voices telling you to drink unstable mutagen, please contact your doctor, head of personnel, or exorcist. diff --git a/Resources/Prototypes/Recipes/Reactions/chemicals.yml b/Resources/Prototypes/Recipes/Reactions/chemicals.yml index dab0648660..7f712562f3 100644 --- a/Resources/Prototypes/Recipes/Reactions/chemicals.yml +++ b/Resources/Prototypes/Recipes/Reactions/chemicals.yml @@ -1,5 +1,6 @@ - type: reaction id: Ammonia + minTemp: 370 # prevents electrolyzed ammonia from recombining. reactants: Hydrogen: amount: 3 @@ -7,6 +8,21 @@ amount: 1 products: Ammonia: 4 + effects: + - !type:AdjustSolutionThermalEnergy # remove heat to stop reaction on repeated recombination during electrolysis + delta: -92.28 # actual energy requirement of reaction, works surprisingly well. + +- type: reaction + id: AmmoniaBreakdown + source: true + requiredMixerCategories: + - Electrolysis + reactants: + Ammonia: + amount: 4 + products: + Hydrogen: 3 + Nitrogen: 1 - type: reaction id: CelluloseBreakdown From c140b5996cb731a6b769fa96fb79cfacad942c73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C4=81da?= Date: Tue, 30 Jun 2026 13:03:03 -0500 Subject: [PATCH 19/47] Fix BiomassReclaimerSystem bug (#44146) * commit * readability --------- Co-authored-by: iaada --- .../Medical/BiomassReclaimer/BiomassReclaimerSystem.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Content.Server/Medical/BiomassReclaimer/BiomassReclaimerSystem.cs b/Content.Server/Medical/BiomassReclaimer/BiomassReclaimerSystem.cs index 18957ee9d1..1d86e8f0d4 100644 --- a/Content.Server/Medical/BiomassReclaimer/BiomassReclaimerSystem.cs +++ b/Content.Server/Medical/BiomassReclaimer/BiomassReclaimerSystem.cs @@ -12,6 +12,7 @@ using Content.Shared.Climbing.Events; using Content.Shared.Construction.Components; using Content.Shared.Database; using Content.Shared.DoAfter; +using Content.Shared.FixedPoint; using Content.Shared.Humanoid; using Content.Shared.Interaction; using Content.Shared.Interaction.Events; @@ -212,7 +213,8 @@ namespace Content.Server.Medical.BiomassReclaimer _solution.ResolveSolution(toProcess, stream.BloodSolutionName, ref stream.BloodSolution, out var solution)) { component.BloodReagents = solution.Clone(); - component.BloodReagents.ScaleSolution(50 / component.BloodReagents.Volume); + var scale = component.BloodReagents.Volume <= FixedPoint2.Zero ? 0 : 50 / component.BloodReagents.Volume; + component.BloodReagents.ScaleSolution(scale); } if (TryComp(toProcess, out var refinable)) { From c8040b1f4865c68a04d974d1c4e7e13e98837c2a Mon Sep 17 00:00:00 2001 From: KeTuFaisPiKiNut <85769816+ketufaispikinut@users.noreply.github.com> Date: Tue, 30 Jun 2026 14:32:35 -0400 Subject: [PATCH 20/47] All zombies are now re-ghostable. (#43905) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit zeds forever! Co-authored-by: nomdéraisonnablementlong --- Content.Server/Zombies/ZombieSystem.Transform.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Content.Server/Zombies/ZombieSystem.Transform.cs b/Content.Server/Zombies/ZombieSystem.Transform.cs index 63f3ae67fa..0a280cd338 100644 --- a/Content.Server/Zombies/ZombieSystem.Transform.cs +++ b/Content.Server/Zombies/ZombieSystem.Transform.cs @@ -307,7 +307,7 @@ public sealed partial class ZombieSystem _npc.WakeNPC(target, htn); } - if (!HasComp(target) && !hasMind) //this specific component gives build test trouble so pop off, ig + if (!HasComp(target)) //this specific component gives build test trouble so pop off, ig { //yet more hardcoding. Visit zombie.ftl for more information. var ghostRole = EnsureComp(target); From 9b594ab6a0ce5be78341a17ef3cca84755ed0b48 Mon Sep 17 00:00:00 2001 From: riccardi48 <39341154+riccardi48@users.noreply.github.com> Date: Tue, 30 Jun 2026 19:39:38 +0100 Subject: [PATCH 21/47] Remove unused cargo shuttle BUI state (#44438) init --- ...goShuttleConsoleBoundUserInterfaceState.cs | 25 ------------------- 1 file changed, 25 deletions(-) delete mode 100644 Content.Shared/Cargo/BUI/CargoShuttleConsoleBoundUserInterfaceState.cs diff --git a/Content.Shared/Cargo/BUI/CargoShuttleConsoleBoundUserInterfaceState.cs b/Content.Shared/Cargo/BUI/CargoShuttleConsoleBoundUserInterfaceState.cs deleted file mode 100644 index 8654fffdd8..0000000000 --- a/Content.Shared/Cargo/BUI/CargoShuttleConsoleBoundUserInterfaceState.cs +++ /dev/null @@ -1,25 +0,0 @@ -using Robust.Shared.Serialization; - -namespace Content.Shared.Cargo.BUI; - -[Serializable, NetSerializable] -public sealed class CargoShuttleConsoleBoundUserInterfaceState : BoundUserInterfaceState -{ - public string AccountName; - public string ShuttleName; - - /// - /// List of orders expected on the delivery. - /// - public List Orders; - - public CargoShuttleConsoleBoundUserInterfaceState( - string accountName, - string shuttleName, - List orders) - { - AccountName = accountName; - ShuttleName = shuttleName; - Orders = orders; - } -} From 96357a0e8d44617856b9340d7498f6a175d1efd9 Mon Sep 17 00:00:00 2001 From: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Date: Wed, 1 Jul 2026 04:44:38 +1000 Subject: [PATCH 22/47] Set time limit on test runner (#44430) For some reason these have been timing out for months and the default 6 hour limit is overkill. --- .github/workflows/build-test-debug.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build-test-debug.yml b/.github/workflows/build-test-debug.yml index 15ceea3cb0..a459740e68 100644 --- a/.github/workflows/build-test-debug.yml +++ b/.github/workflows/build-test-debug.yml @@ -16,6 +16,7 @@ jobs: os: [ubuntu-latest] runs-on: ${{ matrix.os }} + timeout-minutes: 30 steps: - name: Checkout Master From ff98bb0fdd315bedb4011e150af00feb1bdf4703 Mon Sep 17 00:00:00 2001 From: themias <89101928+themias@users.noreply.github.com> Date: Tue, 30 Jun 2026 16:29:39 -0400 Subject: [PATCH 23/47] Fix lighter refuel popup message (#44121) Fix lighter popup message Co-authored-by: jessicamaybe --- .../Tools/Systems/SharedToolSystem.Welder.cs | 12 ++++++------ .../en-US/tools/components/welder-component.ftl | 10 +++++----- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/Content.Shared/Tools/Systems/SharedToolSystem.Welder.cs b/Content.Shared/Tools/Systems/SharedToolSystem.Welder.cs index 4ae44ddb89..4aae369c20 100644 --- a/Content.Shared/Tools/Systems/SharedToolSystem.Welder.cs +++ b/Content.Shared/Tools/Systems/SharedToolSystem.Welder.cs @@ -129,11 +129,11 @@ public abstract partial class SharedToolSystem } else if (welderSolution.AvailableVolume <= 0) { - _popup.PopupClient(Loc.GetString("welder-component-already-full"), entity, args.User); + _popup.PopupClient(Loc.GetString("welder-component-already-full", ("owner", entity.Owner)), entity, args.User); } else { - _popup.PopupClient(Loc.GetString("welder-component-no-fuel-in-tank", ("owner", args.Target)), entity, args.User); + _popup.PopupClient(Loc.GetString("welder-component-no-fuel-in-tank", ("target", args.Target)), entity, args.User); } args.Handled = true; @@ -144,7 +144,7 @@ public abstract partial class SharedToolSystem { if (!ItemToggle.IsActivated(entity.Owner)) { - _popup.PopupClient(Loc.GetString("welder-component-welder-not-lit-message"), entity, user); + _popup.PopupClient(Loc.GetString("welder-component-welder-not-lit-message", ("owner", entity.Owner)), entity, user); ev.Cancel(); } @@ -152,7 +152,7 @@ public abstract partial class SharedToolSystem if (requiredFuel > currentFuel) { - _popup.PopupClient(Loc.GetString("welder-component-cannot-weld-message"), entity, user); + _popup.PopupClient(Loc.GetString("welder-component-cannot-weld-message", ("owner", entity.Owner)), entity, user); ev.Cancel(); } } @@ -187,14 +187,14 @@ public abstract partial class SharedToolSystem if (!SolutionContainerSystem.TryGetSolution(entity.Owner, entity.Comp.FuelSolutionName, out _, out var solution)) { args.Cancelled = true; - args.Popup = Loc.GetString("welder-component-no-fuel-message"); + args.Popup = Loc.GetString("welder-component-no-fuel-message", ("owner", entity.Owner)); return; } var fuel = solution.GetTotalPrototypeQuantity(entity.Comp.FuelReagent); if (fuel == FixedPoint2.Zero || fuel < entity.Comp.FuelLitCost) { - args.Popup = Loc.GetString("welder-component-no-fuel-message"); + args.Popup = Loc.GetString("welder-component-no-fuel-message", ("owner", entity.Owner)); args.Cancelled = true; } } diff --git a/Resources/Locale/en-US/tools/components/welder-component.ftl b/Resources/Locale/en-US/tools/components/welder-component.ftl index 6307068521..dfdc7f5394 100644 --- a/Resources/Locale/en-US/tools/components/welder-component.ftl +++ b/Resources/Locale/en-US/tools/components/welder-component.ftl @@ -1,7 +1,7 @@ -welder-component-welder-not-lit-message = The welder is turned off! -welder-component-cannot-weld-message = The welder does not have enough fuel for that! -welder-component-no-fuel-message = The welder has no fuel left! -welder-component-no-fuel-in-tank = The {$owner} is empty. +welder-component-welder-not-lit-message = The {$owner} is turned off! +welder-component-cannot-weld-message = The {$owner} does not have enough fuel for that! +welder-component-no-fuel-message = The {$owner} has no fuel left! +welder-component-no-fuel-in-tank = The {$target} is empty. welder-component-on-examine-welder-lit-message = [color=orange]Lit[/color] welder-component-on-examine-welder-not-lit-message = Not lit welder-component-on-examine-detailed-message = Fuel: [color={$colorName}]{$fuelLeft}/{$fuelCapacity}[/color] @@ -11,4 +11,4 @@ welder-component-suicide-lit-message = You weld your every orifice closed! welder-component-suicide-unlit-others-message = {$victim} bashes themselves with the unlit welding torch! welder-component-suicide-unlit-message = You bash yourself with the unlit welding torch! welder-component-after-interact-refueled-message = Refueled! -welder-component-already-full = The welder is already full. +welder-component-already-full = The {$owner} is already full. From 5c8bcaaac2b5e70cdeb2fd96b6e685484dcb21e6 Mon Sep 17 00:00:00 2001 From: Andrea De Murtas <56048157+andreademurtas@users.noreply.github.com> Date: Tue, 30 Jun 2026 22:52:51 +0200 Subject: [PATCH 24/47] Remove invalid electronics board reference from turret control panel base (#44415) Closes #42658 --- .../Entities/Structures/Wallmounts/turret_controls.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/Resources/Prototypes/Entities/Structures/Wallmounts/turret_controls.yml b/Resources/Prototypes/Entities/Structures/Wallmounts/turret_controls.yml index 1998afc1c6..dd58c256b9 100644 --- a/Resources/Prototypes/Entities/Structures/Wallmounts/turret_controls.yml +++ b/Resources/Prototypes/Entities/Structures/Wallmounts/turret_controls.yml @@ -160,10 +160,6 @@ - type: Electrified enabled: false usesApcPower: true - - type: ContainerFill - containers: - board: - - WeaponEnergyTurretStationControlPanelElectronics - type: Construction graph: WeaponEnergyTurretControlPanel node: finish From cfd14314dd831301a3f71cb9ce315141618f3447 Mon Sep 17 00:00:00 2001 From: IntegerTempest <30300017+IntegerTempest@users.noreply.github.com> Date: Wed, 1 Jul 2026 00:06:12 +0300 Subject: [PATCH 25/47] Spider and Spacemobs Night Vision (#39403) * Mobs NightVision * update * Update Content.Client/Overlays/NightVisionOverlaySystem.cs Co-authored-by: Perry Fraser * Update Content.Shared/Overlays/NightVisionComponent.cs Co-authored-by: Perry Fraser * Update Content.Shared/Overlays/NightVisionComponent.cs Co-authored-by: Perry Fraser * Update Resources/Textures/Shaders/nightvision.swsl Co-authored-by: Perry Fraser * update * update * Update nightvision.swsl * 123 * refactoring * Update NightVisionOverlaySystem.cs * cleaning * imagine * cleaning cleaning * fix --------- Co-authored-by: Perry Fraser Co-authored-by: Pok245 <113675512+Pok27@users.noreply.github.com> Co-authored-by: ScarKy0 --- Content.Client/Overlays/NightVisionOverlay.cs | 61 ++++++++++++++++ .../Overlays/NightVisionOverlaySystem.cs | 70 +++++++++++++++++++ .../Inventory/InventorySystem.Relay.cs | 1 + .../Overlays/NightVisionComponent.cs | 43 ++++++++++++ .../Prototypes/Body/Animals/mothroach.yml | 1 + .../Prototypes/Entities/Mobs/NPCs/animals.yml | 10 +-- .../Prototypes/Entities/Mobs/NPCs/carp.yml | 2 +- .../Entities/Mobs/NPCs/regalrat.yml | 2 +- .../Prototypes/Entities/Mobs/NPCs/slimes.yml | 2 +- .../Prototypes/Entities/Mobs/NPCs/space.yml | 4 +- .../Prototypes/Entities/Mobs/NPCs/xeno.yml | 2 +- .../Entities/Mobs/Player/dragon.yml | 2 +- Resources/Prototypes/Entities/Mobs/base.yml | 9 +++ Resources/Prototypes/Shaders/shaders.yml | 7 +- Resources/Textures/Shaders/nightvision.swsl | 19 +++++ 15 files changed, 222 insertions(+), 13 deletions(-) create mode 100644 Content.Client/Overlays/NightVisionOverlay.cs create mode 100644 Content.Client/Overlays/NightVisionOverlaySystem.cs create mode 100644 Content.Shared/Overlays/NightVisionComponent.cs create mode 100644 Resources/Textures/Shaders/nightvision.swsl diff --git a/Content.Client/Overlays/NightVisionOverlay.cs b/Content.Client/Overlays/NightVisionOverlay.cs new file mode 100644 index 0000000000..1feba79bc0 --- /dev/null +++ b/Content.Client/Overlays/NightVisionOverlay.cs @@ -0,0 +1,61 @@ +using Robust.Client.Graphics; +using Robust.Shared.Enums; +using Robust.Shared.Prototypes; + +namespace Content.Client.Overlays; + +/// +/// Fullscreen overlay that applies the night-vision shader to the rendered screen. +/// +public sealed partial class NightVisionOverlay : Overlay +{ + [Dependency] private IPrototypeManager _prototypeManager = default!; + + private static readonly ProtoId Shader = "NightVision"; + private readonly ShaderInstance _nightVisionShader; + + public Color OverlayColor { get; private set; } = Color.White; + public Color LightingColor { get; private set; } = Color.White; + public float NoiseAmount { get; private set; } + public float NoiseMultiplier { get; private set; } + + public override OverlaySpace Space => OverlaySpace.BeforeLighting | OverlaySpace.WorldSpace; + public override bool RequestScreenTexture => true; + + public NightVisionOverlay() + { + IoCManager.InjectDependencies(this); + _nightVisionShader = _prototypeManager.Index(Shader).InstanceUnique(); + } + + public void SetParameters(Color overlayColor, Color lightingColor, float noiseAmount, float noiseMultiplier) + { + OverlayColor = overlayColor; + LightingColor = lightingColor; + NoiseAmount = noiseAmount; + NoiseMultiplier = noiseMultiplier; + } + + protected override void Draw(in OverlayDrawArgs args) + { + if (ScreenTexture == null) + return; + + var handle = args.WorldHandle; + var isSpace = args.Space == OverlaySpace.WorldSpace; + + if (isSpace) + { + _nightVisionShader.SetParameter("SCREEN_TEXTURE", ScreenTexture); + _nightVisionShader.SetParameter("noise_amount", NoiseAmount); + _nightVisionShader.SetParameter("noise_multiplier", NoiseMultiplier); + handle.UseShader(_nightVisionShader); + } + + var drawingColor = isSpace ? OverlayColor : LightingColor; + handle.DrawRect(args.WorldBounds, drawingColor); + + if (isSpace) + handle.UseShader(null); + } +} diff --git a/Content.Client/Overlays/NightVisionOverlaySystem.cs b/Content.Client/Overlays/NightVisionOverlaySystem.cs new file mode 100644 index 0000000000..440292ad38 --- /dev/null +++ b/Content.Client/Overlays/NightVisionOverlaySystem.cs @@ -0,0 +1,70 @@ +using Content.Shared.Inventory.Events; +using Content.Shared.Overlays; +using Robust.Client.Graphics; + +namespace Content.Client.Overlays; + +/// +/// Shows/hides the based on whether the observed +/// entity has a equipped. +/// +public sealed partial class NightVisionOverlaySystem : EquipmentHudSystem +{ + [Dependency] private IOverlayManager _overlayMan = default!; + + private NightVisionOverlay _overlay = default!; + + public override void Initialize() + { + base.Initialize(); + + _overlay = new NightVisionOverlay(); + + SubscribeLocalEvent(OnHandleState); + } + + protected override void UpdateInternal(RefreshEquipmentHudEvent component) + { + base.UpdateInternal(component); + + // Find the component with the lowest noise. + NightVisionComponent? nvision = null; + var bestNoise = float.MaxValue; + foreach (var comp in component.Components) + { + if (!comp.Enabled) + continue; + + var noise = comp.NoiseAmount * comp.NoiseMultiplier; + if (noise < bestNoise) + { + nvision = comp; + bestNoise = noise; + } + } + + // There is no active night vision components, so we disable the overlay. + if (nvision == null) + { + DeactivateInternal(); + return; + } + + _overlay.SetParameters(nvision.OverlayColor, nvision.LightingColor, nvision.NoiseAmount, nvision.NoiseMultiplier); + + if (!_overlayMan.HasOverlay()) + _overlayMan.AddOverlay(_overlay); + } + + protected override void DeactivateInternal() + { + base.DeactivateInternal(); + + _overlayMan.RemoveOverlay(_overlay); + } + + private void OnHandleState(Entity ent, ref AfterAutoHandleStateEvent args) + { + RefreshOverlay(); + } +} diff --git a/Content.Shared/Inventory/InventorySystem.Relay.cs b/Content.Shared/Inventory/InventorySystem.Relay.cs index 4b2cc098f5..ed0dbf7f09 100644 --- a/Content.Shared/Inventory/InventorySystem.Relay.cs +++ b/Content.Shared/Inventory/InventorySystem.Relay.cs @@ -99,6 +99,7 @@ public partial class InventorySystem SubscribeLocalEvent>(RefRelayInventoryEvent); SubscribeLocalEvent>(RefRelayInventoryEvent); SubscribeLocalEvent>(RefRelayInventoryEvent); + SubscribeLocalEvent>(RefRelayInventoryEvent); SubscribeLocalEvent>(OnGetEquipmentVerbs); SubscribeLocalEvent>(OnGetInnateVerbs); diff --git a/Content.Shared/Overlays/NightVisionComponent.cs b/Content.Shared/Overlays/NightVisionComponent.cs new file mode 100644 index 0000000000..ca3d9bd52a --- /dev/null +++ b/Content.Shared/Overlays/NightVisionComponent.cs @@ -0,0 +1,43 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Overlays; + +/// +/// Enables the night-vision fullscreen overlay for the entity it is attached to. +/// +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState(true)] +public sealed partial class NightVisionComponent : Component +{ + /// + /// Whether the overlay should be visible. + /// + [DataField, AutoNetworkedField] + public bool Enabled = true; + + /// + /// Overall color modulation applied on top of the night-vision screen shader. + /// Does not control lighting coloring, just serves as an effect on the screen. + /// + [DataField, AutoNetworkedField] + public Color OverlayColor = Color.Transparent; // Transparent by default, no overlay. + + /// + /// Color modification added on top of lighting during rendering. + /// This is the part responsible for making things bright. + /// + [DataField, AutoNetworkedField] + public Color LightingColor = new(1f, 1f, 1f, 0.15f); + + /// + /// How much animated noise to add to the image (0..1). + /// + [DataField, AutoNetworkedField] + public float NoiseAmount; + + /// + /// Multiplier that scales the intensity of the noise added on top of the image. + /// Higher values make the noise more pronounced. + /// + [DataField, AutoNetworkedField] + public float NoiseMultiplier; +} diff --git a/Resources/Prototypes/Body/Animals/mothroach.yml b/Resources/Prototypes/Body/Animals/mothroach.yml index 679639bea2..e7f75de03c 100644 --- a/Resources/Prototypes/Body/Animals/mothroach.yml +++ b/Resources/Prototypes/Body/Animals/mothroach.yml @@ -1,4 +1,5 @@ - type: entity + parent: [ MobNightVision ] id: BaseMobMothroach abstract: true components: diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml index 5575473b3c..f6674f1aab 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml @@ -1,6 +1,6 @@ - type: entity name: bat - parent: [ SimpleMobBase, FlyingMobBase, MobCombat, BaseSlicingRefinable ] + parent: [ SimpleMobBase, FlyingMobBase, MobCombat, BaseSlicingRefinable, MobNightVision ] id: MobBat description: Some cultures find them terrifying, others crunchy on the teeth. components: @@ -349,7 +349,7 @@ - type: entity name: cockroach - parent: [SolutionFood, SolutionTiny, SimpleMobBase, BaseSlicingRefinable] + parent: [SolutionFood, SolutionTiny, SimpleMobBase, BaseSlicingRefinable, MobNightVision] id: MobCockroach description: This station is just crawling with bugs. components: @@ -1923,7 +1923,7 @@ - type: entity name: mouse - parent: [SimpleMobBase, BaseMobAnimal, SolutionVermin, BaseSlicingRefinable] + parent: [SimpleMobBase, BaseMobAnimal, SolutionVermin, BaseSlicingRefinable, MobNightVision] id: MobMouse description: Squeak! components: @@ -2682,7 +2682,7 @@ # Code unique spider prototypes or combine them all into one spider and get a # random sprite state when you spawn it. - type: entity - parent: [ SimpleMobBase, BaseMobHemocyanin, MobCombat, BaseSlicingRefinable ] + parent: [ SimpleMobBase, BaseMobHemocyanin, MobCombat, BaseSlicingRefinable, MobNightVision ] id: MobSpiderBase abstract: true components: @@ -3626,7 +3626,7 @@ - type: entity name: hamster - parent: [ SimpleMobBase, MobCombat, StripableInventoryBase, BaseSlicingRefinable] + parent: [ SimpleMobBase, MobCombat, StripableInventoryBase, BaseSlicingRefinable, MobNightVision] id: MobHamster description: A cute, fluffy, robust hamster. components: diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/carp.yml b/Resources/Prototypes/Entities/Mobs/NPCs/carp.yml index 5458c7bd5b..23deb0eeab 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/carp.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/carp.yml @@ -1,7 +1,7 @@ - type: entity name: space carp id: BaseMobCarp - parent: [ SimpleSpaceMobBase, FlyingMobBase, MobCombat, BaseSlicingRefinable ] + parent: [ SimpleSpaceMobBase, FlyingMobBase, MobCombat, BaseSlicingRefinable, MobNightVision ] description: It's a space carp. abstract: true components: diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/regalrat.yml b/Resources/Prototypes/Entities/Mobs/NPCs/regalrat.yml index 7cbf28f3e6..fdbe1ec500 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/regalrat.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/regalrat.yml @@ -1,7 +1,7 @@ - type: entity name: rat king id: MobRatKing - parent: [ BaseMobRat, SimpleMobBase, MobCombat, BaseSlicingRefinable ] + parent: [ BaseMobRat, SimpleMobBase, MobCombat, BaseSlicingRefinable, MobNightVision ] description: He's da rat. He make da roolz. components: - type: CombatMode diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/slimes.yml b/Resources/Prototypes/Entities/Mobs/NPCs/slimes.yml index adb77fab51..09af04aeea 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/slimes.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/slimes.yml @@ -1,7 +1,7 @@ - type: entity name: basic slime id: BaseMobAdultSlimes - parent: [ BaseMobSlimes, SimpleMobBase, MobCombat, BaseSlicingRefinable ] + parent: [ BaseMobSlimes, SimpleMobBase, MobCombat, BaseSlicingRefinable, MobNightVision ] abstract: true description: It looks so much like jelly. I wonder what it tastes like? components: diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/space.yml b/Resources/Prototypes/Entities/Mobs/NPCs/space.yml index a8edf3eaa3..fb8a910047 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/space.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/space.yml @@ -1,7 +1,7 @@ - type: entity name: basic id: MobSpaceBasic - parent: SimpleSpaceMobBase + parent: [ SimpleSpaceMobBase, MobNightVision ] abstract: true description: It looks friendly. Why don't you give it a hug? components: @@ -493,7 +493,7 @@ Unsexed: SheepSpace - type: entity - parent: [SimpleSpaceMobBase, BaseMobAnimal, SolutionVermin] + parent: [SimpleSpaceMobBase, BaseMobAnimal, SolutionVermin, MobNightVision] id: MobSnail name: snail description: Revolting unless you're french. diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/xeno.yml b/Resources/Prototypes/Entities/Mobs/NPCs/xeno.yml index c29ca1589a..2a4a6a219d 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/xeno.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/xeno.yml @@ -2,7 +2,7 @@ - type: entity name: burrower id: MobXeno - parent: SimpleSpaceMobBase + parent: [ SimpleSpaceMobBase, MobNightVision ] description: They mostly come at night. Mostly. components: - type: Insulated diff --git a/Resources/Prototypes/Entities/Mobs/Player/dragon.yml b/Resources/Prototypes/Entities/Mobs/Player/dragon.yml index 574dec1083..c7fa79d0b2 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/dragon.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/dragon.yml @@ -1,5 +1,5 @@ - type: entity - parent: [ SimpleSpaceMobBase, FlyingMobBase, BaseSlicingRefinable ] + parent: [ SimpleSpaceMobBase, FlyingMobBase, BaseSlicingRefinable, MobNightVision ] id: BaseMobDragon suffix: "" name: space dragon diff --git a/Resources/Prototypes/Entities/Mobs/base.yml b/Resources/Prototypes/Entities/Mobs/base.yml index 45e3b9a3fe..cb816e4329 100644 --- a/Resources/Prototypes/Entities/Mobs/base.yml +++ b/Resources/Prototypes/Entities/Mobs/base.yml @@ -272,3 +272,12 @@ bloodlossHealDamage: types: Bloodloss: -1 + +# Used for mobs that should slightly see in the dark +- type: entity + save: false + id: MobNightVision + abstract: true + components: + - type: NightVision + lightingColor: '#FFFFFF15' # Basically makes it impossible for things to be "Pitch black" but can still be dark. diff --git a/Resources/Prototypes/Shaders/shaders.yml b/Resources/Prototypes/Shaders/shaders.yml index 6e8184c2fd..ea0cced688 100644 --- a/Resources/Prototypes/Shaders/shaders.yml +++ b/Resources/Prototypes/Shaders/shaders.yml @@ -120,8 +120,13 @@ id: Hologram kind: source path: "/Textures/Shaders/hologram.swsl" - + - type: shader id: HeatBlur kind: source path: "/Textures/Shaders/heatBlur.swsl" + +- type: shader + id: NightVision + kind: source + path: "/Textures/Shaders/nightvision.swsl" diff --git a/Resources/Textures/Shaders/nightvision.swsl b/Resources/Textures/Shaders/nightvision.swsl new file mode 100644 index 0000000000..aca60972de --- /dev/null +++ b/Resources/Textures/Shaders/nightvision.swsl @@ -0,0 +1,19 @@ +// Night vision fullscreen shader. +light_mode unshaded; + +uniform sampler2D SCREEN_TEXTURE; +uniform highp float noise_amount; // How much animated noise/static to add (0..1). +uniform highp float noise_multiplier; // Scales the intensity of the added noise. + +void fragment() +{ + highp vec4 color = zTextureSpec(SCREEN_TEXTURE, UV); + + // Add some noise for realism. + lowp float noise = zRandom(UV + sin(TIME / 10.0)).x * noise_amount; + + // Blend the generated noise into the image. + color.rgb += mix(color.rgb, color.rgb * noise, noise) * noise_multiplier; + + COLOR = color; +} From efda3a71d24ecb674022e195c50bc16ff96c2680 Mon Sep 17 00:00:00 2001 From: Tayrtahn Date: Tue, 30 Jun 2026 17:27:32 -0400 Subject: [PATCH 26/47] Improve performance of `GameRuleSystem.TryFindRandomTileOnStation` (#43929) Use GetFilledTileCount instead of GetAllTiles --- Content.Server/GameTicking/Rules/GameRuleSystem.Utility.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Content.Server/GameTicking/Rules/GameRuleSystem.Utility.cs b/Content.Server/GameTicking/Rules/GameRuleSystem.Utility.cs index 8f1f08269b..eb18122fd6 100644 --- a/Content.Server/GameTicking/Rules/GameRuleSystem.Utility.cs +++ b/Content.Server/GameTicking/Rules/GameRuleSystem.Utility.cs @@ -95,7 +95,7 @@ public abstract partial class GameRuleSystem where T: IComponent if (!TryComp(possibleTarget, out var comp)) continue; - weights.Add((possibleTarget, comp), _map.GetAllTiles(possibleTarget, comp).Count()); + weights.Add((possibleTarget, comp), _map.GetFilledTileCount((possibleTarget, comp))); } if (weights.Count == 0) From d15d16651f2975e7b6e21ca1d7f919ea217951b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=93=D0=BE=D0=BB=D1=83=D0=B1=D1=8C?= <124601871+Golubgik@users.noreply.github.com> Date: Wed, 1 Jul 2026 05:47:15 +0700 Subject: [PATCH 27/47] Teleport scroll and ninja bomb whitelist and blacklist (#40758) * Teleport scroll whitelist * Stupid * review review * Update dat_fukken_disk.yml * NinjaWhitelist * uuuupdate * Update station_beacon.yml * Update emergency_amber.yml * Update Resources/Prototypes/Entities/Markers/warp_point.yml Co-authored-by: Errant <35878406+Errant-4@users.noreply.github.com> * request * Revert tags * Apply suggestions from code review Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> --------- Co-authored-by: Errant <35878406+Errant-4@users.noreply.github.com> Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> --- .../SpiderChargeConditionComponent.cs | 9 +- .../Systems/NinjaConditionsSystem.cs | 14 ++- .../Teleportation/TeleportLocationsSystem.cs | 10 +- .../Components/TeleportLocationsComponent.cs | 15 ++- Content.Shared/Warps/WarpPointComponent.cs | 8 -- Resources/Maps/Misc/terminal.yml | 2 +- Resources/Maps/Shuttles/emergency_amber.yml | 2 +- .../Entities/Markers/warp_point.yml | 11 +-- .../Entities/Mobs/Player/narsie.yml | 6 -- .../Entities/Mobs/Player/ratvar.yml | 6 -- .../Entities/Mobs/Player/silicon.yml | 18 ---- .../Objects/Devices/station_beacon.yml | 91 +++++++++---------- .../Entities/Objects/Magic/immovable_rod.yml | 3 - .../Entities/Objects/Misc/dat_fukken_disk.yml | 4 - .../Entities/Objects/Power/powersink.yml | 6 -- .../Entities/Structures/Machines/nuke.yml | 6 -- .../Generation/Singularity/singularity.yml | 6 -- .../Power/Generation/Tesla/energyball.yml | 6 -- .../Prototypes/Magic/teleport_scroll.yml | 6 ++ Resources/Prototypes/Objectives/ninja.yml | 6 +- Resources/Prototypes/tags.yml | 16 +++- Resources/migration.yml | 4 + 22 files changed, 112 insertions(+), 143 deletions(-) diff --git a/Content.Server/Objectives/Components/SpiderChargeConditionComponent.cs b/Content.Server/Objectives/Components/SpiderChargeConditionComponent.cs index d6309ccdd3..f76885b76d 100644 --- a/Content.Server/Objectives/Components/SpiderChargeConditionComponent.cs +++ b/Content.Server/Objectives/Components/SpiderChargeConditionComponent.cs @@ -17,8 +17,13 @@ public sealed partial class SpiderChargeConditionComponent : Component public EntityUid? Target; /// - /// Tags that should be used to exclude Warp Points - /// from the list of valid bombing targets + /// Which points are in the list of valid bombing targets + /// + [DataField] + public EntityWhitelist? Whitelist; + + /// + /// Which points are in the list of invalid bombing targets /// [DataField] public EntityWhitelist? Blacklist; diff --git a/Content.Server/Objectives/Systems/NinjaConditionsSystem.cs b/Content.Server/Objectives/Systems/NinjaConditionsSystem.cs index 477bc03445..62950e99ad 100644 --- a/Content.Server/Objectives/Systems/NinjaConditionsSystem.cs +++ b/Content.Server/Objectives/Systems/NinjaConditionsSystem.cs @@ -37,15 +37,19 @@ public sealed partial class NinjaConditionsSystem : EntitySystem // choose spider charge detonation point var warps = new List(); var allEnts = EntityQueryEnumerator(); + var bombingWhitelist = comp.Whitelist; var bombingBlacklist = comp.Blacklist; while (allEnts.MoveNext(out var warpUid, out var warp)) { - if (_whitelist.IsWhitelistFail(bombingBlacklist, warpUid) - && !string.IsNullOrWhiteSpace(warp.Location)) - { - warps.Add(warpUid); - } + + if (string.IsNullOrWhiteSpace(warp.Location)) + continue; + + if (!_whitelist.CheckBoth(warpUid, bombingBlacklist, bombingWhitelist)) + continue; + + warps.Add(warpUid); } if (warps.Count <= 0) diff --git a/Content.Server/Teleportation/TeleportLocationsSystem.cs b/Content.Server/Teleportation/TeleportLocationsSystem.cs index 6db898208f..6a778238db 100644 --- a/Content.Server/Teleportation/TeleportLocationsSystem.cs +++ b/Content.Server/Teleportation/TeleportLocationsSystem.cs @@ -1,4 +1,4 @@ -using Content.Server.Chat.Systems; +using Content.Server.Chat.Systems; using Content.Shared.Chat; using Content.Shared.Teleportation; using Content.Shared.Teleportation.Components; @@ -59,9 +59,15 @@ public sealed partial class TeleportLocationsSystem : SharedTeleportLocationsSys var allEnts = AllEntityQuery(); + // Selecting suitable entities with the warpPoint component using whitelist while (allEnts.MoveNext(out var warpEnt, out var warpPointComp)) { - if (_whitelist.IsWhitelistPass(warpPointComp.Blacklist, warpEnt) || string.IsNullOrWhiteSpace(warpPointComp.Location)) + + if (string.IsNullOrWhiteSpace(warpPointComp.Location)) + continue; + + if (!_whitelist.CheckBoth(warpEnt, ent.Comp.Blacklist, ent.Comp.Whitelist)) + continue; ent.Comp.AvailableWarps.Add(new TeleportPoint(warpPointComp.Location, GetNetEntity(warpEnt))); diff --git a/Content.Shared/Teleportation/Components/TeleportLocationsComponent.cs b/Content.Shared/Teleportation/Components/TeleportLocationsComponent.cs index ef5d6c5b2c..d511431e23 100644 --- a/Content.Shared/Teleportation/Components/TeleportLocationsComponent.cs +++ b/Content.Shared/Teleportation/Components/TeleportLocationsComponent.cs @@ -1,6 +1,7 @@ -using Content.Shared.Teleportation.Systems; +using Content.Shared.Teleportation.Systems; using Robust.Shared.GameStates; using Robust.Shared.Prototypes; +using Content.Shared.Whitelist; using Robust.Shared.Serialization; namespace Content.Shared.Teleportation.Components; @@ -45,6 +46,18 @@ public sealed partial class TeleportLocationsComponent : Component /// [DataField] public LocId? Speech; + + /// + /// Which warp points should be made available for teleportation? + /// + [DataField] + public EntityWhitelist? Whitelist; + + /// + /// Which warp points should be made unavailable for teleportation? + /// + [DataField] + public EntityWhitelist? Blacklist; } /// diff --git a/Content.Shared/Warps/WarpPointComponent.cs b/Content.Shared/Warps/WarpPointComponent.cs index fdd33efb86..e35deb7da2 100644 --- a/Content.Shared/Warps/WarpPointComponent.cs +++ b/Content.Shared/Warps/WarpPointComponent.cs @@ -1,4 +1,3 @@ -using Content.Shared.Whitelist; using Robust.Shared.GameStates; namespace Content.Shared.Warps; @@ -17,11 +16,4 @@ public sealed partial class WarpPointComponent : Component /// [DataField] public bool Follow; - - /// - /// What points should be excluded? - /// Useful where you want things like a ghost to reach only like CentComm - /// - [DataField] - public EntityWhitelist? Blacklist; } diff --git a/Resources/Maps/Misc/terminal.yml b/Resources/Maps/Misc/terminal.yml index 1a736bac26..871f02dbfc 100644 --- a/Resources/Maps/Misc/terminal.yml +++ b/Resources/Maps/Misc/terminal.yml @@ -5537,7 +5537,7 @@ entities: missingComponents: - Anchorable - Destructible -- proto: GhostWarpPoint +- proto: WarpPoint entities: - uid: 916 components: diff --git a/Resources/Maps/Shuttles/emergency_amber.yml b/Resources/Maps/Shuttles/emergency_amber.yml index e6b56f437a..e0973ef3d7 100644 --- a/Resources/Maps/Shuttles/emergency_amber.yml +++ b/Resources/Maps/Shuttles/emergency_amber.yml @@ -4911,7 +4911,7 @@ entities: rot: 1.5707963267948966 rad pos: -4.5,-13.5 parent: 1 -- proto: GhostWarpPoint +- proto: WarpPoint entities: - uid: 426 components: diff --git a/Resources/Prototypes/Entities/Markers/warp_point.yml b/Resources/Prototypes/Entities/Markers/warp_point.yml index 4616d1535a..853b7a6a4c 100644 --- a/Resources/Prototypes/Entities/Markers/warp_point.yml +++ b/Resources/Prototypes/Entities/Markers/warp_point.yml @@ -16,18 +16,13 @@ - type: WarpPoint location: beacon -# Use for areas like CC - type: entity - id: GhostWarpPoint + id: TeleportScrollWarpPoint # You can teleport to this warp point using a teleport scroll. parent: MarkerBase - name: ghost only warp point + name: teleport scroll warp point components: - type: Tag tags: - - GhostOnlyWarp - - type: WarpPoint - blacklist: - tags: - - GhostOnlyWarp + - TeleportScrollWarp - type: Sprite state: pink diff --git a/Resources/Prototypes/Entities/Mobs/Player/narsie.yml b/Resources/Prototypes/Entities/Mobs/Player/narsie.yml index e9bda23d15..db8808159e 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/narsie.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/narsie.yml @@ -93,12 +93,6 @@ - type: GravityWell baseRadialAcceleration: 6 maxRange: 8 - - type: Tag - tags: - - GhostOnlyWarp - type: WarpPoint follow: true location: Nar'Sie - blacklist: - tags: - - GhostOnlyWarp diff --git a/Resources/Prototypes/Entities/Mobs/Player/ratvar.yml b/Resources/Prototypes/Entities/Mobs/Player/ratvar.yml index 2da87d0d34..2c5115b107 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/ratvar.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/ratvar.yml @@ -88,12 +88,6 @@ - type: GravityWell baseRadialAcceleration: 6 maxRange: 8 - - type: Tag - tags: - - GhostOnlyWarp - type: WarpPoint follow: true location: Ratvar - blacklist: - tags: - - GhostOnlyWarp diff --git a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml index ebad756c93..da34c91079 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml @@ -105,9 +105,6 @@ description: Handles AI interactions across holocards + AI cores components: - type: ItemSlots - - type: Tag - tags: - - GhostOnlyWarp - type: StationAiHolder slot: name: station-ai-mind-slot @@ -182,9 +179,6 @@ - Anchorable - type: Rotatable - type: WarpPoint - blacklist: - tags: - - GhostOnlyWarp - type: Fixtures fixtures: fix1: @@ -499,14 +493,8 @@ layer: - GhostImpassable - type: NoFTL - - type: Tag - tags: - - GhostOnlyWarp - type: WarpPoint follow: true - blacklist: - tags: - - GhostOnlyWarp - type: Eye pvsScale: 1.5 - type: Visibility @@ -528,14 +516,8 @@ components: - type: Transform anchored: true - - type: Tag - tags: - - GhostOnlyWarp - type: WarpPoint follow: true - blacklist: - tags: - - GhostOnlyWarp - type: Eye - type: ContentEye - type: Examiner diff --git a/Resources/Prototypes/Entities/Objects/Devices/station_beacon.yml b/Resources/Prototypes/Entities/Objects/Devices/station_beacon.yml index 2b6e4bdd35..b31f415f87 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/station_beacon.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/station_beacon.yml @@ -1,11 +1,11 @@ - type: entity parent: BaseItem - id: DefaultStationBeacon + id: BaseStationBeacon name: station beacon description: A small device that transmits information to station maps. Can be configured. placement: mode: SnapgridCenter - suffix: General + suffix: Not teleport point, Ninja bombing target blacklist components: - type: Sprite sprite: Objects/Devices/station_beacon.rsi @@ -38,9 +38,6 @@ layer: 1 - type: SubFloorHide - type: Anchorable - - type: Construction - graph: StationBeaconPart - node: complete - type: CollideOnAnchor - type: Physics canCollide: false @@ -79,10 +76,32 @@ - type: StaticPrice price: 25 +- type: entity + parent: BaseStationBeacon + id: TeleportStationBeacon # You can teleport to this Beacon using a teleport scroll + suffix: Ninja bombing target blacklist + components: + - type: Tag + tags: + - TeleportScrollWarp + +- type: entity + parent: BaseStationBeacon + id: DefaultStationBeacon # the ninja's objective is to bomb this location. + suffix: General + components: + - type: Tag + tags: + - NinjaBombingTarget + - TeleportScrollWarp + - type: Construction + graph: StationBeaconPart + node: complete + - type: entity parent: DefaultStationBeacon id: DefaultStationBeaconUnanchored - suffix: General, Unanchored + suffix: Unanchored placement: mode: PlaceFree components: @@ -450,18 +469,16 @@ defaultText: station-beacon-ame - type: entity - parent: DefaultStationBeaconEngineering + parent: TeleportStationBeacon id: DefaultStationBeaconSolars suffix: Solars components: - type: NavMapBeacon defaultText: station-beacon-solars - - type: Tag - tags: - - NinjaBombingTargetBlocker + color: "#EFB341" - type: entity - parent: DefaultStationBeaconEngineering + parent: DefaultStationBeaconSolars id: DefaultStationBeaconSolarsN suffix: Solars, North components: @@ -469,7 +486,7 @@ defaultText: station-beacon-solars-N - type: entity - parent: DefaultStationBeaconEngineering + parent: DefaultStationBeaconSolars id: DefaultStationBeaconSolarsNE suffix: Solars, Northeast components: @@ -477,7 +494,7 @@ defaultText: station-beacon-solars-NE - type: entity - parent: DefaultStationBeaconEngineering + parent: DefaultStationBeaconSolars id: DefaultStationBeaconSolarsE suffix: Solars, East components: @@ -485,7 +502,7 @@ defaultText: station-beacon-solars-E - type: entity - parent: DefaultStationBeaconEngineering + parent: DefaultStationBeaconSolars id: DefaultStationBeaconSolarsSE suffix: Solars, Southeast components: @@ -493,7 +510,7 @@ defaultText: station-beacon-solars-SE - type: entity - parent: DefaultStationBeaconEngineering + parent: DefaultStationBeaconSolars id: DefaultStationBeaconSolarsS suffix: Solars, South components: @@ -501,7 +518,7 @@ defaultText: station-beacon-solars-S - type: entity - parent: DefaultStationBeaconEngineering + parent: DefaultStationBeaconSolars id: DefaultStationBeaconSolarsSW suffix: Solars, Southwest components: @@ -509,7 +526,7 @@ defaultText: station-beacon-solars-SW - type: entity - parent: DefaultStationBeaconEngineering + parent: DefaultStationBeaconSolars id: DefaultStationBeaconSolarsW suffix: Solars, West components: @@ -517,7 +534,7 @@ defaultText: station-beacon-solars-W - type: entity - parent: DefaultStationBeaconEngineering + parent: DefaultStationBeaconSolars id: DefaultStationBeaconSolarsNW suffix: Solars, Northwest components: @@ -671,15 +688,12 @@ defaultText: station-beacon-ai-power - type: entity - parent: DefaultStationBeacon + parent: TeleportStationBeacon id: DefaultStationBeaconArrivals suffix: Arrivals components: - type: NavMapBeacon defaultText: station-beacon-arrivals - - type: Tag - tags: - - NinjaBombingTargetBlocker - type: entity parent: DefaultStationBeacon @@ -768,9 +782,6 @@ components: - type: NavMapBeacon defaultText: station-beacon-cryosleep - - type: Tag - tags: - - NinjaBombingTargetBlocker - type: entity parent: DefaultStationBeacon @@ -852,49 +863,35 @@ - type: NavMapBeacon defaultText: station-beacon-vox -# Ghost Only Beacons -- type: entity - parent: DefaultStationBeacon - id: DefaultStationBeaconGhost - suffix: Boo - components: - - type: Tag - tags: - - GhostOnlyWarp - - type: WarpPoint - blacklist: - tags: - - GhostOnlyWarp - # CentComm Beacons - type: entity - parent: DefaultStationBeaconGhost + parent: BaseStationBeacon id: DefaultStationBeaconCentComm - suffix: CentComm + suffix: Not teleport point, CentComm components: - type: NavMapBeacon text: CentComm - type: entity - parent: DefaultStationBeaconGhost + parent: DefaultStationBeaconCentComm id: DefaultStationBeaconCentCommAfterhours - suffix: CentComm Afterhours + suffix: Not teleport point, CentComm Afterhours components: - type: NavMapBeacon text: Afterhours - type: entity - parent: DefaultStationBeaconGhost + parent: DefaultStationBeaconCentComm id: DefaultStationBeaconCentCommThunderdome - suffix: CentComm Thunder Dome + suffix: Not teleport point, CentComm Thunder Dome components: - type: NavMapBeacon text: Thunderdome - type: entity - parent: DefaultStationBeaconGhost + parent: DefaultStationBeaconCentComm id: DefaultStationBeaconCentCommERT - suffix: CentComm ERT + suffix: Not teleport point, CentComm ERT components: - type: NavMapBeacon text: ERT diff --git a/Resources/Prototypes/Entities/Objects/Magic/immovable_rod.yml b/Resources/Prototypes/Entities/Objects/Magic/immovable_rod.yml index cb5f083eaa..270690cfbe 100644 --- a/Resources/Prototypes/Entities/Objects/Magic/immovable_rod.yml +++ b/Resources/Prototypes/Entities/Objects/Magic/immovable_rod.yml @@ -35,9 +35,6 @@ - type: WarpPoint follow: true location: immovable rod - blacklist: - tags: - - GhostOnlyWarp - type: entity parent: ImmovableRod diff --git a/Resources/Prototypes/Entities/Objects/Misc/dat_fukken_disk.yml b/Resources/Prototypes/Entities/Objects/Misc/dat_fukken_disk.yml index 523385788b..e1fc3fa5b6 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/dat_fukken_disk.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/dat_fukken_disk.yml @@ -17,13 +17,9 @@ - type: WarpPoint follow: true location: nuke disk - blacklist: - tags: - - GhostOnlyWarp - type: Tag tags: - HighRiskItem - - GhostOnlyWarp - type: StealTarget stealGroup: NukeDisk diff --git a/Resources/Prototypes/Entities/Objects/Power/powersink.yml b/Resources/Prototypes/Entities/Objects/Power/powersink.yml index 61e6891dd4..37114732b2 100644 --- a/Resources/Prototypes/Entities/Objects/Power/powersink.yml +++ b/Resources/Prototypes/Entities/Objects/Power/powersink.yml @@ -54,13 +54,7 @@ - type: Sprite sprite: Objects/Power/powersink.rsi state: powersink - - type: Tag - tags: - - GhostOnlyWarp - type: WarpPoint location: powersink - blacklist: - tags: - - GhostOnlyWarp - type: StaticPrice price: 3000 diff --git a/Resources/Prototypes/Entities/Structures/Machines/nuke.yml b/Resources/Prototypes/Entities/Structures/Machines/nuke.yml index ae163cfacc..c02dcd1dd7 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/nuke.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/nuke.yml @@ -107,15 +107,9 @@ Nuke: !type:ContainerSlot - type: StealTarget stealGroup: NuclearBomb - - type: Tag - tags: - - GhostOnlyWarp - type: WarpPoint follow: true location: nuclear bomb - blacklist: - tags: - - GhostOnlyWarp - type: FTLSmashImmune - type: entity diff --git a/Resources/Prototypes/Entities/Structures/Power/Generation/Singularity/singularity.yml b/Resources/Prototypes/Entities/Structures/Power/Generation/Singularity/singularity.yml index 4f69ba3d09..ff2cdc8a5d 100644 --- a/Resources/Prototypes/Entities/Structures/Power/Generation/Singularity/singularity.yml +++ b/Resources/Prototypes/Entities/Structures/Power/Generation/Singularity/singularity.yml @@ -67,15 +67,9 @@ - SingularityEngine - SingularityTeslaEngine - Power - - type: Tag - tags: - - GhostOnlyWarp - type: WarpPoint follow: true location: singularity - blacklist: - tags: - - GhostOnlyWarp - type: Sprite sprite: Structures/Power/Generation/Singularity/singularity_1.rsi layers: diff --git a/Resources/Prototypes/Entities/Structures/Power/Generation/Tesla/energyball.yml b/Resources/Prototypes/Entities/Structures/Power/Generation/Tesla/energyball.yml index 44ffe8638d..de7f2e576b 100644 --- a/Resources/Prototypes/Entities/Structures/Power/Generation/Tesla/energyball.yml +++ b/Resources/Prototypes/Entities/Structures/Power/Generation/Tesla/energyball.yml @@ -90,15 +90,9 @@ - type: ChaoticJump jumpMinInterval: 8 jumpMaxInterval: 15 - - type: Tag - tags: - - GhostOnlyWarp - type: WarpPoint follow: true location: tesla ball - blacklist: - tags: - - GhostOnlyWarp - type: Sprite drawdepth: Effects sprite: Structures/Power/Generation/Tesla/energy_ball.rsi diff --git a/Resources/Prototypes/Magic/teleport_scroll.yml b/Resources/Prototypes/Magic/teleport_scroll.yml index 89c9ae5163..2174b4d21e 100644 --- a/Resources/Prototypes/Magic/teleport_scroll.yml +++ b/Resources/Prototypes/Magic/teleport_scroll.yml @@ -19,6 +19,12 @@ teleportEffect: WizardSmoke closeAfterTeleport: true speech: teleportation-scroll-speech-wizard + whitelist: + tags: + - TeleportScrollWarp + blacklist: + tags: + - TeleportScrollWarpBlacklist - type: UseDelay delay: 1 delays: diff --git a/Resources/Prototypes/Objectives/ninja.yml b/Resources/Prototypes/Objectives/ninja.yml index a3b452931f..f17b401f77 100644 --- a/Resources/Prototypes/Objectives/ninja.yml +++ b/Resources/Prototypes/Objectives/ninja.yml @@ -51,10 +51,12 @@ sprite: Objects/Weapons/Bombs/spidercharge.rsi state: icon - type: SpiderChargeCondition + whitelist: + tags: + - NinjaBombingTarget blacklist: tags: - - GhostOnlyWarp - - NinjaBombingTargetBlocker + - NinjaBombingTargetBlacklist - type: entity parent: [BaseNinjaObjective, BaseSurviveObjective] diff --git a/Resources/Prototypes/tags.yml b/Resources/Prototypes/tags.yml index bed6bee7ba..cd6d74d98c 100644 --- a/Resources/Prototypes/tags.yml +++ b/Resources/Prototypes/tags.yml @@ -633,10 +633,6 @@ - type: Tag id: GeigerCounter # Storage whitelist: BaseClothingBeltEngineering -# Used for warps -- type: Tag - id: GhostOnlyWarp - - type: Tag id: GenderPin # Chameleon key for ClothingGenderPinBase. @@ -999,8 +995,12 @@ id: Mushroom # ConstructionGraph: Soil ## N ## + - type: Tag - id: NinjaBombingTargetBlocker # Ninjas will not target this warp point + id: NinjaBombingTarget # Ninjas will target this warp point + +- type: Tag + id: NinjaBombingTargetBlacklist # Ninjas will not target this warp point - type: Tag id: NoConsoleSound # Blacklist on BaseComputer, StationMap. Tagged entity will not make sound when opening the UI. @@ -1415,6 +1415,12 @@ - type: Tag id: Taser # Storage whitelist: ClothingBeltSecurity +- type: Tag + id: TeleportScrollWarp # whitelists a warp point for the wizard's teleport scroll + +- type: Tag + id: TeleportScrollWarpBlacklist # blacklists a warp point for the wizard's teleport scroll + - type: Tag id: TheaterBagel # used for Bagel Station's randomized theater diff --git a/Resources/migration.yml b/Resources/migration.yml index 367afbe92f..9b3772defe 100644 --- a/Resources/migration.yml +++ b/Resources/migration.yml @@ -741,6 +741,10 @@ ToySkeleton: ToyFigurineSkeleton # 2025-10-28 DrinkKiraSpecial: DrinkOrangeLimeSodaGlass +# 2025-12-02 +GhostWarpPoint: null +DefaultStationBeaconGhost: null + # 2025-11-08 DebugSMES: SMESBasicEmpty DebugSubstation: SubstationBasicEmpty From 6798004900ed8bf91000d983be73963ac59d1dab Mon Sep 17 00:00:00 2001 From: Rami Date: Tue, 30 Jun 2026 17:21:32 -0700 Subject: [PATCH 28/47] C4 YAML cleanup (#44231) * C4 YAML cleanup * oops * Thanks B-Kirill * Requested changes kinda * requested changes, thanks Iaada! * Heisentest * requested changes * rerun * please * does this work...? * hold on * oh yeah baby * there --- .../Objects/Weapons/Bombs/plastic.yml | 149 ++++++++---------- 1 file changed, 68 insertions(+), 81 deletions(-) diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Bombs/plastic.yml b/Resources/Prototypes/Entities/Objects/Weapons/Bombs/plastic.yml index 9da25ee736..53de1a3289 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Bombs/plastic.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Bombs/plastic.yml @@ -1,61 +1,7 @@ - type: entity - id: BasePlasticExplosive - parent: BaseItem abstract: true + id: BasePlasticExplosiveTrigger components: - - type: Item - size: Small - - type: Sticky - stickDelay: 5 - unstickDelay: 5 - stickPopupStart: comp-sticky-start-stick-bomb - stickPopupSuccess: comp-sticky-success-stick-bomb - unstickPopupStart: comp-sticky-start-unstick-bomb - unstickPopupSuccess: comp-sticky-success-unstick-bomb - blacklist: # can't stick it to other items - components: - - Item - - Spectral # special case for the rev since it can go incorporeal and ghost bomb you. Also, Idk, its like a ghost or something no touchy. - - type: Damageable - - type: Injurable - damageContainer: Inorganic - - type: Destructible - thresholds: - - trigger: - !type:DamageTrigger - damage: 50 - behaviors: - - !type:DoActsBehavior - acts: ["Destruction"] - - !type:ExplodeBehavior - - type: StickyVisualizer - - type: Appearance - - type: GenericVisualizer - visuals: - enum.Trigger.TriggerVisuals.VisualState: - base: - Primed: { state: primed } - Unprimed: { state: icon } - -- type: entity - name: composition C-4 - description: Used to put holes in specific areas without too much extra hole. A saboteur's favorite. - parent: [BasePlasticExplosive, BaseSyndicateContraband] - id: C4 - components: - - type: Sprite - sprite: Objects/Weapons/Bombs/c4.rsi - state: icon - layers: - - state: icon - map: ["base"] - - type: Clothing - sprite: Objects/Weapons/Bombs/c4.rsi - slots: - - HEAD - quickEquip: false - equipDelay: 3 - unequipDelay: 6 - type: TriggerOnActivate - type: TriggerOnSignal - type: TriggerOnStuck @@ -71,21 +17,82 @@ - trigger - stuck delay: 10 - delayOptions: [10, 30, 60, 120, 300] + delayOptions: [ 10, 30, 60, 120, 300 ] initialBeepDelay: 0 beepSound: /Audio/Machines/Nuke/general_beep.ogg + - type: Sticky + stickDelay: 5 + unstickDelay: 5 + stickPopupStart: comp-sticky-start-stick-bomb + stickPopupSuccess: comp-sticky-success-stick-bomb + unstickPopupStart: comp-sticky-start-unstick-bomb + unstickPopupSuccess: comp-sticky-success-unstick-bomb + blacklist: # can't stick it to other items + components: + - Item + - Spectral # special case for the rev since it can go incorporeal and ghost bomb you. Also, Idk, its like a ghost or something no touchy. - type: DeviceLinkSink ports: - Trigger + - type: Explosive + - type: ExplodeOnTrigger + keysIn: + - timer + +- type: entity + abstract: true + parent: [ BaseItem, BasePlasticExplosiveTrigger ] + id: BasePlasticExplosive + components: + - type: Item + size: Small + - type: Damageable + - type: Injurable + damageContainer: Inorganic + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 50 + behaviors: + - !type:DoActsBehavior + acts: ["Destruction"] + - !type:ExplodeBehavior - type: Explosive # Powerful explosion in a very small radius. Doesn't break underplating. explosionType: DemolitionCharge totalIntensity: 60 intensitySlope: 5 maxIntensity: 30 canCreateVacuum: false - - type: ExplodeOnTrigger - keysIn: - - timer + - type: StickyVisualizer + - type: Appearance + - type: GenericVisualizer + visuals: + enum.Trigger.TriggerVisuals.VisualState: + base: + Primed: { state: primed } + Unprimed: { state: icon } + +## Plastic Explosives used in game +- type: entity + parent: [BasePlasticExplosive, BaseSyndicateContraband] + id: C4 + name: composition C-4 + description: Used to put holes in specific areas without too much extra hole. A saboteur's favorite. + components: + - type: Sprite + sprite: Objects/Weapons/Bombs/c4.rsi + state: icon + layers: + - state: icon + map: ["base"] + - type: Clothing + sprite: Objects/Weapons/Bombs/c4.rsi + slots: + - HEAD + quickEquip: false + equipDelay: 3 + unequipDelay: 6 - type: HolidayVisuals holidays: festive: @@ -97,10 +104,10 @@ price: 625 # 5000 for a bundle of 8 - type: entity - name: seismic charge - description: Concussion based explosive designed to destroy large amounts of rock. parent: [ BasePlasticExplosive, BaseSecurityCargoContraband ] id: SeismicCharge + name: seismic charge + description: Concussion based explosive designed to destroy large amounts of rock. components: - type: Sprite sprite: Objects/Weapons/Bombs/seismic.rsi @@ -108,36 +115,16 @@ layers: - state: icon map: ["base"] - - type: TriggerOnActivate - - type: TriggerOnSignal - - type: TriggerOnStuck - keyOut: stuck - - type: ToggleTriggerCondition # for toggling the start on stuck ability - keys: - - stuck - toggleVerb: toggle-trigger-condition-stick-verb - toggleOn: toggle-trigger-condition-stick-on - toggleOff: toggle-trigger-condition-stick-off - type: TimerTrigger - keysIn: - - trigger - - stuck delay: 5 delayOptions: [5, 10, 15, 20] - initialBeepDelay: 0 beepSound: path: /Audio/Effects/Cargo/buzz_two.ogg params: volume: -6 - - type: DeviceLinkSink - ports: - - Trigger - type: Explosive explosionType: Cryo totalIntensity: 120 intensitySlope: 2 maxIntensity: 30 canCreateVacuum: false - - type: ExplodeOnTrigger - keysIn: - - timer From e24d755c33cf08e1403f6db2198bfcc898662302 Mon Sep 17 00:00:00 2001 From: AndrewFenriz <78079974+AndrewFenriz@users.noreply.github.com> Date: Wed, 1 Jul 2026 03:58:50 +0300 Subject: [PATCH 29/47] Force gun/Tether gun recipes print without a cell inside (#43936) * fix * upd admeme * small fixes * upd * upd 2 * upd 3 --------- Co-authored-by: Pok245 <113675512+Pok27@users.noreply.github.com> --- .../Weapons/Guns/Launchers/gravity.yml | 125 ++++++ .../Weapons/Guns/Launchers/launchers.yml | 369 +++++------------- .../Prototypes/Recipes/Lathes/devices.yml | 4 +- 3 files changed, 224 insertions(+), 274 deletions(-) create mode 100644 Resources/Prototypes/Entities/Objects/Weapons/Guns/Launchers/gravity.yml diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Launchers/gravity.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Launchers/gravity.yml new file mode 100644 index 0000000000..8d6600c43d --- /dev/null +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Launchers/gravity.yml @@ -0,0 +1,125 @@ +- type: entity + abstract: true + parent: BaseItem + id: BaseWeaponGravityGun + components: + - type: Item + size: Normal + - type: ItemToggle + onUse: false + - type: ToggleableVisuals + spriteLayer: unshaded + inhandVisuals: + left: + - state: inhand-left-unshaded + shader: unshaded + right: + - state: inhand-right-unshaded + shader: unshaded + - type: Appearance + - type: GenericVisualizer + visuals: + enum.TetherVisualsStatus.Key: + unshaded: + True: { visible: true } + False: { visible: false } + +- type: entity + parent: [ BaseWeaponGravityGun, PowerCellSlotMediumItem ] + id: WeaponTetherGun + name: tether gun + description: Manipulates gravity around objects to fling them at high velocities. + components: + - type: Sprite + sprite: Objects/Weapons/Guns/Launchers/tether_gun.rsi + layers: + - state: base + - state: base-unshaded + map: [ "unshaded" ] + shader: unshaded + visible: false + - type: PowerCellDraw + - type: ToggleCellDraw + - type: TetherGun + frequency: 5 + dampingRatio: 4 + +- type: entity + parent: WeaponTetherGun + id: WeaponTetherGunEmpty + suffix: Empty + components: + - type: ItemSlots + slots: + cell_slot: + name: power-cell-slot-component-slot-name-default + +- type: entity + parent: [ BaseWeaponGravityGun, PowerCellSlotMediumItem ] + id: WeaponForceGun + name: force gun + description: Manipulates gravity around objects to fling them at high velocities. + components: + - type: Sprite + sprite: Objects/Weapons/Guns/Launchers/force_gun.rsi + layers: + - state: base + - state: base-unshaded + map: [ "unshaded" ] + shader: unshaded + visible: false + - type: PowerCellDraw + - type: ToggleCellDraw + - type: ForceGun + frequency: 15 + dampingRatio: 4 + massLimit: 50 + lineColor: "#18a2d5" + soundLaunch: + path: /Audio/Weapons/soup.ogg + params: + volume: 2 + +- type: entity + parent: WeaponForceGun + id: WeaponForceGunEmpty + suffix: Empty + components: + - type: ItemSlots + slots: + cell_slot: + name: power-cell-slot-component-slot-name-default + +# Admeme +- type: entity + parent: WeaponTetherGun + id: WeaponTetherGunAdmin + name: tether gun + description: Manipulates gravity around objects to fling them at high velocities. + suffix: Admeme + components: + - type: TetherGun + canTetherAlive: true + canUnanchor: true + maxForce: 10000 + massLimit: 10000 + dampingRatio: 4 + frequency: 20 + +- type: entity + parent: WeaponForceGun + id: WeaponForceGunAdmin + name: force gun + description: Manipulates gravity around objects to fling them at high velocities. + suffix: Admeme + components: + - type: ForceGun + canTetherAlive: true + canUnanchor: true + maxForce: 10000 + massLimit: 10000 + frequency: 15 + dampingRatio: 4 + throwForce: 50 + throwDistance: 100 + lineColor: "#18a2d5" diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Launchers/launchers.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Launchers/launchers.yml index 30f6cfea64..8cc6b383e2 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Launchers/launchers.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Launchers/launchers.yml @@ -1,24 +1,24 @@ - type: entity - name: BaseWeaponLauncher + abstract: true parent: [ BaseItem, BaseGunWieldable ] id: BaseWeaponLauncher + name: BaseWeaponLauncher description: A rooty tooty point and shooty. - abstract: true components: - type: Sprite + - type: Item + size: Ginormous + - type: ContainerContainer + containers: + ballistic-ammo: !type:Container + ents: [] - type: Clothing sprite: Objects/Weapons/Guns/Launchers/china_lake.rsi quickEquip: false slots: - Back - - type: Item - size: Ginormous - type: StaticPrice price: 500 - - type: ContainerContainer - containers: - ballistic-ammo: !type:Container - ents: [] - type: Gun fireRate: 1 projectileSpeed: 25 # Slower than a bullet, same speed as our old projectile limit. @@ -29,30 +29,30 @@ path: /Audio/Weapons/Guns/Gunshots/grenade_launcher.ogg - type: entity - name: china lake - parent: [BaseWeaponLauncher, BaseSyndicateContraband] + parent: [ BaseWeaponLauncher, BaseSyndicateContraband ] id: WeaponLauncherChinaLake + name: china lake description: PLOOP. components: - type: Sprite sprite: Objects/Weapons/Guns/Launchers/china_lake.rsi layers: - - state: icon - map: ["enum.GunVisualLayers.Base"] + - state: icon + map: [ "enum.GunVisualLayers.Base" ] + - type: Item + size: Huge + shape: + - 0,0,4,2 - type: Clothing sprite: Objects/Weapons/Guns/Launchers/china_lake.rsi slots: - Back - suitStorage - - type: Item - size: Huge - shape: - - 0,0,4,2 - type: AmmoCounter - type: BallisticAmmoProvider whitelist: tags: - - Grenade + - Grenade capacity: 3 proto: GrenadeFrag soundInsert: @@ -72,18 +72,18 @@ layers: - state: icon map: [ "enum.GunVisualLayers.Base" ] + - type: Item + size: Huge + - type: ContainerContainer + containers: + revolver-ammo: !type:Container - type: Clothing sprite: Objects/Weapons/Guns/Launchers/hydra_launcher.rsi slots: - Back - suitStorage - - type: Item - size: Huge - type: AmmoCounter - type: GunRequiresWield - - type: ContainerContainer - containers: - revolver-ammo: !type:Container - type: RevolverAmmoProvider whitelist: tags: @@ -98,7 +98,7 @@ path: /Audio/Weapons/Guns/MagIn/sfrifle_magin.ogg - type: entity - parent: [WeaponLauncherHydra] + parent: WeaponLauncherHydra id: WeaponLauncherHydraLethal suffix: frag components: @@ -106,18 +106,18 @@ proto: GrenadeFrag - type: entity - name: RPG-7 parent: [ BaseWeaponLauncher, BaseMajorContraband ] id: WeaponLauncherRocket + name: RPG-7 description: A modified ancient rocket-propelled grenade launcher. components: - type: Sprite sprite: Objects/Weapons/Guns/Launchers/rocket.rsi layers: - - state: base - map: ["enum.GunVisualLayers.Base"] - - state: mag-0 - map: ["enum.GunVisualLayers.Mag"] + - state: base + map: [ "enum.GunVisualLayers.Base" ] + - state: mag-0 + map: [ "enum.GunVisualLayers.Mag" ] - type: Clothing sprite: Objects/Weapons/Guns/Launchers/rocket.rsi - type: Gun @@ -127,7 +127,7 @@ - type: BallisticAmmoProvider whitelist: tags: - - CartridgeRocket + - CartridgeRocket proto: CartridgeRocket capacity: 1 soundInsert: @@ -139,31 +139,31 @@ - type: Appearance - type: entity - name: multiple rocket launcher parent: BaseWeaponLauncher id: WeaponLauncherMultipleRocket + name: multiple rocket launcher description: A modified ancient rocket-propelled grenade launcher. components: - type: Sprite sprite: Objects/Weapons/Guns/Launchers/rocket.rsi layers: - - state: base - map: ["enum.GunVisualLayers.Base"] - - state: mag-0 - map: ["enum.GunVisualLayers.Mag"] + - state: base + map: [ "enum.GunVisualLayers.Base" ] + - state: mag-0 + map: [ "enum.GunVisualLayers.Mag" ] - type: Clothing sprite: Objects/Weapons/Guns/Launchers/rocket.rsi - type: Gun fireRate: 6 selectedMode: FullAuto availableModes: - - FullAuto + - FullAuto soundGunshot: path: /Audio/Weapons/Guns/Gunshots/rpgfire.ogg - type: BallisticAmmoProvider whitelist: tags: - - CartridgeRocket + - CartridgeRocket proto: CartridgeRocketSlow soundInsert: path: /Audio/Weapons/Guns/MagIn/batrifle_magin.ogg @@ -174,255 +174,80 @@ - type: Appearance - type: entity - name: pirate cannon parent: BaseWeaponLauncher id: WeaponLauncherPirateCannon + name: pirate cannon description: Kaboom! components: - - type: Sprite - sprite: Objects/Weapons/Guns/Launchers/pirate_cannon.rsi - layers: - - state: icon - map: ["enum.GunVisualLayers.Base"] - - containers: - balistic-ammo: !type:Container - ents: [] - ballistic-ammo: !type:Container - ents: [] - type: ContainerContainer - - type: Clothing - sprite: Objects/Weapons/Guns/Launchers/pirate_cannon.rsi - - type: Gun - fireRate: 1 - soundGunshot: - path: /Audio/Weapons/Guns/Gunshots/mateba.ogg - - type: BallisticAmmoProvider - whitelist: - tags: - - CannonBall - capacity: 1 - proto: CannonBall - soundInsert: - path: /Audio/Weapons/Guns/Gunshots/grenade_launcher.ogg + - type: Sprite + sprite: Objects/Weapons/Guns/Launchers/pirate_cannon.rsi + layers: + - state: icon + map: [ "enum.GunVisualLayers.Base" ] + - type: ContainerContainer + containers: + balistic-ammo: !type:Container + ents: [] + ballistic-ammo: !type:Container + ents: [] + - type: Clothing + sprite: Objects/Weapons/Guns/Launchers/pirate_cannon.rsi + - type: Gun + fireRate: 1 + soundGunshot: + path: /Audio/Weapons/Guns/Gunshots/mateba.ogg + - type: BallisticAmmoProvider + whitelist: + tags: + - CannonBall + capacity: 1 + proto: CannonBall + soundInsert: + path: /Audio/Weapons/Guns/Gunshots/grenade_launcher.ogg - type: entity - name: tether gun - parent: - - BaseItem - - PowerCellSlotMediumItem - id: WeaponTetherGun - description: Manipulates gravity around objects to fling them at high velocities. - components: - - type: Item - size: Normal - - type: TetherGun - frequency: 5 - dampingRatio: 4 - - type: ItemToggle - onUse: false - - type: PowerCellDraw - - type: ToggleCellDraw - - type: Sprite - sprite: Objects/Weapons/Guns/Launchers/tether_gun.rsi - layers: - - state: base - - state: base-unshaded - map: [ "unshaded" ] - shader: unshaded - visible: false - - type: ToggleableVisuals - spriteLayer: unshaded - inhandVisuals: - left: - - state: inhand-left-unshaded - shader: unshaded - right: - - state: inhand-right-unshaded - shader: unshaded - - type: Appearance - - type: GenericVisualizer - visuals: - enum.TetherVisualsStatus.Key: - unshaded: - True: { visible: true } - False: { visible: false } - -- type: entity - name: force gun - parent: - - BaseItem - - PowerCellSlotMediumItem - id: WeaponForceGun - description: Manipulates gravity around objects to fling them at high velocities. - components: - - type: Item - size: Normal - - type: ForceGun - frequency: 15 - dampingRatio: 4 - massLimit: 50 - lineColor: "#18a2d5" - soundLaunch: - path: /Audio/Weapons/soup.ogg - params: - volume: 2 - - type: ItemToggle - onUse: false - - type: PowerCellDraw - - type: ToggleCellDraw - - type: Sprite - sprite: Objects/Weapons/Guns/Launchers/force_gun.rsi - layers: - - state: base - - state: base-unshaded - map: [ "unshaded" ] - shader: unshaded - visible: false - - type: ToggleableVisuals - spriteLayer: unshaded - inhandVisuals: - left: - - state: inhand-left-unshaded - shader: unshaded - right: - - state: inhand-right-unshaded - shader: unshaded - - type: Appearance - - type: GenericVisualizer - visuals: - enum.TetherVisualsStatus.Key: - unshaded: - True: { visible: true } - False: { visible: false } - -- type: entity - name: grappling gun parent: BaseItem id: WeaponGrapplingGun + name: grappling gun components: - - type: Item - size: Small - shape: - - 0,0,1,0 - - 0,1,0,1 - storedOffset: 0,-6 - - type: AmmoCounter - - type: GrapplingGun - - type: Gun - soundGunshot: /Audio/Weapons/Guns/Gunshots/harpoon.ogg - fireRate: 0.5 - clumsyProof: true - - type: BasicEntityAmmoProvider - proto: GrapplingHook - capacity: 1 - - type: Sprite - sprite: Objects/Weapons/Guns/Launchers/grappling_gun.rsi - layers: - - state: base - - state: base-unshaded - map: [ "unshaded" ] - visible: true - - type: UseDelay - delay: 1.5 - - type: Appearance - - type: GenericVisualizer - visuals: - enum.TetherVisualsStatus.Key: - unshaded: - True: { state: base-unshaded } - False: { state: base-unshaded-off } - - type: PacifismAllowedGun + - type: Sprite + sprite: Objects/Weapons/Guns/Launchers/grappling_gun.rsi + layers: + - state: base + - state: base-unshaded + map: [ "unshaded" ] + visible: true + - type: Item + size: Small + shape: + - 0,0,1,0 + - 0,1,0,1 + storedOffset: 0,-6 + - type: AmmoCounter + - type: GrapplingGun + - type: Gun + soundGunshot: /Audio/Weapons/Guns/Gunshots/harpoon.ogg + fireRate: 0.5 + clumsyProof: true + - type: BasicEntityAmmoProvider + proto: GrapplingHook + capacity: 1 + - type: UseDelay + delay: 1.5 + - type: Appearance + - type: GenericVisualizer + visuals: + enum.TetherVisualsStatus.Key: + unshaded: + True: { state: base-unshaded } + False: { state: base-unshaded-off } + - type: PacifismAllowedGun # Admeme - type: entity - name: tether gun - parent: BaseItem - id: WeaponTetherGunAdmin - suffix: Admeme - description: Manipulates gravity around objects to fling them at high velocities. - components: - - type: Item - size: Normal - - type: TetherGun - canTetherAlive: true - canUnanchor: true - maxForce: 10000 - massLimit: 10000 - dampingRatio: 4 - frequency: 20 - - type: Sprite - sprite: Objects/Weapons/Guns/Launchers/tether_gun.rsi - layers: - - state: base - - state: base-unshaded - map: [ "unshaded" ] - shader: unshaded - visible: false - - type: ToggleableVisuals - spriteLayer: unshaded - inhandVisuals: - left: - - state: inhand-left-unshaded - shader: unshaded - right: - - state: inhand-right-unshaded - shader: unshaded - - type: Appearance - - type: GenericVisualizer - visuals: - enum.TetherVisualsStatus.Key: - unshaded: - True: { visible: true } - False: { visible: false } - -- type: entity - name: force gun - parent: BaseItem - id: WeaponForceGunAdmin - suffix: Admeme - description: Manipulates gravity around objects to fling them at high velocities. - components: - - type: Item - size: Normal - - type: ForceGun - canTetherAlive: true - canUnanchor: true - maxForce: 10000 - massLimit: 10000 - frequency: 15 - dampingRatio: 4 - throwForce: 50 - throwDistance: 100 - lineColor: "#18a2d5" - - type: Sprite - sprite: Objects/Weapons/Guns/Launchers/force_gun.rsi - layers: - - state: base - - state: base-unshaded - map: [ "unshaded" ] - shader: unshaded - visible: false - - type: ToggleableVisuals - spriteLayer: unshaded - inhandVisuals: - left: - - state: inhand-left-unshaded - shader: unshaded - right: - - state: inhand-right-unshaded - shader: unshaded - - type: Appearance - - type: GenericVisualizer - visuals: - enum.TetherVisualsStatus.Key: - unshaded: - True: { visible: true } - False: { visible: false } - -- type: entity - name: meteor launcher parent: WeaponLauncherMultipleRocket id: WeaponLauncherAdmemeMeteorLarge + name: meteor launcher suffix: Admeme description: It fires large meteors. components: @@ -430,9 +255,9 @@ proto: MeteorMedium - type: entity - name: immovable rod launcher parent: WeaponLauncherAdmemeMeteorLarge id: WeaponLauncherAdmemeImmovableRodSlow + name: immovable rod launcher suffix: Admeme description: It fires slow immovable rods. components: diff --git a/Resources/Prototypes/Recipes/Lathes/devices.yml b/Resources/Prototypes/Recipes/Lathes/devices.yml index 64c1dfbaae..cbaad80afb 100644 --- a/Resources/Prototypes/Recipes/Lathes/devices.yml +++ b/Resources/Prototypes/Recipes/Lathes/devices.yml @@ -166,7 +166,7 @@ - type: latheRecipe id: WeaponForceGun - result: WeaponForceGun + result: WeaponForceGunEmpty categories: - Tools completetime: 5 @@ -206,7 +206,7 @@ - type: latheRecipe id: WeaponTetherGun - result: WeaponTetherGun + result: WeaponTetherGunEmpty categories: - Tools completetime: 5 From 9805fe39564ae1f64bb479f96c00864d4e73fb4c Mon Sep 17 00:00:00 2001 From: Falcon Date: Tue, 30 Jun 2026 20:46:27 -0700 Subject: [PATCH 30/47] Refactor voice to separate it from sex (#40593) * feat: separate sex from voice * wip: tried to make it use voice collection directly * fix: yaml * fix: migrations * fix: ensure valid now validates correctly * fix: unisex mobs wouldn't have voice * chore: fix RT version * refactor: clean up code into subfunctions * refactor: swap name and protoId in voice also rename sounds to voice * chore: add comment * fix: fallback sounds for non-humanoid characters * fix: tests * fix: tests * refactor: change requests * refactor: convert sheepers * refactor: move Voice to SpeciesPrototype * chore: add tests * fix: test IoC error * refactor: use null coalesing in ConvertProfiles * refactor: move vocal sex association to speciesPrototype * style: remove space from new() * refactor: use name from emoteSoundsPrototype for UI * refactor: no more null Voice on profile * refactor: make DefaultVoice a static readonly property * fix: add default voice to HumanoidProfileComponent * chore: remove repeated vocal component from species yaml It's inherited from BaseSpeciesMob * style: correct comments for refactor * fix: add missing locale for FemaleVulpkanin * refactor: simplify logic based off surounding code * test: add test to make sure that sexes are properly enumerated for the voices * fix: add back urist sounds * style: clarify comments again * style: last thing im changing before I sleep * refactor: battling programming semantics * refactor: Name on EmoteSoundsPrototype.cs to VoiceSelectorName for clarity * revert: isDirty change * Fix HumanoidProfileTest.EnsureValidLoading. The profile's voice wasnt being updated, thus the voiceChanged event was never raised and that meant that the voice component had old EmoteSounds * oops * refactor: do the easy change requests * refactor: use an array for indexing sex conversion for performance * fix master * mistakes were made * chore: redo migrations --------- Co-authored-by: AJCM-git --- .../UI/HumanoidProfileEditor.Appearance.cs | 43 + .../Lobby/UI/HumanoidProfileEditor.xaml | 6 + .../Lobby/UI/HumanoidProfileEditor.xaml.cs | 11 + .../Tests/Humanoid/HumanoidProfileTests.cs | 47 +- .../20260701024227_VoiceSelector.Designer.cs | 2239 +++++++++++++++++ .../Postgres/20260701024227_VoiceSelector.cs | 28 + .../PostgresServerDbContextModelSnapshot.cs | 6 +- .../20260701024222_VoiceSelector.Designer.cs | 2156 ++++++++++++++++ .../Sqlite/20260701024222_VoiceSelector.cs | 28 + .../SqliteServerDbContextModelSnapshot.cs | 6 +- Content.Server.Database/Model.cs | 1 + Content.Server/Database/ServerDbBase.cs | 1 + .../Managers/ServerPreferencesManager.cs | 10 +- .../Speech/EntitySystems/VocalSystem.cs | 21 +- .../Chat/Prototypes/EmoteSoundsPrototype.cs | 6 + .../Humanoid/HumanoidProfileComponent.cs | 10 + .../Humanoid/HumanoidProfileExportV1.cs | 12 +- .../Humanoid/HumanoidProfileSystem.cs | 5 +- .../Humanoid/Prototypes/SpeciesPrototype.cs | 13 + Content.Shared/Humanoid/Sex.cs | 14 +- Content.Shared/Humanoid/Voice.cs | 11 + .../Preferences/HumanoidCharacterProfile.cs | 24 + .../Speech/Components/VocalComponent.cs | 13 +- .../ui/humanoid-profile-editor.ftl | 7 + .../Prototypes/Body/Species/arachnid.yml | 5 +- Resources/Prototypes/Body/Species/diona.yml | 5 +- Resources/Prototypes/Body/Species/dwarf.yml | 5 +- Resources/Prototypes/Body/Species/moth.yml | 5 +- .../Prototypes/Body/Species/reptilian.yml | 5 +- .../Prototypes/Body/Species/skeleton.yml | 5 +- Resources/Prototypes/Body/Species/slime.yml | 5 +- Resources/Prototypes/Body/Species/vox.yml | 5 +- .../Prototypes/Body/Species/vulpkanin.yml | 5 +- Resources/Prototypes/Body/species_base.yml | 5 +- .../Mobs/Cyborgs/base_borg_chassis.yml | 12 +- .../Prototypes/Entities/Mobs/NPCs/animals.yml | 41 +- .../Entities/Mobs/NPCs/regalrat.yml | 5 +- .../Prototypes/Entities/Mobs/NPCs/scurret.yml | 5 +- .../Prototypes/Entities/Mobs/NPCs/silicon.yml | 6 +- .../Prototypes/Entities/Mobs/NPCs/space.yml | 16 +- .../Entities/Mobs/Player/familiars.yml | 5 +- .../Entities/Mobs/Player/mothershipcore.yml | 3 +- .../Prototypes/Entities/Objects/Fun/pai.yml | 6 +- Resources/Prototypes/Species/arachnid.yml | 6 + Resources/Prototypes/Species/diona.yml | 6 + Resources/Prototypes/Species/dwarf.yml | 7 + Resources/Prototypes/Species/moth.yml | 6 + Resources/Prototypes/Species/reptilian.yml | 7 + Resources/Prototypes/Species/slime.yml | 7 + Resources/Prototypes/Species/vox.yml | 6 + Resources/Prototypes/Species/vulpkanin.yml | 7 + .../Prototypes/Voice/speech_emote_sounds.yml | 14 + 52 files changed, 4773 insertions(+), 160 deletions(-) create mode 100644 Content.Server.Database/Migrations/Postgres/20260701024227_VoiceSelector.Designer.cs create mode 100644 Content.Server.Database/Migrations/Postgres/20260701024227_VoiceSelector.cs create mode 100644 Content.Server.Database/Migrations/Sqlite/20260701024222_VoiceSelector.Designer.cs create mode 100644 Content.Server.Database/Migrations/Sqlite/20260701024222_VoiceSelector.cs create mode 100644 Content.Shared/Humanoid/Voice.cs diff --git a/Content.Client/Lobby/UI/HumanoidProfileEditor.Appearance.cs b/Content.Client/Lobby/UI/HumanoidProfileEditor.Appearance.cs index ddc9752b1e..c61e3fb678 100644 --- a/Content.Client/Lobby/UI/HumanoidProfileEditor.Appearance.cs +++ b/Content.Client/Lobby/UI/HumanoidProfileEditor.Appearance.cs @@ -1,9 +1,11 @@ using System.Linq; using Content.Client.UserInterface.Systems.Guidebook; +using Content.Shared.Chat.Prototypes; using Content.Shared.Guidebook; using Content.Shared.Humanoid; using Content.Shared.Humanoid.Prototypes; using Content.Shared.Preferences; +using Content.Shared.Speech.Components; using Robust.Client.UserInterface.Controls; using Robust.Shared.Enums; using Robust.Shared.Prototypes; @@ -16,6 +18,7 @@ public sealed partial class HumanoidProfileEditor private ColorSelectorSliders _rgbSkinColorSelector; private List _species = new(); + private List _voices = new(); private static readonly ProtoId DefaultSpeciesGuidebook = "Species"; public void UpdateSpeciesGuidebookIcon() @@ -97,6 +100,34 @@ public sealed partial class HumanoidProfileEditor EyeColorPicker.SetData(Profile.Appearance.EyeColor); } + private void UpdateVoiceControls() + { + if (Profile == null) + return; + + VoiceButton.Clear(); + _voices.Clear(); + + var speciesPrototype = _prototypeManager.Index(Profile.Species); + var availableVoices = speciesPrototype.Voices; + + _voices.AddRange(availableVoices.Select(protoId => _prototypeManager.Index(protoId))); + + if (_voices.All(proto => Profile?.Voice != proto.ID)) + SetVoice(speciesPrototype.DefaultSoundsBySex[(int)Profile.Sex]); + + for (var i = 0; i < availableVoices.Count; i++) + { + var name = Loc.GetString(_voices[i].VoiceSelectorName); + VoiceButton.AddItem(name, i); + + if (Profile?.Voice.Equals(_voices[i].ID) == true) + { + VoiceButton.SelectId(i); + } + } + } + private void UpdateSkinColor() { if (Profile == null) @@ -188,6 +219,7 @@ public sealed partial class HumanoidProfileEditor // In case there's species restrictions for loadouts RefreshLoadouts(); UpdateSexControls(); // update sex for new species + UpdateVoiceControls(); UpdateSpeciesGuidebookIcon(); ReloadPreview(); } @@ -215,11 +247,22 @@ public sealed partial class HumanoidProfileEditor break; } + // this does the same as above but for voice + if (_prototypeManager.TryIndex(Profile?.Species, out var prototype)) + SetVoice(prototype.DefaultSoundsBySex[(int)newSex]); + UpdateGenderControls(); + UpdateVoiceControls(); _markingsModel.SetOrganSexes(newSex); ReloadPreview(); } + private void SetVoice(ProtoId newVoice) + { + Profile = Profile?.WithVoice(newVoice); + IsDirty = true; + } + private void SetGender(Gender newGender) { Profile = Profile?.WithGender(newGender); diff --git a/Content.Client/Lobby/UI/HumanoidProfileEditor.xaml b/Content.Client/Lobby/UI/HumanoidProfileEditor.xaml index 84c5b75d1c..cce8ad6296 100644 --- a/Content.Client/Lobby/UI/HumanoidProfileEditor.xaml +++ b/Content.Client/Lobby/UI/HumanoidProfileEditor.xaml @@ -74,6 +74,12 @@ + + +