From 878e550d1c3d4379d54a54329a00b4e54744ceda Mon Sep 17 00:00:00 2001 From: Ratyyy <138193222+Ratyyy@users.noreply.github.com> Date: Sun, 11 Feb 2024 18:14:05 +0200 Subject: [PATCH 01/17] Revert "Revert "kill machine parts + migrate machine part spawners to salvage loot spawner (#23752)"" This reverts commit 2c218c7d0d421857b8ab9c323d1803f1a6e34dc8. # Conflicts: # Resources/Prototypes/Entities/Objects/Misc/machine_parts.yml # Resources/ServerInfo/Guidebook/Science/MachineUpgrading.xml --- .../Entities/Objects/Misc/machine_parts.yml | 3 ++ .../Guidebook/Science/MachineUpgrading.xml | 28 +++++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 Resources/ServerInfo/Guidebook/Science/MachineUpgrading.xml diff --git a/Resources/Prototypes/Entities/Objects/Misc/machine_parts.yml b/Resources/Prototypes/Entities/Objects/Misc/machine_parts.yml index 62a63c80c31a23..4fe9a503efece4 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/machine_parts.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/machine_parts.yml @@ -9,6 +9,9 @@ sprite: Objects/Misc/stock_parts.rsi - type: Item size: Tiny + - type: GuideHelp + guides: + - MachineUpgrading - type: entity id: CapacitorStockPart diff --git a/Resources/ServerInfo/Guidebook/Science/MachineUpgrading.xml b/Resources/ServerInfo/Guidebook/Science/MachineUpgrading.xml new file mode 100644 index 00000000000000..b6658f6671c7f4 --- /dev/null +++ b/Resources/ServerInfo/Guidebook/Science/MachineUpgrading.xml @@ -0,0 +1,28 @@ + +# Machine Upgrading + +Machines help the station run smoothly, and as a scientist, you can help them run even better! + +## Parts +Stock Parts: + + + + + +Machine Parts can be used to create many machines. + +## Upgrading +To know if a machine can be upgraded, you can examine it and check for the [color=#a4885c]lightning bolt[/color] icon in the lower right corner. Clicking on it will allow you to see what kinds of upgrades the machine has. + +To check what parts a machine needs, you can examine its board. Try it here: + + + + + + + +You can also quickly build machines by using an RPED, loading it with machine parts, and then clicking on a machine. + + From 6a080a7a8c203cdf37b3056718661ad30f2b30f7 Mon Sep 17 00:00:00 2001 From: Ratyyy <138193222+Ratyyy@users.noreply.github.com> Date: Sun, 11 Feb 2024 18:15:39 +0200 Subject: [PATCH 02/17] Revert "Rip out remaining machine upgrades (#24413)" This reverts commit a9e89ab37221c4f5eff5a9e1d42e97c6f3e0753b. # Conflicts: # Content.Server/Kitchen/Components/MicrowaveComponent.cs # Content.Server/Kitchen/EntitySystems/MicrowaveSystem.cs # Resources/Maps/Test/test_teg.yml --- .../Anomaly/AnomalySystem.Vessel.cs | 7 + .../Binary/Components/GasRecyclerComponent.cs | 24 ++- .../Binary/EntitySystems/GasRecyclerSystem.cs | 18 +++ .../Portable/PortableScrubberComponent.cs | 44 +++++- .../Atmos/Portable/PortableScrubberSystem.cs | 18 +++ Content.Server/Bed/BedSystem.cs | 17 +++ .../Bed/Components/StasisBedComponent.cs | 9 ++ .../Components/SeedExtractorComponent.cs | 26 +++- .../Botany/Systems/SeedExtractorSystem.cs | 20 ++- .../Cargo/Systems/CargoSystem.Telepad.cs | 15 ++ .../Components/SolutionHeaterComponent.cs | 20 ++- .../EntitySystems/SolutionHeaterSystem.cs | 15 ++ Content.Server/Cloning/CloningSystem.cs | 21 ++- .../ConstructionSystem.Machine.cs | 5 +- .../Construction/PartExchangerSystem.cs | 3 +- .../Gravity/GravityGeneratorComponent.cs | 3 + .../Gravity/GravityGeneratorSystem.cs | 8 + .../Kitchen/Components/MicrowaveComponent.cs | 26 +--- .../Components/ReagentGrinderComponent.cs | 21 ++- .../Kitchen/EntitySystems/MicrowaveSystem.cs | 124 ++++++---------- .../EntitySystems/ReagentGrinderSystem.cs | 21 +++ .../Materials/MaterialReclaimerSystem.cs | 15 ++ .../BiomassReclaimerComponent.cs | 51 ++++++- .../BiomassReclaimerSystem.cs | 24 +++ .../Components/MedicalScannerComponent.cs | 8 +- .../Medical/MedicalScannerSystem.cs | 15 ++ .../Components/FatExtractorComponent.cs | 23 ++- .../EntitySystems/FatExtractorSystem.cs | 15 ++ .../Components/UpgradeBatteryComponent.cs | 28 ++++ .../Components/UpgradePowerDrawComponent.cs | 41 ++++++ .../UpgradePowerSupplierComponent.cs | 36 +++++ .../UpgradePowerSupplyRampingComponent.cs | 38 +++++ .../EntitySystems/UpgradeBatterySystem.cs | 39 +++++ .../Power/EntitySystems/UpgradePowerSystem.cs | 139 ++++++++++++++++++ .../Power/Generator/GeneratorSystem.cs | 7 +- .../Shuttles/Components/ThrusterComponent.cs | 11 ++ .../Shuttles/Systems/ThrusterSystem.cs | 25 ++++ .../EntitySystems/EmitterSystem.cs | 17 +++ .../Components/TraversalDistorterComponent.cs | 17 ++- .../Systems/TraversalDistorterSystem.cs | 21 ++- .../XenoArtifacts/ArtifactSystem.cs | 1 + .../Components/SharedCargoTelepadComponent.cs | 19 +++ Content.Shared/Cloning/CloningPodComponent.cs | 41 +++++- .../Construction/MachinePartSystem.cs | 15 ++ .../Materials/MaterialReclaimerComponent.cs | 23 ++- .../Components/SharedEmitterComponent.cs | 34 +++++ Resources/Locale/en-US/anomaly/anomaly.ftl | 1 + .../en-US/atmos/gas-recycler-system.ftl | 3 + .../Locale/en-US/atmos/portable-scrubber.ftl | 3 + .../components/seed-extractor-component.ftl | 2 + .../en-US/cargo/cargo-console-component.ftl | 2 + .../components/solution-heater-component.ftl | 1 + .../components/machine-part-component.ftl | 2 + .../components/microwave-component.ftl | 1 + .../components/reagent-grinder-component.ftl | 3 + Resources/Locale/en-US/machine/machine.ftl | 7 +- .../Locale/en-US/materials/materials.ftl | 3 + .../biomass-reclaimer-component.ftl | 3 + .../components/cloning-pod-component.ftl | 2 + .../components/medical-scanner-component.ftl | 2 + .../components/stasis-bed-component.ftl | 1 + .../nutrition/components/fat-extractor.ftl | 4 +- Resources/Locale/en-US/shuttles/thruster.ftl | 2 + .../components/emitter-component.ftl | 5 +- .../xenoarchaeology/traversal-distorter.ftl | 2 + .../Objects/Specific/Research/rped.yml | 3 + .../Entities/Structures/Dispensers/chem.yml | 3 + .../Structures/Machines/anomaly_equipment.yml | 4 +- .../Structures/Machines/anomaly_sync.yml | 5 +- .../Structures/Machines/artifact_analyzer.yml | 3 + .../Structures/Machines/seed_extractor.yml | 3 + .../Power/Generation/portable_generator.yml | 6 + .../Entities/Structures/Power/smes.yml | 7 +- .../Entities/Structures/Power/substation.yml | 7 +- .../Structures/Shuttles/thrusters.yml | 5 + Resources/Prototypes/Guidebook/science.yml | 6 + 76 files changed, 1131 insertions(+), 138 deletions(-) create mode 100644 Content.Server/Power/Components/UpgradeBatteryComponent.cs create mode 100644 Content.Server/Power/Components/UpgradePowerDrawComponent.cs create mode 100644 Content.Server/Power/Components/UpgradePowerSupplierComponent.cs create mode 100644 Content.Server/Power/Components/UpgradePowerSupplyRampingComponent.cs create mode 100644 Content.Server/Power/EntitySystems/UpgradeBatterySystem.cs create mode 100644 Content.Server/Power/EntitySystems/UpgradePowerSystem.cs create mode 100644 Resources/Locale/en-US/chemistry/components/solution-heater-component.ftl create mode 100644 Resources/Locale/en-US/construction/components/machine-part-component.ftl create mode 100644 Resources/Locale/en-US/medical/components/stasis-bed-component.ftl diff --git a/Content.Server/Anomaly/AnomalySystem.Vessel.cs b/Content.Server/Anomaly/AnomalySystem.Vessel.cs index 7c7feacb8792e5..e1394ec44875d0 100644 --- a/Content.Server/Anomaly/AnomalySystem.Vessel.cs +++ b/Content.Server/Anomaly/AnomalySystem.Vessel.cs @@ -1,4 +1,5 @@ using Content.Server.Anomaly.Components; +using Content.Server.Construction; using Content.Server.Power.EntitySystems; using Content.Shared.Anomaly; using Content.Shared.Anomaly.Components; @@ -19,6 +20,7 @@ private void InitializeVessel() { SubscribeLocalEvent(OnVesselShutdown); SubscribeLocalEvent(OnVesselMapInit); + SubscribeLocalEvent(OnUpgradeExamine); SubscribeLocalEvent(OnVesselInteractUsing); SubscribeLocalEvent(OnExamined); SubscribeLocalEvent(OnVesselGetPointsPerSecond); @@ -65,6 +67,11 @@ private void OnVesselMapInit(EntityUid uid, AnomalyVesselComponent component, Ma UpdateVesselAppearance(uid, component); } + private void OnUpgradeExamine(EntityUid uid, AnomalyVesselComponent component, UpgradeExamineEvent args) + { + args.AddPercentageUpgrade("anomaly-vessel-component-upgrade-output", component.PointMultiplier); + } + private void OnVesselInteractUsing(EntityUid uid, AnomalyVesselComponent component, InteractUsingEvent args) { if (component.Anomaly != null || diff --git a/Content.Server/Atmos/Piping/Binary/Components/GasRecyclerComponent.cs b/Content.Server/Atmos/Piping/Binary/Components/GasRecyclerComponent.cs index e1eb0072b9d1b5..9129557c225bc8 100644 --- a/Content.Server/Atmos/Piping/Binary/Components/GasRecyclerComponent.cs +++ b/Content.Server/Atmos/Piping/Binary/Components/GasRecyclerComponent.cs @@ -1,4 +1,6 @@ using Content.Shared.Atmos; +using Content.Shared.Construction.Prototypes; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; namespace Content.Server.Atmos.Piping.Binary.Components { @@ -17,10 +19,28 @@ public sealed partial class GasRecyclerComponent : Component [DataField("outlet")] public string OutletName { get; set; } = "outlet"; - [DataField, ViewVariables(VVAccess.ReadWrite)] + [ViewVariables(VVAccess.ReadWrite)] public float MinTemp = 300 + Atmospherics.T0C; - [DataField, ViewVariables(VVAccess.ReadWrite)] + [DataField("BaseMinTemp")] + public float BaseMinTemp = 300 + Atmospherics.T0C; + + [DataField("machinePartMinTemp", customTypeSerializer: typeof(PrototypeIdSerializer))] + public string MachinePartMinTemp = "Capacitor"; + + [DataField("partRatingMinTempMultiplier")] + public float PartRatingMinTempMultiplier = 0.95f; + + [ViewVariables(VVAccess.ReadWrite)] public float MinPressure = 30 * Atmospherics.OneAtmosphere; + + [DataField("BaseMinPressure")] + public float BaseMinPressure = 30 * Atmospherics.OneAtmosphere; + + [DataField("machinePartMinPressure", customTypeSerializer: typeof(PrototypeIdSerializer))] + public string MachinePartMinPressure = "Manipulator"; + + [DataField("partRatingMinPressureMultiplier")] + public float PartRatingMinPressureMultiplier = 0.8f; } } diff --git a/Content.Server/Atmos/Piping/Binary/EntitySystems/GasRecyclerSystem.cs b/Content.Server/Atmos/Piping/Binary/EntitySystems/GasRecyclerSystem.cs index e14069b8a766bc..6a4a16eac3df0a 100644 --- a/Content.Server/Atmos/Piping/Binary/EntitySystems/GasRecyclerSystem.cs +++ b/Content.Server/Atmos/Piping/Binary/EntitySystems/GasRecyclerSystem.cs @@ -1,6 +1,7 @@ using Content.Server.Atmos.EntitySystems; using Content.Server.Atmos.Piping.Binary.Components; using Content.Server.Atmos.Piping.Components; +using Content.Server.Construction; using Content.Server.NodeContainer; using Content.Server.NodeContainer.EntitySystems; using Content.Server.NodeContainer.Nodes; @@ -28,6 +29,8 @@ public override void Initialize() SubscribeLocalEvent(OnUpdate); SubscribeLocalEvent(OnDisabled); SubscribeLocalEvent(OnExamined); + SubscribeLocalEvent(OnRefreshParts); + SubscribeLocalEvent(OnUpgradeExamine); } private void OnEnabled(EntityUid uid, GasRecyclerComponent comp, ref AtmosDeviceEnabledEvent args) @@ -122,5 +125,20 @@ private void UpdateAppearance(EntityUid uid, GasRecyclerComponent? comp = null) _appearance.SetData(uid, PumpVisuals.Enabled, comp.Reacting); } + + private void OnRefreshParts(EntityUid uid, GasRecyclerComponent component, RefreshPartsEvent args) + { + var ratingTemp = args.PartRatings[component.MachinePartMinTemp]; + var ratingPressure = args.PartRatings[component.MachinePartMinPressure]; + + component.MinTemp = component.BaseMinTemp * MathF.Pow(component.PartRatingMinTempMultiplier, ratingTemp - 1); + component.MinPressure = component.BaseMinPressure * MathF.Pow(component.PartRatingMinPressureMultiplier, ratingPressure - 1); + } + + private void OnUpgradeExamine(EntityUid uid, GasRecyclerComponent component, UpgradeExamineEvent args) + { + args.AddPercentageUpgrade("gas-recycler-upgrade-min-temp", component.MinTemp / component.BaseMinTemp); + args.AddPercentageUpgrade("gas-recycler-upgrade-min-pressure", component.MinPressure / component.BaseMinPressure); + } } } diff --git a/Content.Server/Atmos/Portable/PortableScrubberComponent.cs b/Content.Server/Atmos/Portable/PortableScrubberComponent.cs index 86982ca32c5325..85bcf0abd9f4b9 100644 --- a/Content.Server/Atmos/Portable/PortableScrubberComponent.cs +++ b/Content.Server/Atmos/Portable/PortableScrubberComponent.cs @@ -1,4 +1,6 @@ using Content.Shared.Atmos; +using Content.Shared.Construction.Prototypes; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; namespace Content.Server.Atmos.Portable { @@ -48,13 +50,51 @@ public sealed partial class PortableScrubberComponent : Component /// /// Maximum internal pressure before it refuses to take more. /// - [DataField, ViewVariables(VVAccess.ReadWrite)] + [ViewVariables(VVAccess.ReadWrite)] public float MaxPressure = 2500; + /// + /// The base amount of maximum internal pressure + /// + [DataField("baseMaxPressure")] + public float BaseMaxPressure = 2500; + + /// + /// The machine part that modifies the maximum internal pressure + /// + [DataField("machinePartMaxPressure", customTypeSerializer: typeof(PrototypeIdSerializer))] + public string MachinePartMaxPressure = "MatterBin"; + + /// + /// How much the will affect the pressure. + /// The value will be multiplied by this amount for each increasing part tier. + /// + [DataField("partRatingMaxPressureModifier")] + public float PartRatingMaxPressureModifier = 1.5f; + /// /// The speed at which gas is scrubbed from the environment. /// - [DataField, ViewVariables(VVAccess.ReadWrite)] + [ViewVariables(VVAccess.ReadWrite)] public float TransferRate = 800; + + /// + /// The base speed at which gas is scrubbed from the environment. + /// + [DataField("baseTransferRate")] + public float BaseTransferRate = 800; + + /// + /// The machine part which modifies the speed of + /// + [DataField("machinePartTransferRate", customTypeSerializer: typeof(PrototypeIdSerializer))] + public string MachinePartTransferRate = "Manipulator"; + + /// + /// How much the will modify the rate. + /// The value will be multiplied by this amount for each increasing part tier. + /// + [DataField("partRatingTransferRateModifier")] + public float PartRatingTransferRateModifier = 1.4f; } } diff --git a/Content.Server/Atmos/Portable/PortableScrubberSystem.cs b/Content.Server/Atmos/Portable/PortableScrubberSystem.cs index f1be5ac51506c8..922943f25fe7fd 100644 --- a/Content.Server/Atmos/Portable/PortableScrubberSystem.cs +++ b/Content.Server/Atmos/Portable/PortableScrubberSystem.cs @@ -12,6 +12,7 @@ using Content.Server.NodeContainer.NodeGroups; using Content.Server.Audio; using Content.Server.Administration.Logs; +using Content.Server.Construction; using Content.Server.NodeContainer.EntitySystems; using Content.Shared.Database; @@ -38,6 +39,8 @@ public override void Initialize() SubscribeLocalEvent(OnExamined); SubscribeLocalEvent(OnDestroyed); SubscribeLocalEvent(OnScrubberAnalyzed); + SubscribeLocalEvent(OnRefreshParts); + SubscribeLocalEvent(OnUpgradeExamine); } private bool IsFull(PortableScrubberComponent component) @@ -167,5 +170,20 @@ private void OnScrubberAnalyzed(EntityUid uid, PortableScrubberComponent compone } args.GasMixtures = gasMixDict; } + + private void OnRefreshParts(EntityUid uid, PortableScrubberComponent component, RefreshPartsEvent args) + { + var pressureRating = args.PartRatings[component.MachinePartMaxPressure]; + var transferRating = args.PartRatings[component.MachinePartTransferRate]; + + component.MaxPressure = component.BaseMaxPressure * MathF.Pow(component.PartRatingMaxPressureModifier, pressureRating - 1); + component.TransferRate = component.BaseTransferRate * MathF.Pow(component.PartRatingTransferRateModifier, transferRating - 1); + } + + private void OnUpgradeExamine(EntityUid uid, PortableScrubberComponent component, UpgradeExamineEvent args) + { + args.AddPercentageUpgrade("portable-scrubber-component-upgrade-max-pressure", component.MaxPressure / component.BaseMaxPressure); + args.AddPercentageUpgrade("portable-scrubber-component-upgrade-transfer-rate", component.TransferRate / component.BaseTransferRate); + } } } diff --git a/Content.Server/Bed/BedSystem.cs b/Content.Server/Bed/BedSystem.cs index 131bd4b1829817..9616d6ffa197cf 100644 --- a/Content.Server/Bed/BedSystem.cs +++ b/Content.Server/Bed/BedSystem.cs @@ -2,6 +2,7 @@ using Content.Server.Bed.Components; using Content.Server.Bed.Sleep; using Content.Server.Body.Systems; +using Content.Server.Construction; using Content.Server.Power.Components; using Content.Server.Power.EntitySystems; using Content.Shared.Bed; @@ -9,6 +10,7 @@ using Content.Shared.Body.Components; using Content.Shared.Buckle.Components; using Content.Shared.Damage; +using Content.Shared.Emag.Components; using Content.Shared.Emag.Systems; using Content.Shared.Mobs.Systems; using Robust.Shared.Timing; @@ -31,6 +33,8 @@ public override void Initialize() SubscribeLocalEvent(OnBuckleChange); SubscribeLocalEvent(OnPowerChanged); SubscribeLocalEvent(OnEmagged); + SubscribeLocalEvent(OnRefreshParts); + SubscribeLocalEvent(OnUpgradeExamine); } private void ManageUpdateList(EntityUid uid, HealOnBuckleComponent component, ref BuckleChangeEvent args) @@ -126,5 +130,18 @@ private void UpdateMetabolisms(EntityUid uid, StasisBedComponent component, bool RaiseLocalEvent(buckledEntity, metabolicEvent); } } + + private void OnRefreshParts(EntityUid uid, StasisBedComponent component, RefreshPartsEvent args) + { + var metabolismRating = args.PartRatings[component.MachinePartMetabolismModifier]; + component.Multiplier = component.BaseMultiplier * metabolismRating; //linear scaling so it's not OP + if (HasComp(uid)) + component.Multiplier = 1f / component.Multiplier; + } + + private void OnUpgradeExamine(EntityUid uid, StasisBedComponent component, UpgradeExamineEvent args) + { + args.AddPercentageUpgrade("stasis-bed-component-upgrade-stasis", component.Multiplier / component.BaseMultiplier); + } } } diff --git a/Content.Server/Bed/Components/StasisBedComponent.cs b/Content.Server/Bed/Components/StasisBedComponent.cs index e2175d6e6467e3..f658d01c9fb521 100644 --- a/Content.Server/Bed/Components/StasisBedComponent.cs +++ b/Content.Server/Bed/Components/StasisBedComponent.cs @@ -1,12 +1,21 @@ +using Content.Shared.Construction.Prototypes; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; + namespace Content.Server.Bed.Components { [RegisterComponent] public sealed partial class StasisBedComponent : Component { + [DataField("baseMultiplier", required: true), ViewVariables(VVAccess.ReadWrite)] + public float BaseMultiplier = 10f; + /// /// What the metabolic update rate will be multiplied by (higher = slower metabolism) /// [ViewVariables(VVAccess.ReadWrite)] public float Multiplier = 10f; + + [DataField("machinePartMetabolismModifier", customTypeSerializer: typeof(PrototypeIdSerializer))] + public string MachinePartMetabolismModifier = "Capacitor"; } } diff --git a/Content.Server/Botany/Components/SeedExtractorComponent.cs b/Content.Server/Botany/Components/SeedExtractorComponent.cs index ddb04f213d15ff..d497f027bf1768 100644 --- a/Content.Server/Botany/Components/SeedExtractorComponent.cs +++ b/Content.Server/Botany/Components/SeedExtractorComponent.cs @@ -1,4 +1,7 @@ using Content.Server.Botany.Systems; +using Content.Server.Construction; +using Content.Shared.Construction.Prototypes; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; namespace Content.Server.Botany.Components; @@ -7,14 +10,33 @@ namespace Content.Server.Botany.Components; public sealed partial class SeedExtractorComponent : Component { /// - /// The minimum amount of seed packets dropped. + /// The minimum amount of seed packets dropped with no machine upgrades. /// [DataField("baseMinSeeds"), ViewVariables(VVAccess.ReadWrite)] public int BaseMinSeeds = 1; /// - /// The maximum amount of seed packets dropped. + /// The maximum amount of seed packets dropped with no machine upgrades. /// [DataField("baseMaxSeeds"), ViewVariables(VVAccess.ReadWrite)] public int BaseMaxSeeds = 3; + + /// + /// Modifier to the amount of seeds outputted, set on . + /// + [ViewVariables(VVAccess.ReadWrite)] + public float SeedAmountMultiplier; + + /// + /// Machine part whose rating modifies the amount of seed packets dropped. + /// + [DataField("machinePartYieldAmount", customTypeSerializer: typeof(PrototypeIdSerializer))] + public string MachinePartSeedAmount = "Manipulator"; + + /// + /// How much the machine part quality affects the amount of seeds outputted. + /// Going up a tier will multiply the seed output by this amount. + /// + [DataField("partRatingSeedAmountMultiplier")] + public float PartRatingSeedAmountMultiplier = 1.5f; } diff --git a/Content.Server/Botany/Systems/SeedExtractorSystem.cs b/Content.Server/Botany/Systems/SeedExtractorSystem.cs index f1ae6c9f11ae9e..4c547b96f09bc5 100644 --- a/Content.Server/Botany/Systems/SeedExtractorSystem.cs +++ b/Content.Server/Botany/Systems/SeedExtractorSystem.cs @@ -1,8 +1,10 @@ using Content.Server.Botany.Components; +using Content.Server.Construction; using Content.Server.Popups; using Content.Server.Power.EntitySystems; using Content.Shared.Interaction; using Content.Shared.Popups; +using Robust.Shared.Player; using Robust.Shared.Random; namespace Content.Server.Botany.Systems; @@ -18,6 +20,8 @@ public override void Initialize() base.Initialize(); SubscribeLocalEvent(OnInteractUsing); + SubscribeLocalEvent(OnRefreshParts); + SubscribeLocalEvent(OnUpgradeExamine); } private void OnInteractUsing(EntityUid uid, SeedExtractorComponent seedExtractor, InteractUsingEvent args) @@ -25,8 +29,7 @@ private void OnInteractUsing(EntityUid uid, SeedExtractorComponent seedExtractor if (!this.IsPowered(uid, EntityManager)) return; - if (!TryComp(args.Used, out ProduceComponent? produce)) - return; + if (!TryComp(args.Used, out ProduceComponent? produce)) return; if (!_botanySystem.TryGetSeed(produce, out var seed) || seed.Seedless) { _popupSystem.PopupCursor(Loc.GetString("seed-extractor-component-no-seeds",("name", args.Used)), @@ -39,7 +42,7 @@ private void OnInteractUsing(EntityUid uid, SeedExtractorComponent seedExtractor QueueDel(args.Used); - var amount = _random.Next(seedExtractor.BaseMinSeeds, seedExtractor.BaseMaxSeeds + 1); + var amount = (int) _random.NextFloat(seedExtractor.BaseMinSeeds, seedExtractor.BaseMaxSeeds + 1) * seedExtractor.SeedAmountMultiplier; var coords = Transform(uid).Coordinates; if (amount > 1) @@ -50,4 +53,15 @@ private void OnInteractUsing(EntityUid uid, SeedExtractorComponent seedExtractor _botanySystem.SpawnSeedPacket(seed, coords, args.User); } } + + private void OnRefreshParts(EntityUid uid, SeedExtractorComponent seedExtractor, RefreshPartsEvent args) + { + var manipulatorQuality = args.PartRatings[seedExtractor.MachinePartSeedAmount]; + seedExtractor.SeedAmountMultiplier = MathF.Pow(seedExtractor.PartRatingSeedAmountMultiplier, manipulatorQuality - 1); + } + + private void OnUpgradeExamine(EntityUid uid, SeedExtractorComponent seedExtractor, UpgradeExamineEvent args) + { + args.AddPercentageUpgrade("seed-extractor-component-upgrade-seed-yield", seedExtractor.SeedAmountMultiplier); + } } diff --git a/Content.Server/Cargo/Systems/CargoSystem.Telepad.cs b/Content.Server/Cargo/Systems/CargoSystem.Telepad.cs index 42aabf2578ef1a..1c25b0e79d2bad 100644 --- a/Content.Server/Cargo/Systems/CargoSystem.Telepad.cs +++ b/Content.Server/Cargo/Systems/CargoSystem.Telepad.cs @@ -1,4 +1,6 @@ using Content.Server.Cargo.Components; +using Content.Server.Construction; +using Content.Server.Paper; using Content.Server.Power.Components; using Content.Shared.Cargo; using Content.Shared.Cargo.Components; @@ -13,6 +15,8 @@ public sealed partial class CargoSystem private void InitializeTelepad() { SubscribeLocalEvent(OnInit); + SubscribeLocalEvent(OnRefreshParts); + SubscribeLocalEvent(OnUpgradeExamine); SubscribeLocalEvent(OnTelepadPowerChange); // Shouldn't need re-anchored event SubscribeLocalEvent(OnTelepadAnchorChange); @@ -79,6 +83,17 @@ private void OnInit(EntityUid uid, CargoTelepadComponent telepad, ComponentInit _linker.EnsureSinkPorts(uid, telepad.ReceiverPort); } + private void OnRefreshParts(EntityUid uid, CargoTelepadComponent component, RefreshPartsEvent args) + { + var rating = args.PartRatings[component.MachinePartTeleportDelay] - 1; + component.Delay = component.BaseDelay * MathF.Pow(component.PartRatingTeleportDelay, rating); + } + + private void OnUpgradeExamine(EntityUid uid, CargoTelepadComponent component, UpgradeExamineEvent args) + { + args.AddPercentageUpgrade("cargo-telepad-delay-upgrade", component.Delay / component.BaseDelay); + } + private void SetEnabled(EntityUid uid, CargoTelepadComponent component, ApcPowerReceiverComponent? receiver = null, TransformComponent? xform = null) { diff --git a/Content.Server/Chemistry/Components/SolutionHeaterComponent.cs b/Content.Server/Chemistry/Components/SolutionHeaterComponent.cs index c1841e022c74a6..71956701250d7d 100644 --- a/Content.Server/Chemistry/Components/SolutionHeaterComponent.cs +++ b/Content.Server/Chemistry/Components/SolutionHeaterComponent.cs @@ -3,9 +3,27 @@ namespace Content.Server.Chemistry.Components; [RegisterComponent] public sealed partial class SolutionHeaterComponent : Component { + /// + /// How much heat is added per second to the solution, with no upgrades. + /// + [DataField("baseHeatPerSecond")] + public float BaseHeatPerSecond = 120; + /// /// How much heat is added per second to the solution, taking upgrades into account. /// - [DataField, ViewVariables(VVAccess.ReadWrite)] + [ViewVariables(VVAccess.ReadWrite)] public float HeatPerSecond; + + /// + /// The machine part that affects the heat multiplier. + /// + [DataField("machinePartHeatMultiplier")] + public string MachinePartHeatMultiplier = "Capacitor"; + + /// + /// How much each upgrade multiplies the heat by. + /// + [DataField("partRatingHeatMultiplier")] + public float PartRatingHeatMultiplier = 1.5f; } diff --git a/Content.Server/Chemistry/EntitySystems/SolutionHeaterSystem.cs b/Content.Server/Chemistry/EntitySystems/SolutionHeaterSystem.cs index 6e6373e10bf757..1ef589ab5cb0dd 100644 --- a/Content.Server/Chemistry/EntitySystems/SolutionHeaterSystem.cs +++ b/Content.Server/Chemistry/EntitySystems/SolutionHeaterSystem.cs @@ -1,5 +1,6 @@ using Content.Server.Chemistry.Components; using Content.Server.Chemistry.Containers.EntitySystems; +using Content.Server.Construction; using Content.Server.Power.Components; using Content.Server.Power.EntitySystems; using Content.Shared.Chemistry; @@ -20,6 +21,8 @@ public override void Initialize() base.Initialize(); SubscribeLocalEvent(OnPowerChanged); + SubscribeLocalEvent(OnRefreshParts); + SubscribeLocalEvent(OnUpgradeExamine); SubscribeLocalEvent(OnItemPlaced); SubscribeLocalEvent(OnItemRemoved); } @@ -61,6 +64,18 @@ private void OnPowerChanged(Entity entity, ref PowerCha } } + private void OnRefreshParts(Entity entity, ref RefreshPartsEvent args) + { + var heatRating = args.PartRatings[entity.Comp.MachinePartHeatMultiplier] - 1; + + entity.Comp.HeatPerSecond = entity.Comp.BaseHeatPerSecond * MathF.Pow(entity.Comp.PartRatingHeatMultiplier, heatRating); + } + + private void OnUpgradeExamine(Entity entity, ref UpgradeExamineEvent args) + { + args.AddPercentageUpgrade("solution-heater-upgrade-heat", entity.Comp.HeatPerSecond / entity.Comp.BaseHeatPerSecond); + } + private void OnItemPlaced(Entity entity, ref ItemPlacedEvent args) { TryTurnOn(entity); diff --git a/Content.Server/Cloning/CloningSystem.cs b/Content.Server/Cloning/CloningSystem.cs index def9950d9049f6..da8de13af2d675 100644 --- a/Content.Server/Cloning/CloningSystem.cs +++ b/Content.Server/Cloning/CloningSystem.cs @@ -1,6 +1,7 @@ using Content.Server.Atmos.EntitySystems; using Content.Server.Chat.Systems; using Content.Server.Cloning.Components; +using Content.Server.Construction; using Content.Server.DeviceLinking.Systems; using Content.Server.EUI; using Content.Server.Fluids.EntitySystems; @@ -9,6 +10,7 @@ using Content.Server.Materials; using Content.Server.Popups; using Content.Server.Power.EntitySystems; +using Content.Server.Traits.Assorted; using Content.Shared.Atmos; using Content.Shared.CCVar; using Content.Shared.Chemistry.Components; @@ -69,6 +71,8 @@ public override void Initialize() base.Initialize(); SubscribeLocalEvent(OnComponentInit); + SubscribeLocalEvent(OnPartsRefreshed); + SubscribeLocalEvent(OnUpgradeExamine); SubscribeLocalEvent(Reset); SubscribeLocalEvent(HandleMindAdded); SubscribeLocalEvent(OnPortDisconnected); @@ -83,6 +87,21 @@ private void OnComponentInit(EntityUid uid, CloningPodComponent clonePod, Compon _signalSystem.EnsureSinkPorts(uid, CloningPodComponent.PodPort); } + private void OnPartsRefreshed(EntityUid uid, CloningPodComponent component, RefreshPartsEvent args) + { + var materialRating = args.PartRatings[component.MachinePartMaterialUse]; + var speedRating = args.PartRatings[component.MachinePartCloningSpeed]; + + component.BiomassRequirementMultiplier = MathF.Pow(component.PartRatingMaterialMultiplier, materialRating - 1); + component.CloningTime = component.BaseCloningTime * MathF.Pow(component.PartRatingSpeedMultiplier, speedRating - 1); + } + + private void OnUpgradeExamine(EntityUid uid, CloningPodComponent component, UpgradeExamineEvent args) + { + args.AddPercentageUpgrade("cloning-pod-component-upgrade-speed", component.BaseCloningTime / component.CloningTime); + args.AddPercentageUpgrade("cloning-pod-component-upgrade-biomass-requirement", component.BiomassRequirementMultiplier); + } + internal void TransferMindToClone(EntityUid mindId, MindComponent mind) { if (!ClonesWaitingForMind.TryGetValue(mind, out var entity) || @@ -171,7 +190,7 @@ public bool TryCloning(EntityUid uid, EntityUid bodyToClone, Entity(bodyToClone, out var physics)) return false; - var cloningCost = (int) Math.Round(physics.FixturesMass); + var cloningCost = (int) Math.Round(physics.FixturesMass * clonePod.BiomassRequirementMultiplier); if (_configManager.GetCVar(CCVars.BiomassEasyMode)) cloningCost = (int) Math.Round(cloningCost * EasyModeCloningCost); diff --git a/Content.Server/Construction/ConstructionSystem.Machine.cs b/Content.Server/Construction/ConstructionSystem.Machine.cs index 2e670dbe40d4ac..65b0b704761794 100644 --- a/Content.Server/Construction/ConstructionSystem.Machine.cs +++ b/Content.Server/Construction/ConstructionSystem.Machine.cs @@ -5,6 +5,7 @@ using Content.Shared.Construction.Prototypes; using Content.Shared.Verbs; using Robust.Shared.Containers; +using Robust.Shared.Map.Components; using Robust.Shared.Utility; namespace Content.Server.Construction; @@ -143,7 +144,7 @@ private void CreateBoardAndStockParts(EntityUid uid, MachineComponent component) var p = EntityManager.SpawnEntity(partProto.StockPartPrototype, xform.Coordinates); if (!_container.Insert(p, partContainer)) - throw new Exception($"Couldn't insert machine part of type {part} to machine with prototype {partProto.StockPartPrototype}!"); + throw new Exception($"Couldn't insert machine part of type {part} to machine with prototype {partProto.StockPartPrototype ?? "N/A"}!"); } } @@ -183,7 +184,7 @@ public sealed class RefreshPartsEvent : EntityEventArgs { public IReadOnlyList Parts = new List(); - public Dictionary PartRatings = new(); + public Dictionary PartRatings = new Dictionary(); } public sealed class UpgradeExamineEvent : EntityEventArgs diff --git a/Content.Server/Construction/PartExchangerSystem.cs b/Content.Server/Construction/PartExchangerSystem.cs index ee5edcbd0a03ec..f364d1b547d078 100644 --- a/Content.Server/Construction/PartExchangerSystem.cs +++ b/Content.Server/Construction/PartExchangerSystem.cs @@ -10,6 +10,7 @@ using Robust.Shared.Containers; using Robust.Shared.Utility; using Content.Shared.Wires; +using Robust.Shared.Audio; using Robust.Shared.Audio.Systems; using Robust.Shared.Collections; @@ -42,7 +43,7 @@ private void OnDoAfter(EntityUid uid, PartExchangerComponent component, DoAfterE if (args.Handled || args.Args.Target == null) return; - if (!TryComp(uid, out var storage)) + if (!TryComp(uid, out var storage) || storage.Container == null) return; //the parts are stored in here var machinePartQuery = GetEntityQuery(); diff --git a/Content.Server/Gravity/GravityGeneratorComponent.cs b/Content.Server/Gravity/GravityGeneratorComponent.cs index f946292038499c..4168de43df728f 100644 --- a/Content.Server/Gravity/GravityGeneratorComponent.cs +++ b/Content.Server/Gravity/GravityGeneratorComponent.cs @@ -37,6 +37,9 @@ public sealed partial class GravityGeneratorComponent : SharedGravityGeneratorCo // 0 -> 1 [ViewVariables(VVAccess.ReadWrite)] [DataField("charge")] public float Charge { get; set; } = 1; + [DataField("machinePartMaxChargeMultiplier", customTypeSerializer: typeof(PrototypeIdSerializer))] + public string MachinePartMaxChargeMultiplier = "Capacitor"; + /// /// Is the gravity generator currently "producing" gravity? /// diff --git a/Content.Server/Gravity/GravityGeneratorSystem.cs b/Content.Server/Gravity/GravityGeneratorSystem.cs index b0c4bb56ff3753..0bd159f61afa8a 100644 --- a/Content.Server/Gravity/GravityGeneratorSystem.cs +++ b/Content.Server/Gravity/GravityGeneratorSystem.cs @@ -1,5 +1,6 @@ using Content.Server.Administration.Logs; using Content.Server.Audio; +using Content.Server.Construction; using Content.Server.Power.Components; using Content.Shared.Database; using Content.Shared.Gravity; @@ -26,6 +27,7 @@ public override void Initialize() SubscribeLocalEvent(OnComponentShutdown); SubscribeLocalEvent(OnParentChanged); // Or just anchor changed? SubscribeLocalEvent(OnInteractHand); + SubscribeLocalEvent(OnRefreshParts); SubscribeLocalEvent( OnSwitchGenerator); } @@ -254,6 +256,12 @@ public void UpdateState(Entity ent, AppearanceComponent? appearance) { _ambientSoundSystem.SetAmbience(ent, false); diff --git a/Content.Server/Kitchen/Components/MicrowaveComponent.cs b/Content.Server/Kitchen/Components/MicrowaveComponent.cs index 142a98236a7ac7..1fb5d8d2fd6cb3 100644 --- a/Content.Server/Kitchen/Components/MicrowaveComponent.cs +++ b/Content.Server/Kitchen/Components/MicrowaveComponent.cs @@ -13,10 +13,12 @@ public sealed partial class MicrowaveComponent : Component { [DataField("cookTimeMultiplier"), ViewVariables(VVAccess.ReadWrite)] public float CookTimeMultiplier = 1; - + [DataField("machinePartCookTimeMultiplier", customTypeSerializer: typeof(PrototypeIdSerializer))] + public string MachinePartCookTimeMultiplier = "Capacitor"; + [DataField("cookTimeScalingConstant")] + public float CookTimeScalingConstant = 0.5f; [DataField("baseHeatMultiplier"), ViewVariables(VVAccess.ReadWrite)] public float BaseHeatMultiplier = 100; - [DataField("objectHeatMultiplier"), ViewVariables(VVAccess.ReadWrite)] public float ObjectHeatMultiplier = 100; @@ -26,13 +28,10 @@ public sealed partial class MicrowaveComponent : Component #region audio [DataField("beginCookingSound")] public SoundSpecifier StartCookingSound = new SoundPathSpecifier("/Audio/Machines/microwave_start_beep.ogg"); - [DataField("foodDoneSound")] public SoundSpecifier FoodDoneSound = new SoundPathSpecifier("/Audio/Machines/microwave_done_beep.ogg"); - [DataField("clickSound")] public SoundSpecifier ClickSound = new SoundPathSpecifier("/Audio/Machines/machine_switch.ogg"); - [DataField("ItemBreakSound")] public SoundSpecifier ItemBreakSound = new SoundPathSpecifier("/Audio/Effects/clang.ogg"); @@ -78,23 +77,6 @@ public sealed partial class MicrowaveComponent : Component [DataField, ViewVariables(VVAccess.ReadWrite)] public ProtoId MaxItemSize = "Normal"; - - /// - /// How frequently the microwave can malfunction. - /// - [DataField] - public float MalfunctionInterval = 1.0f; - - /// - /// Chance of an explosion occurring when we microwave a metallic object - /// - [DataField, ViewVariables(VVAccess.ReadWrite)] - public float ExplosionChance = .1f; - - /// - /// Chance of lightning occurring when we microwave a metallic object - [DataField, ViewVariables(VVAccess.ReadWrite)] - public float LightningChance = .75f; } public sealed class BeingMicrowavedEvent : HandledEntityEventArgs diff --git a/Content.Server/Kitchen/Components/ReagentGrinderComponent.cs b/Content.Server/Kitchen/Components/ReagentGrinderComponent.cs index 27834aa5735cd4..2a028a85805b7d 100644 --- a/Content.Server/Kitchen/Components/ReagentGrinderComponent.cs +++ b/Content.Server/Kitchen/Components/ReagentGrinderComponent.cs @@ -1,6 +1,8 @@ using Content.Shared.Kitchen; using Content.Server.Kitchen.EntitySystems; +using Content.Shared.Construction.Prototypes; using Robust.Shared.Audio; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; namespace Content.Server.Kitchen.Components { @@ -13,15 +15,30 @@ namespace Content.Server.Kitchen.Components [Access(typeof(ReagentGrinderSystem)), RegisterComponent] public sealed partial class ReagentGrinderComponent : Component { - [DataField, ViewVariables(VVAccess.ReadWrite)] + [ViewVariables(VVAccess.ReadWrite)] public int StorageMaxEntities = 6; + [DataField("baseStorageMaxEntities"), ViewVariables(VVAccess.ReadWrite)] + public int BaseStorageMaxEntities = 4; + + [DataField("machinePartStorageMax", customTypeSerializer: typeof(PrototypeIdSerializer))] + public string MachinePartStorageMax = "MatterBin"; + + [DataField("storagePerPartRating")] + public int StoragePerPartRating = 4; + [DataField("workTime"), ViewVariables(VVAccess.ReadWrite)] public TimeSpan WorkTime = TimeSpan.FromSeconds(3.5); // Roughly matches the grind/juice sounds. - [DataField, ViewVariables(VVAccess.ReadWrite)] + [ViewVariables(VVAccess.ReadWrite)] public float WorkTimeMultiplier = 1; + [DataField("machinePartWorkTime", customTypeSerializer: typeof(PrototypeIdSerializer))] + public string MachinePartWorkTime = "Manipulator"; + + [DataField("partRatingWorkTimeMultiplier")] + public float PartRatingWorkTimerMulitplier = 0.6f; + [DataField("clickSound"), ViewVariables(VVAccess.ReadWrite)] public SoundSpecifier ClickSound { get; set; } = new SoundPathSpecifier("/Audio/Machines/machine_switch.ogg"); diff --git a/Content.Server/Kitchen/EntitySystems/MicrowaveSystem.cs b/Content.Server/Kitchen/EntitySystems/MicrowaveSystem.cs index b8ea32c2a6fe51..1411f8501306ca 100644 --- a/Content.Server/Kitchen/EntitySystems/MicrowaveSystem.cs +++ b/Content.Server/Kitchen/EntitySystems/MicrowaveSystem.cs @@ -1,7 +1,6 @@ using Content.Server.Body.Systems; using Content.Server.Chemistry.Containers.EntitySystems; using Content.Server.Construction; -using Content.Server.Explosion.EntitySystems; using Content.Server.DeviceLinking.Events; using Content.Server.DeviceLinking.Systems; using Content.Server.Hands.Systems; @@ -19,39 +18,34 @@ using Content.Shared.FixedPoint; using Content.Shared.Interaction; using Content.Shared.Interaction.Events; -using Robust.Shared.Random; -using Robust.Shared.Audio; -using Content.Server.Lightning; using Content.Shared.Item; using Content.Shared.Kitchen; using Content.Shared.Kitchen.Components; using Content.Shared.Popups; using Content.Shared.Power; using Content.Shared.Tag; +using Robust.Server.Containers; using Robust.Server.GameObjects; +using Robust.Shared.Audio; using Robust.Shared.Audio.Systems; using Robust.Shared.Containers; using Robust.Shared.Player; using System.Linq; -using Robust.Shared.Prototypes; -using Robust.Shared.Timing; +using Content.Shared.Access.Components; namespace Content.Server.Kitchen.EntitySystems { public sealed class MicrowaveSystem : EntitySystem { [Dependency] private readonly BodySystem _bodySystem = default!; + [Dependency] private readonly ContainerSystem _container = default!; [Dependency] private readonly DeviceLinkSystem _deviceLink = default!; [Dependency] private readonly SharedPopupSystem _popupSystem = default!; [Dependency] private readonly PowerReceiverSystem _power = default!; [Dependency] private readonly RecipeManager _recipeManager = default!; [Dependency] private readonly SharedAppearanceSystem _appearance = default!; [Dependency] private readonly SharedAudioSystem _audio = default!; - [Dependency] private readonly LightningSystem _lightning = default!; - [Dependency] private readonly IRobustRandom _random = default!; - [Dependency] private readonly IGameTiming _gameTiming = default!; - [Dependency] private readonly ExplosionSystem _explosion = default!; - [Dependency] private readonly SharedContainerSystem _container = default!; + [Dependency] private readonly SharedContainerSystem _sharedContainer = default!; [Dependency] private readonly SolutionContainerSystem _solutionContainer = default!; [Dependency] private readonly TagSystem _tag = default!; [Dependency] private readonly TemperatureSystem _temperature = default!; @@ -59,9 +53,6 @@ public sealed class MicrowaveSystem : EntitySystem [Dependency] private readonly HandsSystem _handsSystem = default!; [Dependency] private readonly SharedItemSystem _item = default!; - [ValidatePrototypeId] - private const string MalfunctionSpark = "Spark"; - public override void Initialize() { base.Initialize(); @@ -76,6 +67,8 @@ public override void Initialize() SubscribeLocalEvent(OnPowerChanged); SubscribeLocalEvent(OnAnchorChanged); SubscribeLocalEvent(OnSuicide); + SubscribeLocalEvent(OnRefreshParts); + SubscribeLocalEvent(OnUpgradeExamine); SubscribeLocalEvent(OnSignalReceived); @@ -86,7 +79,6 @@ public override void Initialize() SubscribeLocalEvent(OnCookStart); SubscribeLocalEvent(OnCookStop); - SubscribeLocalEvent(OnEntityUnpaused); SubscribeLocalEvent(OnActiveMicrowaveInsert); SubscribeLocalEvent(OnActiveMicrowaveRemove); @@ -107,14 +99,9 @@ private void OnCookStop(Entity ent, ref ComponentShutd { if (!TryComp(ent, out var microwaveComponent)) return; - SetAppearance(ent.Owner, MicrowaveVisualState.Idle, microwaveComponent); - microwaveComponent.PlayingStream = _audio.Stop(microwaveComponent.PlayingStream); - } - private void OnEntityUnpaused(Entity ent, ref EntityUnpausedEvent args) - { - ent.Comp.MalfunctionTime += args.PausedTime; + microwaveComponent.PlayingStream = _audio.Stop(microwaveComponent.PlayingStream); } private void OnActiveMicrowaveInsert(Entity ent, ref EntInsertedIntoContainerMessage args) @@ -213,7 +200,7 @@ private void SubtractContents(MicrowaveComponent component, FoodRecipePrototype if (metaData.EntityPrototype.ID == recipeSolid.Key) { - _container.Remove(item, component.Storage); + _sharedContainer.Remove(item, component.Storage); EntityManager.DeleteEntity(item); break; } @@ -327,8 +314,8 @@ private void OnBreak(Entity ent, ref BreakageEventArgs args) { ent.Comp.Broken = true; SetAppearance(ent, MicrowaveVisualState.Broken, ent.Comp); - StopCooking(ent); - _container.EmptyContainer(ent.Comp.Storage); + RemComp(ent); + _sharedContainer.EmptyContainer(ent.Comp.Storage); UpdateUserInterfaceState(ent, ent.Comp); } @@ -337,15 +324,26 @@ private void OnPowerChanged(Entity ent, ref PowerChangedEven if (!args.Powered) { SetAppearance(ent, MicrowaveVisualState.Idle, ent.Comp); - StopCooking(ent); + RemComp(ent); } UpdateUserInterfaceState(ent, ent.Comp); } private void OnAnchorChanged(EntityUid uid, MicrowaveComponent component, ref AnchorStateChangedEvent args) { - if (!args.Anchored) - _container.EmptyContainer(component.Storage); + if(!args.Anchored) + _sharedContainer.EmptyContainer(component.Storage); + } + + private void OnRefreshParts(Entity ent, ref RefreshPartsEvent args) + { + var cookRating = args.PartRatings[ent.Comp.MachinePartCookTimeMultiplier]; + ent.Comp.CookTimeMultiplier = MathF.Pow(ent.Comp.CookTimeScalingConstant, cookRating - 1); + } + + private void OnUpgradeExamine(Entity ent, ref UpgradeExamineEvent args) + { + args.AddPercentageUpgrade("microwave-component-upgrade-cook-time", ent.Comp.CookTimeMultiplier); } private void OnSignalReceived(Entity ent, ref SignalReceivedEvent args) @@ -386,31 +384,6 @@ public static bool HasContents(MicrowaveComponent component) return component.Storage.ContainedEntities.Any(); } - /// - /// Handles the attempted cooking of unsafe objects - /// - /// - /// Returns false if the microwave didn't explode, true if it exploded. - /// - private void RollMalfunction(Entity ent) - { - if (ent.Comp1.MalfunctionTime == TimeSpan.Zero) - return; - - if (ent.Comp1.MalfunctionTime > _gameTiming.CurTime) - return; - - ent.Comp1.MalfunctionTime = _gameTiming.CurTime + TimeSpan.FromSeconds(ent.Comp2.MalfunctionInterval); - if (_random.Prob(ent.Comp2.ExplosionChance)) - { - _explosion.TriggerExplosive(ent); - return; // microwave is fucked, stop the cooking. - } - - if (_random.Prob(ent.Comp2.LightningChance)) - _lightning.ShootRandomLightnings(ent, 1.0f, 2, MalfunctionSpark, triggerLightningEvents: false); - } - /// /// Starts Cooking /// @@ -425,9 +398,9 @@ public void Wzhzhzh(EntityUid uid, MicrowaveComponent component, EntityUid? user var solidsDict = new Dictionary(); var reagentDict = new Dictionary(); - var malfunctioning = false; // TODO use lists of Reagent quantities instead of reagent prototype ids. - foreach (var item in component.Storage.ContainedEntities.ToArray()) + + foreach (var item in component.Storage.ContainedEntities) { // special behavior when being microwaved ;) var ev = new BeingMicrowavedEvent(uid, user); @@ -439,17 +412,20 @@ public void Wzhzhzh(EntityUid uid, MicrowaveComponent component, EntityUid? user return; } - if (_tag.HasTag(item, "Metal")) + // destroy microwave + if (_tag.HasTag(item, "MicrowaveMachineUnsafe") || _tag.HasTag(item, "Metal")) { - malfunctioning = true; + component.Broken = true; + SetAppearance(uid, MicrowaveVisualState.Broken, component); + _audio.PlayPvs(component.ItemBreakSound, uid); + return; } - if (_tag.HasTag(item, "Plastic")) + if (_tag.HasTag(item, "MicrowaveSelfUnsafe") || _tag.HasTag(item, "Plastic")) { var junk = Spawn(component.BadRecipeEntityId, Transform(uid).Coordinates); _container.Insert(junk, component.Storage); - Del(item); - continue; + QueueDel(item); } AddComp(item); @@ -492,20 +468,9 @@ public void Wzhzhzh(EntityUid uid, MicrowaveComponent component, EntityUid? user activeComp.CookTimeRemaining = component.CurrentCookTimerTime * component.CookTimeMultiplier; activeComp.TotalTime = component.CurrentCookTimerTime; //this doesn't scale so that we can have the "actual" time activeComp.PortionedRecipe = portionedRecipe; - if (malfunctioning) - activeComp.MalfunctionTime = _gameTiming.CurTime + TimeSpan.FromSeconds(component.MalfunctionInterval); UpdateUserInterfaceState(uid, component); } - private void StopCooking(Entity ent) - { - RemCompDeferred(ent); - foreach (var solid in ent.Comp.Storage.ContainedEntities) - { - RemCompDeferred(solid); - } - } - public static (FoodRecipePrototype, int) CanSatisfyRecipe(MicrowaveComponent component, FoodRecipePrototype recipe, Dictionary solids, Dictionary reagents) { var portions = 0; @@ -554,12 +519,8 @@ public override void Update(float frameTime) var query = EntityQueryEnumerator(); while (query.MoveNext(out var uid, out var active, out var microwave)) { - - active.CookTimeRemaining -= frameTime; - - RollMalfunction((uid, active,microwave)); - //check if there's still cook time left + active.CookTimeRemaining -= frameTime; if (active.CookTimeRemaining > 0) { AddTemperature(microwave, frameTime); @@ -569,6 +530,9 @@ public override void Update(float frameTime) //this means the microwave has finished cooking. AddTemperature(microwave, Math.Max(frameTime + active.CookTimeRemaining, 0)); //Though there's still a little bit more heat to pump out + foreach (var solid in microwave.Storage.ContainedEntities) + EntityManager.RemoveComponentDeferred(solid); + if (active.PortionedRecipe.Item1 != null) { var coords = Transform(uid).Coordinates; @@ -579,10 +543,10 @@ public override void Update(float frameTime) } } - _container.EmptyContainer(microwave.Storage); + _sharedContainer.EmptyContainer(microwave.Storage); UpdateUserInterfaceState(uid, microwave); - _audio.PlayPvs(microwave.FoodDoneSound, uid); - StopCooking((uid, microwave)); + EntityManager.RemoveComponentDeferred(uid); + _audio.PlayPvs(microwave.FoodDoneSound, uid, AudioParams.Default.WithVolume(-1)); } } @@ -592,7 +556,7 @@ private void OnEjectMessage(Entity ent, ref MicrowaveEjectMe if (!HasContents(ent.Comp) || HasComp(ent)) return; - _container.EmptyContainer(ent.Comp.Storage); + _sharedContainer.EmptyContainer(ent.Comp.Storage); _audio.PlayPvs(ent.Comp.ClickSound, ent, AudioParams.Default.WithVolume(-2)); UpdateUserInterfaceState(ent, ent.Comp); } @@ -602,7 +566,7 @@ private void OnEjectIndex(Entity ent, ref MicrowaveEjectSoli if (!HasContents(ent.Comp) || HasComp(ent)) return; - _container.Remove(EntityManager.GetEntity(args.EntityID), ent.Comp.Storage); + _sharedContainer.Remove(EntityManager.GetEntity(args.EntityID), ent.Comp.Storage); UpdateUserInterfaceState(ent, ent.Comp); } diff --git a/Content.Server/Kitchen/EntitySystems/ReagentGrinderSystem.cs b/Content.Server/Kitchen/EntitySystems/ReagentGrinderSystem.cs index 07f8849b4a973d..e309c3bd374926 100644 --- a/Content.Server/Kitchen/EntitySystems/ReagentGrinderSystem.cs +++ b/Content.Server/Kitchen/EntitySystems/ReagentGrinderSystem.cs @@ -1,4 +1,5 @@ using Content.Server.Chemistry.Containers.EntitySystems; +using Content.Server.Construction; using Content.Server.Kitchen.Components; using Content.Server.Power.Components; using Content.Server.Power.EntitySystems; @@ -48,6 +49,8 @@ public override void Initialize() SubscribeLocalEvent((uid, _, _) => UpdateUiState(uid)); SubscribeLocalEvent((EntityUid uid, ReagentGrinderComponent _, ref PowerChangedEvent _) => UpdateUiState(uid)); SubscribeLocalEvent(OnInteractUsing); + SubscribeLocalEvent(OnRefreshParts); + SubscribeLocalEvent(OnUpgradeExamine); SubscribeLocalEvent(OnContainerModified); SubscribeLocalEvent(OnContainerModified); @@ -183,6 +186,24 @@ private void OnInteractUsing(Entity entity, ref Interac args.Handled = true; } + /// + /// Gotta be efficient, you know? you're saving a whole extra second here and everything. + /// + private void OnRefreshParts(Entity entity, ref RefreshPartsEvent args) + { + var ratingWorkTime = args.PartRatings[entity.Comp.MachinePartWorkTime]; + var ratingStorage = args.PartRatings[entity.Comp.MachinePartStorageMax]; + + entity.Comp.WorkTimeMultiplier = MathF.Pow(entity.Comp.PartRatingWorkTimerMulitplier, ratingWorkTime - 1); + entity.Comp.StorageMaxEntities = entity.Comp.BaseStorageMaxEntities + (int) (entity.Comp.StoragePerPartRating * (ratingStorage - 1)); + } + + private void OnUpgradeExamine(Entity entity, ref UpgradeExamineEvent args) + { + args.AddPercentageUpgrade("reagent-grinder-component-upgrade-work-time", entity.Comp.WorkTimeMultiplier); + args.AddNumberUpgrade("reagent-grinder-component-upgrade-storage", entity.Comp.StorageMaxEntities - entity.Comp.BaseStorageMaxEntities); + } + private void UpdateUiState(EntityUid uid) { var inputContainer = _containerSystem.EnsureContainer(uid, SharedReagentGrinder.InputContainerId); diff --git a/Content.Server/Materials/MaterialReclaimerSystem.cs b/Content.Server/Materials/MaterialReclaimerSystem.cs index c976543f7ca9b3..ff05a72ef09e4a 100644 --- a/Content.Server/Materials/MaterialReclaimerSystem.cs +++ b/Content.Server/Materials/MaterialReclaimerSystem.cs @@ -1,5 +1,6 @@ using Content.Server.Chemistry.Containers.EntitySystems; using Content.Server.Chemistry.EntitySystems; +using Content.Server.Construction; using Content.Server.Fluids.EntitySystems; using Content.Server.GameTicking; using Content.Server.Nutrition.EntitySystems; @@ -42,6 +43,8 @@ public override void Initialize() base.Initialize(); SubscribeLocalEvent(OnStartup); + SubscribeLocalEvent(OnRefreshParts); + SubscribeLocalEvent(OnUpgradeExamine); SubscribeLocalEvent(OnPowerChanged); SubscribeLocalEvent(OnInteractUsing, before: new []{typeof(WiresSystem), typeof(SolutionTransferSystem)}); @@ -53,6 +56,18 @@ private void OnStartup(Entity entity, ref ComponentS _solutionContainer.EnsureSolution(entity.Owner, entity.Comp.SolutionContainerId); } + private void OnUpgradeExamine(Entity entity, ref UpgradeExamineEvent args) + { + args.AddPercentageUpgrade(Loc.GetString("material-reclaimer-upgrade-process-rate"), entity.Comp.MaterialProcessRate / entity.Comp.BaseMaterialProcessRate); + } + + private void OnRefreshParts(Entity entity, ref RefreshPartsEvent args) + { + var rating = args.PartRatings[entity.Comp.MachinePartProcessRate] - 1; + entity.Comp.MaterialProcessRate = entity.Comp.BaseMaterialProcessRate * MathF.Pow(entity.Comp.PartRatingProcessRateMultiplier, rating); + Dirty(entity); + } + private void OnPowerChanged(Entity entity, ref PowerChangedEvent args) { AmbientSound.SetAmbience(entity.Owner, entity.Comp.Enabled && args.Powered); diff --git a/Content.Server/Medical/BiomassReclaimer/BiomassReclaimerComponent.cs b/Content.Server/Medical/BiomassReclaimer/BiomassReclaimerComponent.cs index 25378bb3ede272..744f579af049af 100644 --- a/Content.Server/Medical/BiomassReclaimer/BiomassReclaimerComponent.cs +++ b/Content.Server/Medical/BiomassReclaimer/BiomassReclaimerComponent.cs @@ -1,4 +1,8 @@ +using System.Threading; +using Content.Shared.Construction.Prototypes; using Content.Shared.Storage; +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; namespace Content.Server.Medical.BiomassReclaimer { @@ -46,14 +50,53 @@ public sealed partial class BiomassReclaimerComponent : Component /// /// How many units of biomass it produces for each unit of mass. /// - [DataField, ViewVariables(VVAccess.ReadWrite)] - public float YieldPerUnitMass = 0.4f; + [ViewVariables(VVAccess.ReadWrite)] + public float YieldPerUnitMass = default; + + /// + /// The base yield per mass unit when no components are upgraded. + /// + [DataField("baseYieldPerUnitMass")] + public float BaseYieldPerUnitMass = 0.4f; + + /// + /// Machine part whose rating modifies the yield per mass. + /// + [DataField("machinePartYieldAmount", customTypeSerializer: typeof(PrototypeIdSerializer))] + public string MachinePartYieldAmount = "MatterBin"; + + /// + /// How much the machine part quality affects the yield. + /// Going up a tier will multiply the yield by this amount. + /// + [DataField("partRatingYieldAmountMultiplier")] + public float PartRatingYieldAmountMultiplier = 1.25f; /// /// The time it takes to process a mob, per mass. /// - [DataField, ViewVariables(VVAccess.ReadWrite)] - public float ProcessingTimePerUnitMass = 0.5f; + [ViewVariables(VVAccess.ReadWrite)] + public float ProcessingTimePerUnitMass = default; + + /// + /// The base time per mass unit that it takes to process a mob + /// when no components are upgraded. + /// + [DataField("baseProcessingTimePerUnitMass")] + public float BaseProcessingTimePerUnitMass = 0.5f; + + /// + /// The machine part that increses the processing speed. + /// + [DataField("machinePartProcessSpeed", customTypeSerializer: typeof(PrototypeIdSerializer))] + public string MachinePartProcessingSpeed = "Manipulator"; + + /// + /// How much the machine part quality affects the yield. + /// Going up a tier will multiply the speed by this amount. + /// + [DataField("partRatingSpeedMultiplier")] + public float PartRatingSpeedMultiplier = 1.35f; /// /// Will this refuse to gib a living mob? diff --git a/Content.Server/Medical/BiomassReclaimer/BiomassReclaimerSystem.cs b/Content.Server/Medical/BiomassReclaimer/BiomassReclaimerSystem.cs index b126c74a10aa1b..20ac9420aab602 100644 --- a/Content.Server/Medical/BiomassReclaimer/BiomassReclaimerSystem.cs +++ b/Content.Server/Medical/BiomassReclaimer/BiomassReclaimerSystem.cs @@ -1,5 +1,6 @@ using System.Numerics; using Content.Server.Body.Components; +using Content.Server.Construction; using Content.Server.Fluids.EntitySystems; using Content.Server.Materials; using Content.Server.Power.Components; @@ -23,6 +24,7 @@ using Content.Shared.Popups; using Content.Shared.Throwing; using Robust.Server.Player; +using Robust.Shared.Audio; using Robust.Shared.Audio.Systems; using Robust.Shared.Configuration; using Robust.Shared.Physics.Components; @@ -94,6 +96,8 @@ public override void Initialize() SubscribeLocalEvent(OnUnanchorAttempt); SubscribeLocalEvent(OnAfterInteractUsing); SubscribeLocalEvent(OnClimbedOn); + SubscribeLocalEvent(OnRefreshParts); + SubscribeLocalEvent(OnUpgradeExamine); SubscribeLocalEvent(OnPowerChanged); SubscribeLocalEvent(OnSuicide); SubscribeLocalEvent(OnDoAfter); @@ -172,6 +176,26 @@ private void OnClimbedOn(Entity reclaimer, ref Climbe StartProcessing(args.Climber, reclaimer); } + private void OnRefreshParts(EntityUid uid, BiomassReclaimerComponent component, RefreshPartsEvent args) + { + var laserRating = args.PartRatings[component.MachinePartProcessingSpeed]; + var manipRating = args.PartRatings[component.MachinePartYieldAmount]; + + // Processing time slopes downwards with part rating. + component.ProcessingTimePerUnitMass = + component.BaseProcessingTimePerUnitMass / MathF.Pow(component.PartRatingSpeedMultiplier, laserRating - 1); + + // Yield slopes upwards with part rating. + component.YieldPerUnitMass = + component.BaseYieldPerUnitMass * MathF.Pow(component.PartRatingYieldAmountMultiplier, manipRating - 1); + } + + private void OnUpgradeExamine(EntityUid uid, BiomassReclaimerComponent component, UpgradeExamineEvent args) + { + args.AddPercentageUpgrade("biomass-reclaimer-component-upgrade-speed", component.BaseProcessingTimePerUnitMass / component.ProcessingTimePerUnitMass); + args.AddPercentageUpgrade("biomass-reclaimer-component-upgrade-biomass-yield", component.YieldPerUnitMass / component.BaseYieldPerUnitMass); + } + private void OnDoAfter(Entity reclaimer, ref ReclaimerDoAfterEvent args) { if (args.Handled || args.Cancelled || args.Args.Target == null || HasComp(args.Args.Target.Value)) diff --git a/Content.Server/Medical/Components/MedicalScannerComponent.cs b/Content.Server/Medical/Components/MedicalScannerComponent.cs index aef56d6c0b7ff9..fdfb19cbacd366 100644 --- a/Content.Server/Medical/Components/MedicalScannerComponent.cs +++ b/Content.Server/Medical/Components/MedicalScannerComponent.cs @@ -13,7 +13,13 @@ public sealed partial class MedicalScannerComponent : SharedMedicalScannerCompon public ContainerSlot BodyContainer = default!; public EntityUid? ConnectedConsole; - [DataField, ViewVariables(VVAccess.ReadWrite)] + [ViewVariables(VVAccess.ReadWrite)] public float CloningFailChanceMultiplier = 1f; + + [DataField("machinePartCloningFailChance", customTypeSerializer: typeof(PrototypeIdSerializer))] + public string MachinePartCloningFailChance = "Capacitor"; + + [DataField("partRatingCloningFailChanceMultiplier")] + public float PartRatingFailMultiplier = 0.75f; } } diff --git a/Content.Server/Medical/MedicalScannerSystem.cs b/Content.Server/Medical/MedicalScannerSystem.cs index 91184ddc162827..54de0bc3b5cec7 100644 --- a/Content.Server/Medical/MedicalScannerSystem.cs +++ b/Content.Server/Medical/MedicalScannerSystem.cs @@ -7,6 +7,7 @@ using Content.Shared.Verbs; using Robust.Shared.Containers; using Content.Server.Cloning.Components; +using Content.Server.Construction; using Content.Server.DeviceLinking.Systems; using Content.Shared.DeviceLinking.Events; using Content.Server.Power.EntitySystems; @@ -44,6 +45,8 @@ public override void Initialize() SubscribeLocalEvent(OnDragDropOn); SubscribeLocalEvent(OnPortDisconnected); SubscribeLocalEvent(OnAnchorChanged); + SubscribeLocalEvent(OnRefreshParts); + SubscribeLocalEvent(OnUpgradeExamine); SubscribeLocalEvent(OnCanDragDropOn); } @@ -246,5 +249,17 @@ public void EjectBody(EntityUid uid, MedicalScannerComponent? scannerComponent) _climbSystem.ForciblySetClimbing(contained, uid); UpdateAppearance(uid, scannerComponent); } + + private void OnRefreshParts(EntityUid uid, MedicalScannerComponent component, RefreshPartsEvent args) + { + var ratingFail = args.PartRatings[component.MachinePartCloningFailChance]; + + component.CloningFailChanceMultiplier = MathF.Pow(component.PartRatingFailMultiplier, ratingFail - 1); + } + + private void OnUpgradeExamine(EntityUid uid, MedicalScannerComponent component, UpgradeExamineEvent args) + { + args.AddPercentageUpgrade("medical-scanner-upgrade-cloning", component.CloningFailChanceMultiplier); + } } } diff --git a/Content.Server/Nutrition/Components/FatExtractorComponent.cs b/Content.Server/Nutrition/Components/FatExtractorComponent.cs index bf81a173e4f907..7bd9b85c791394 100644 --- a/Content.Server/Nutrition/Components/FatExtractorComponent.cs +++ b/Content.Server/Nutrition/Components/FatExtractorComponent.cs @@ -1,4 +1,5 @@ using Content.Server.Nutrition.EntitySystems; +using Content.Shared.Construction.Prototypes; using Content.Shared.Nutrition.Components; using Robust.Shared.Audio; using Robust.Shared.Prototypes; @@ -25,6 +26,26 @@ public sealed partial class FatExtractorComponent : Component [DataField("nutritionPerSecond"), ViewVariables(VVAccess.ReadWrite)] public int NutritionPerSecond = 10; + /// + /// The base rate of extraction + /// + [DataField("baseNutritionPerSecond"), ViewVariables(VVAccess.ReadWrite)] + public int BaseNutritionPerSecond = 10; + + #region Machine Upgrade + /// + /// Which machine part affects the nutrition rate + /// + [DataField("machinePartNutritionRate", customTypeSerializer: typeof(PrototypeIdSerializer))] + public string MachinePartNutritionRate = "Manipulator"; + + /// + /// The increase in rate per each rating above 1. + /// + [DataField("partRatingRateMultiplier")] + public float PartRatingRateMultiplier = 10; + #endregion + /// /// An accumulator which tracks extracted nutrition to determine /// when to spawn a meat. @@ -36,7 +57,7 @@ public sealed partial class FatExtractorComponent : Component /// How high has to be to spawn meat /// [DataField("nutrientPerMeat"), ViewVariables(VVAccess.ReadWrite)] - public int NutrientPerMeat = 30; + public int NutrientPerMeat = 60; /// /// Meat spawned by the extractor. diff --git a/Content.Server/Nutrition/EntitySystems/FatExtractorSystem.cs b/Content.Server/Nutrition/EntitySystems/FatExtractorSystem.cs index 4bd8c94ac814b2..63ca590f5d60f0 100644 --- a/Content.Server/Nutrition/EntitySystems/FatExtractorSystem.cs +++ b/Content.Server/Nutrition/EntitySystems/FatExtractorSystem.cs @@ -1,5 +1,6 @@ using System.Diagnostics.CodeAnalysis; using System.Linq; +using Content.Server.Construction; using Content.Server.Nutrition.Components; using Content.Server.Power.Components; using Content.Server.Power.EntitySystems; @@ -9,6 +10,7 @@ using Content.Shared.Nutrition.Components; using Content.Shared.Nutrition.EntitySystems; using Content.Shared.Storage.Components; +using Robust.Shared.Audio; using Robust.Shared.Audio.Systems; using Robust.Shared.Timing; @@ -27,6 +29,8 @@ public sealed class FatExtractorSystem : EntitySystem /// public override void Initialize() { + SubscribeLocalEvent(OnRefreshParts); + SubscribeLocalEvent(OnUpgradeExamine); SubscribeLocalEvent(OnUnpaused); SubscribeLocalEvent(OnGotEmagged); SubscribeLocalEvent(OnClosed); @@ -34,6 +38,17 @@ public override void Initialize() SubscribeLocalEvent(OnPowerChanged); } + private void OnRefreshParts(EntityUid uid, FatExtractorComponent component, RefreshPartsEvent args) + { + var rating = args.PartRatings[component.MachinePartNutritionRate] - 1; + component.NutritionPerSecond = component.BaseNutritionPerSecond + (int) (component.PartRatingRateMultiplier * rating); + } + + private void OnUpgradeExamine(EntityUid uid, FatExtractorComponent component, UpgradeExamineEvent args) + { + args.AddPercentageUpgrade("fat-extractor-component-rate", (float) component.NutritionPerSecond / component.BaseNutritionPerSecond); + } + private void OnUnpaused(EntityUid uid, FatExtractorComponent component, ref EntityUnpausedEvent args) { component.NextUpdate += args.PausedTime; diff --git a/Content.Server/Power/Components/UpgradeBatteryComponent.cs b/Content.Server/Power/Components/UpgradeBatteryComponent.cs new file mode 100644 index 00000000000000..ff91cfa7559c91 --- /dev/null +++ b/Content.Server/Power/Components/UpgradeBatteryComponent.cs @@ -0,0 +1,28 @@ +using Content.Shared.Construction.Prototypes; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; + +namespace Content.Server.Power.Components +{ + + [RegisterComponent] + public sealed partial class UpgradeBatteryComponent : Component + { + /// + /// The machine part that affects the power capacity. + /// + [DataField("machinePartPowerCapacity", customTypeSerializer: typeof(PrototypeIdSerializer))] + public string MachinePartPowerCapacity = "PowerCell"; + + /// + /// The machine part rating is raised to this power when calculating power gain + /// + [DataField("maxChargeMultiplier")] + public float MaxChargeMultiplier = 2f; + + /// + /// Power gain scaling + /// + [DataField("baseMaxCharge")] + public float BaseMaxCharge = 8000000; + } +} diff --git a/Content.Server/Power/Components/UpgradePowerDrawComponent.cs b/Content.Server/Power/Components/UpgradePowerDrawComponent.cs new file mode 100644 index 00000000000000..02a6c57b9bf346 --- /dev/null +++ b/Content.Server/Power/Components/UpgradePowerDrawComponent.cs @@ -0,0 +1,41 @@ +using Content.Server.Construction.Components; +using Content.Shared.Construction.Prototypes; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; + +namespace Content.Server.Power.Components; + +/// +/// This is used for machines whose power draw +/// can be decreased through machine part upgrades. +/// +[RegisterComponent] +public sealed partial class UpgradePowerDrawComponent : Component +{ + /// + /// The base power draw of the machine. + /// Prioritizes hv/mv draw over lv draw. + /// Value is initializezd on map init from + /// + [ViewVariables(VVAccess.ReadWrite)] + public float BaseLoad; + + /// + /// The machine part that affects the power draw. + /// + [DataField("machinePartPowerDraw", customTypeSerializer: typeof(PrototypeIdSerializer)), ViewVariables(VVAccess.ReadWrite)] + public string MachinePartPowerDraw = "Capacitor"; + + /// + /// The multiplier used for scaling the power draw. + /// + [DataField("powerDrawMultiplier", required: true), ViewVariables(VVAccess.ReadWrite)] + public float PowerDrawMultiplier = 1f; + + /// + /// What type of scaling is being used? + /// + [DataField("scaling", required: true), ViewVariables(VVAccess.ReadWrite)] + public MachineUpgradeScalingType Scaling; +} + + diff --git a/Content.Server/Power/Components/UpgradePowerSupplierComponent.cs b/Content.Server/Power/Components/UpgradePowerSupplierComponent.cs new file mode 100644 index 00000000000000..35b43867d2f6f5 --- /dev/null +++ b/Content.Server/Power/Components/UpgradePowerSupplierComponent.cs @@ -0,0 +1,36 @@ +using Content.Server.Construction.Components; +using Content.Shared.Construction.Prototypes; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; + +namespace Content.Server.Power.Components; + +[RegisterComponent] +public sealed partial class UpgradePowerSupplierComponent : Component +{ + [ViewVariables(VVAccess.ReadWrite)] + public float BaseSupplyRate; + + /// + /// The machine part that affects the power supplu. + /// + [DataField("machinePartPowerSupply", customTypeSerializer: typeof(PrototypeIdSerializer)), ViewVariables(VVAccess.ReadWrite)] + public string MachinePartPowerSupply = "Capacitor"; + + /// + /// The multiplier used for scaling the power supply. + /// + [DataField("powerSupplyMultiplier", required: true), ViewVariables(VVAccess.ReadWrite)] + public float PowerSupplyMultiplier = 1f; + + /// + /// What type of scaling is being used? + /// + [DataField("scaling", required: true), ViewVariables(VVAccess.ReadWrite)] + public MachineUpgradeScalingType Scaling; + + /// + /// The current value that the power supply is being scaled by, + /// + [DataField("actualScalar"), ViewVariables(VVAccess.ReadWrite)] + public float ActualScalar = 1f; +} diff --git a/Content.Server/Power/Components/UpgradePowerSupplyRampingComponent.cs b/Content.Server/Power/Components/UpgradePowerSupplyRampingComponent.cs new file mode 100644 index 00000000000000..7bd29f2de713be --- /dev/null +++ b/Content.Server/Power/Components/UpgradePowerSupplyRampingComponent.cs @@ -0,0 +1,38 @@ +using Content.Server.Construction.Components; +using Content.Shared.Construction.Prototypes; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; + +namespace Content.Server.Power.Components +{ + + [RegisterComponent] + public sealed partial class UpgradePowerSupplyRampingComponent : Component + { + [ViewVariables(VVAccess.ReadWrite)] + public float BaseRampRate; + + /// + /// The machine part that affects the power supply ramping + /// + [DataField("machinePartPowerCapacity", customTypeSerializer: typeof(PrototypeIdSerializer))] + public string MachinePartRampRate = "Capacitor"; + + /// + /// The multiplier used for scaling the power supply ramping + /// + [DataField("supplyRampingMultiplier")] + public float SupplyRampingMultiplier = 1f; + + /// + /// What type of scaling is being used? + /// + [DataField("scaling", required: true), ViewVariables(VVAccess.ReadWrite)] + public MachineUpgradeScalingType Scaling; + + /// + /// The current value that the power supply is being scaled by + /// + [DataField("actualScalar"), ViewVariables(VVAccess.ReadWrite)] + public float ActualScalar = 1f; + } +} diff --git a/Content.Server/Power/EntitySystems/UpgradeBatterySystem.cs b/Content.Server/Power/EntitySystems/UpgradeBatterySystem.cs new file mode 100644 index 00000000000000..734cf9d89ced62 --- /dev/null +++ b/Content.Server/Power/EntitySystems/UpgradeBatterySystem.cs @@ -0,0 +1,39 @@ +using Content.Server.Construction; +using Content.Server.Power.Components; +using JetBrains.Annotations; + +namespace Content.Server.Power.EntitySystems +{ + [UsedImplicitly] + public sealed class UpgradeBatterySystem : EntitySystem + { + [Dependency] private readonly BatterySystem _batterySystem = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnRefreshParts); + SubscribeLocalEvent(OnUpgradeExamine); + } + + public void OnRefreshParts(EntityUid uid, UpgradeBatteryComponent component, RefreshPartsEvent args) + { + var powerCellRating = args.PartRatings[component.MachinePartPowerCapacity]; + + if (TryComp(uid, out var batteryComp)) + { + _batterySystem.SetMaxCharge(uid, MathF.Pow(component.MaxChargeMultiplier, powerCellRating - 1) * component.BaseMaxCharge, batteryComp); + } + } + + private void OnUpgradeExamine(EntityUid uid, UpgradeBatteryComponent component, UpgradeExamineEvent args) + { + // UpgradeBatteryComponent.MaxChargeMultiplier is not the actual multiplier, so we have to do this. + if (TryComp(uid, out var batteryComp)) + { + args.AddPercentageUpgrade("upgrade-max-charge", batteryComp.MaxCharge / component.BaseMaxCharge); + } + } + } +} diff --git a/Content.Server/Power/EntitySystems/UpgradePowerSystem.cs b/Content.Server/Power/EntitySystems/UpgradePowerSystem.cs new file mode 100644 index 00000000000000..9cf28c386a6b66 --- /dev/null +++ b/Content.Server/Power/EntitySystems/UpgradePowerSystem.cs @@ -0,0 +1,139 @@ +using Content.Server.Construction; +using Content.Server.Construction.Components; +using Content.Server.Power.Components; + +namespace Content.Server.Power.EntitySystems; + +/// +/// This handles using upgraded machine parts +/// to modify the power supply/generation of a machine. +/// +public sealed class UpgradePowerSystem : EntitySystem +{ + /// + public override void Initialize() + { + SubscribeLocalEvent(OnMapInit); + SubscribeLocalEvent(OnRefreshParts); + SubscribeLocalEvent(OnUpgradeExamine); + + SubscribeLocalEvent(OnSupplierMapInit); + SubscribeLocalEvent(OnSupplierRefreshParts); + SubscribeLocalEvent(OnSupplierUpgradeExamine); + + SubscribeLocalEvent(OnSupplyRampingMapInit); + SubscribeLocalEvent(OnSupplyRampingRefreshParts); + SubscribeLocalEvent(OnSupplyRampingUpgradeExamine); + } + + private void OnMapInit(EntityUid uid, UpgradePowerDrawComponent component, MapInitEvent args) + { + if (TryComp(uid, out var powa)) + component.BaseLoad = powa.DrawRate; + else if (TryComp(uid, out var powa2)) + component.BaseLoad = powa2.Load; + } + + private void OnRefreshParts(EntityUid uid, UpgradePowerDrawComponent component, RefreshPartsEvent args) + { + var load = component.BaseLoad; + var rating = args.PartRatings[component.MachinePartPowerDraw]; + switch (component.Scaling) + { + case MachineUpgradeScalingType.Linear: + load += component.PowerDrawMultiplier * (rating - 1); + break; + case MachineUpgradeScalingType.Exponential: + load *= MathF.Pow(component.PowerDrawMultiplier, rating - 1); + break; + default: + Log.Error($"invalid power scaling type for {ToPrettyString(uid)}."); + load = 0; + break; + } + if (TryComp(uid, out var powa)) + powa.Load = load; + if (TryComp(uid, out var powa2)) + powa2.DrawRate = load; + } + + private void OnUpgradeExamine(EntityUid uid, UpgradePowerDrawComponent component, UpgradeExamineEvent args) + { + // UpgradePowerDrawComponent.PowerDrawMultiplier is not the actual multiplier, so we have to do this. + var powerDrawMultiplier = CompOrNull(uid)?.Load / component.BaseLoad + ?? CompOrNull(uid)?.DrawRate / component.BaseLoad; + + if (powerDrawMultiplier is not null) + args.AddPercentageUpgrade("upgrade-power-draw", powerDrawMultiplier.Value); + } + + private void OnSupplierMapInit(EntityUid uid, UpgradePowerSupplierComponent component, MapInitEvent args) + { + if (TryComp(uid, out var supplier)) + component.BaseSupplyRate = supplier.MaxSupply; + } + + private void OnSupplierRefreshParts(EntityUid uid, UpgradePowerSupplierComponent component, RefreshPartsEvent args) + { + var supply = component.BaseSupplyRate; + var rating = args.PartRatings[component.MachinePartPowerSupply]; + switch (component.Scaling) + { + case MachineUpgradeScalingType.Linear: + supply += component.PowerSupplyMultiplier * component.BaseSupplyRate * (rating - 1); + break; + case MachineUpgradeScalingType.Exponential: + supply *= MathF.Pow(component.PowerSupplyMultiplier, rating - 1); + break; + default: + Log.Error($"invalid power scaling type for {ToPrettyString(uid)}."); + supply = component.BaseSupplyRate; + break; + } + + component.ActualScalar = supply / component.BaseSupplyRate; + + if (TryComp(uid, out var powa)) + powa.MaxSupply = supply; + } + + private void OnSupplierUpgradeExamine(EntityUid uid, UpgradePowerSupplierComponent component, UpgradeExamineEvent args) + { + args.AddPercentageUpgrade("upgrade-power-supply", component.ActualScalar); + } + + private void OnSupplyRampingMapInit(EntityUid uid, UpgradePowerSupplyRampingComponent component, MapInitEvent args) + { + if (TryComp(uid, out var battery)) + component.BaseRampRate = battery.SupplyRampRate; + } + + private void OnSupplyRampingRefreshParts(EntityUid uid, UpgradePowerSupplyRampingComponent component, RefreshPartsEvent args) + { + var rampRate = component.BaseRampRate; + var rating = args.PartRatings[component.MachinePartRampRate]; + switch (component.Scaling) + { + case MachineUpgradeScalingType.Linear: + rampRate += component.SupplyRampingMultiplier * component.BaseRampRate * (rating - 1); + break; + case MachineUpgradeScalingType.Exponential: + rampRate *= MathF.Pow(component.SupplyRampingMultiplier, rating - 1); + break; + default: + Log.Error($"invalid power supply ramping type for {ToPrettyString(uid)}."); + rampRate = component.BaseRampRate; + break; + } + + component.ActualScalar = rampRate / component.BaseRampRate; + + if (TryComp(uid, out var battery)) + battery.SupplyRampRate = rampRate; + } + + private void OnSupplyRampingUpgradeExamine(EntityUid uid, UpgradePowerSupplyRampingComponent component, UpgradeExamineEvent args) + { + args.AddPercentageUpgrade("upgrade-power-supply-ramping", component.ActualScalar); + } +} diff --git a/Content.Server/Power/Generator/GeneratorSystem.cs b/Content.Server/Power/Generator/GeneratorSystem.cs index a75d1e4113def8..721a959820b324 100644 --- a/Content.Server/Power/Generator/GeneratorSystem.cs +++ b/Content.Server/Power/Generator/GeneratorSystem.cs @@ -26,8 +26,11 @@ public sealed class GeneratorSystem : SharedGeneratorSystem [Dependency] private readonly PopupSystem _popup = default!; [Dependency] private readonly PuddleSystem _puddle = default!; + private EntityQuery _upgradeQuery; + public override void Initialize() { + _upgradeQuery = GetEntityQuery(); UpdatesBefore.Add(typeof(PowerNetSystem)); @@ -225,7 +228,9 @@ public override void Update(float frameTime) supplier.Enabled = true; - supplier.MaxSupply = gen.TargetPower; + var upgradeMultiplier = _upgradeQuery.CompOrNull(uid)?.ActualScalar ?? 1f; + + supplier.MaxSupply = gen.TargetPower * upgradeMultiplier; var eff = 1 / CalcFuelEfficiency(gen.TargetPower, gen.OptimalPower, gen); var consumption = gen.OptimalBurnRate * frameTime * eff; diff --git a/Content.Server/Shuttles/Components/ThrusterComponent.cs b/Content.Server/Shuttles/Components/ThrusterComponent.cs index 3bba9b5a7f0635..d8350991154f6e 100644 --- a/Content.Server/Shuttles/Components/ThrusterComponent.cs +++ b/Content.Server/Shuttles/Components/ThrusterComponent.cs @@ -1,8 +1,10 @@ using System.Numerics; using Content.Server.Shuttles.Systems; +using Content.Shared.Construction.Prototypes; using Content.Shared.Damage; using Robust.Shared.GameStates; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; namespace Content.Server.Shuttles.Components { @@ -25,6 +27,9 @@ public sealed partial class ThrusterComponent : Component [ViewVariables(VVAccess.ReadWrite), DataField("thrust")] public float Thrust = 100f; + [DataField("baseThrust"), ViewVariables(VVAccess.ReadWrite)] + public float BaseThrust = 100f; + [DataField("thrusterType")] public ThrusterType Type = ThrusterType.Linear; @@ -55,6 +60,12 @@ public sealed partial class ThrusterComponent : Component /// [ViewVariables(VVAccess.ReadWrite), DataField("nextFire", customTypeSerializer:typeof(TimeOffsetSerializer))] public TimeSpan NextFire; + + [DataField("machinePartThrust", customTypeSerializer: typeof(PrototypeIdSerializer))] + public string MachinePartThrust = "Capacitor"; + + [DataField("partRatingThrustMultiplier")] + public float PartRatingThrustMultiplier = 1.5f; } public enum ThrusterType diff --git a/Content.Server/Shuttles/Systems/ThrusterSystem.cs b/Content.Server/Shuttles/Systems/ThrusterSystem.cs index 1baffd4690e208..73e1ab0bebe8cd 100644 --- a/Content.Server/Shuttles/Systems/ThrusterSystem.cs +++ b/Content.Server/Shuttles/Systems/ThrusterSystem.cs @@ -52,6 +52,9 @@ public override void Initialize() SubscribeLocalEvent(OnThrusterExamine); + SubscribeLocalEvent(OnRefreshParts); + SubscribeLocalEvent(OnUpgradeExamine); + SubscribeLocalEvent(OnShuttleTileChange); } @@ -201,10 +204,12 @@ private void OnRotate(EntityUid uid, ThrusterComponent component, ref MoveEvent if (component.Type == ThrusterType.Linear) { oldShuttleComponent.LinearThrust[oldDirection] -= component.Thrust; + oldShuttleComponent.BaseLinearThrust[oldDirection] -= component.BaseThrust; DebugTools.Assert(oldShuttleComponent.LinearThrusters[oldDirection].Contains(uid)); oldShuttleComponent.LinearThrusters[oldDirection].Remove(uid); shuttleComponent.LinearThrust[direction] += component.Thrust; + shuttleComponent.BaseLinearThrust[direction] += component.BaseThrust; DebugTools.Assert(!shuttleComponent.LinearThrusters[direction].Contains(uid)); shuttleComponent.LinearThrusters[direction].Add(uid); } @@ -278,6 +283,7 @@ public void EnableThruster(EntityUid uid, ThrusterComponent component, Transform var direction = (int) xform.LocalRotation.GetCardinalDir() / 2; shuttleComponent.LinearThrust[direction] += component.Thrust; + shuttleComponent.BaseLinearThrust[direction] += component.BaseThrust; DebugTools.Assert(!shuttleComponent.LinearThrusters[direction].Contains(uid)); shuttleComponent.LinearThrusters[direction].Add(uid); @@ -376,6 +382,7 @@ public void DisableThruster(EntityUid uid, ThrusterComponent component, EntityUi var direction = (int) angle.Value.GetCardinalDir() / 2; shuttleComponent.LinearThrust[direction] -= component.Thrust; + shuttleComponent.BaseLinearThrust[direction] -= component.BaseThrust; DebugTools.Assert(shuttleComponent.LinearThrusters[direction].Contains(uid)); shuttleComponent.LinearThrusters[direction].Remove(uid); break; @@ -571,6 +578,24 @@ public void SetAngularThrust(ShuttleComponent component, bool on) } } + private void OnRefreshParts(EntityUid uid, ThrusterComponent component, RefreshPartsEvent args) + { + if (component.IsOn) // safely disable thruster to prevent negative thrust + DisableThruster(uid, component); + + var thrustRating = args.PartRatings[component.MachinePartThrust]; + + component.Thrust = component.BaseThrust * MathF.Pow(component.PartRatingThrustMultiplier, thrustRating - 1); + + if (component.Enabled && CanEnable(uid, component)) + EnableThruster(uid, component); + } + + private void OnUpgradeExamine(EntityUid uid, ThrusterComponent component, UpgradeExamineEvent args) + { + args.AddPercentageUpgrade("thruster-comp-upgrade-thrust", component.Thrust / component.BaseThrust); + } + #endregion private int GetFlagIndex(DirectionFlag flag) diff --git a/Content.Server/Singularity/EntitySystems/EmitterSystem.cs b/Content.Server/Singularity/EntitySystems/EmitterSystem.cs index a9763b64d90bac..652ca236e44111 100644 --- a/Content.Server/Singularity/EntitySystems/EmitterSystem.cs +++ b/Content.Server/Singularity/EntitySystems/EmitterSystem.cs @@ -1,6 +1,7 @@ using System.Numerics; using System.Threading; using Content.Server.Administration.Logs; +using Content.Server.Construction; using Content.Server.DeviceLinking.Events; using Content.Server.Power.Components; using Content.Server.Power.EntitySystems; @@ -47,6 +48,8 @@ public override void Initialize() SubscribeLocalEvent(OnInteractHand); SubscribeLocalEvent>(OnGetVerb); SubscribeLocalEvent(OnExamined); + SubscribeLocalEvent(OnRefreshParts); + SubscribeLocalEvent(OnUpgradeExamine); SubscribeLocalEvent(OnAnchorStateChanged); SubscribeLocalEvent(OnSignalReceived); } @@ -176,6 +179,20 @@ private void OnApcChanged(EntityUid uid, EmitterComponent component, ref PowerCh } } + private void OnRefreshParts(EntityUid uid, EmitterComponent component, RefreshPartsEvent args) + { + var fireRateRating = args.PartRatings[component.MachinePartFireRate]; + + component.FireInterval = component.BaseFireInterval * MathF.Pow(component.FireRateMultiplier, fireRateRating - 1); + component.FireBurstDelayMin = component.BaseFireBurstDelayMin * MathF.Pow(component.FireRateMultiplier, fireRateRating - 1); + component.FireBurstDelayMax = component.BaseFireBurstDelayMax * MathF.Pow(component.FireRateMultiplier, fireRateRating - 1); + } + + private void OnUpgradeExamine(EntityUid uid, EmitterComponent component, UpgradeExamineEvent args) + { + args.AddPercentageUpgrade("emitter-component-upgrade-fire-rate", (float) (component.BaseFireInterval.TotalSeconds / component.FireInterval.TotalSeconds)); + } + public void SwitchOff(EntityUid uid, EmitterComponent component) { component.IsOn = false; diff --git a/Content.Server/Xenoarchaeology/Equipment/Components/TraversalDistorterComponent.cs b/Content.Server/Xenoarchaeology/Equipment/Components/TraversalDistorterComponent.cs index ec16083c538752..a7a58778ef52fa 100644 --- a/Content.Server/Xenoarchaeology/Equipment/Components/TraversalDistorterComponent.cs +++ b/Content.Server/Xenoarchaeology/Equipment/Components/TraversalDistorterComponent.cs @@ -1,4 +1,7 @@ -namespace Content.Server.Xenoarchaeology.Equipment.Components; +using Content.Shared.Construction.Prototypes; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; + +namespace Content.Server.Xenoarchaeology.Equipment.Components; /// /// This is used for a machine that biases @@ -7,6 +10,18 @@ [RegisterComponent] public sealed partial class TraversalDistorterComponent : Component { + [ViewVariables(VVAccess.ReadWrite)] + public float BiasChance; + + [DataField("baseBiasChance")] + public float BaseBiasChance = 0.7f; + + [DataField("machinePartBiasChance", customTypeSerializer: typeof(PrototypeIdSerializer))] + public string MachinePartBiasChance = "Manipulator"; + + [DataField("partRatingBiasChance")] + public float PartRatingBiasChance = 1.1f; + [ViewVariables(VVAccess.ReadWrite)] public BiasDirection BiasDirection = BiasDirection.In; diff --git a/Content.Server/Xenoarchaeology/Equipment/Systems/TraversalDistorterSystem.cs b/Content.Server/Xenoarchaeology/Equipment/Systems/TraversalDistorterSystem.cs index 230e639af495c7..d313f9a25bf3fb 100644 --- a/Content.Server/Xenoarchaeology/Equipment/Systems/TraversalDistorterSystem.cs +++ b/Content.Server/Xenoarchaeology/Equipment/Systems/TraversalDistorterSystem.cs @@ -1,9 +1,12 @@ -using Content.Server.Popups; +using Content.Server.Construction; +using Content.Server.Popups; using Content.Server.Power.EntitySystems; using Content.Server.Xenoarchaeology.Equipment.Components; +using Content.Server.Xenoarchaeology.XenoArtifacts; using Content.Shared.Examine; using Content.Shared.Interaction; using Content.Shared.Placeable; +using Robust.Shared.Player; using Robust.Shared.Timing; namespace Content.Server.Xenoarchaeology.Equipment.Systems; @@ -20,6 +23,8 @@ public override void Initialize() SubscribeLocalEvent(OnInteract); SubscribeLocalEvent(OnExamine); + SubscribeLocalEvent(OnRefreshParts); + SubscribeLocalEvent(OnUpgradeExamine); SubscribeLocalEvent(OnItemPlaced); SubscribeLocalEvent(OnItemRemoved); @@ -68,10 +73,22 @@ private void OnExamine(EntityUid uid, TraversalDistorterComponent component, Exa examine = Loc.GetString("traversal-distorter-desc-out"); break; } - + args.PushMarkup(examine); } + private void OnRefreshParts(EntityUid uid, TraversalDistorterComponent component, RefreshPartsEvent args) + { + var biasRating = args.PartRatings[component.MachinePartBiasChance]; + + component.BiasChance = component.BaseBiasChance * MathF.Pow(component.PartRatingBiasChance, biasRating - 1); + } + + private void OnUpgradeExamine(EntityUid uid, TraversalDistorterComponent component, UpgradeExamineEvent args) + { + args.AddPercentageUpgrade("traversal-distorter-upgrade-bias", component.BiasChance / component.BaseBiasChance); + } + private void OnItemPlaced(EntityUid uid, TraversalDistorterComponent component, ref ItemPlacedEvent args) { var bias = EnsureComp(args.OtherEntity); diff --git a/Content.Server/Xenoarchaeology/XenoArtifacts/ArtifactSystem.cs b/Content.Server/Xenoarchaeology/XenoArtifacts/ArtifactSystem.cs index 955fe827d72eb1..a7948aa7ff9820 100644 --- a/Content.Server/Xenoarchaeology/XenoArtifacts/ArtifactSystem.cs +++ b/Content.Server/Xenoarchaeology/XenoArtifacts/ArtifactSystem.cs @@ -206,6 +206,7 @@ public void ForceActivateArtifact(EntityUid uid, EntityUid? user = null, Artifac if (TryComp(uid, out var bias) && TryComp(bias.Provider, out var trav) && + _random.Prob(trav.BiasChance) && this.IsPowered(bias.Provider, EntityManager)) { switch (trav.BiasDirection) diff --git a/Content.Shared/Cargo/Components/SharedCargoTelepadComponent.cs b/Content.Shared/Cargo/Components/SharedCargoTelepadComponent.cs index 911ea41cca5bdd..911066207ccb1e 100644 --- a/Content.Shared/Cargo/Components/SharedCargoTelepadComponent.cs +++ b/Content.Shared/Cargo/Components/SharedCargoTelepadComponent.cs @@ -1,3 +1,4 @@ +using Content.Shared.Construction.Prototypes; using Content.Shared.DeviceLinking; using Robust.Shared.Audio; using Robust.Shared.GameStates; @@ -12,12 +13,30 @@ namespace Content.Shared.Cargo.Components; [RegisterComponent, NetworkedComponent, Access(typeof(SharedCargoSystem))] public sealed partial class CargoTelepadComponent : Component { + /// + /// The base amount of time it takes to teleport from the telepad + /// + [DataField("baseDelay"), ViewVariables(VVAccess.ReadWrite)] + public float BaseDelay = 10f; + /// /// The actual amount of time it takes to teleport from the telepad /// [DataField("delay"), ViewVariables(VVAccess.ReadWrite)] public float Delay = 10f; + /// + /// The machine part that affects + /// + [DataField("machinePartTeleportDelay", customTypeSerializer: typeof(PrototypeIdSerializer)), ViewVariables(VVAccess.ReadWrite)] + public string MachinePartTeleportDelay = "Capacitor"; + + /// + /// A multiplier applied to for each level of + /// + [DataField("partRatingTeleportDelay"), ViewVariables(VVAccess.ReadWrite)] + public float PartRatingTeleportDelay = 0.8f; + /// /// How much time we've accumulated until next teleport. /// diff --git a/Content.Shared/Cloning/CloningPodComponent.cs b/Content.Shared/Cloning/CloningPodComponent.cs index 88d587c1457712..60d4c1e64e587a 100644 --- a/Content.Shared/Cloning/CloningPodComponent.cs +++ b/Content.Shared/Cloning/CloningPodComponent.cs @@ -1,9 +1,11 @@ +using Content.Shared.Construction.Prototypes; using Content.Shared.DeviceLinking; using Content.Shared.Materials; using Robust.Shared.Audio; using Robust.Shared.Containers; using Robust.Shared.Prototypes; using Robust.Shared.Serialization; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; namespace Content.Shared.Cloning; @@ -34,10 +36,28 @@ public sealed partial class CloningPodComponent : Component [DataField("requiredMaterial"), ViewVariables(VVAccess.ReadWrite)] public ProtoId RequiredMaterial = "Biomass"; + /// + /// The base amount of time it takes to clone a body + /// + [DataField("baseCloningTime")] + public float BaseCloningTime = 30f; + + /// + /// The multiplier for cloning duration + /// + [DataField("partRatingSpeedMultiplier")] + public float PartRatingSpeedMultiplier = 0.75f; + + /// + /// The machine part that affects cloning speed + /// + [DataField("machinePartCloningSpeed"), ViewVariables(VVAccess.ReadWrite)] + public ProtoId MachinePartCloningSpeed = "Manipulator"; + /// /// The current amount of time it takes to clone a body /// - [DataField, ViewVariables(VVAccess.ReadWrite)] + [ViewVariables(VVAccess.ReadWrite)] public float CloningTime = 30f; /// @@ -62,6 +82,25 @@ public sealed partial class CloningPodComponent : Component Params = AudioParams.Default.WithVolume(4), }; + /// + /// The machine part that affects how much biomass is needed to clone a body. + /// + [DataField("partRatingMaterialMultiplier")] + public float PartRatingMaterialMultiplier = 0.85f; + + /// + /// The current multiplier on the body weight, which determines the + /// amount of biomass needed to clone. + /// + [ViewVariables(VVAccess.ReadWrite)] + public float BiomassRequirementMultiplier = 1; + + /// + /// The machine part that decreases the amount of material needed for cloning + /// + [DataField("machinePartMaterialUse"), ViewVariables(VVAccess.ReadWrite)] + public ProtoId MachinePartMaterialUse = "MatterBin"; + [ViewVariables(VVAccess.ReadWrite)] public CloningPodStatus Status; diff --git a/Content.Shared/Construction/MachinePartSystem.cs b/Content.Shared/Construction/MachinePartSystem.cs index 1a19040b41062a..01db7fbade3dd2 100644 --- a/Content.Shared/Construction/MachinePartSystem.cs +++ b/Content.Shared/Construction/MachinePartSystem.cs @@ -21,6 +21,7 @@ public override void Initialize() { base.Initialize(); SubscribeLocalEvent(OnMachineBoardExamined); + SubscribeLocalEvent(OnMachinePartExamined); } private void OnMachineBoardExamined(EntityUid uid, MachineBoardComponent component, ExaminedEvent args) @@ -61,6 +62,20 @@ private void OnMachineBoardExamined(EntityUid uid, MachineBoardComponent compone } } + private void OnMachinePartExamined(EntityUid uid, MachinePartComponent component, ExaminedEvent args) + { + if (!args.IsInDetailsRange) + return; + + using (args.PushGroup(nameof(MachinePartComponent))) + { + args.PushMarkup(Loc.GetString("machine-part-component-on-examine-rating-text", + ("rating", component.Rating))); + args.PushMarkup(Loc.GetString("machine-part-component-on-examine-type-text", ("type", + Loc.GetString(_prototype.Index(component.PartType).Name)))); + } + } + public Dictionary GetMachineBoardMaterialCost(Entity entity, int coefficient = 1) { var (_, comp) = entity; diff --git a/Content.Shared/Materials/MaterialReclaimerComponent.cs b/Content.Shared/Materials/MaterialReclaimerComponent.cs index 6c625e2fa25837..91bd59614a1bd7 100644 --- a/Content.Shared/Materials/MaterialReclaimerComponent.cs +++ b/Content.Shared/Materials/MaterialReclaimerComponent.cs @@ -1,6 +1,8 @@ -using Content.Shared.Whitelist; +using Content.Shared.Construction.Prototypes; +using Content.Shared.Whitelist; using Robust.Shared.Audio; using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; using Robust.Shared.Serialization; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom; @@ -42,6 +44,13 @@ public sealed partial class MaterialReclaimerComponent : Component [DataField] public bool ScaleProcessSpeed = true; + /// + /// How quickly it takes to consume X amount of materials per second. + /// For example, with a rate of 50, an entity with 100 total material takes 2 seconds to process. + /// + [DataField, ViewVariables(VVAccess.ReadWrite)] + public float BaseMaterialProcessRate = 100f; + /// /// How quickly it takes to consume X amount of materials per second. /// For example, with a rate of 50, an entity with 100 total material takes 2 seconds to process. @@ -49,6 +58,18 @@ public sealed partial class MaterialReclaimerComponent : Component [DataField, AutoNetworkedField, ViewVariables(VVAccess.ReadWrite)] public float MaterialProcessRate = 100f; + /// + /// Machine part whose rating modifies + /// + [DataField, ViewVariables(VVAccess.ReadWrite)] + public ProtoId MachinePartProcessRate = "Manipulator"; + + /// + /// How much the machine part quality affects the + /// + [DataField, ViewVariables(VVAccess.ReadWrite)] + public float PartRatingProcessRateMultiplier = 1.5f; + /// /// The minimum amount fo time it can take to process an entity. /// this value supercedes the calculated one using diff --git a/Content.Shared/Singularity/Components/SharedEmitterComponent.cs b/Content.Shared/Singularity/Components/SharedEmitterComponent.cs index c2e7af717b1093..426b991a7514d6 100644 --- a/Content.Shared/Singularity/Components/SharedEmitterComponent.cs +++ b/Content.Shared/Singularity/Components/SharedEmitterComponent.cs @@ -1,4 +1,5 @@ using System.Threading; +using Content.Shared.Construction.Prototypes; using Content.Shared.DeviceLinking; using Robust.Shared.GameStates; using Robust.Shared.Prototypes; @@ -52,6 +53,12 @@ public sealed partial class EmitterComponent : Component [DataField("fireInterval")] public TimeSpan FireInterval = TimeSpan.FromSeconds(2); + /// + /// The base amount of time between each shot during a burst. + /// + [DataField("baseFireInterval"), ViewVariables(VVAccess.ReadWrite)] + public TimeSpan BaseFireInterval = TimeSpan.FromSeconds(2); + /// /// The current minimum delay between bursts. /// @@ -64,6 +71,33 @@ public sealed partial class EmitterComponent : Component [DataField("fireBurstDelayMax")] public TimeSpan FireBurstDelayMax = TimeSpan.FromSeconds(10); + /// + /// The base minimum delay between shot bursts. + /// Used for machine part rating calculations. + /// + [DataField("baseFireBurstDelayMin")] + public TimeSpan BaseFireBurstDelayMin = TimeSpan.FromSeconds(4); + + /// + /// The base maximum delay between shot bursts. + /// Used for machine part rating calculations. + /// + [DataField("baseFireBurstDelayMax")] + public TimeSpan BaseFireBurstDelayMax = TimeSpan.FromSeconds(10); + + /// + /// The multiplier for the base delay between shot bursts as well as + /// the fire interval + /// + [DataField("fireRateMultiplier"), ViewVariables(VVAccess.ReadWrite)] + public float FireRateMultiplier = 0.8f; + + /// + /// The machine part that affects burst delay. + /// + [DataField("machinePartFireRate", customTypeSerializer: typeof(PrototypeIdSerializer))] + public string MachinePartFireRate = "Capacitor"; + /// /// The visual state that is set when the emitter is turned on /// diff --git a/Resources/Locale/en-US/anomaly/anomaly.ftl b/Resources/Locale/en-US/anomaly/anomaly.ftl index 3a398d482e789d..df4cbfe20cd8e8 100644 --- a/Resources/Locale/en-US/anomaly/anomaly.ftl +++ b/Resources/Locale/en-US/anomaly/anomaly.ftl @@ -3,6 +3,7 @@ anomaly-component-contact-damage = The anomaly sears off your skin! anomaly-vessel-component-anomaly-assigned = Anomaly assigned to vessel. anomaly-vessel-component-not-assigned = This vessel is not assigned to any anomaly. Try using a scanner on it. anomaly-vessel-component-assigned = This vessel is currently assigned to an anomaly. +anomaly-vessel-component-upgrade-output = point output anomaly-particles-delta = Delta particles anomaly-particles-epsilon = Epsilon particles diff --git a/Resources/Locale/en-US/atmos/gas-recycler-system.ftl b/Resources/Locale/en-US/atmos/gas-recycler-system.ftl index cc527adf5c8654..a72e137732c9c7 100644 --- a/Resources/Locale/en-US/atmos/gas-recycler-system.ftl +++ b/Resources/Locale/en-US/atmos/gas-recycler-system.ftl @@ -1,3 +1,6 @@ gas-recycler-reacting = It is [color=green]converting[/color] waste gases. gas-recycler-low-pressure = The input pressure is [color=darkred]too low[/color]. gas-recycler-low-temperature = The input temperature is [color=darkred]too low[/color]. + +gas-recycler-upgrade-min-temp = Minimum temperature +gas-recycler-upgrade-min-pressure = Minimum pressure diff --git a/Resources/Locale/en-US/atmos/portable-scrubber.ftl b/Resources/Locale/en-US/atmos/portable-scrubber.ftl index c4071b4acce7a2..8aadf076d9658c 100644 --- a/Resources/Locale/en-US/atmos/portable-scrubber.ftl +++ b/Resources/Locale/en-US/atmos/portable-scrubber.ftl @@ -1 +1,4 @@ portable-scrubber-fill-level = It's at about [color=yellow]{$percent}%[/color] of its maximum internal pressure. + +portable-scrubber-component-upgrade-max-pressure = max pressure +portable-scrubber-component-upgrade-transfer-rate = transfer rate diff --git a/Resources/Locale/en-US/botany/components/seed-extractor-component.ftl b/Resources/Locale/en-US/botany/components/seed-extractor-component.ftl index 84d5a5ed283677..c586a594a9a9c0 100644 --- a/Resources/Locale/en-US/botany/components/seed-extractor-component.ftl +++ b/Resources/Locale/en-US/botany/components/seed-extractor-component.ftl @@ -2,3 +2,5 @@ seed-extractor-component-interact-message = You extract some seeds from the { THE($name) }. seed-extractor-component-no-seeds = { CAPITALIZE(THE($name)) } has no seeds! + +seed-extractor-component-upgrade-seed-yield = seed yield diff --git a/Resources/Locale/en-US/cargo/cargo-console-component.ftl b/Resources/Locale/en-US/cargo/cargo-console-component.ftl index b56f4730ccd641..1caa810f1b7472 100644 --- a/Resources/Locale/en-US/cargo/cargo-console-component.ftl +++ b/Resources/Locale/en-US/cargo/cargo-console-component.ftl @@ -45,3 +45,5 @@ cargo-shuttle-console-station-unknown = Unknown cargo-shuttle-console-shuttle-not-found = Not found cargo-shuttle-console-organics = Detected organic lifeforms on the shuttle cargo-no-shuttle = No cargo shuttle found! + +cargo-telepad-delay-upgrade = Teleport delay diff --git a/Resources/Locale/en-US/chemistry/components/solution-heater-component.ftl b/Resources/Locale/en-US/chemistry/components/solution-heater-component.ftl new file mode 100644 index 00000000000000..cecf15550c7834 --- /dev/null +++ b/Resources/Locale/en-US/chemistry/components/solution-heater-component.ftl @@ -0,0 +1 @@ +solution-heater-upgrade-heat = Heat strength diff --git a/Resources/Locale/en-US/construction/components/machine-part-component.ftl b/Resources/Locale/en-US/construction/components/machine-part-component.ftl new file mode 100644 index 00000000000000..2db3b92da9601b --- /dev/null +++ b/Resources/Locale/en-US/construction/components/machine-part-component.ftl @@ -0,0 +1,2 @@ +machine-part-component-on-examine-rating-text = [color=white]Rating:[/color] [color=cyan]{$rating}[/color] +machine-part-component-on-examine-type-text = [color=white]Type:[/color] [color=cyan]{$type}[/color] \ No newline at end of file diff --git a/Resources/Locale/en-US/kitchen/components/microwave-component.ftl b/Resources/Locale/en-US/kitchen/components/microwave-component.ftl index 8e8781fe40cda7..41d42a744e087a 100644 --- a/Resources/Locale/en-US/kitchen/components/microwave-component.ftl +++ b/Resources/Locale/en-US/kitchen/components/microwave-component.ftl @@ -9,6 +9,7 @@ microwave-component-suicide-multi-head-others-message = {$victim} is trying to c microwave-component-suicide-others-message = {$victim} is trying to cook their head! microwave-component-suicide-multi-head-message = You cook your heads! microwave-component-suicide-message = You cook your head! +microwave-component-upgrade-cook-time = cook time microwave-component-interact-full = It's full. microwave-component-interact-item-too-big = { CAPITALIZE(THE($item)) } is too big to fit in the microwave! diff --git a/Resources/Locale/en-US/kitchen/components/reagent-grinder-component.ftl b/Resources/Locale/en-US/kitchen/components/reagent-grinder-component.ftl index 30af6e9872e058..ffff7c4e6f1b3a 100644 --- a/Resources/Locale/en-US/kitchen/components/reagent-grinder-component.ftl +++ b/Resources/Locale/en-US/kitchen/components/reagent-grinder-component.ftl @@ -4,6 +4,9 @@ reagent-grinder-bound-user-interface-instant-button = INSTANT reagent-grinder-bound-user-interface-cook-time-label = COOK TIME reagent-grinder-component-cannot-put-entity-message = You can't put this in the reagent grinder! +reagent-grinder-component-upgrade-work-time = Work time +reagent-grinder-component-upgrade-storage = Storage + grinder-menu-title = All-In-One Grinder 3000 grinder-menu-grind-button = Grind grinder-menu-juice-button = Juice diff --git a/Resources/Locale/en-US/machine/machine.ftl b/Resources/Locale/en-US/machine/machine.ftl index ce8873df6f87b4..458e78305966d8 100644 --- a/Resources/Locale/en-US/machine/machine.ftl +++ b/Resources/Locale/en-US/machine/machine.ftl @@ -13,10 +13,15 @@ machine-part-name-manipulator = Manipulator machine-part-name-matter-bin = Matter Bin machine-part-name-power-cell = Power Cell +upgrade-power-draw = power draw +upgrade-max-charge = max charge +upgrade-power-supply = power supply +upgrade-power-supply-ramping = power ramp rate + two-way-lever-left = push left two-way-lever-right = push right two-way-lever-cant = can't push the lever that way! recycler-count-items = Recycled {$items} objects. -machine-already-in-use = {CAPITALIZE(THE($machine))} is already in use. +machine-already-in-use = {CAPITALIZE(THE($machine))} is already in use. \ No newline at end of file diff --git a/Resources/Locale/en-US/materials/materials.ftl b/Resources/Locale/en-US/materials/materials.ftl index de95753233104c..689fca4dd795c6 100644 --- a/Resources/Locale/en-US/materials/materials.ftl +++ b/Resources/Locale/en-US/materials/materials.ftl @@ -34,3 +34,6 @@ materials-raw-silver = raw silver materials-raw-plasma = raw plasma materials-raw-uranium = raw uranium materials-raw-bananium = raw bananium + +# Material Reclaimer +material-reclaimer-upgrade-process-rate = process rate diff --git a/Resources/Locale/en-US/medical/components/biomass-reclaimer-component.ftl b/Resources/Locale/en-US/medical/components/biomass-reclaimer-component.ftl index 443429c1ef317a..0c0b8faf59e9d7 100644 --- a/Resources/Locale/en-US/medical/components/biomass-reclaimer-component.ftl +++ b/Resources/Locale/en-US/medical/components/biomass-reclaimer-component.ftl @@ -1 +1,4 @@ biomass-reclaimer-suicide-others = {CAPITALIZE(THE($victim))} threw themselves into the biomass reclaimer! + +biomass-reclaimer-component-upgrade-speed = speed +biomass-reclaimer-component-upgrade-biomass-yield = biomass yield diff --git a/Resources/Locale/en-US/medical/components/cloning-pod-component.ftl b/Resources/Locale/en-US/medical/components/cloning-pod-component.ftl index b222d707a0a266..e92ac86a1e4caa 100644 --- a/Resources/Locale/en-US/medical/components/cloning-pod-component.ftl +++ b/Resources/Locale/en-US/medical/components/cloning-pod-component.ftl @@ -1,3 +1,5 @@ cloning-pod-biomass = It currently has [color=red]{$number}[/color] units of biomass. +cloning-pod-component-upgrade-speed = cloning speed +cloning-pod-component-upgrade-biomass-requirement = biomass requirement cloning-pod-component-upgrade-emag-requirement = The card zaps something inside the cloning pod. diff --git a/Resources/Locale/en-US/medical/components/medical-scanner-component.ftl b/Resources/Locale/en-US/medical/components/medical-scanner-component.ftl index c4b194265452bf..da4dc7a38470c7 100644 --- a/Resources/Locale/en-US/medical/components/medical-scanner-component.ftl +++ b/Resources/Locale/en-US/medical/components/medical-scanner-component.ftl @@ -2,3 +2,5 @@ medical-scanner-verb-enter = Enter medical-scanner-verb-noun-occupant = occupant + +medical-scanner-upgrade-cloning = Cloning fail chance diff --git a/Resources/Locale/en-US/medical/components/stasis-bed-component.ftl b/Resources/Locale/en-US/medical/components/stasis-bed-component.ftl new file mode 100644 index 00000000000000..2d8a18c263ef5e --- /dev/null +++ b/Resources/Locale/en-US/medical/components/stasis-bed-component.ftl @@ -0,0 +1 @@ +stasis-bed-component-upgrade-stasis = stasis effect diff --git a/Resources/Locale/en-US/nutrition/components/fat-extractor.ftl b/Resources/Locale/en-US/nutrition/components/fat-extractor.ftl index 20a31cd8c402d6..b2df0e079ec307 100644 --- a/Resources/Locale/en-US/nutrition/components/fat-extractor.ftl +++ b/Resources/Locale/en-US/nutrition/components/fat-extractor.ftl @@ -1,6 +1,8 @@ +fat-extractor-component-rate = extraction rate + fat-extractor-fact-1 = Fats are triglycerides made up of a combination of different building blocks; glycerol and fatty acids. fat-extractor-fact-2 = Adults should get a recommended 20-35% of their energy intake from fat. fat-extractor-fact-3 = Being overweight or obese puts you at an increased risk of chronic diseases, such as cardiovascular diseases, metabolic syndrome, type 2 diabetes, and some types of cancers. fat-extractor-fact-4 = Not all fats are bad. A certain amount of fat is an essential part of a healthy balanced diet. fat-extractor-fact-5 = Saturated fat should form no more than 11% of your daily calories. -fat-extractor-fact-6 = Unsaturated fat, that is monounsaturated fats, polyunsaturated fats, and omega-3 fatty acids, is found in plants and fish. +fat-extractor-fact-6 = Unsaturated fat, that is monounsaturated fats, polyunsaturated fats, and omega-3 fatty acids, is found in plants and fish. \ No newline at end of file diff --git a/Resources/Locale/en-US/shuttles/thruster.ftl b/Resources/Locale/en-US/shuttles/thruster.ftl index 94035811c73dea..faed6e8dd28d26 100644 --- a/Resources/Locale/en-US/shuttles/thruster.ftl +++ b/Resources/Locale/en-US/shuttles/thruster.ftl @@ -3,3 +3,5 @@ thruster-comp-disabled = The thruster is turned [color=red]off[/color]. thruster-comp-nozzle-direction = The nozzle is facing [color=yellow]{$direction}[/color]. thruster-comp-nozzle-exposed = The nozzle [color=green]exposed[/color] to space. thruster-comp-nozzle-not-exposed = The nozzle [color=red]is not exposed[/color] to space. + +thruster-comp-upgrade-thrust = Thrust strength diff --git a/Resources/Locale/en-US/singularity/components/emitter-component.ftl b/Resources/Locale/en-US/singularity/components/emitter-component.ftl index c71b3d6bdfd736..7c1b33d96b4355 100644 --- a/Resources/Locale/en-US/singularity/components/emitter-component.ftl +++ b/Resources/Locale/en-US/singularity/components/emitter-component.ftl @@ -11,5 +11,8 @@ comp-emitter-turned-off = The {$target} turns off. # Shows if the user attempts to activate the emitter while it's un-anchored. comp-emitter-not-anchored = The {$target} isn't anchored to the ground! +# Upgrades +emitter-component-upgrade-fire-rate = fire rate + emitter-component-current-type = The current selected type is: {$type}. -emitter-component-type-set = Type set to: {$type} +emitter-component-type-set = Type set to: {$type} \ No newline at end of file diff --git a/Resources/Locale/en-US/xenoarchaeology/traversal-distorter.ftl b/Resources/Locale/en-US/xenoarchaeology/traversal-distorter.ftl index 5c9eac57a5dbc8..af3039e864efe0 100644 --- a/Resources/Locale/en-US/xenoarchaeology/traversal-distorter.ftl +++ b/Resources/Locale/en-US/xenoarchaeology/traversal-distorter.ftl @@ -3,3 +3,5 @@ traversal-distorter-set-out = Traversal bias set to "out" traversal-distorter-desc-in = The affected artifact's traversal now favors moving inwards to the beginning. traversal-distorter-desc-out = The affected artifact's traversal now favors moving outwards towards more dangerous nodes. + +traversal-distorter-upgrade-bias = Bias effectiveness diff --git a/Resources/Prototypes/Entities/Objects/Specific/Research/rped.yml b/Resources/Prototypes/Entities/Objects/Specific/Research/rped.yml index 199e2d8cba2568..6c61c63435f3f4 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Research/rped.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Research/rped.yml @@ -10,6 +10,9 @@ - type: Item sprite: Objects/Specific/Research/rped.rsi size: Normal + - type: GuideHelp + guides: + - MachineUpgrading - type: PartExchanger - type: Storage grid: diff --git a/Resources/Prototypes/Entities/Structures/Dispensers/chem.yml b/Resources/Prototypes/Entities/Structures/Dispensers/chem.yml index 6c70cf9bcace3e..79a17153abf957 100644 --- a/Resources/Prototypes/Entities/Structures/Dispensers/chem.yml +++ b/Resources/Prototypes/Entities/Structures/Dispensers/chem.yml @@ -34,6 +34,9 @@ - type: Wires boardName: wires-board-name-chemdispenser layoutId: ChemDispenser + - type: UpgradePowerDraw + powerDrawMultiplier: 0.75 + scaling: Exponential - type: GuideHelp guides: - Chemicals diff --git a/Resources/Prototypes/Entities/Structures/Machines/anomaly_equipment.yml b/Resources/Prototypes/Entities/Structures/Machines/anomaly_equipment.yml index 2697e00a7000ea..b1612cb6f47843 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/anomaly_equipment.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/anomaly_equipment.yml @@ -176,8 +176,8 @@ SetParticleEpsilon: AnomalousParticleEpsilon SetParticleZeta: AnomalousParticleZeta fireBurstSize: 1 - fireBurstDelayMin: 2 - fireBurstDelayMax: 6 + baseFireBurstDelayMin: 2 + baseFireBurstDelayMax: 6 - type: ApcPowerReceiver powerLoad: 100 - type: GuideHelp diff --git a/Resources/Prototypes/Entities/Structures/Machines/anomaly_sync.yml b/Resources/Prototypes/Entities/Structures/Machines/anomaly_sync.yml index 88169ecd675334..d37cc714e28fa0 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/anomaly_sync.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/anomaly_sync.yml @@ -52,7 +52,10 @@ noRot: false - type: ApcPowerReceiver powerLoad: 15000 - needsPower: true + needsPower: true + - type: UpgradePowerDraw + powerDrawMultiplier: 0.80 + scaling: Exponential - type: ItemPlacer whitelist: components: diff --git a/Resources/Prototypes/Entities/Structures/Machines/artifact_analyzer.yml b/Resources/Prototypes/Entities/Structures/Machines/artifact_analyzer.yml index 1b183661f51682..815c3247ee9c68 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/artifact_analyzer.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/artifact_analyzer.yml @@ -106,6 +106,9 @@ hard: False - type: Transform noRot: false + - type: UpgradePowerDraw + powerDrawMultiplier: 0.80 + scaling: Exponential - type: TraversalDistorter - type: ItemPlacer # don't limit the number of artifacts that can be biased diff --git a/Resources/Prototypes/Entities/Structures/Machines/seed_extractor.yml b/Resources/Prototypes/Entities/Structures/Machines/seed_extractor.yml index ec07294bfb121f..4ecd1c29e278a5 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/seed_extractor.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/seed_extractor.yml @@ -35,3 +35,6 @@ - type: SeedExtractor - type: Machine board: SeedExtractorMachineCircuitboard + - type: UpgradePowerDraw + powerDrawMultiplier: 0.75 + scaling: Exponential diff --git a/Resources/Prototypes/Entities/Structures/Power/Generation/portable_generator.yml b/Resources/Prototypes/Entities/Structures/Power/Generation/portable_generator.yml index b606c01f1ddce3..d52699dcd43d47 100644 --- a/Resources/Prototypes/Entities/Structures/Power/Generation/portable_generator.yml +++ b/Resources/Prototypes/Entities/Structures/Power/Generation/portable_generator.yml @@ -174,6 +174,9 @@ materialWhiteList: [Plasma] - type: PortableGenerator startChance: 0.8 + - type: UpgradePowerSupplier + powerSupplyMultiplier: 1.25 + scaling: Exponential - type: GeneratorExhaustGas gasType: CarbonDioxide # 2 moles of gas for every sheet of plasma. @@ -231,6 +234,9 @@ storageLimit: 3000 materialWhiteList: [Uranium] - type: PortableGenerator + - type: UpgradePowerSupplier + powerSupplyMultiplier: 1.25 + scaling: Exponential - type: PowerMonitoringDevice group: Generator loadNodes: diff --git a/Resources/Prototypes/Entities/Structures/Power/smes.yml b/Resources/Prototypes/Entities/Structures/Power/smes.yml index a13014513d4898..face2ad3891ce1 100644 --- a/Resources/Prototypes/Entities/Structures/Power/smes.yml +++ b/Resources/Prototypes/Entities/Structures/Power/smes.yml @@ -29,10 +29,15 @@ state: "smes-op1" shader: unshaded - type: Smes + - type: UpgradeBattery + maxChargeMultiplier: 2 + baseMaxCharge: 8000000 + - type: UpgradePowerSupplyRamping + scaling: Linear + supplyRampingMultiplier: 1 - type: Appearance - type: Battery startingCharge: 0 - maxCharge: 8000000 - type: ExaminableBattery - type: NodeContainer examinable: true diff --git a/Resources/Prototypes/Entities/Structures/Power/substation.yml b/Resources/Prototypes/Entities/Structures/Power/substation.yml index 7c71dc977891f1..138855487358b3 100644 --- a/Resources/Prototypes/Entities/Structures/Power/substation.yml +++ b/Resources/Prototypes/Entities/Structures/Power/substation.yml @@ -17,8 +17,13 @@ shader: unshaded - state: full shader: unshaded + - type: UpgradeBattery + maxChargeMultiplier: 2 + baseMaxCharge: 2500000 + - type: UpgradePowerSupplyRamping + scaling: Linear + supplyRampingMultiplier: 1 - type: Battery - maxCharge: 2500000 startingCharge: 0 - type: ExaminableBattery - type: PointLight diff --git a/Resources/Prototypes/Entities/Structures/Shuttles/thrusters.yml b/Resources/Prototypes/Entities/Structures/Shuttles/thrusters.yml index f87be426598252..eb299e3f3a6600 100644 --- a/Resources/Prototypes/Entities/Structures/Shuttles/thrusters.yml +++ b/Resources/Prototypes/Entities/Structures/Shuttles/thrusters.yml @@ -143,6 +143,7 @@ - type: Thruster thrusterType: Angular requireSpace: false + baseThrust: 2000 thrust: 2000 machinePartThrust: Manipulator - type: Sprite @@ -192,6 +193,9 @@ collection: MetalBreak - !type:ChangeConstructionNodeBehavior node: machineFrame + - type: UpgradePowerDraw + powerDrawMultiplier: 0.75 + scaling: Exponential - type: Damageable damageContainer: Inorganic damageModifierSet: Electronic @@ -216,6 +220,7 @@ - type: Thruster thrusterType: Angular requireSpace: false + baseThrust: 100 thrust: 100 - type: ApcPowerReceiver needsPower: false diff --git a/Resources/Prototypes/Guidebook/science.yml b/Resources/Prototypes/Guidebook/science.yml index 4382696df85750..4a7558423b3d1d 100644 --- a/Resources/Prototypes/Guidebook/science.yml +++ b/Resources/Prototypes/Guidebook/science.yml @@ -7,6 +7,7 @@ - AnomalousResearch - Xenoarchaeology - Robotics + - MachineUpgrading - type: guideEntry id: Technologies @@ -57,6 +58,11 @@ name: guide-entry-traversal-distorter text: "/ServerInfo/Guidebook/Science/TraversalDistorter.xml" +- type: guideEntry + id: MachineUpgrading + name: guide-entry-machine-upgrading + text: "/ServerInfo/Guidebook/Science/MachineUpgrading.xml" + - type: guideEntry id: Cyborgs name: guide-entry-cyborgs From f2664313a4c7098d336f8a71ba3459da9de496d6 Mon Sep 17 00:00:00 2001 From: Ratyyy <138193222+Ratyyy@users.noreply.github.com> Date: Sun, 11 Feb 2024 18:16:45 +0200 Subject: [PATCH 03/17] Revert "machine parts + power cell resprite (#23913)" This reverts commit b3014e6cb33cecb6796c3002385d862d581e2762. # Conflicts: # Resources/Textures/Objects/Misc/stock_parts.rsi/matter_bin.png # Resources/Textures/Objects/Misc/stock_parts.rsi/micro_mani.png --- .../Power/EntitySystems/ChargerSystem.cs | 9 +++++---- Resources/Locale/en-US/wires/wire-names.ftl | 1 - .../Entities/Structures/Power/chargers.yml | 19 ------------------ .../Misc/stock_parts.rsi/capacitor.png | Bin 254 -> 420 bytes .../Misc/stock_parts.rsi/matter_bin.png | Bin 462 -> 412 bytes .../Misc/stock_parts.rsi/micro_mani.png | Bin 366 -> 380 bytes .../Objects/Power/power_cells.rsi/antique.png | Bin 268 -> 320 bytes .../Objects/Power/power_cells.rsi/high.png | Bin 296 -> 312 bytes .../Objects/Power/power_cells.rsi/hyper.png | Bin 325 -> 352 bytes .../Objects/Power/power_cells.rsi/medium.png | Bin 298 -> 351 bytes .../Objects/Power/power_cells.rsi/meta.json | 2 +- .../Power/power_cells.rsi/microreactor.png | Bin 270 -> 315 bytes .../Objects/Power/power_cells.rsi/o1.png | Bin 118 -> 169 bytes .../Objects/Power/power_cells.rsi/o2.png | Bin 118 -> 174 bytes .../Objects/Power/power_cells.rsi/small.png | Bin 272 -> 311 bytes .../Power/cell_recharger.rsi/empty.png | Bin 391 -> 333 bytes .../Power/cell_recharger.rsi/full.png | Bin 465 -> 395 bytes .../cell_recharger.rsi/light-charged.png | Bin 549 -> 765 bytes .../cell_recharger.rsi/light-charging.png | Bin 582 -> 874 bytes .../Power/cell_recharger.rsi/light-empty.png | Bin 121 -> 260 bytes .../Power/cell_recharger.rsi/meta.json | 2 +- .../Power/cell_recharger.rsi/open.png | Bin 148 -> 381 bytes 22 files changed, 7 insertions(+), 26 deletions(-) diff --git a/Content.Server/Power/EntitySystems/ChargerSystem.cs b/Content.Server/Power/EntitySystems/ChargerSystem.cs index 6feba0d52a1bd9..7926e1a84d9c07 100644 --- a/Content.Server/Power/EntitySystems/ChargerSystem.cs +++ b/Content.Server/Power/EntitySystems/ChargerSystem.cs @@ -115,14 +115,13 @@ private void OnEntityStorageInsertAttempt(EntityUid uid, ChargerComponent compon private void UpdateStatus(EntityUid uid, ChargerComponent component) { var status = GetStatus(uid, component); - TryComp(uid, out AppearanceComponent? appearance); + if (component.Status == status || !TryComp(uid, out ApcPowerReceiverComponent? receiver)) + return; if (!_container.TryGetContainer(uid, component.SlotId, out var container)) return; - _appearance.SetData(uid, CellVisual.Occupied, container.ContainedEntities.Count != 0, appearance); - if (component.Status == status || !TryComp(uid, out ApcPowerReceiverComponent? receiver)) - return; + TryComp(uid, out AppearanceComponent? appearance); component.Status = status; @@ -156,6 +155,8 @@ private void UpdateStatus(EntityUid uid, ChargerComponent component) default: throw new ArgumentOutOfRangeException(); } + + _appearance.SetData(uid, CellVisual.Occupied, container.ContainedEntities.Count != 0, appearance); } private CellChargerStatus GetStatus(EntityUid uid, ChargerComponent component) diff --git a/Resources/Locale/en-US/wires/wire-names.ftl b/Resources/Locale/en-US/wires/wire-names.ftl index 8b760ca60f04e9..b6f8ce250290c1 100644 --- a/Resources/Locale/en-US/wires/wire-names.ftl +++ b/Resources/Locale/en-US/wires/wire-names.ftl @@ -29,7 +29,6 @@ wires-board-name-hydroponicstray = HydroponicsTray wires-board-name-telecomserver = TelecomServer wires-board-name-medicalscanner = MedicalScanner wires-board-name-reclaimer = Reclaimer -wires-board-name-recharger = Recharger wires-board-name-minigravitygenerator = MiniGravityGenerator wires-board-name-dawinstrument = DawInstrument wires-board-name-airlock = Airlock Control diff --git a/Resources/Prototypes/Entities/Structures/Power/chargers.yml b/Resources/Prototypes/Entities/Structures/Power/chargers.yml index 388cc3c9874873..22ffce67d8f28f 100644 --- a/Resources/Prototypes/Entities/Structures/Power/chargers.yml +++ b/Resources/Prototypes/Entities/Structures/Power/chargers.yml @@ -72,27 +72,8 @@ components: - type: Sprite sprite: Structures/Power/cell_recharger.rsi - layers: - - map: ["enum.PowerChargerVisualLayers.Base"] - state: "empty" - - map: ["enum.PowerChargerVisualLayers.Light"] - state: "light-off" - shader: "unshaded" - - state: open - map: ["enum.WiresVisualLayers.MaintenancePanel"] - visible: false - type: Machine board: CellRechargerCircuitboard - - type: Wires - boardName: wires-board-name-recharger - layoutId: Recharger - - type: WiresPanel - - type: GenericVisualizer - visuals: - enum.WiresVisuals.MaintenancePanelState: - enum.WiresVisualLayers.MaintenancePanel: - True: { visible: true } - False: { visible: false } - type: PowerCellSlot cellSlotId: charger_slot # fitsInCharger is true i dont think this will ever affect anything negatively but it lets it function diff --git a/Resources/Textures/Objects/Misc/stock_parts.rsi/capacitor.png b/Resources/Textures/Objects/Misc/stock_parts.rsi/capacitor.png index 305087c37b634d1fe0fa8962937605c45200cb89..548d47b78f157b6bf703283d10d0d58c2da61c8b 100644 GIT binary patch delta 394 zcmV;50d@ZV0i*+vB!3BTNLh0L01m_e01m_fl`9S#00042Nklp^S8K0LXGf15G#|#s-O#>Ijk@fNnW50Ev_8 z2$CHD3UXu%VU9U};W~yqO&kCM-k!D$&z`@5TMToEl%xp5#DB>&cEI)PR~WW#KMZyR z!~qOoi$MS+PAVWf7r-n71^L$Ps1Bs511d_a89I74F!=fgV90IWya6n~bK6qdIRFH< zZ*61n^sa*QVZQF~j%RrJlE!J^*s&`N_Kx0Q%RoSGM-Iayk0~hfG<86A%`{LR{~s8L z83pUtZ-B|u&VKVQ!P47dXT;JJr%Z^%(-00000NkvXXt^-0~f)d)LY5)KL delta 226 zcmV<803H9N1O5S!B!2;OQb$4nuFf3k0002ENklcGX zbmpb2JQzkY@G4gdjhaTNwGQ#A%^0fG)Vdi=`&^B1l&+<&=q2d}yr(|R$)wr)R6 zxdUL9gM!%K+nPZ`OPzu7y*fnlG6RE@qzKp|kQ(G52Sp7bM-$}$h z`FEb(0b0%gwkR~jmtpmq&0t4>EC;c%r3;cB00Iwo%KtyI^*O^su;mlLVy6uY7#N;? zgsTCC6bK+&zIt=pQoLD^Xa^{`KLi_8!#3kTL%RyZawGuqHF78rYdO&lfQ7(~8GkS= zhXHadC)xq95NK`5`hV;gB3`dw{|Jxg&6_uXX;LgF+5s?7T{Dd&!>R57T7Xdpj5=V{ f0izBWa0dVY^rDTfxqo2<00000NkvXXu0mjfdRCqt delta 436 zcmV;l0Zaaz1I`1GB!2;OQb$4nuFf3k0004qNklwPye( zr=}I_Pmd1(j2g#;X9^jp7E74zwzk>J7{@1oW(3t@Nyva+NCh}uZcJ87>!K+k*PSl6 z=vZ|TtgU+hIDgm=cdVBymEIdTKRszJ@NR4>YTjOIEv+c3B8bPL#ADI68oA!L2o{%? z0XRC0bky`Eg5NBxtOCs=KT92RnaKcPaX3`Z5{{q~sbqq{_D)y5Ju#q@V8&tVpMi8T zp^JoqLfMup6(XS^>10CaH!pk#eg;awpW~KvaB-byD=p`zkjn`#hc4d(vvc!`?*TQ7 eH8eCdWWE94#e$z+?t)eT00000{*Nw}lNriLHwS=#p@Alxeg49AhW-1dVK~asDT^dWk>mi7rN}^B zT!leyM-H5S+OU9uR6ueFfE)p%LEw?c6tE*eG{eg~U@=g1fq$Y0MpMlJQj#J-YztuO55Wc$6f^u+QBeUq z0!D)XDB*z|0a{Lgzz_fdn5Bd)C&~fHApim(%VFRc)IyNYVV08$hz*Kr1lnfKdmGI$+cR1MUC-_sE6Lk}&Q400000NkvXXu0mjfy4REC delta 339 zcmV-Z0j&P~0`3BkB!2;OQb$4nuFf3k0003fNkl1pw6o$XF^^(Oy2za&+ zUVoAG5(@ezNl5Si^?nH~ z7K_F5WF~((6vwdwq-i>7$L)M%Lc2^;3E8PhZ(KwE84799aw27Co;$axF-|sn{ zPQAyr>weW?OiWpGe#X&fqiq+yJMmC93d>G(ZD?Xt1jCeFEIXJu+xu1@VA;E^mQRS` lbNg`7K2Ny0#bWu#d;u5pZ+MgdwjBTf002ovPDHLkV1h!xpGyD$ diff --git a/Resources/Textures/Objects/Power/power_cells.rsi/antique.png b/Resources/Textures/Objects/Power/power_cells.rsi/antique.png index 3c0616cc2140c6e71e140d4bca4b904214659cb1..e8fbf6f2874d0ff566f14228910c25fdded1ff83 100644 GIT binary patch delta 293 zcmV+=0owkI0>A>0B!3BTNLh0L01m_e01m_fl`9S#0002;Nkl-IAtOy30Jcmi9zlsV-w500000NkvXXu0mjf&N+6X delta 240 zcmV zYW6!_u`Rk+l@2Kj13;$T>yBL$0aP3?k8XfL#X)-zO)<~&@@aDSDd{HwSe>^5P3NH% z8%AKVMy+1M-PnE@fva&VUgr%U0B|_fYo0=;>wS_W0Bja#znA+6%!vwkCgOThPo34$O9f58Jb@+K8p*^nFn0000c7)~e^JCny1 z%a`JKL{wBn@}2z-{xS{CJ_SpzAIWZr3lk0>-aEp@hj;u4FdEdmU`f(-Q~54tB! z=I$svu$jGI@>}k$*6`lR^QA4MG9EDq>?nLAG~?QaOUV{nO4w)UF4JHYXSNi0)8V~6 z^D)B&)fR>mf(tGz>SUha%9gr1cU^o`-!6#O9;4RSK44$rjF6*2Ung9`=a3KHy delta 269 zcmV+o0rLL10;mFzB!2;OQb$4nuFf3k0002uNklfQs3AymgH^9W(QYd&bal-JsJ%fK)t9zkk#K7AQ#-fO^qn0Vqk8 z^X0^PyL401od95){4QWkuDC7aMIaK2QplE{?q1`c32at7VCpdM2Lb@&(F}m9o~LIF z0njuJ0JRo#)!36jRnL2B@-+eb2CT{dDq!D0A{YL@z`GB2*dITZ5d=XHeBlO;1u+a9 T&N=n~0000UAfTwH%CIf8 z7|1#cW;cZ{2eKgIiVBJhT!;2EykfZZpA<)s90mNb-cXhkgMV|ZIGAOPB+q54#t@_G z_Q>#qN}1SnLku?4*$cK$Z{!ucvHgc*g2Q8wVhV0LuK5B!2;OQb$4nuFf3k00030Nkl!AzPx~ z=m1lUya_<-OfdzFyvga;8}9RqPD(uiz}NX&psUIN7`lnV2&4|v)GOz|-u(AO<^-ae zz|-s%c-R?pOQn*zFoUX9$30Spb;LW39rW1nhP#RFOXu@K0dVd8`8d w3FNBD_yyLBxFenS#V6iUZvh2C5QM$p8|aoex@4rUFaQ7m07*qoM6N<$g3DWlX8-^I diff --git a/Resources/Textures/Objects/Power/power_cells.rsi/medium.png b/Resources/Textures/Objects/Power/power_cells.rsi/medium.png index baabc8510af0f9456788997b0d510bc82390c3e5..f231a622a73a600ec907d1c8fe71387d730387d1 100644 GIT binary patch delta 324 zcmV-K0lWUH0^b6VB!3BTNLh0L01m_e01m_fl`9S#0003INkl0{tsi%&kSKmoW2Ik&d%&$m^!@z%nmyk${@CafsrN-00Bb-O@=&6 zZ6NC`m~CYl4`e~ar6ffdxW1_|ykfZZpA<)s90j(;9Z;4pLw{j$2$&U$B+q54#xTXc z^?y!gC{d0e$pIi==I18D`N(W?0nrY)bLS4j*6sM!WSgrqd_8%SHVy!R&6_uXXvO_>qQ-{6| zxPJW#7~_)%fjt*{m>90R;8sVr19om(N>sky2_m*FrM?4b1x6h(>VQ!Pj5=Vz9RL6V WiAb>QhQ#Oq0000D%45I|q0{>8vdE45{j z)*z#x(BNo%^~X45g~6dI>NkXK1+LW5f$R$kT2Lj*z@|7_x`KP?e0Q?noeY8?2*N)z z>Dy?nJvVV~)}%ITYipB}*%ZCs0I+<0?|tvIZzDhu1iY-CfPV_DH2{m{GZmn)pgCI=LZx7K@jeO3nYCx V$eH5jw*UYD00>D%PDHLkV1h)+dv5>$ diff --git a/Resources/Textures/Objects/Power/power_cells.rsi/meta.json b/Resources/Textures/Objects/Power/power_cells.rsi/meta.json index 6ed575b6f04dbd..66dbf308412c9a 100644 --- a/Resources/Textures/Objects/Power/power_cells.rsi/meta.json +++ b/Resources/Textures/Objects/Power/power_cells.rsi/meta.json @@ -5,7 +5,7 @@ "y": 32 }, "license": "CC-BY-SA-3.0", - "copyright": "sprites based on https://github.com/vgstation-coders/vgstation13/commit/1dbcf389b0ec6b2c51b002df5fef8dd1519f8068. power cells edited by EmoGarbage404, potato edited by @Doru991", + "copyright": "https://github.com/tgstation/tgstation/commit/7dcdbc1468ffdc8689b984cb6b181d48ae41dbf2, potato based on https://github.com/vgstation-coders/vgstation13/commit/1dbcf389b0ec6b2c51b002df5fef8dd1519f8068 edited by @Doru991", "states": [ { "name": "potato" diff --git a/Resources/Textures/Objects/Power/power_cells.rsi/microreactor.png b/Resources/Textures/Objects/Power/power_cells.rsi/microreactor.png index 5177c9aa893165c93dc4a809b82c425c7238825c..d9e0f6d59f9171cafdb5a55134a9dcb575af12bc 100644 GIT binary patch delta 288 zcmV+*0pI?P0=oi`B!3BTNLh0L01m_e01m_fl`9S#0002(Nklt^>ZAg`L94 zK>z{}fB*#O4d8tBtn-K1gUQ#JAH@|szG&)%I83wvWZ1R^7k__SWfA5(|5Rn~eaD$Y zmfaAlf>1t!x^n=l>D>N6svwjAvP-$z??an`yav;btJX$tWs1TR=s zm>Bm=bB0gG7y>0C&+mEw@+V%vI%_0CPD=}*J%PIOq4D(u48!;@pe##VUEj3=k|b2R m;eHO#6$Bsv0T~D|I^YF;nNN6o#V(it0000_Lt@KW zf_k0a3&qD^&eV>G5s3q|6HrxZMW7Xn-;~IX|Nl_}hG7`S&K#CDh7ca(y3@!xR8uW# zM-|S~UR4**JuYnoaL&kDJ5>#J5?P}RRGGe1i*WrCA`Xj_nxX=C-jM|UyxEFUgqRu`Yo)! sfublji)S17_Q3kS-)zP(48z!kCuQa`y2*Aw2LJ#707*qoM6N<$f`3414FCWD diff --git a/Resources/Textures/Objects/Power/power_cells.rsi/o1.png b/Resources/Textures/Objects/Power/power_cells.rsi/o1.png index 348baff449932672a0729a9153ce4e5bd4cabd20..7d28199193808ed5c3facda1ddda69cbf5837ddf 100644 GIT binary patch delta 140 zcmXS0$v8o!p0mIsvY3H^?+6GpPSxgDzCuU~F` z>Lax%j-kh_Ug|}~;puYhK$RfyfbEOk{4hEsi5AW)Ni6l7k5JM+MoB< kGyBQ#G5fKCmD;fL_06?k|Zr9q?=rKY8%eLyS_`3B;W%81qWnEs}d>z0000N~y}*PuiTB zQn}!(j{^6mhTa7~uiuz^|EFI&Gf*`M6fo~o>pxqQd6#d-@zZzia~%51c-7D~NJFo| rblbE4`(!sfDv;Qq1y=gNVgYmOXHol`N)>Dj+(02uS3j3^P6Z2A`f00000{tsi%&kSKmoW2Ik&d%&$m^!@zt}Z7tl#wP500Bb-O@=&6Z6NC` zm~CYl4`e~ar6ffdo;`m9b|@*1AUO(bi#wn!Uxvcs5HKqg&3}=kID#YxfP9&sn+WG4 zv&jWSJK)ZpI}BU5<5%PDX$y`9nm7OiHgDblrhR<_7$)>LgW1X|x^S_r+Yf^sasC30 z900O}5CAy>6k0TK0CEVxd`>AKI|MW}b?EDW>({SkI$-Cvr6iSbRCfTaz^DU8 i9Wd&EQ3njT0~G+B{YM8T@dhsd0000ST5CAVyR-pF+Nr#kB zxuT+_M(KlxF%wYJvIWWl%s@+>6cH9_BAWzg{;K!;^}c@@1VIplojLdxT5F$ET$_@@ zR_?AeHI*&g*%;&9_vl*)5XUk1>jikAwFcmHzVQIG){Nsw*KKtnEyDzW+2n75X>uLf zXo-MQ3Z>LXF3)opM^Uui2Kv6IX&SG(RRjRqwgn)|GK?_*q-pAMO9&EJ`pDk|<{OwM u-&A0}fh0+`7x?zUhGF#TvAqU__& z04afzAiv=MsDR;ta;zi+Lp=j$fk$L90|Vb75M~tB@M-|+=<;-N46*QkJHcD1MS+La z)ug7W=>Kg$A%_WpkrAe=Uls|+hwIOH)F96_c|!j*=YS*DiE8s$)=qPMS+gZ1F_xW4 zTp^w}(qLu6L0Ji9Z_ynO4kjypVG=is?$vMP?nvk^j9l=a;dh;GhS{%*9oih5eoT4M xq7Z#LvOuEh!pR_(s_A^?LhpWZcW!s;kT8Gi-<0047(dh`GQ00DDSM?wIu&K&6g00BWsL_t(oh3%6&Zi7G& zhQCA+7jVS|QqUpg0DFN=m4Xxa1d*`h!lFP5SKtH`uDk^;2e3lN6-S;U1Dyi$JSWSto4qN~YJuZ8IF2)E;WNE00B~LRD&9l&(lbGK3lKtFMlc8h0HP=Y z;Nv9XU5G)&k|eniJ<5SCOICy=$um+Odfyv{!SQ%(Jk$CEK@ePAsQEm(5TcZ+lcJST z4oGS8g#@K|BXDG^mRe3UG17q=PfAwQPV6>{-9`--Fv@}7B9tQmZf&GHqKKpXbg*@xVx}UzRng*En;S7W@hG3@(pj{ VX&3t``3(R7002ovPDHLkV1jZUq|X2V diff --git a/Resources/Textures/Structures/Power/cell_recharger.rsi/full.png b/Resources/Textures/Structures/Power/cell_recharger.rsi/full.png index c133fd30e35cc0e17158a0e88392e738eb46eeb6..6f0256e3f1f435bc09697446f808e909f849f455 100644 GIT binary patch literal 395 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCilQ1AIbU^UK;+ZrgM9;S*zqnZ^ufW-=I`VKDX&E*0Q0n=*a1F~k4=491NU z=N&zM<^NU3|NocYfAFH9xZTpqEg&$;-78u}P0!NG$xz=8Xr93Koo|7ZWJ!=;@P8bD zfzgC(J5Uj4fk$L90|Vb75M~tB@M-`GF7b4646*Qkd-k?alY&4)qNeb66-&-N|0i!d z;N)c$YjHXBzri^Ud2jK3Uz{&2eUTo^%45y07a_i`b_eg4soD*j3sYnk>_7a0f#FtM zbEcERyyBRkkc&P7UPo13MOjRICx|euy?j#o2q#y(|3m3ztc6XR#HO*@E7&{EoWQu^ zFsImUR+;cQ3pUtJ=-TehYp^btdyjGMx#g3Y_T+t*F1REAUb$aD(m9%7QJ7{U*%ky20YQL7tY#C8 zZiRl)L9%3hRL{pf=k42Di23g%{EF>%`@=2YYPEdN9m07~Lw~VYbi||4=vcb}I6LaJ z2n0Hi&*vTSu^sRguvjb@kH>pC04b&G{cuAF;dy5Q9RR4;>i~4ST}QrLE^~cx1HfzY z1%ONI%8u9THKu9$&JHD@*=%~&o=Py35=Gg>iBbb83w9iYrvOD!Y>PXc4)E>3wwBA~ zm;tp~&2e@cXMZvoOw+Xc2ZO=hr-2#Xa zYUMgRlz?3a?s`4$fkzr(FMa?(RaFebK-07^qoX;nSzbcQf}Im0)V^o}b{%-HR=Le) zF$@C$P18_S^>hNf{(_%2S1Og$2_!1pNh&Brb(%LqkwWLqi}?a&Km7Y-IodD9@FVJxIe)6opSyrJ@xFJBSEo zs7@A&ia1IXky0&x2o-#Ac^~J!bGYw5K&Y3QW_3jYO}EWtOcFEMRWb02J_M

zC;{Csj`J}F1a^T&&2heu9j9>u_@99*z2&def!R;eYb`B&1Pp8g7uPLK*#jO@9|3sofnNXs0Uk+2K~!i%?U>CC!Y~YlUC!O3 z1LRsMS)sQMfW!dI(E*^`;l>Jy;F4k`$LsXqvUus_Lqt}jtuEGKFL9kkY% z#X%{B+4q>Cl7$UGB?}vXN*3}447vtSa+y2LOm*~ymKayoC+O_}-2A~>I0Pg9i9sEZ zN;P+SF?!<*AL1t;Lb5$|0ip&gYL{dAZy3}8GQD+xxlrtYlghzDZP!ry`~_|{#GDVS zM&vGk@N*Qs1|$nOf`(F@p){Gk-vWU!BwfTX0XOc~pJGC<0S$-(wqj@7kZM_A`GNL^ z@DYo5)*m(laN|Z-dtZ1WoP774FomfzAe{Unv7^`L{{g6EVFOUf!Umv{g$+O@3mbq+ i7V-u#48srx;0jEeVc4nQ2bll>002ovPDHK)LSTYe@-Sck delta 482 zcmV<80UiGR1*HU#Brb$$LqkwWLqi}?a&Km7Y-IodD3N`UJxIe)6opSyrJ@xFJBSEo zs7@A&ia1IYky0&xi1ESYeVq5s;lBF-p;2L~*%bv;%`#H)n3&D2ih)=3AxIU)sKiV? zkzUNebA8>z$M?Gk&+@+a=jvDTCIfsT@f_0)i+F>0X4BF+?-PeuNm7WFF{6;-2rA?vb#!g-6cTB)&CpZtZvytb0& zI@Ji`SV96xh>%f385LNF(5{hUB1Pvh5C5>^Pm)U}R~d{P3#dYc2j29_;-Q(Roopby5PHTQY zq5^WdJ4uHv00017Nklngc>|FHros@9g$dY=UH=Rcr(g(OLmBuRSH Y38la(DqkprqyPW_07*qoM6N<$f^#_D9{>OV diff --git a/Resources/Textures/Structures/Power/cell_recharger.rsi/light-charging.png b/Resources/Textures/Structures/Power/cell_recharger.rsi/light-charging.png index 15011fda1c0b04a0025a0e58d09b88ff5fb19e62..d11d1d8f124398f138158832bc93726d53f5f73e 100644 GIT binary patch delta 851 zcmV-Z1FZbU1nLHmB!7cxLqkwWLqi}?a&Km7Y-IodD9@FVO(;ZB9L0Y#h!|Ozg=Fy- zSeX)%ve6JJN@LUv7T$YfhMMnyLHpOJ;kI@6l$J4@2vxB zx8Q5j^F9wf@9PMv9^t|+`Ev&_@GkmhNo(JSrgb>GENR9zoNqwOLtb}uU#gNBOsC=X zM7}8r&DT&rSM2R)pW{1-OIH(Du)7DH8Offn@b0?u-hci)fgaQKy z2L=!h41XXT90G3?V@#ZVPiihF8DQ)sn3AUYN&gyV&Xt5qfB_n$7+|m0_Z$~)^A#2{ zf?vQNCnmr4o=7QL<~9KgkbsUA=n7O|3Uh6qI3ApR3kw;+EntM0e6GN{Gr~1tO+~6A zuc{LIH_-v~-n13Cu)k7)dfrx`JLIpx6iVu6>3;z1%u>}6liyZgG{TVL`kpHPO4WbV zPwD{LtXCYJ-F$|H9#Ob%pJ;i`e=_A3!5kmyf#YmT9~}GdIYmDe{bGW?d$vKpPicMr zM&15P=#O@QnEYLH2;Fr?7{Vu19_PY|92-YcE841e-wdAf+K@~2QwV#G`nmU?LVy1y z^h_sr0H$j{rB2DvFQ<=dpm1;v6b=j^92h`2Fo1Ai0O7y@!hr#V0|N*L1`rMm00000 d004k2h)$1&_q8^Gkp}<(002ovPDHLkV1lX;fmZ+k delta 557 zcmV+|0@D5J2F3)CB!7izLqkwWLqi}?a&Km7Y-IodD3N`UJxIeq9K~N#MX41BJBT=B zs7@B7iU=-J#UfZJZG~1HOfLO`CJjl7i=*ILaPVWX>fqw6tAnc`2!4RLxH>7iNQwVT z3N2zhIPS;0dyl(!fY7Kg)$E!8RLwF{@tBy+t%^Ob=tB?zM1L_WF;h>Z7c=l2U-$6w z^)AA*ywCkP`jx!N0G~)a$8^IY-XNadv~M{K$3L|nWrS;by?xO#aXS?SnHnrg~7bGlIA+i5yY{C1duoK31Pp8g7uRh~-UBXofT1T{G9*Xx(-aB? z;QfrgDF+PR0)aKRx7I#RAAk&XwR{5{90FrS%3k+)cYkkZZ~vZY_4fnnD{|KW*KtMw z004YRL_t(|obA=Y5yCJGMA1FaQTp!y*R(Xi!7%ZN8Qv>EKZi(800000fZuR6y_%kw z{Wvj{d#yG71%IwhduRiv`!2wS=?$FjZ)wx#^UPnmvjO_w^>4cXYbDoR!`{r+pX;Yd vo543w|0Y;}>jF$aLHYmy000000Pv9)uR2_riJRUm00000NkvXXu0mjf^I8YD diff --git a/Resources/Textures/Structures/Power/cell_recharger.rsi/light-empty.png b/Resources/Textures/Structures/Power/cell_recharger.rsi/light-empty.png index 82f905fdd9abce5a4aecf244bc983ca49d9c5a50..3480c524fb4ab62b192f2faa6f04b95959d6ae58 100644 GIT binary patch delta 218 zcmb&U>cv7h@-A}a#}180FpWHAE+-$4*&+%YlxEl_Z#r;B4qhV$E* z2L&Ar1YCu6H5F3J{(>v%a86DCu9lv9-RQ&%KuJiX|e8{53!QeZRx* z_L&V;{cOuz855#J7*MHov)0WIX|vf;GvyU?!sFBLf|Z=UGMdc}zkcIa!e5R36|A3* zdFR+I?pN^XW;(D%g8@c)hweYNui+mHhoditdPAsU<;T|@&Olc(c)I$ztaD0e0sw)U BQwab7 delta 78 zcmZo+s+?fxVeIMR7?RQW_M9Uxg8~EdM%xeXd3+DEusB6APWNVDU}z9G&73?hqhI*q h-DhtZfdW5HGs*sEIcL(4xd+H&@O1TaS?83{1OO~f8&d!P diff --git a/Resources/Textures/Structures/Power/cell_recharger.rsi/meta.json b/Resources/Textures/Structures/Power/cell_recharger.rsi/meta.json index 42ad3ab990d7d9..8f449561cac126 100644 --- a/Resources/Textures/Structures/Power/cell_recharger.rsi/meta.json +++ b/Resources/Textures/Structures/Power/cell_recharger.rsi/meta.json @@ -5,7 +5,7 @@ "y": 32 }, "license": "CC-BY-SA-3.0", - "copyright": "Taken from Goonstation at commit https://github.com/goonstation/goonstation/commit/4f88b9314336631929c9cdddb1567fc08f83bf9e and modified by potato1234x (github), then again by EmoGarbage404 (github) for ss14", + "copyright": "Taken from Goonstation at commit https://github.com/goonstation/goonstation/commit/4f88b9314336631929c9cdddb1567fc08f83bf9e and modified by potato1234x (github) for ss14", "states": [ { "name": "light-off" diff --git a/Resources/Textures/Structures/Power/cell_recharger.rsi/open.png b/Resources/Textures/Structures/Power/cell_recharger.rsi/open.png index 139296e18028b53ff332108b6e666046bc07d53b..059bf3abc261aa4727818fc603ed447515e31208 100644 GIT binary patch literal 381 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCilQ1AIbU^UK;+ZrgM9;S>MhQXU?$GYrNv8H{;(CC&>ATUxpC@k;XXNd~cq z80y;@Go0b)lNQ!EZ)xQe5Ey05Fw>afza(FWfPmbqb=E-hrYX)^0;D8Mg8YL2;{Xhd zCS2QriZ}~AB8wRq_zrMtk)v4f^+ApEq3K z$eCv2xmCwcpZm_kuD$&-zoTlaaz5JwYc{`q`3w(ZnA?=~8+YAgJj*)a&{WX|rychg zqAwMDot)%Q&Tf)ok>>rOf@$9^m9Pcx8D_5RP2&9}XmHV>hV8}v!W&hNlaBiMiySyL vZ9B`XT*>T6r4Rp?dgvc0t2ZbWvG~rGyeZgMEO@Us(1i@1u6{1-oD!M delta 130 zcmey%G=*`3WHlQD14D6D)fXVeSRCZ;#IWw1%u680&(p;*B%<~0Wk)Us1rC?M&b}9t zR%=UCZH4HZ^eX iU+}7uk%2*BGlSz%zNG~Ud+dQGGkCiCxvX Date: Sun, 11 Feb 2024 18:17:32 +0200 Subject: [PATCH 04/17] Revert "kill machine parts + migrate machine part spawners to salvage loot spawner (#23752)" This reverts commit df1d8c36e5e8b0773123c744a4acca473fb135ea. # Conflicts: # Resources/Prototypes/XenoArch/Effects/normal_effects.yml # Resources/migration.yml --- .../Interaction/MachineConstruction.cs | 29 +++ .../Interaction/InteractionTest.Constants.cs | 5 + .../Markers/Spawners/Random/salvage.yml | 71 ++++++- .../Entities/Objects/Misc/machine_parts.yml | 181 ++++++++++++++++++ .../Entities/Structures/Machines/lathe.yml | 6 + Resources/Prototypes/Recipes/Lathes/Parts.yml | 60 ++++++ .../Prototypes/Research/experimental.yml | 28 +++ .../XenoArch/Effects/normal_effects.yml | 24 ++- .../Guidebook/Science/MachineUpgrading.xml | 14 +- 9 files changed, 405 insertions(+), 13 deletions(-) diff --git a/Content.IntegrationTests/Tests/Construction/Interaction/MachineConstruction.cs b/Content.IntegrationTests/Tests/Construction/Interaction/MachineConstruction.cs index f52f820a4ce98b..17630405a45381 100644 --- a/Content.IntegrationTests/Tests/Construction/Interaction/MachineConstruction.cs +++ b/Content.IntegrationTests/Tests/Construction/Interaction/MachineConstruction.cs @@ -56,5 +56,34 @@ public async Task ChangeMachine() await Interact(Bin1, Bin1, Bin1, Manipulator1, Glass, Screw); AssertPrototype("Autolathe"); } + + [Test] + public async Task UpgradeLathe() + { + // Partially deconstruct a protolathe. + await SpawnTarget(Protolathe); + var serverTarget = SEntMan.GetEntity(Target!.Value); + + // Initially has all quality-1 parts. + foreach (var part in SConstruction.GetAllParts(serverTarget)) + { + Assert.That(part.Rating, Is.EqualTo(1)); + } + + // Partially deconstruct lathe + await Interact(Screw, Pry, Pry); + AssertPrototype(MachineFrame); + + // Reconstruct with better parts. + await Interact(ProtolatheBoard, Bin4, Bin4, Manipulator4, Manipulator4, Beaker, Beaker); + await Interact(Screw); + AssertPrototype(Protolathe); + + // Query now returns higher quality parts. + foreach (var part in SConstruction.GetAllParts(SEntMan.GetEntity(Target!.Value))) + { + Assert.That(part.Rating, Is.EqualTo(4)); + } + } } diff --git a/Content.IntegrationTests/Tests/Interaction/InteractionTest.Constants.cs b/Content.IntegrationTests/Tests/Interaction/InteractionTest.Constants.cs index 11381fb8ccd0d0..8ae36f1770014f 100644 --- a/Content.IntegrationTests/Tests/Interaction/InteractionTest.Constants.cs +++ b/Content.IntegrationTests/Tests/Interaction/InteractionTest.Constants.cs @@ -1,3 +1,4 @@ + namespace Content.IntegrationTests.Tests.Interaction; // This partial class contains various constant prototype IDs common to interaction tests. @@ -27,8 +28,12 @@ public abstract partial class InteractionTest // Parts protected const string Bin1 = "MatterBinStockPart"; + protected const string Bin4 = "BluespaceMatterBinStockPart"; protected const string Cap1 = "CapacitorStockPart"; + protected const string Cap4 = "QuadraticCapacitorStockPart"; protected const string Manipulator1 = "MicroManipulatorStockPart"; + protected const string Manipulator4 = "FemtoManipulatorStockPart"; protected const string Battery1 = "PowerCellSmall"; protected const string Battery4 = "PowerCellHyper"; } + diff --git a/Resources/Prototypes/Entities/Markers/Spawners/Random/salvage.yml b/Resources/Prototypes/Entities/Markers/Spawners/Random/salvage.yml index 34bf32d8d7bae7..5ab5a154cd2d9b 100644 --- a/Resources/Prototypes/Entities/Markers/Spawners/Random/salvage.yml +++ b/Resources/Prototypes/Entities/Markers/Spawners/Random/salvage.yml @@ -63,23 +63,78 @@ offset: 0.0 - type: entity - name: salvage loot spawner - id: SalvageLootSpawner + name: Salvage T2 Machine Parts Spawner + id: SalvagePartsT2Spawner parent: MarkerBase components: - type: Sprite layers: - state: red - - sprite: Objects/Weapons/Melee/crusher.rsi - state: icon + - sprite: Objects/Misc/stock_parts.rsi + state: advanced_matter_bin - type: RandomSpawner prototypes: - - WeaponCrusher - - WeaponCrusherDagger - - WeaponCrusherGlaive - - MiningDrill + - AdvancedCapacitorStockPart + - NanoManipulatorStockPart + - AdvancedMatterBinStockPart offset: 0.0 +- type: entity + parent: MarkerBase + id: SalvagePartsT3T4Spawner + name: tier 3/4 machine part + components: + - type: Sprite + layers: + - sprite: Objects/Misc/stock_parts.rsi + state: super_matter_bin + - type: RandomSpawner + rarePrototypes: + - QuadraticCapacitorStockPart + - FemtoManipulatorStockPart + - BluespaceMatterBinStockPart + rareChance: 0.05 + prototypes: + - SuperCapacitorStockPart + - PicoManipulatorStockPart + - SuperMatterBinStockPart + chance: 0.95 + offset: 0.0 + +- type: entity + parent: MarkerBase + id: SalvagePartsT3Spawner + name: tier 3 machine part + suffix: Spawner + components: + - type: Sprite + layers: + - sprite: Objects/Misc/stock_parts.rsi + state: super_matter_bin + - type: RandomSpawner + prototypes: + - SuperCapacitorStockPart + - PicoManipulatorStockPart + - SuperMatterBinStockPart + offset: 0.0 + +- type: entity + parent: MarkerBase + id: SalvagePartsT4Spawner + name: tier 4 machine part + suffix: Spawner + components: + - type: Sprite + layers: + - sprite: Objects/Misc/stock_parts.rsi + state: bluespace_matter_bin + - type: RandomSpawner + prototypes: + - QuadraticCapacitorStockPart + - PicoManipulatorStockPart + - BluespaceMatterBinStockPart + offset: 0.0 + - type: entity name: Salvage Mob Spawner id: SalvageMobSpawner diff --git a/Resources/Prototypes/Entities/Objects/Misc/machine_parts.yml b/Resources/Prototypes/Entities/Objects/Misc/machine_parts.yml index 4fe9a503efece4..c38239a08d1894 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/machine_parts.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/machine_parts.yml @@ -13,6 +13,8 @@ guides: - MachineUpgrading +# Rating 1 + - type: entity id: CapacitorStockPart name: capacitor @@ -54,3 +56,182 @@ - type: MachinePart part: MatterBin rating: 1 + +# Rating 2 + +- type: entity + id: AdvancedCapacitorStockPart + name: advanced capacitor + parent: CapacitorStockPart + description: An advanced capacitor used in the construction of a variety of devices. + suffix: Rating 2 + components: + - type: Sprite + state: adv_capacitor + - type: MachinePart + rating: 2 + +- type: entity + id: NanoManipulatorStockPart + name: advanced manipulator + parent: MicroManipulatorStockPart + description: An advanced manipulator used in the construction of a variety of devices. + suffix: Rating 2 + components: + - type: Sprite + state: nano_mani + - type: MachinePart + rating: 2 + +- type: entity + id: AdvancedMatterBinStockPart + name: advanced matter bin + parent: MatterBinStockPart + description: An advanced matter bin used in the construction of a variety of devices. + suffix: Rating 2 + components: + - type: Sprite + state: advanced_matter_bin + - type: MachinePart + rating: 2 + +# Rating 3 + +- type: entity + id: SuperCapacitorStockPart + name: super capacitor + parent: CapacitorStockPart + description: A super capacitor used in the construction of a variety of devices. + suffix: Rating 3 + components: + - type: Sprite + state: super_capacitor + - type: MachinePart + rating: 3 + +- type: entity + id: PicoManipulatorStockPart + name: super manipulator + parent: MicroManipulatorStockPart + description: A super manipulator used in the construction of a variety of devices. + suffix: Rating 3 + components: + - type: Sprite + state: pico_mani + - type: MachinePart + rating: 3 + +- type: entity + id: SuperMatterBinStockPart + name: super matter bin + parent: MatterBinStockPart + description: A super matter bin used in the construction of a variety of devices. + suffix: Rating 3 + components: + - type: Sprite + state: super_matter_bin + - type: MachinePart + rating: 3 + +# Rating 4 + +- type: entity + id: QuadraticCapacitorStockPart + name: bluespace capacitor + parent: CapacitorStockPart + description: A bluespace capacitor used in the construction of a variety of devices. + suffix: Rating 4 + components: + - type: Sprite + state: quadratic_capacitor + - type: MachinePart + rating: 4 + +- type: entity + id: FemtoManipulatorStockPart + name: bluespace manipulator + parent: MicroManipulatorStockPart + description: A bluespace manipulator used in the construction of a variety of devices. + suffix: Rating 4 + components: + - type: Sprite + state: femto_mani + - type: MachinePart + rating: 4 + +- type: entity + id: BluespaceMatterBinStockPart + name: bluespace matter bin + parent: MatterBinStockPart + description: A bluespace matter bin used in the construction of a variety of devices. + suffix: Rating 4 + components: + - type: Sprite + state: bluespace_matter_bin + - type: MachinePart + rating: 4 + +# Subspace stock parts (REMOVE THESE) + +- type: entity + id: AnsibleSubspaceStockPart + name: subspace ansible + parent: BaseStockPart + description: A compact module capable of sensing extradimensional activity. + components: + - type: Sprite + state: subspace_ansible + +- type: entity + id: FilterSubspaceStockPart + name: hyperwave filter + parent: BaseStockPart + description: A tiny device capable of filtering and converting super-intense radiowaves. + components: + - type: Sprite + state: hyperwave_filter + +- type: entity + id: AmplifierSubspaceStockPart + name: subspace amplifier + parent: BaseStockPart + description: A compact micro-machine capable of amplifying weak subspace transmissions. + components: + - type: Sprite + state: subspace_amplifier + +- type: entity + id: TreatmentSubspaceStockPart + name: subspace treatment disk + parent: BaseStockPart + description: A compact micro-machine capable of stretching out hyper-compressed radio waves. + components: + - type: Sprite + state: treatment_disk + +- type: entity + id: AnalyzerSubspaceStockPart + name: subspace wavelength analyzer + parent: BaseStockPart + description: A sophisticated analyzer capable of analyzing cryptic subspace wavelengths. + components: + - type: Sprite + state: wavelength_analyzer + +- type: entity + id: CrystalSubspaceStockPart + name: ansible crystal + parent: BaseStockPart + description: A crystal made from pure glass used to transmit laser databursts to subspace. + components: + - type: Sprite + state: ansible_crystal + +- type: entity + id: TransmitterSubspaceStockPart + name: subspace transmitter + parent: BaseStockPart + description: A large piece of equipment used to open a window into the subspace dimension. + components: + - type: Sprite + state: subspace_transmitter diff --git a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml index 37f1d96ae31274..c779b0f7d7e481 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml @@ -279,6 +279,12 @@ - PillCanister - ChemistryEmptyBottle01 - Drone + - AdvancedCapacitorStockPart + - AdvancedMatterBinStockPart + - NanoManipulatorStockPart + - SuperCapacitorStockPart + - SuperMatterBinStockPart + - PicoManipulatorStockPart - AdvMopItem - WeaponSprayNozzle - ClothingBackpackWaterTank diff --git a/Resources/Prototypes/Recipes/Lathes/Parts.yml b/Resources/Prototypes/Recipes/Lathes/Parts.yml index 90cff2174d6d73..496bc3a8a48aa1 100644 --- a/Resources/Prototypes/Recipes/Lathes/Parts.yml +++ b/Resources/Prototypes/Recipes/Lathes/Parts.yml @@ -1,3 +1,4 @@ +#Rating 1 - type: latheRecipe id: CapacitorStockPart result: CapacitorStockPart @@ -24,3 +25,62 @@ materials: Steel: 50 Plastic: 50 + +#Rating 2 +- type: latheRecipe + id: AdvancedCapacitorStockPart + result: AdvancedCapacitorStockPart + completetime: 3 + materials: + Steel: 80 + Plastic: 80 + Plasma: 75 + +- type: latheRecipe + id: AdvancedMatterBinStockPart + result: AdvancedMatterBinStockPart + completetime: 3 + materials: + Steel: 80 + Plastic: 80 + Plasma: 75 + +- type: latheRecipe + id: NanoManipulatorStockPart + result: NanoManipulatorStockPart + completetime: 3 + materials: + Steel: 80 + Plastic: 80 + Plasma: 75 + +#Rating 3 +- type: latheRecipe + id: SuperCapacitorStockPart + result: SuperCapacitorStockPart + completetime: 3 + materials: + Steel: 150 + Plastic: 150 + Plasma: 75 + Gold: 75 + +- type: latheRecipe + id: SuperMatterBinStockPart + result: SuperMatterBinStockPart + completetime: 3 + materials: + Steel: 150 + Plastic: 150 + Plasma: 75 + Gold: 75 + +- type: latheRecipe + id: PicoManipulatorStockPart + result: PicoManipulatorStockPart + completetime: 3 + materials: + Steel: 150 + Plastic: 150 + Plasma: 75 + Gold: 75 diff --git a/Resources/Prototypes/Research/experimental.yml b/Resources/Prototypes/Research/experimental.yml index bbb6ce568c2e0b..4162f8f4686299 100644 --- a/Resources/Prototypes/Research/experimental.yml +++ b/Resources/Prototypes/Research/experimental.yml @@ -84,6 +84,20 @@ # Tier 2 +- type: technology + id: AdvancedParts + name: research-technology-advanced-parts + icon: + sprite: Objects/Misc/stock_parts.rsi + state: advanced_matter_bin + discipline: Experimental + tier: 2 + cost: 10000 + recipeUnlocks: + - AdvancedCapacitorStockPart + - AdvancedMatterBinStockPart + - NanoManipulatorStockPart + - type: technology id: AbnormalArtifactManipulation name: research-technology-abnormal-artifact-manipulation @@ -140,6 +154,20 @@ # Tier 3 +- type: technology + id: SuperParts + name: research-technology-super-parts + icon: + sprite: Objects/Misc/stock_parts.rsi + state: super_matter_bin + discipline: Experimental + tier: 3 + cost: 15000 + recipeUnlocks: + - SuperCapacitorStockPart + - SuperMatterBinStockPart + - PicoManipulatorStockPart + - type: technology id: GravityManipulation name: research-technology-gravity-manipulation diff --git a/Resources/Prototypes/XenoArch/Effects/normal_effects.yml b/Resources/Prototypes/XenoArch/Effects/normal_effects.yml index 4810f0c5467f15..b514bbceddfe49 100644 --- a/Resources/Prototypes/XenoArch/Effects/normal_effects.yml +++ b/Resources/Prototypes/XenoArch/Effects/normal_effects.yml @@ -274,7 +274,7 @@ maxRange: 3 baseRadialAcceleration: 1 baseTangentialAcceleration: 3 - + - type: artifactEffect id: EffectAntiMagnet targetDepth: 1 @@ -388,8 +388,8 @@ orGroup: fauna maxAmount: 1 prob: 0.03 - - id: MobMouse - orGroup: fauna + - id: MobMouse + orGroup: fauna - id: MobParrot orGroup: fauna maxAmount: 1 @@ -583,6 +583,24 @@ messages: - shuffle-artifact-popup +- type: artifactEffect + id: EffectT4PartsSpawn + targetDepth: 3 + effectHint: artifact-effect-hint-creation + components: + - type: SpawnArtifact + maxSpawns: 10 + spawns: + - id: QuadraticCapacitorStockPart + prob: 0.5 + maxAmount: 3 + - id: FemtoManipulatorStockPart + prob: 0.5 + maxAmount: 3 + - id: BluespaceMatterBinStockPart + prob: 0.5 + maxAmount: 3 + - type: artifactEffect id: EffectFoamDangerous targetDepth: 3 diff --git a/Resources/ServerInfo/Guidebook/Science/MachineUpgrading.xml b/Resources/ServerInfo/Guidebook/Science/MachineUpgrading.xml index b6658f6671c7f4..286219b4d9e5f5 100644 --- a/Resources/ServerInfo/Guidebook/Science/MachineUpgrading.xml +++ b/Resources/ServerInfo/Guidebook/Science/MachineUpgrading.xml @@ -10,7 +10,14 @@ Machines help the station run smoothly, and as a scientist, you can help them ru -Machine Parts can be used to create many machines. +You can examine each machine part to see both the type and the rating, which range from 1 to 4. + +Parts of higher levels can be researched as well as found through artifacts or salvage. + + + + + ## Upgrading To know if a machine can be upgraded, you can examine it and check for the [color=#a4885c]lightning bolt[/color] icon in the lower right corner. Clicking on it will allow you to see what kinds of upgrades the machine has. @@ -22,7 +29,10 @@ To check what parts a machine needs, you can examine its board. Try it here: +You can use any rating part for any part requirement. Using higher rated parts will increase how effective the machine is. + +If you want to upgrade an existing machine, simply deconstruct it with a screwdriver and crowbar, and replace the existing parts with parts of a higher level. -You can also quickly build machines by using an RPED, loading it with machine parts, and then clicking on a machine. +You can also quickly upgrade machines by using an RPED, loading it with machine parts, and then clicking on a machine. It will quickly be upgraded with whatever parts were inserted. From 1344105088d7e9fa9f0b7cbd8a03a28a0a45e149 Mon Sep 17 00:00:00 2001 From: Ratyyy <138193222+Ratyyy@users.noreply.github.com> Date: Sun, 11 Feb 2024 19:37:53 +0200 Subject: [PATCH 05/17] Revert "Hyper convection lathes and industrial ore processor (#23202)" This reverts commit c3f81bfe033a14922dc6e91de402c56d321f3370. # Conflicts: # Content.Server/Lathe/Components/LatheHeatProducingComponent.cs # Content.Server/Lathe/LatheSystem.cs # Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/production.yml # Resources/Prototypes/Entities/Structures/Machines/lathe.yml # Resources/Prototypes/Recipes/Lathes/electronics.yml --- .../Components/LatheHeatProducingComponent.cs | 21 --- Content.Server/Lathe/LatheSystem.cs | 149 ++++++++---------- Content.Shared/Lathe/LatheComponent.cs | 34 +++- .../Circuitboards/Machine/production.yml | 92 ----------- .../Entities/Structures/Machines/lathe.yml | 71 +-------- .../Prototypes/Recipes/Lathes/electronics.yml | 9 -- Resources/Prototypes/Research/industrial.yml | 14 +- .../autolathe_hypercon.rsi/building.png | Bin 3124 -> 0 bytes .../Machines/autolathe_hypercon.rsi/icon.png | Bin 1319 -> 0 bytes .../autolathe_hypercon.rsi/inserting.png | Bin 711 -> 0 bytes .../Machines/autolathe_hypercon.rsi/meta.json | 51 ------ .../Machines/autolathe_hypercon.rsi/panel.png | Bin 470 -> 0 bytes .../Machines/autolathe_hypercon.rsi/unlit.png | Bin 166 -> 0 bytes .../ore_processor_industrial.rsi/building.png | Bin 1421 -> 0 bytes .../ore_processor_industrial.rsi/icon.png | Bin 903 -> 0 bytes .../inserting.png | Bin 2948 -> 0 bytes .../ore_processor_industrial.rsi/meta.json | 50 ------ .../ore_processor_industrial.rsi/panel.png | Bin 223 -> 0 bytes .../ore_processor_industrial.rsi/unlit.png | Bin 167 -> 0 bytes .../protolathe_hypercon.rsi/building.png | Bin 4341 -> 0 bytes .../Machines/protolathe_hypercon.rsi/icon.png | Bin 1199 -> 0 bytes .../protolathe_hypercon.rsi/inserting.png | Bin 652 -> 0 bytes .../protolathe_hypercon.rsi/meta.json | 52 ------ .../protolathe_hypercon.rsi/panel.png | Bin 761 -> 0 bytes .../protolathe_hypercon.rsi/unlit.png | Bin 202 -> 0 bytes 25 files changed, 106 insertions(+), 437 deletions(-) delete mode 100644 Content.Server/Lathe/Components/LatheHeatProducingComponent.cs delete mode 100644 Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/building.png delete mode 100644 Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/icon.png delete mode 100644 Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/inserting.png delete mode 100644 Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/meta.json delete mode 100644 Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/panel.png delete mode 100644 Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/unlit.png delete mode 100644 Resources/Textures/Structures/Machines/ore_processor_industrial.rsi/building.png delete mode 100644 Resources/Textures/Structures/Machines/ore_processor_industrial.rsi/icon.png delete mode 100644 Resources/Textures/Structures/Machines/ore_processor_industrial.rsi/inserting.png delete mode 100644 Resources/Textures/Structures/Machines/ore_processor_industrial.rsi/meta.json delete mode 100644 Resources/Textures/Structures/Machines/ore_processor_industrial.rsi/panel.png delete mode 100644 Resources/Textures/Structures/Machines/ore_processor_industrial.rsi/unlit.png delete mode 100644 Resources/Textures/Structures/Machines/protolathe_hypercon.rsi/building.png delete mode 100644 Resources/Textures/Structures/Machines/protolathe_hypercon.rsi/icon.png delete mode 100644 Resources/Textures/Structures/Machines/protolathe_hypercon.rsi/inserting.png delete mode 100644 Resources/Textures/Structures/Machines/protolathe_hypercon.rsi/meta.json delete mode 100644 Resources/Textures/Structures/Machines/protolathe_hypercon.rsi/panel.png delete mode 100644 Resources/Textures/Structures/Machines/protolathe_hypercon.rsi/unlit.png diff --git a/Content.Server/Lathe/Components/LatheHeatProducingComponent.cs b/Content.Server/Lathe/Components/LatheHeatProducingComponent.cs deleted file mode 100644 index 9da535eed832b7..00000000000000 --- a/Content.Server/Lathe/Components/LatheHeatProducingComponent.cs +++ /dev/null @@ -1,21 +0,0 @@ -using Content.Shared.Lathe; -using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom; - -namespace Content.Server.Lathe.Components; - -///

-/// This is used for a that releases heat into the surroundings while producing items. -/// -[RegisterComponent] -[Access(typeof(LatheSystem))] -public sealed partial class LatheHeatProducingComponent : Component -{ - /// - /// The amount of energy produced each second when producing an item. - /// - [DataField, ViewVariables(VVAccess.ReadWrite)] - public float EnergyPerSecond = 30000; - - [DataField(customTypeSerializer: typeof(TimeOffsetSerializer))] - public TimeSpan NextSecond; -} diff --git a/Content.Server/Lathe/LatheSystem.cs b/Content.Server/Lathe/LatheSystem.cs index 42faac0733857c..c6614fcd4f98c0 100644 --- a/Content.Server/Lathe/LatheSystem.cs +++ b/Content.Server/Lathe/LatheSystem.cs @@ -1,16 +1,13 @@ using System.Diagnostics.CodeAnalysis; using System.Linq; -using Content.Shared.Access.Systems; using Content.Server.Administration.Logs; -using Content.Server.Atmos; -using Content.Server.Atmos.EntitySystems; +using Content.Server.Construction; 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.Stack; -using Content.Shared.UserInterface; +using Content.Server.UserInterface; using Content.Shared.Database; using Content.Shared.Emag.Components; using Content.Shared.Lathe; @@ -19,10 +16,10 @@ using Content.Shared.Research.Prototypes; using JetBrains.Annotations; using Robust.Server.GameObjects; +using Robust.Shared.Audio; using Robust.Shared.Audio.Systems; using Robust.Shared.Prototypes; using Robust.Shared.Timing; -using Robust.Shared.Player; namespace Content.Server.Lathe { @@ -32,20 +29,12 @@ public sealed class LatheSystem : SharedLatheSystem [Dependency] private readonly IGameTiming _timing = default!; [Dependency] private readonly IPrototypeManager _proto = default!; [Dependency] private readonly IAdminLogManager _adminLogger = default!; - [Dependency] private readonly AtmosphereSystem _atmosphere = default!; [Dependency] private readonly SharedAppearanceSystem _appearance = default!; - [Dependency] private readonly AccessReaderSystem _accessReaderSystem = default!; [Dependency] private readonly SharedAudioSystem _audio = default!; [Dependency] private readonly UserInterfaceSystem _uiSys = default!; - [Dependency] private readonly PopupSystem _popup = default!; [Dependency] private readonly MaterialStorageSystem _materialStorage = default!; [Dependency] private readonly StackSystem _stack = default!; - [Dependency] private readonly TransformSystem _transform = default!; - - /// - /// Per-tick cache - /// - private readonly List _environments = new(); + [Dependency] private readonly IPrototypeManager _prototypeManager = default!; public override void Initialize() { @@ -53,6 +42,8 @@ public override void Initialize() SubscribeLocalEvent(OnGetWhitelist); SubscribeLocalEvent(OnMapInit); SubscribeLocalEvent(OnPowerChanged); + SubscribeLocalEvent(OnPartsRefresh); + SubscribeLocalEvent(OnUpgradeExamine); SubscribeLocalEvent(OnDatabaseModified); SubscribeLocalEvent(OnResearchRegistrationChanged); @@ -63,47 +54,54 @@ public override void Initialize() SubscribeLocalEvent(OnMaterialAmountChanged); SubscribeLocalEvent(OnGetRecipes); SubscribeLocalEvent(GetEmagLatheRecipes); - SubscribeLocalEvent(OnHeatStartPrinting); + + SubscribeLocalEvent(OnLatheEjectMessage); } - public override void Update(float frameTime) + private void OnLatheEjectMessage(EntityUid uid, LatheComponent lathe, LatheEjectMaterialMessage message) { - var query = EntityQueryEnumerator(); - while (query.MoveNext(out var uid, out var comp, out var lathe)) - { - if (lathe.CurrentRecipe == null) - continue; + if (!lathe.CanEjectStoredMaterials) + return; - if (_timing.CurTime - comp.StartTime >= comp.ProductionLength) - FinishProducing(uid, lathe); - } + if (!_prototypeManager.TryIndex(message.Material, out var material)) + return; - var heatQuery = EntityQueryEnumerator(); - while (heatQuery.MoveNext(out var uid, out var heatComp, out _, out var xform)) + var volume = 0; + + if (material.StackEntity != null) { - if (_timing.CurTime < heatComp.NextSecond) - continue; - heatComp.NextSecond += TimeSpan.FromSeconds(1); + var entProto = _prototypeManager.Index(material.StackEntity); + if (!entProto.TryGetComponent(out var composition)) + return; - var position = _transform.GetGridTilePositionOrDefault((uid, xform)); - _environments.Clear(); + var volumePerSheet = composition.MaterialComposition.FirstOrDefault(kvp => kvp.Key == message.Material).Value; + var sheetsToExtract = Math.Min(message.SheetsToExtract, _stack.GetMaxCount(material.StackEntity)); - if (_atmosphere.GetTileMixture(xform.GridUid, xform.MapUid, position, true) is { } tileMix) - _environments.Add(tileMix); + volume = sheetsToExtract * volumePerSheet; + } - if (xform.GridUid != null) + if (volume > 0 && _materialStorage.TryChangeMaterialAmount(uid, message.Material, -volume)) + { + var mats = _materialStorage.SpawnMultipleFromMaterial(volume, material, Transform(uid).Coordinates, out _); + foreach (var mat in mats) { - _environments.AddRange(_atmosphere.GetAdjacentTileMixtures(xform.GridUid.Value, position, false, true)); + if (TerminatingOrDeleted(mat)) + continue; + _stack.TryMergeToContacts(mat); } + } + } - if (_environments.Count > 0) - { - var heatPerTile = heatComp.EnergyPerSecond / _environments.Count; - foreach (var env in _environments) - { - _atmosphere.AddHeat(env, heatPerTile); - } - } + public override void Update(float frameTime) + { + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var uid, out var comp, out var lathe)) + { + if (lathe.CurrentRecipe == null) + continue; + + if (_timing.CurTime - comp.StartTime >= comp.ProductionLength) + FinishProducing(uid, lathe); } } @@ -112,7 +110,7 @@ private void OnGetWhitelist(EntityUid uid, LatheComponent component, ref GetMate if (args.Storage != uid) return; var materialWhitelist = new List>(); - var recipes = GetAvailableRecipes(uid, component, true); + var recipes = GetAllBaseRecipes(component); foreach (var id in recipes) { if (!_proto.TryIndex(id, out var proto)) @@ -131,18 +129,18 @@ private void OnGetWhitelist(EntityUid uid, LatheComponent component, ref GetMate } [PublicAPI] - public bool TryGetAvailableRecipes(EntityUid uid, [NotNullWhen(true)] out List>? recipes, [NotNullWhen(true)] LatheComponent? component = null, bool getUnavailable = false) + public bool TryGetAvailableRecipes(EntityUid uid, [NotNullWhen(true)] out List>? recipes, [NotNullWhen(true)] LatheComponent? component = null) { recipes = null; if (!Resolve(uid, ref component)) return false; - recipes = GetAvailableRecipes(uid, component, getUnavailable); + recipes = GetAvailableRecipes(uid, component); return true; } - public List> GetAvailableRecipes(EntityUid uid, LatheComponent component, bool getUnavailable = false) + public List> GetAvailableRecipes(EntityUid uid, LatheComponent component) { - var ev = new LatheGetRecipesEvent(uid, getUnavailable) + var ev = new LatheGetRecipesEvent(uid) { Recipes = new List>(component.StaticRecipes) }; @@ -182,6 +180,7 @@ public bool TryStartProducing(EntityUid uid, LatheComponent? component = null) return false; if (component.CurrentRecipe != null || component.Queue.Count <= 0 || !this.IsPowered(uid, EntityManager)) return false; + var recipe = component.Queue.First(); component.Queue.RemoveAt(0); @@ -190,9 +189,6 @@ public bool TryStartProducing(EntityUid uid, LatheComponent? component = null) lathe.ProductionLength = recipe.CompleteTime * component.TimeMultiplier; component.CurrentRecipe = recipe; - var ev = new LatheStartPrintingEvent(recipe); - RaiseLocalEvent(uid, ref ev); - _audio.PlayPvs(component.ProducingSound, uid); UpdateRunningAppearance(uid, true); UpdateUserInterfaceState(uid, component); @@ -240,7 +236,7 @@ private void OnGetRecipes(EntityUid uid, TechnologyDatabaseComponent component, foreach (var recipe in latheComponent.DynamicRecipes) { - if (!(args.getUnavailable || component.UnlockedRecipes.Contains(recipe)) || args.Recipes.Contains(recipe)) + if (!component.UnlockedRecipes.Contains(recipe) || args.Recipes.Contains(recipe)) continue; args.Recipes.Add(recipe); } @@ -250,11 +246,11 @@ private void GetEmagLatheRecipes(EntityUid uid, EmagLatheRecipesComponent compon { if (uid != args.Lathe || !TryComp(uid, out var technologyDatabase)) return; - if (!args.getUnavailable && !HasComp(uid)) + if (!HasComp(uid)) return; foreach (var recipe in component.EmagDynamicRecipes) { - if (!(args.getUnavailable || technologyDatabase.UnlockedRecipes.Contains(recipe)) || args.Recipes.Contains(recipe)) + if (!technologyDatabase.UnlockedRecipes.Contains(recipe) || args.Recipes.Contains(recipe)) continue; args.Recipes.Add(recipe); } @@ -264,11 +260,6 @@ private void GetEmagLatheRecipes(EntityUid uid, EmagLatheRecipesComponent compon } } - private void OnHeatStartPrinting(EntityUid uid, LatheHeatProducingComponent component, LatheStartPrintingEvent args) - { - component.NextSecond = _timing.CurTime; - } - private void OnMaterialAmountChanged(EntityUid uid, LatheComponent component, ref MaterialAmountChangedEvent args) { UpdateUserInterfaceState(uid, component); @@ -309,6 +300,22 @@ private void OnPowerChanged(EntityUid uid, LatheComponent component, ref PowerCh } } + private void OnPartsRefresh(EntityUid uid, LatheComponent component, RefreshPartsEvent args) + { + var printTimeRating = args.PartRatings[component.MachinePartPrintSpeed]; + var materialUseRating = args.PartRatings[component.MachinePartMaterialUse]; + + component.TimeMultiplier = MathF.Pow(component.PartRatingPrintTimeMultiplier, printTimeRating - 1); + component.MaterialUseMultiplier = MathF.Pow(component.PartRatingMaterialUseMultiplier, materialUseRating - 1); + Dirty(component); + } + + private void OnUpgradeExamine(EntityUid uid, LatheComponent component, UpgradeExamineEvent args) + { + args.AddPercentageUpgrade("lathe-component-upgrade-speed", 1 / component.TimeMultiplier); + args.AddPercentageUpgrade("lathe-component-upgrade-material-use", component.MaterialUseMultiplier); + } + private void OnDatabaseModified(EntityUid uid, LatheComponent component, ref TechnologyDatabaseModifiedEvent args) { UpdateUserInterfaceState(uid, component); @@ -327,15 +334,6 @@ protected override bool HasRecipe(EntityUid uid, LatheRecipePrototype recipe, La private void OnLatheQueueRecipeMessage(EntityUid uid, LatheComponent component, LatheQueueRecipeMessage args) { - if (args.Session.AttachedEntity is not {Valid: true} player) - return; - if (!_accessReaderSystem.IsAllowed(player, uid)) - { - ConsolePopup(args.Session, uid, Loc.GetString("lathe-production-not-allowed")); - PlayDenySound(uid, component); - return; - } - if (_proto.TryIndex(args.ID, out LatheRecipePrototype? recipe)) { var count = 0; @@ -356,19 +354,6 @@ private void OnLatheQueueRecipeMessage(EntityUid uid, LatheComponent component, UpdateUserInterfaceState(uid, component); } - private void ConsolePopup(ICommonSession session, EntityUid uid, string text) - { - _popup.PopupEntity(text, uid, session); - } - - private void PlayDenySound(EntityUid uid, LatheComponent component) - { - if (component.ErrorSound != null) - { - _audio.PlayEntity(_audio.GetSound(component.ErrorSound), Filter.Pvs(uid, entityManager: EntityManager), uid, false); - } - } - private void OnLatheSyncRequestMessage(EntityUid uid, LatheComponent component, LatheSyncRequestMessage args) { UpdateUserInterfaceState(uid, component); diff --git a/Content.Shared/Lathe/LatheComponent.cs b/Content.Shared/Lathe/LatheComponent.cs index 2458f74f82830d..ce3e4b7395d434 100644 --- a/Content.Shared/Lathe/LatheComponent.cs +++ b/Content.Shared/Lathe/LatheComponent.cs @@ -57,15 +57,39 @@ public sealed partial class LatheComponent : Component /// /// A modifier that changes how long it takes to print a recipe /// - [DataField, ViewVariables(VVAccess.ReadWrite)] + [ViewVariables(VVAccess.ReadWrite)] public float TimeMultiplier = 1; + /// + /// The machine part that reduces how long it takes to print a recipe. + /// + [DataField] + public ProtoId MachinePartPrintSpeed = "Manipulator"; + + /// + /// The value that is used to calculate the modified + /// + [DataField] + public float PartRatingPrintTimeMultiplier = 0.5f; + /// /// A modifier that changes how much of a material is needed to print a recipe /// - [DataField, ViewVariables(VVAccess.ReadWrite), AutoNetworkedField] + [ViewVariables(VVAccess.ReadWrite), AutoNetworkedField] public float MaterialUseMultiplier = 1; + /// + /// The machine part that reduces how much material it takes to print a recipe. + /// + [DataField] + public ProtoId MachinePartMaterialUse = "MatterBin"; + + /// + /// The value that is used to calculate the modifier + /// + [DataField] + public float PartRatingMaterialUseMultiplier = DefaultPartRatingMaterialUseMultiplier; + public const float DefaultPartRatingMaterialUseMultiplier = 0.85f; #endregion } @@ -84,10 +108,4 @@ public LatheGetRecipesEvent(EntityUid lathe, bool forced) getUnavailable = forced; } } - - /// - /// Event raised on a lathe when it starts producing a recipe. - /// - [ByRefEvent] - public readonly record struct LatheStartPrintingEvent(LatheRecipePrototype Recipe); } diff --git a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/production.yml b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/production.yml index 632a98837bf6c6..fccbdd787026b1 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/production.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/production.yml @@ -12,24 +12,6 @@ materialRequirements: Glass: 1 -- type: entity - parent: BaseMachineCircuitboard - id: AutolatheHyperConvectionMachineCircuitboard - name: hyper convection autolathe machine board - description: A machine printed circuit board for a hyper convection autolathe - components: - - type: MachineBoard - prototype: AutolatheHyperConvection - requirements: - MatterBin: 3 - materialRequirements: - Glass: 1 - tagRequirements: - Igniter: - Amount: 1 - DefaultPrototype: Igniter - ExamineName: Igniter - - type: entity id: ProtolatheMachineCircuitboard parent: BaseMachineCircuitboard @@ -399,46 +381,6 @@ deconstructionTarget: null node: heater -- type: entity - parent: BaseMachineCircuitboard - id: HellfireFreezerMachineCircuitBoard - name: hellfire freezer machine board - description: Looks like you could use a screwdriver to change the board type. - components: - - type: Sprite - state: engineering - - type: MachineBoard - prototype: GasThermoMachineHellfireFreezer - requirements: - MatterBin: 2 - Capacitor: 2 - materialRequirements: - Plasma: 1 - - type: Construction - deconstructionTarget: null - graph: ThermomachineBoard - node: hellfirefreezer - -- type: entity - parent: BaseMachineCircuitboard - id: HellfireHeaterMachineCircuitBoard - name: hellfire heater machine board - description: Looks like you could use a screwdriver to change the board type. - components: - - type: Sprite - state: engineering - - type: MachineBoard - prototype: GasThermoMachineHellfireHeater - requirements: - MatterBin: 2 - Capacitor: 2 - materialRequirements: - Plasma: 1 - - type: Construction - graph: ThermomachineBoard - deconstructionTarget: null - node: hellfireheater - - type: entity id: CondenserMachineCircuitBoard parent: BaseMachineCircuitboard @@ -735,25 +677,6 @@ - type: StaticPrice price: 15 -- type: entity - id: TurboItemRechargerCircuitboard - parent: BaseMachineCircuitboard - name: turbo recharger machine board - description: A machine printed circuit board for a turbo recharger. - components: - - type: Sprite - sprite: Objects/Misc/module.rsi - state: charger_APC - - type: MachineBoard - prototype: TurboItemRecharger - requirements: - Capacitor: 2 - materialRequirements: - CableMV: 5 - - type: PhysicalComposition - materialComposition: - Steel: 30 - Plastic: 30 - type: entity id: SubstationMachineCircuitboard @@ -1018,21 +941,6 @@ materialRequirements: Glass: 1 -- type: entity - parent: BaseMachineCircuitboard - id: OreProcessorIndustrialMachineCircuitboard - name: industrial ore processor machine board - components: - - type: Sprite - state: supply - - type: MachineBoard - prototype: OreProcessorIndustrial - requirements: - MatterBin: 1 - Manipulator: 3 - materialRequirements: - Glass: 1 - - type: entity id: SheetifierMachineCircuitboard parent: BaseMachineCircuitboard diff --git a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml index c779b0f7d7e481..9e7194288662e3 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml @@ -204,21 +204,6 @@ - GrenadeEMP - GrenadeFlash -- type: entity - id: AutolatheHyperConvection - parent: Autolathe - name: hyper convection autolathe - description: A highly-experimental autolathe that harnesses the power of extreme heat to slowly create objects more cost-effectively. - components: - - type: Sprite - sprite: Structures/Machines/autolathe_hypercon.rsi - - type: Lathe - materialUseMultiplier: 0.5 - timeMultiplier: 1.5 - - type: LatheHeatProducing - - type: Machine - board: AutolatheHyperConvectionMachineCircuitboard - - type: entity id: Protolathe parent: BaseLathe @@ -331,21 +316,6 @@ - WeaponLaserCannon - WeaponXrayCannon -- type: entity - id: ProtolatheHyperConvection - parent: Protolathe - name: hyper convection protolathe - description: A highly-experimental protolathe that harnesses the power of extreme heat to slowly create objects more cost-effectively. - components: - - type: Sprite - sprite: Structures/Machines/protolathe_hypercon.rsi - - type: Lathe - materialUseMultiplier: 0.5 - timeMultiplier: 1.5 - - type: LatheHeatProducing - - type: Machine - board: ProtolatheHyperConvectionMachineCircuitboard - - type: entity id: CircuitImprinter parent: BaseLathe @@ -371,11 +341,6 @@ idleState: icon runningState: building staticRecipes: - - ProtolatheMachineCircuitboard - - AutolatheMachineCircuitboard - - CircuitImprinterMachineCircuitboard - - OreProcessorMachineCircuitboard - - MaterialReclaimerMachineCircuitboard - ElectrolysisUnitMachineCircuitboard - CentrifugeMachineCircuitboard - ChemDispenserMachineCircuitboard @@ -408,8 +373,8 @@ - SolarTrackerElectronics - TurboItemRechargerCircuitboard - PowerComputerCircuitboard - - AutolatheHyperConvectionMachineCircuitboard - - ProtolatheHyperConvectionMachineCircuitboard + - AutolatheMachineCircuitboard + - ProtolatheMachineCircuitboard - ReagentGrinderMachineCircuitboard - MicrowaveMachineCircuitboard - ElectricGrillMachineCircuitboard @@ -418,11 +383,13 @@ - SheetifierMachineCircuitboard - ShuttleConsoleCircuitboard - RadarConsoleCircuitboard + - CircuitImprinterMachineCircuitboard - TechDiskComputerCircuitboard - DawInstrumentMachineCircuitboard - CloningConsoleComputerCircuitboard - StasisBedMachineCircuitboard - - OreProcessorIndustrialMachineCircuitboard + - MaterialReclaimerMachineCircuitboard + - OreProcessorMachineCircuitboard - CargoTelepadMachineCircuitboard - RipleyCentralElectronics - RipleyPeripheralsElectronics @@ -1230,34 +1197,6 @@ - IngotSilver30 - MaterialBananium10 -- type: entity - parent: OreProcessor - id: OreProcessorIndustrial - name: industrial ore processor - description: An ore processor specifically designed for mass-producing metals in industrial applications. - components: - - type: Sprite - sprite: Structures/Machines/ore_processor_industrial.rsi - - type: Machine - board: OreProcessorIndustrialMachineCircuitboard - - type: Lathe - materialUseMultiplier: 0.75 - timeMultiplier: 0.5 - staticRecipes: - - SheetSteel30 - - SheetGlass30 - - SheetRGlass30 - - SheetPlasma30 - - SheetPGlass30 - - SheetRPGlass30 - - SheetPlasteel30 - - SheetUranium30 - - SheetUGlass30 - - SheetRUGlass30 - - IngotGold30 - - IngotSilver30 - - MaterialBananium10 - - type: entity parent: BaseLathe id: Sheetifier diff --git a/Resources/Prototypes/Recipes/Lathes/electronics.yml b/Resources/Prototypes/Recipes/Lathes/electronics.yml index 432178fa6d58c6..c22565c61d65b8 100644 --- a/Resources/Prototypes/Recipes/Lathes/electronics.yml +++ b/Resources/Prototypes/Recipes/Lathes/electronics.yml @@ -487,15 +487,6 @@ materials: Steel: 100 Glass: 900 - -- type: latheRecipe - id: OreProcessorIndustrialMachineCircuitboard - result: OreProcessorIndustrialMachineCircuitboard - category: Circuitry - completetime: 4 - materials: - Steel: 100 - Glass: 900 Gold: 100 - type: latheRecipe diff --git a/Resources/Prototypes/Research/industrial.yml b/Resources/Prototypes/Research/industrial.yml index e1bbbc3c210769..8035c9ffa9185b 100644 --- a/Resources/Prototypes/Research/industrial.yml +++ b/Resources/Prototypes/Research/industrial.yml @@ -12,7 +12,7 @@ recipeUnlocks: - MiningDrill - BorgModuleMining - - OreProcessorIndustrialMachineCircuitboard + - OreProcessorMachineCircuitboard - OreBagOfHolding - type: technology @@ -44,14 +44,16 @@ id: IndustrialEngineering name: research-technology-industrial-engineering icon: - sprite: Structures/Machines/protolathe_hypercon.rsi - state: building + sprite: Structures/Machines/protolathe.rsi + state: icon discipline: Industrial tier: 1 - cost: 10000 + cost: 7500 recipeUnlocks: - - AutolatheHyperConvectionMachineCircuitboard - - ProtolatheHyperConvectionMachineCircuitboard + - ProtolatheMachineCircuitboard + - AutolatheMachineCircuitboard + - CircuitImprinterMachineCircuitboard + - MaterialReclaimerMachineCircuitboard - SheetifierMachineCircuitboard - type: technology diff --git a/Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/building.png b/Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/building.png deleted file mode 100644 index cb1abc7aa8e5c16ab9cc68f8c17361dd009c968d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3124 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 diff --git a/Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/icon.png b/Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/icon.png deleted file mode 100644 index 1cd22bea850ea63a2ca75d93b435e3ac43cb9cac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1319 zcmV+?1=#wDP)Px(;Ymb6R9J=OmuqZOWf;eQ@7aa56VB<%*g7^c?wtX)L7Cx;Y~cecB+A8@-~}QY zP5dOV5TbaAF-Ap=CK?kZieFGvf=oW3iA=(Vj55YxYX>;SER&>lauJ?rT? zg;nAwpQL%u^PGR*=l?#pw}t<^h*ZEEHdbr*>+sv19~yk7r{cVN%PalBG((Q@FEeYH!$0NfdQjAFR={6S3pUa{}iy0goqUn^MvQoFcmX?+=I5@<~CLiTx zB}w z_LPcn&FU5Wy!U`18Zi`^XJXECuU3acD+jyMUo`u&09cM zS0@mSfGjKHa-Nlyg(OM$#D&9Q3JZ&vI8ip(u3Zb#+k44?O(_Kjf2+$GFZR$M2lbf{ zFYc20$qCqPS$f}kJQeyBv)i%&XlZFCGt*`oyYVtQI!rJaq_S!`Jw08xTm`6V0GF$P zKWl&I_1CuQ?QJ43Nsfd}QN{|%Zp+f`0Q-O0bC+`q9(i;n0O7E)P!%PIDS1NtJ+6ad$+U+3b*i%FfwB!-DOOy)Q# z0f6UU`iq@kE@9)#M@^M%RoU_HlD$`y9Qt~DOmUXLbc4%% z0bbqoj^#Y~Xve!u$(xF%Y0iB~n=N&#kR3Q6~}I>eo_yrwD+GC68$x9p@-7ub{E<7y#3!N3Puq7tSI{ zX%rXF0-(LU4M~zHE}k9L&mzPazP-H-Aw-;hmRQXQAyHnwn8wBiX3UtwvHAm%fIYWi zwKh6B$`88_h+L;rdv9~cC$91b2oe?F<6h)<^Payq#@Fd%aCXKO-0pL#B( d|EB+m`~%bd8hrpsXP^K8002ovPDHLkV1lAoaLoV! diff --git a/Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/inserting.png b/Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/inserting.png deleted file mode 100644 index 8c927b29ceb1a3f06b68801c1c287005124fd15c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 711 zcmV;&0yzDNP)EX>4Tx04R}tkv&MmKpe$iQ>7vm2TK(Z%ut;yh>AFB6^c+H)C#RSm|Xe=O&XFE z7e~Rh;NZt%)xpJCR|i)?5c~jfbaGO3krMyc6k5c1aNLh~_a1le0HIc5n$C=Larhh zITlcc2D#w}|AXJ%TDi#yHz^ncI$s>;V+0870`;ond>=bb{RHqo16O*>U# zjOHnO-Q(R|?Y;ebrrF;QYqWBtL{jLA0002~NklpxQzW?*jKUvPX%Q^xG)(l{prk?v4RyBZ9N;-}sl~Q`|=V_DyxaBKoqye~P z0MU95fB=FCAXqbi^E`X*!}E_BtQmvMkHv^;4hkmWOjk tB7k552&N$utlAH7J{|x70002sI=`2Ba}ubIMLGZg002ovPDHLkV1h_IGcy1H diff --git a/Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/meta.json b/Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/meta.json deleted file mode 100644 index 3dfb0685f28a48..00000000000000 --- a/Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/meta.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "version": 1, - "license": "CC-BY-SA-3.0", - "copyright": "Created by UbaserB (GitHub) for SS14", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "icon" - }, - { - "name": "panel" - }, - { - "name": "unlit" - }, - { - "name": "building", - "delays": [ - [ - 0.5, - 0.5, - 0.5, - 0.5, - 0.5, - 0.5, - 0.5, - 0.5, - 0.5 - ] - ] - }, - { - "name": "inserting", - "delays": [ - [ - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1 - ] - ] - } - ] -} diff --git a/Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/panel.png b/Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/panel.png deleted file mode 100644 index 1e07131c13f38b7aa357372870b9086c613da367..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 470 zcmV;{0V)28P)Px$kV!;AR9J=W)lVqHVI0Tt_wzGbjmwhd#QG^&E=1XhaH6J!oy0+LktQc4c99}c zloNJSV+TeKEEnbGPYy2g?@HQ=9BlSDNW#Q^{#~Be?f3ki@Avuid+PfWq{-VqD$}ib zHZ?II-maO9G-_>evwv{><^5%)PL`HKDc@;E0{kRH0i=9?3sOp)-Zq@xwv;tOy!-lq zfh%y&_z1`(ns~{cNXE(YPZH|!JuO5cuWBN1o(%^GTP!lvgV$mDy@D`T07PrpA;#)4GCPs}+Ft_G0dOV*~?&?U;*TKrmfp zMtA5mxHFMbqG^(ZNu#6Wieb;uhdt8@Fc^&rfYb9+nmv-a13Liz!(2K`FPZ7urEj4e zfVGu4^_w@;jAvrYzW{Rr)-!Xqc67g>iAhizdzV@PnHl zZA`rzu~~K3pG~_0_PlzakmYo)KE*qsrbyO7xZ#b)qFOU9H%2iAhI`zK-%q4{iv`-n N;OXk;vd$@?2>|E|JBt7S diff --git a/Resources/Textures/Structures/Machines/ore_processor_industrial.rsi/building.png b/Resources/Textures/Structures/Machines/ore_processor_industrial.rsi/building.png deleted file mode 100644 index da9b15a9345d175843c2cb32df53123ac8bba1a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1421 zcmaKsX;9J$7{>o-Y6l)2ws?hEYfSBwwS`&;YMN=1M~Iq|XovTaT9AQ|mZD{@t7+r0 z7M3WQZfq8N?0$IPcjkHC-!t#0H_Q8^oBn#! z^#B0qyB~M))lA~YTC1z+lXppWngL1jb#n&ldd+75K*!D9#R*3)oiD@2o4LX|)X}f8 zhsJu^FESpneaws75~4QXD1eNjWnk&IJF|3Qzg^O+7SXk%28hYNG22BcuMq(WPj2snWfWWXo5WgC5)VH9v+RAJs$P$fky!ZTbq#5j!@x3tS!shM-XD* zSNXh3c#zc>fy#)y@LD`_38a#Kqs5rBm8X2n(i4G*7lv1Hgqwk+vGi~cTik*h(h)=6 z=S8w7cO4_N3MXCv$ZWcoI#iF(^RS-}AI6UJZ<3Z$xi9_UwZ#|?#2ULJ+2rJT>_O8@ z<4A&S*dE07cjJr?;91ab2p&bhAZZnYvKyC^<*G{iuX!t+mFO59<{K6q-y@Hv&&)&y zH>PmwvjzB+LwV*2z04S-nJKnv4h{kM16sgHBb8sDcHL+ZoRPE{+bvf^uo5CHzrVU^ zoTLM5KR4-|nU$TY4cDls-Wn(Oc;?7pSpoNM)y zTW-eEzyTjg;Z!J(G91-ySl<+~y1g>eG^WNxXS>2;u^_28jV4fb^S1pGHrDpO(PYLVLoK1J^W*cC5aM(N zT<-&@P*QWP@VsRjrQwcUJ!+O%b_19D{QNtGE)CAQR@?u~^GurqzZ0fvq22>G$$r(V zd0RyI&PZ!C&e^>&0AaU5#?Oqc$qJ6clWFVNDyr~D=k4QMZ~j2*#ifQ>bj4If=L3nu zo`7oHQK6&pO0WO-83w~qOyBDEZ4+lQxG&3LW+jXfmgGuWu`w#X)}_^QqB+u*Nz4kx!0vM35%MS|ScH2zw4{QC#`z;fAj$7+%n$!S3oeq#tz3 zVi@efyjbmBptaDZZw8fhhrfi|?Kg&8yRC$&FPXd7*=}r1%c# zL2d|Y%PH{-;HtV*T5%)Es$(KfpUhl{=IjWW@7@26$mB?UvwALIR^Aj(Si8N9y+o}5 zc<-AVin2lL7daDHL>66NWHLkW1!Frp=h%v)%#nv*Y`P(G-jhbow= z&Ejkr+zgx2>FqNrwt;@@(kbnzkx41Q<8lS0EwxwAXvrS#IQRcT*B49(nmDLXUYJIIIVn><}9HGvx7TAHRLM_uwN6Gp*c7KO^5xPx&K}keGR9J=Wmd|e6Mi9n-YuK_Am0VLYQAaRhOK#$*JvIIFKrIj;mpqtHKE*(a z)-TXQdPrRujVdQGse-j=l2&X}A3!W;xHI!{c4l|sfBeS~0Ig3R zs*-j?z*->QJzy;qI=`NXWdN;O<^KI`TDvX!=WY>4t3Y!B0@UgTo!1@Syg3D6d3M6- z>2C-j08lEOnCyl=x$%X4B^hRx+&g)K!jO+F>j2f@uXOUWhqByf{ zmX;>`gTPOWA>#To+b&iE0PBWKEkmtt;JW>UPS@pJf=a1mA)cLO&Px&SeUG1BzD!LF ztKKkbk?z&;&vOZ6A*&7&1U5D{`26wXxdju)XYEf*1&2u%>-Bn~o0b8B!2p2oUc4ye zNGZjiA3l^OaPgyy5CSRJqnL>dNV#6x>EDF_FwIQ`&~88aSArfN{{n#H^lld0G&hwd z^|?k{jYed68`|whyt5`})ukUq`$6bG@O&JnCm^;F2_XnPKl51>b)$w-ik+RENS;Mh z19$GMr9J|@e}AbtW#H=Sy3pQT2IteAv)k<^nJhh|r4o72x%OLX^j>dT26SS2zFw002ovPDHLkV1k_Ls_Xy& diff --git a/Resources/Textures/Structures/Machines/ore_processor_industrial.rsi/inserting.png b/Resources/Textures/Structures/Machines/ore_processor_industrial.rsi/inserting.png deleted file mode 100644 index 568e62f9a2ec6125eebca717f810c717ba9df192..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2948 zcmai0c{mj879WvOKE@Z7P?Qj|Gxi~b8SAw~mJE?KWXLudYqHCikr0t($jDNZWsoHq zSu;q+n6dBsOvbqL-9PUA=RWuT@t*UZ-*cYxoaem1_xGG6OLHTxvjS%U000-%*uaYE z;eQ_vcBY+s8LGx~EC?$jJplH*&@uqP34t2ivI)yyFL>f7IDffUCu6<7K&@@pBLB!%Y`z*(+UVZ0`wKLAK+9FT0ZaE*|aY237`REg?4 zo#~PA@c>-r=JSsTdA_0(cNEmstri;F!BacI)&W;LX`GJmhsayD1gQTIAlBN?>8a`Z z1+ARAebHk)jn=8@A^GDRYM9e9>1>s!f4FP5^SiS(FCa4XEb$5}u8j1#Kz@S7=-lny z{IjEpMn=*;alUD|rPCa2*;zjPXMsuG;wdBUcO@Nloe3$z24B8-G*){sn|ju38<8#~ zIVpcQ24dHzHGm>@q#UEWZJ?S?zVu?wp^1sF=>?k7QcGgaj%FPlO(~tEKxjZQnmHGl z=YZMl92e{jQD;K#pu6cs_{uMSJq|vxOwVx*Tm}0LSbK1pG{%9#8C_QPLqpe&fX+BQ z^)r$$+AH|o0*%&##dv?%u%pyzR;L*(X-DAg`yL0(!!x~A%*7E{xXCR$JBf0m)Y{7B zCiEs~afdJ##+V)0%2=S97;^v%3i2S}C~SER8{e4UU>|;a(WNV%$IAyfjMUXK6E%PCj)ovMJ?=KyT;?IC2 zddr~YR(QOrj*WdLj9QQRgX{446~pEkI^ao$&7z93@RK;hnne6%To>Vxd)YlXP)*lq zbjWJRvE73728E>2?M?MLB<^nj9AhD;LLr7r$#RI5tyR%|g z{)sy`pE5SxVkoEjm}KWZZg|a9Oenu)?utWmV~MinUEBajV~-w^`X&@Kdhq=optDYz z$bR7tsdQ=c?mv}o070`+ueLuDWIbAO-E);%)jC*j3==M8U}6{p8@K``+_;SDLn)2GT;_HTV<+ z^rK}QrEm0;$-V^vN31s&elh?lw2wONZf)zJ_b>lHG{3$5;k)W0Xh|D=+=GeZ@v=6w zxVoa~=JM+M0H7zvMgoEZITN;}8Ge^w48L8+yQo*g`+0LUU0*p=dYvoqw0kAL{UAnx62QK3V0O@IE*P^hFLRZDx_qN+3TSN5~WCYvzSgmX1`>!RIGN{gNau0voIiI&t zgQIvzZC;E?K&i(Om?AEm)Eio2ZvH;p+A)OAB5`EIk3Kc#f&wYkKv;E;_YdE%SJ|;_ zF-!u^X;C>YuRpJ&weOI3EepEERjb4WjGgAl$Lx_Aj z#XM&D&Weh%vr3`#|3Z3nZ!bZEcmTA=Hy*QG*nNmJ z-%Fz+5sF_LVP$j{?!XJ!Af0J{*%Ea*LNNC5ck=zR|8x(kDD@fgDLg zm9|2;usZFfQqLgtdW?p-Q;1v=Yet>+$T!N%?Qb}6);@;;to2l@Pd;+ diff --git a/Resources/Textures/Structures/Machines/ore_processor_industrial.rsi/meta.json b/Resources/Textures/Structures/Machines/ore_processor_industrial.rsi/meta.json deleted file mode 100644 index 30361f88d658bb..00000000000000 --- a/Resources/Textures/Structures/Machines/ore_processor_industrial.rsi/meta.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "version": 1, - "license": "CC-BY-SA-3.0", - "copyright": "Created by UbaserB (GitHub) for SS14, based on ore processor sprite from tgstation", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "inserting", - "delays": [ - [ - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 5 - ] - ] - }, - { - "name": "building", - "delays": [ - [ - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1 - ] - ] - }, - { - "name": "icon" - }, - { - "name": "panel" - }, - { - "name": "unlit" - } - ] -} diff --git a/Resources/Textures/Structures/Machines/ore_processor_industrial.rsi/panel.png b/Resources/Textures/Structures/Machines/ore_processor_industrial.rsi/panel.png deleted file mode 100644 index eebe7218534173cd11b6bee74dde877a871a381f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 223 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}Gd*1#Ln2z= zUNYo5_ie4u z6{gwI2lH&04?JU=Jv(ff_~rwrY&T{fUefS#VGTd~-+rGj@&&0^&+Pl#(9!Yd4tME7 WwJXtU-#P&u$>8bg=d#Wzp$PyrGg|Ec diff --git a/Resources/Textures/Structures/Machines/ore_processor_industrial.rsi/unlit.png b/Resources/Textures/Structures/Machines/ore_processor_industrial.rsi/unlit.png deleted file mode 100644 index 3b3190d1e7c10a80a7f58e28323b87ac6f8617a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 167 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 diff --git a/Resources/Textures/Structures/Machines/protolathe_hypercon.rsi/meta.json b/Resources/Textures/Structures/Machines/protolathe_hypercon.rsi/meta.json deleted file mode 100644 index b0326326f9792b..00000000000000 --- a/Resources/Textures/Structures/Machines/protolathe_hypercon.rsi/meta.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "version": 1, - "license": "CC-BY-SA-3.0", - "copyright": "Created by UbaserB (GitHub) for SS14", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "icon" - }, - { - "name": "panel" - }, - { - "name": "unlit" - }, - { - "name": "building", - "delays": [ - [ - 1.0, - 1.0, - 1.0, - 1.0, - 1.0, - 1.0, - 1.0, - 1.0, - 1.0, - 1.0 - ] - ] - }, - { - "name": "inserting", - "delays": [ - [ - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1 - ] - ] - } - ] -} diff --git a/Resources/Textures/Structures/Machines/protolathe_hypercon.rsi/panel.png b/Resources/Textures/Structures/Machines/protolathe_hypercon.rsi/panel.png deleted file mode 100644 index 1d2d0020325fb63d6c784c4c5dcc16ec93f6ab45..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 761 zcmVEX>4Tx04R}tkv&MmKpe$iQ$>-gh#jOjWT;LSL`5963Pq?8YK2xEOfLO`CJjl7 zi=*ILaPVWX>fqw6tAnc`2!4P#IXWr2NQwVT3N2zhIPS;0dyl(!fKV?p&FUBjG~G5+ ziMW`_u8Li+2tmLABIuKuWz0!Z629Z>9s$1I#dwzgxj#p*nzI-X5Q%4*VcNtS#M7I$ z!FiuJ%!;x~d`>)O(glehxvqHp#<}3Kz%#>UIyFxmCKd~Ath6yJni}yGaa7fG$`>*o ztDLtuYvn3y-jlyDl+#z1xlVH!2`pj>5=1DdqJ%PR#Aww?v5=zuxQ{>L`XzEH8?JJM&@_EV0003nNklqusNpzuO6y7KxAGQ0|NsCgXfX=3~N_0G6aYHXV|_#kYV|q z2@L5buNXdkXv3K%g#>FWPEBU4uOA^ r8ZZh*!6+C7qhJ(_f>AIE1{weW&AnJ}vUs!M00000NkvXXu0mjfeF#-7 diff --git a/Resources/Textures/Structures/Machines/protolathe_hypercon.rsi/unlit.png b/Resources/Textures/Structures/Machines/protolathe_hypercon.rsi/unlit.png deleted file mode 100644 index dd7d0d86435414a2e2c43ec95391faf393b30f05..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 202 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}EuJopArY-_ zFKy&)P!M3fu)fe*y+D#%d_xf%ck)YyjP+}8CzLt}a5cLL|Ib#4VPdao=;-Kpk$O{j z_O;NJ&aZv#=bk$~KjT4H2J`J3Sqv|(9lYcAENHj0p!S>FObh{=jk1lVNBO*1nY`~e z>wi_p;=}AW9{fyRby?iw!krI{W)=TDTvqZ;i83p{>saXubPt24tDnm{r-UW|lVeS4 From 96b8df4a9717d907674328485775deb407727c67 Mon Sep 17 00:00:00 2001 From: Ratyyy <138193222+Ratyyy@users.noreply.github.com> Date: Sun, 11 Feb 2024 21:22:05 +0200 Subject: [PATCH 06/17] blah-blah --- Content.Server/Lathe/LatheSystem.cs | 61 ++++++++----------- .../Shuttles/Components/ShuttleComponent.cs | 5 ++ .../Shuttles/Systems/ThrusterSystem.cs | 27 +------- Content.Shared/Lathe/LatheComponent.cs | 5 ++ .../markers/spawners/random/salvage.ftl | 2 - Resources/Locale/ru-RU/anomaly/anomaly.ftl | 1 + .../ru-RU/atmos/gas-recycler-system.ftl | 2 + .../botany/components/seed-component.ftl | 1 + .../ru-RU/cargo/cargo-console-component.ftl | 1 + .../components/machine-part-component.ftl | 2 + .../components/microwave-component.ftl | 1 + .../components/reagent-grinder-component.ftl | 2 + Resources/Locale/ru-RU/machine/machine.ftl | 4 ++ .../Locale/ru-RU/materials/materials.ftl | 1 + .../biomass-reclaimer-component.ftl | 1 + .../components/cloning-pod-component.ftl | 2 + .../components/medical-scanner-component.ftl | 1 + .../components/stasis-bed-component.ftl | 1 + .../nutrition/components/fat-extractor.ftl | 1 + .../components/emitter-component.ftl | 1 + .../markers/spawners/random/salvage.ftl | 2 - .../entities/objects/misc/machine_parts.ftl | 41 +++++++++++++ .../xenoarchaeology/traversal-distorter.ftl | 1 + Resources/Maps/Ruins/biodome_satellite.yml | 2 +- Resources/Maps/Ruins/derelict.yml | 2 +- Resources/Maps/Ruins/djstation.yml | 2 +- Resources/Maps/Ruins/old_ai_sat.yml | 2 +- Resources/Maps/Ruins/relaystation.yml | 2 +- Resources/Maps/Ruins/whiteship_ancient.yml | 2 +- .../Maps/Ruins/whiteship_bluespacejumper.yml | 2 +- Resources/Maps/Salvage/engineering-chunk.yml | 2 +- Resources/Maps/Salvage/outpost-arm.yml | 2 +- Resources/Maps/Salvage/small-3.yml | 2 +- Resources/Maps/Salvage/small-ship-1.yml | 2 +- Resources/Maps/Salvage/stationstation.yml | 2 +- Resources/Maps/Salvage/tick-colony.yml | 2 +- Resources/Maps/bagel.yml | 2 +- Resources/Maps/driller.yml | 2 +- Resources/Maps/fland.yml | 2 +- Resources/Maps/kilostation.yml | 4 +- Resources/Maps/saltern.yml | 2 +- Resources/migration.yml | 4 -- 42 files changed, 118 insertions(+), 90 deletions(-) create mode 100644 Resources/Locale/ru-RU/construction/components/machine-part-component.ftl create mode 100644 Resources/Locale/ru-RU/medical/components/stasis-bed-component.ftl diff --git a/Content.Server/Lathe/LatheSystem.cs b/Content.Server/Lathe/LatheSystem.cs index c6614fcd4f98c0..c05e2ce7c88097 100644 --- a/Content.Server/Lathe/LatheSystem.cs +++ b/Content.Server/Lathe/LatheSystem.cs @@ -20,6 +20,28 @@ using Robust.Shared.Audio.Systems; using Robust.Shared.Prototypes; using Robust.Shared.Timing; +using System.Diagnostics.CodeAnalysis; +using System.Linq; +using Content.Server.Administration.Logs; +using Content.Server.Atmos; +using Content.Server.Atmos.EntitySystems; +using Content.Server.Lathe.Components; +using Content.Server.Materials; +using Content.Server.Power.Components; +using Content.Server.Power.EntitySystems; +using Content.Server.Stack; +using Content.Shared.UserInterface; +using Content.Shared.Database; +using Content.Shared.Emag.Components; +using Content.Shared.Lathe; +using Content.Shared.Materials; +using Content.Shared.Research.Components; +using Content.Shared.Research.Prototypes; +using JetBrains.Annotations; +using Robust.Server.GameObjects; +using Robust.Shared.Audio.Systems; +using Robust.Shared.Prototypes; +using Robust.Shared.Timing; namespace Content.Server.Lathe { @@ -54,43 +76,8 @@ public override void Initialize() SubscribeLocalEvent(OnMaterialAmountChanged); SubscribeLocalEvent(OnGetRecipes); SubscribeLocalEvent(GetEmagLatheRecipes); - - SubscribeLocalEvent(OnLatheEjectMessage); } - private void OnLatheEjectMessage(EntityUid uid, LatheComponent lathe, LatheEjectMaterialMessage message) - { - if (!lathe.CanEjectStoredMaterials) - return; - - if (!_prototypeManager.TryIndex(message.Material, out var material)) - return; - - var volume = 0; - - if (material.StackEntity != null) - { - var entProto = _prototypeManager.Index(material.StackEntity); - if (!entProto.TryGetComponent(out var composition)) - return; - - var volumePerSheet = composition.MaterialComposition.FirstOrDefault(kvp => kvp.Key == message.Material).Value; - var sheetsToExtract = Math.Min(message.SheetsToExtract, _stack.GetMaxCount(material.StackEntity)); - - volume = sheetsToExtract * volumePerSheet; - } - - if (volume > 0 && _materialStorage.TryChangeMaterialAmount(uid, message.Material, -volume)) - { - var mats = _materialStorage.SpawnMultipleFromMaterial(volume, material, Transform(uid).Coordinates, out _); - foreach (var mat in mats) - { - if (TerminatingOrDeleted(mat)) - continue; - _stack.TryMergeToContacts(mat); - } - } - } public override void Update(float frameTime) { @@ -138,9 +125,9 @@ public bool TryGetAvailableRecipes(EntityUid uid, [NotNullWhen(true)] out List

> GetAvailableRecipes(EntityUid uid, LatheComponent component) + public List> GetAvailableRecipes(EntityUid uid, LatheComponent component, bool getUnavailable = false) { - var ev = new LatheGetRecipesEvent(uid) + var ev = new LatheGetRecipesEvent(uid, getUnavailable) { Recipes = new List>(component.StaticRecipes) }; diff --git a/Content.Server/Shuttles/Components/ShuttleComponent.cs b/Content.Server/Shuttles/Components/ShuttleComponent.cs index 949d8ea5bb240a..0bcf8e449afbb6 100644 --- a/Content.Server/Shuttles/Components/ShuttleComponent.cs +++ b/Content.Server/Shuttles/Components/ShuttleComponent.cs @@ -64,5 +64,10 @@ public sealed partial class ShuttleComponent : Component [DataField("angularDamping"), ViewVariables(VVAccess.ReadWrite)] public float AngularDamping = 0.05f; + ///

+ /// The cached thrust available for each cardinal direction, if all thrusters are T1 + /// + [ViewVariables] + public readonly float[] BaseLinearThrust = new float[4]; } } diff --git a/Content.Server/Shuttles/Systems/ThrusterSystem.cs b/Content.Server/Shuttles/Systems/ThrusterSystem.cs index 73e1ab0bebe8cd..3b9d2e99606a18 100644 --- a/Content.Server/Shuttles/Systems/ThrusterSystem.cs +++ b/Content.Server/Shuttles/Systems/ThrusterSystem.cs @@ -52,9 +52,6 @@ public override void Initialize() SubscribeLocalEvent(OnThrusterExamine); - SubscribeLocalEvent(OnRefreshParts); - SubscribeLocalEvent(OnUpgradeExamine); - SubscribeLocalEvent(OnShuttleTileChange); } @@ -204,12 +201,10 @@ private void OnRotate(EntityUid uid, ThrusterComponent component, ref MoveEvent if (component.Type == ThrusterType.Linear) { oldShuttleComponent.LinearThrust[oldDirection] -= component.Thrust; - oldShuttleComponent.BaseLinearThrust[oldDirection] -= component.BaseThrust; DebugTools.Assert(oldShuttleComponent.LinearThrusters[oldDirection].Contains(uid)); oldShuttleComponent.LinearThrusters[oldDirection].Remove(uid); - shuttleComponent.LinearThrust[direction] += component.Thrust; - shuttleComponent.BaseLinearThrust[direction] += component.BaseThrust; + shuttleComponent.BaseLinearThrust[direction] += component.Thrust; DebugTools.Assert(!shuttleComponent.LinearThrusters[direction].Contains(uid)); shuttleComponent.LinearThrusters[direction].Add(uid); } @@ -283,7 +278,6 @@ public void EnableThruster(EntityUid uid, ThrusterComponent component, Transform var direction = (int) xform.LocalRotation.GetCardinalDir() / 2; shuttleComponent.LinearThrust[direction] += component.Thrust; - shuttleComponent.BaseLinearThrust[direction] += component.BaseThrust; DebugTools.Assert(!shuttleComponent.LinearThrusters[direction].Contains(uid)); shuttleComponent.LinearThrusters[direction].Add(uid); @@ -382,7 +376,6 @@ public void DisableThruster(EntityUid uid, ThrusterComponent component, EntityUi var direction = (int) angle.Value.GetCardinalDir() / 2; shuttleComponent.LinearThrust[direction] -= component.Thrust; - shuttleComponent.BaseLinearThrust[direction] -= component.BaseThrust; DebugTools.Assert(shuttleComponent.LinearThrusters[direction].Contains(uid)); shuttleComponent.LinearThrusters[direction].Remove(uid); break; @@ -578,24 +571,6 @@ public void SetAngularThrust(ShuttleComponent component, bool on) } } - private void OnRefreshParts(EntityUid uid, ThrusterComponent component, RefreshPartsEvent args) - { - if (component.IsOn) // safely disable thruster to prevent negative thrust - DisableThruster(uid, component); - - var thrustRating = args.PartRatings[component.MachinePartThrust]; - - component.Thrust = component.BaseThrust * MathF.Pow(component.PartRatingThrustMultiplier, thrustRating - 1); - - if (component.Enabled && CanEnable(uid, component)) - EnableThruster(uid, component); - } - - private void OnUpgradeExamine(EntityUid uid, ThrusterComponent component, UpgradeExamineEvent args) - { - args.AddPercentageUpgrade("thruster-comp-upgrade-thrust", component.Thrust / component.BaseThrust); - } - #endregion private int GetFlagIndex(DirectionFlag flag) diff --git a/Content.Shared/Lathe/LatheComponent.cs b/Content.Shared/Lathe/LatheComponent.cs index ce3e4b7395d434..3ec4c8d98cd8f8 100644 --- a/Content.Shared/Lathe/LatheComponent.cs +++ b/Content.Shared/Lathe/LatheComponent.cs @@ -3,6 +3,8 @@ using Robust.Shared.Audio; using Robust.Shared.GameStates; using Robust.Shared.Prototypes; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; +using Content.Shared.Construction.Prototypes; namespace Content.Shared.Lathe { @@ -92,6 +94,9 @@ public sealed partial class LatheComponent : Component public const float DefaultPartRatingMaterialUseMultiplier = 0.85f; #endregion + + [DataField("machinePartMinTemp", customTypeSerializer: typeof(PrototypeIdSerializer))] + public string MachinePartMinTemp = "Capacitor"; } public sealed class LatheGetRecipesEvent : EntityEventArgs diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/entities/markers/spawners/random/salvage.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/entities/markers/spawners/random/salvage.ftl index ab373e9213a85b..fc8c16a7771665 100644 --- a/Resources/Locale/en-US/ss14-ru/prototypes/entities/markers/spawners/random/salvage.ftl +++ b/Resources/Locale/en-US/ss14-ru/prototypes/entities/markers/spawners/random/salvage.ftl @@ -2,8 +2,6 @@ ent-SalvageMaterialCrateSpawner = Salvage Material Crate Spawner .desc = { ent-MarkerBase.desc } ent-SalvageCanisterSpawner = Salvage Canister Spawner .desc = { ent-MarkerBase.desc } -ent-SalvageLootSpawner = salvage loot spawner - .desc = { ent-MarkerBase.desc } ent-SalvageMobSpawner = Salvage Mob Spawner .suffix = 25 .desc = { ent-MarkerBase.desc } diff --git a/Resources/Locale/ru-RU/anomaly/anomaly.ftl b/Resources/Locale/ru-RU/anomaly/anomaly.ftl index 7a13360ff9f8b4..9822350fede199 100644 --- a/Resources/Locale/ru-RU/anomaly/anomaly.ftl +++ b/Resources/Locale/ru-RU/anomaly/anomaly.ftl @@ -63,3 +63,4 @@ anomaly-command-supercritical = Делает целевую аномалию с # Flavor text on the footer anomaly-generator-flavor-left = Аномалия может возникнуть внутри оператора. anomaly-generator-flavor-right = v1.1 +anomaly-vessel-component-upgrade-output = Генерация очков \ No newline at end of file diff --git a/Resources/Locale/ru-RU/atmos/gas-recycler-system.ftl b/Resources/Locale/ru-RU/atmos/gas-recycler-system.ftl index 88d53389ac7ed9..27b67c006b419a 100644 --- a/Resources/Locale/ru-RU/atmos/gas-recycler-system.ftl +++ b/Resources/Locale/ru-RU/atmos/gas-recycler-system.ftl @@ -1,3 +1,5 @@ gas-recycler-reacting = Он [color=green]преобразовывает[/color] газы-отходы. gas-recycler-low-pressure = Входное давление [color=darkred]слишком низкое[/color]. gas-recycler-low-temperature = Входная температура [color=darkred]слишком низкая[/color]. +gas-recycler-upgrade-min-temp = Минимальная температура +gas-recycler-upgrade-min-pressure = Минимальное давление \ No newline at end of file diff --git a/Resources/Locale/ru-RU/botany/components/seed-component.ftl b/Resources/Locale/ru-RU/botany/components/seed-component.ftl index 76d62f7520a891..d8e0f47ac153c3 100644 --- a/Resources/Locale/ru-RU/botany/components/seed-component.ftl +++ b/Resources/Locale/ru-RU/botany/components/seed-component.ftl @@ -8,3 +8,4 @@ botany-seed-packet-name = пакет { $seedNoun } { $seedName } botany-harvest-fail-message = Вам не удаётся собрать ничего полезного. botany-harvest-success-message = Вы собираете урожай с { $name } botany-mysterious-description-addon = Однако, что-то в нём кажется странным. +seed-extractor-component-upgrade-seed-yield = Урожайность семян \ No newline at end of file diff --git a/Resources/Locale/ru-RU/cargo/cargo-console-component.ftl b/Resources/Locale/ru-RU/cargo/cargo-console-component.ftl index 84788e6812c6fc..b8b39e48508a9f 100644 --- a/Resources/Locale/ru-RU/cargo/cargo-console-component.ftl +++ b/Resources/Locale/ru-RU/cargo/cargo-console-component.ftl @@ -43,3 +43,4 @@ cargo-shuttle-console-station-unknown = Неизвестно cargo-shuttle-console-shuttle-not-found = Не найден cargo-no-shuttle = Грузовой шаттл не найден! cargo-shuttle-console-organics = На шаттле обнаружены органические формы жизни +cargo-telepad-delay-upgrade = Задержка телепортации \ No newline at end of file diff --git a/Resources/Locale/ru-RU/construction/components/machine-part-component.ftl b/Resources/Locale/ru-RU/construction/components/machine-part-component.ftl new file mode 100644 index 00000000000000..40bb57fffb57a1 --- /dev/null +++ b/Resources/Locale/ru-RU/construction/components/machine-part-component.ftl @@ -0,0 +1,2 @@ +machine-part-component-on-examine-rating-text = [color=white]Уровень:[/color] [color=cyan]{ $rating }[/color] +machine-part-component-on-examine-type-text = [color=white]Тип:[/color] [color=cyan]{ $type }[/color] \ No newline at end of file diff --git a/Resources/Locale/ru-RU/kitchen/components/microwave-component.ftl b/Resources/Locale/ru-RU/kitchen/components/microwave-component.ftl index 957c7c2e4a67e4..1b259ed0fe8294 100644 --- a/Resources/Locale/ru-RU/kitchen/components/microwave-component.ftl +++ b/Resources/Locale/ru-RU/kitchen/components/microwave-component.ftl @@ -24,3 +24,4 @@ microwave-menu-start-button = Старт microwave-menu-eject-all-text = Извлечь всё microwave-menu-eject-all-tooltip = Это испарит все жидкости, но вернёт всё твёрдое. microwave-menu-instant-button = МГНОВЕННО +microwave-component-upgrade-cook-time = Время готовки \ No newline at end of file diff --git a/Resources/Locale/ru-RU/kitchen/components/reagent-grinder-component.ftl b/Resources/Locale/ru-RU/kitchen/components/reagent-grinder-component.ftl index 98c5da87ef65df..2cea4d15b78cfa 100644 --- a/Resources/Locale/ru-RU/kitchen/components/reagent-grinder-component.ftl +++ b/Resources/Locale/ru-RU/kitchen/components/reagent-grinder-component.ftl @@ -11,3 +11,5 @@ grinder-menu-chamber-content-box-button = Извлечь содержимое grinder-menu-beaker-content-box-label = Стакан grinder-menu-beaker-content-box-button = Извлечь стакан grinder-menu-beaker-content-box-is-empty = Пусто +reagent-grinder-component-upgrade-storage = Вместимость +reagent-grinder-component-upgrade-work-time = Время работы \ No newline at end of file diff --git a/Resources/Locale/ru-RU/machine/machine.ftl b/Resources/Locale/ru-RU/machine/machine.ftl index 38a276e543b961..70245d43689ca6 100644 --- a/Resources/Locale/ru-RU/machine/machine.ftl +++ b/Resources/Locale/ru-RU/machine/machine.ftl @@ -15,3 +15,7 @@ two-way-lever-right = Вы сдвигаете рычаг вправо two-way-lever-cant = Рычаг не может быть сдвинут в эту сторону! recycler-count-items = Переработано { $items } объектов. machine-already-in-use = { CAPITALIZE($machine) } уже используется. +upgrade-power-draw = потребляемая мощность +upgrade-max-charge = максимальный заряд +upgrade-power-supply = блок питания +upgrade-power-supply-ramping = темп роста мощности \ No newline at end of file diff --git a/Resources/Locale/ru-RU/materials/materials.ftl b/Resources/Locale/ru-RU/materials/materials.ftl index 57de33544dbb08..0004899c3fe003 100644 --- a/Resources/Locale/ru-RU/materials/materials.ftl +++ b/Resources/Locale/ru-RU/materials/materials.ftl @@ -34,3 +34,4 @@ materials-raw-bananium = бананиум # Material Reclaimer +material-reclaimer-upgrade-process-rate = Скорость процесса \ No newline at end of file diff --git a/Resources/Locale/ru-RU/medical/components/biomass-reclaimer-component.ftl b/Resources/Locale/ru-RU/medical/components/biomass-reclaimer-component.ftl index 177bd8fda5cb80..12a4f205cb54dc 100644 --- a/Resources/Locale/ru-RU/medical/components/biomass-reclaimer-component.ftl +++ b/Resources/Locale/ru-RU/medical/components/biomass-reclaimer-component.ftl @@ -1 +1,2 @@ biomass-reclaimer-suicide-others = { CAPITALIZE($victim) } запрыгивает в переработчик биомассы! +biomass-reclaimer-component-upgrade-biomass-yield = Выработка биомассы \ No newline at end of file diff --git a/Resources/Locale/ru-RU/medical/components/cloning-pod-component.ftl b/Resources/Locale/ru-RU/medical/components/cloning-pod-component.ftl index e0bac00bdb3421..90913fc083b25f 100644 --- a/Resources/Locale/ru-RU/medical/components/cloning-pod-component.ftl +++ b/Resources/Locale/ru-RU/medical/components/cloning-pod-component.ftl @@ -1,2 +1,4 @@ cloning-pod-biomass = Содержит [color=red]{ $number }[/color] единиц биомассы. cloning-pod-component-upgrade-emag-requirement = Карточка ударяет током по чему-то внутри клонирующей капсулы. +cloning-pod-component-upgrade-speed = Скорость клонирования +cloning-pod-component-upgrade-biomass-requirement = Требуемая биомасса \ No newline at end of file diff --git a/Resources/Locale/ru-RU/medical/components/medical-scanner-component.ftl b/Resources/Locale/ru-RU/medical/components/medical-scanner-component.ftl index 9b69dd637e2924..b0d57602f175c2 100644 --- a/Resources/Locale/ru-RU/medical/components/medical-scanner-component.ftl +++ b/Resources/Locale/ru-RU/medical/components/medical-scanner-component.ftl @@ -2,3 +2,4 @@ medical-scanner-verb-enter = Залезть medical-scanner-verb-noun-occupant = пациента +medical-scanner-upgrade-cloning = Шанс неудачного клонирования \ No newline at end of file diff --git a/Resources/Locale/ru-RU/medical/components/stasis-bed-component.ftl b/Resources/Locale/ru-RU/medical/components/stasis-bed-component.ftl new file mode 100644 index 00000000000000..24e043f5a76dc0 --- /dev/null +++ b/Resources/Locale/ru-RU/medical/components/stasis-bed-component.ftl @@ -0,0 +1 @@ +stasis-bed-component-upgrade-stasis = Эффект стазиса diff --git a/Resources/Locale/ru-RU/nutrition/components/fat-extractor.ftl b/Resources/Locale/ru-RU/nutrition/components/fat-extractor.ftl index fb12c588ecbd1d..52294fd1ed2256 100644 --- a/Resources/Locale/ru-RU/nutrition/components/fat-extractor.ftl +++ b/Resources/Locale/ru-RU/nutrition/components/fat-extractor.ftl @@ -4,3 +4,4 @@ fat-extractor-fact-3 = Избыточный вес или ожирение по fat-extractor-fact-4 = Не все жиры вредны. Определенное количество жиров является неотъемлемой частью здорового сбалансированного питания. fat-extractor-fact-5 = Насыщенные жиры должны составлять не более 11% ваших ежедневных калорий. fat-extractor-fact-6 = Ненасыщенные жиры, то есть мононенасыщенные жиры, полиненасыщенные жиры и омега-3 жирные кислоты, содержатся в растениях и рыбе. +fat-extractor-component-rate = Скорость извлечения \ No newline at end of file diff --git a/Resources/Locale/ru-RU/singularity/components/emitter-component.ftl b/Resources/Locale/ru-RU/singularity/components/emitter-component.ftl index 0e8b8b91f44fe7..191c314792447b 100644 --- a/Resources/Locale/ru-RU/singularity/components/emitter-component.ftl +++ b/Resources/Locale/ru-RU/singularity/components/emitter-component.ftl @@ -10,3 +10,4 @@ comp-emitter-not-anchored = { $target } не закреплён! # Upgrades emitter-component-current-type = Текущий выбранный тип: { $type }. emitter-component-type-set = Тип установлен: { $type } +emitter-component-upgrade-fire-rate = Частота выстрелов \ No newline at end of file diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/markers/spawners/random/salvage.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/markers/spawners/random/salvage.ftl index dd722c231d03a0..c8babe3c8ae4c7 100644 --- a/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/markers/spawners/random/salvage.ftl +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/markers/spawners/random/salvage.ftl @@ -2,8 +2,6 @@ ent-SalvageMaterialCrateSpawner = спавнер ящика материалов .desc = { ent-MarkerBase.desc } ent-SalvageCanisterSpawner = спавнер канистры (обломок) .desc = { ent-MarkerBase.desc } -ent-SalvageLootSpawner = спавнер лута обломков - .desc = { ent-MarkerBase.desc } ent-SalvageMobSpawner = спавнер моба (обломок) .desc = { ent-MarkerBase.desc } .suffix = 25 diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/objects/misc/machine_parts.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/objects/misc/machine_parts.ftl index 41a157d2f60e30..eced53022eb3e7 100644 --- a/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/objects/misc/machine_parts.ftl +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/objects/misc/machine_parts.ftl @@ -9,3 +9,44 @@ ent-MicroManipulatorStockPart = манипулятор ent-MatterBinStockPart = ёмкость материи .desc = Базовая ёмкость материи, используемая в конструкции различных устройств. .suffix = Уровень 1 +ent-AdvancedCapacitorStockPart = улучшенный конденсатор + .desc = Улучшенный конденсатор, используемый в конструкции различных устройств. + .suffix = Уровень 2 +ent-NanoManipulatorStockPart = улучшенный манипулятор + .desc = Улучшенный манипулятор, используемый в конструкции различных устройств. + .suffix = Уровень 2 +ent-AdvancedMatterBinStockPart = улучшенная ёмкость материи + .desc = Улучшенная ёмкость материи, используемая в конструкции различных устройств. + .suffix = Уровень 2 +ent-SuperCapacitorStockPart = супер конденсатор + .desc = Супер конденсатор, используемый в конструкции различных устройств. + .suffix = Уровень 3 +ent-PicoManipulatorStockPart = супер манипулятор + .desc = Супер манипулятор, используемый в конструкции различных устройств. + .suffix = Уровень 3 +ent-SuperMatterBinStockPart = супер ёмкость материи + .desc = Супер ёмкость материи, используемая в конструкции различных устройств. + .suffix = Уровень 3 +ent-QuadraticCapacitorStockPart = блюспейс конденсатор + .desc = Блюспейс конденсатор, используемый в конструкции различных устройств. + .suffix = Уровень 4 +ent-FemtoManipulatorStockPart = блюспейс манипулятор + .desc = Блюспейс манипулятор, используемый в конструкции различных устройств. + .suffix = Уровень 4 +ent-BluespaceMatterBinStockPart = блюспейс ёмкость материи + .desc = Блюспейс ёмкость материи, используемая в конструкции различных устройств. + .suffix = Уровень 4 +ent-AnsibleSubspaceStockPart = подпространственный ансибл + .desc = Компактный модуль, способный определять внепространственную активность. +ent-FilterSubspaceStockPart = гиперволновой фильтр + .desc = Крошечное устройство, способное фильтровать и преобразовывать сверхинтенсивные радиоволны. +ent-AmplifierSubspaceStockPart = подпространственный усилитель + .desc = Компактная микромашина, способная усиливать слабые подпространственные сигналы. +ent-TreatmentSubspaceStockPart = диск подпространственной обработки + .desc = Компактная микромашина, способная протягивать гиперсжатые радиоволны. +ent-AnalyzerSubspaceStockPart = подпространственный анализатор длин волны + .desc = Сложный анализатор, способный анализировать длины волн загадочного подпространства. +ent-CrystalSubspaceStockPart = ансибл кристалл + .desc = Кристалл из чистого стекла, используемый для передачи лазерных импульсов с данными в подпространство. +ent-TransmitterSubspaceStockPart = подпространственный трансмиттер + .desc = Большая часть оборудования, используемая для открытия окна в подпространственное измерение. \ No newline at end of file diff --git a/Resources/Locale/ru-RU/xenoarchaeology/traversal-distorter.ftl b/Resources/Locale/ru-RU/xenoarchaeology/traversal-distorter.ftl index cc735a5fd34548..c4e13d8b2677ed 100644 --- a/Resources/Locale/ru-RU/xenoarchaeology/traversal-distorter.ftl +++ b/Resources/Locale/ru-RU/xenoarchaeology/traversal-distorter.ftl @@ -2,3 +2,4 @@ traversal-distorter-set-in = Поиск цепочек эффектов наст traversal-distorter-set-out = Поиск цепочек эффектов настроен на поиск "к поверхности" traversal-distorter-desc-in = Активация артефакта с большей вероятностью продвинет его исследование в глубину, к начальномму эффекту. traversal-distorter-desc-out = Активация артефакта с большей вероятностью продвинет его исследование к поверхности, к поздним и более опасным эффектам. +traversal-distorter-upgrade-bias = Шанс изменения цепочки эффектов \ No newline at end of file diff --git a/Resources/Maps/Ruins/biodome_satellite.yml b/Resources/Maps/Ruins/biodome_satellite.yml index 9e28da8192a548..3530747384c366 100644 --- a/Resources/Maps/Ruins/biodome_satellite.yml +++ b/Resources/Maps/Ruins/biodome_satellite.yml @@ -3151,7 +3151,7 @@ entities: rot: 3.141592653589793 rad pos: 4.5,-1.5 parent: 2 -- proto: SalvageLootSpawner +- proto: SalvagePartsT2Spawner entities: - uid: 41 components: diff --git a/Resources/Maps/Ruins/derelict.yml b/Resources/Maps/Ruins/derelict.yml index 5470b3e7e78a12..9527f0100bea73 100644 --- a/Resources/Maps/Ruins/derelict.yml +++ b/Resources/Maps/Ruins/derelict.yml @@ -4810,7 +4810,7 @@ entities: - type: Transform pos: 32.5,13.5 parent: 2 -- proto: SalvageLootSpawner +- proto: SalvagePartsT2Spawner entities: - uid: 2007 components: diff --git a/Resources/Maps/Ruins/djstation.yml b/Resources/Maps/Ruins/djstation.yml index 27d4b55581111e..6e19f80bb0975e 100644 --- a/Resources/Maps/Ruins/djstation.yml +++ b/Resources/Maps/Ruins/djstation.yml @@ -1391,7 +1391,7 @@ entities: - type: Transform pos: -8.5,-5.5 parent: 2 -- proto: SalvageLootSpawner +- proto: SalvagePartsT2Spawner entities: - uid: 336 components: diff --git a/Resources/Maps/Ruins/old_ai_sat.yml b/Resources/Maps/Ruins/old_ai_sat.yml index 4ff3d5e37a4c3a..391ad2c91738c2 100644 --- a/Resources/Maps/Ruins/old_ai_sat.yml +++ b/Resources/Maps/Ruins/old_ai_sat.yml @@ -1934,7 +1934,7 @@ entities: - type: Transform pos: 4.5,28.5 parent: 1 -- proto: SalvageLootSpawner +- proto: SalvagePartsT2Spawner entities: - uid: 516 components: diff --git a/Resources/Maps/Ruins/relaystation.yml b/Resources/Maps/Ruins/relaystation.yml index 3f3b08fa9fb07f..cbe4f0c4dd87f5 100644 --- a/Resources/Maps/Ruins/relaystation.yml +++ b/Resources/Maps/Ruins/relaystation.yml @@ -456,7 +456,7 @@ entities: - type: Transform pos: 0.5,-5.5 parent: 2 -- proto: SalvageLootSpawner +- proto: SalvagePartsT2Spawner entities: - uid: 98 components: diff --git a/Resources/Maps/Ruins/whiteship_ancient.yml b/Resources/Maps/Ruins/whiteship_ancient.yml index f41fa1c846709f..0d125d60575f00 100644 --- a/Resources/Maps/Ruins/whiteship_ancient.yml +++ b/Resources/Maps/Ruins/whiteship_ancient.yml @@ -528,7 +528,7 @@ entities: - type: Transform pos: 1.5,8.5 parent: 2 -- proto: SalvageLootSpawner +- proto: SalvagePartsT2Spawner entities: - uid: 297 components: diff --git a/Resources/Maps/Ruins/whiteship_bluespacejumper.yml b/Resources/Maps/Ruins/whiteship_bluespacejumper.yml index 83802cf03920f3..db4e69d57fb7a2 100644 --- a/Resources/Maps/Ruins/whiteship_bluespacejumper.yml +++ b/Resources/Maps/Ruins/whiteship_bluespacejumper.yml @@ -1285,7 +1285,7 @@ entities: - type: Transform pos: 19.250721,-11.514616 parent: 1 -- proto: SalvageLootSpawner +- proto: SalvagePartsT2Spawner entities: - uid: 169 components: diff --git a/Resources/Maps/Salvage/engineering-chunk.yml b/Resources/Maps/Salvage/engineering-chunk.yml index 53b0a24597c3ad..b414d07fab21f6 100644 --- a/Resources/Maps/Salvage/engineering-chunk.yml +++ b/Resources/Maps/Salvage/engineering-chunk.yml @@ -2215,7 +2215,7 @@ entities: - type: Transform pos: -5.5,14.5 parent: 1 -- proto: SalvageLootSpawner +- proto: SalvagePartsT2Spawner entities: - uid: 134 components: diff --git a/Resources/Maps/Salvage/outpost-arm.yml b/Resources/Maps/Salvage/outpost-arm.yml index 4d82773b9ebf73..5a50a531fcc04c 100644 --- a/Resources/Maps/Salvage/outpost-arm.yml +++ b/Resources/Maps/Salvage/outpost-arm.yml @@ -1262,7 +1262,7 @@ entities: - type: Transform pos: 6.5,10.5 parent: 1 -- proto: SalvageLootSpawner +- proto: SalvagePartsT2Spawner entities: - uid: 193 components: diff --git a/Resources/Maps/Salvage/small-3.yml b/Resources/Maps/Salvage/small-3.yml index 7a29b665ff6bd0..4435648aac853c 100644 --- a/Resources/Maps/Salvage/small-3.yml +++ b/Resources/Maps/Salvage/small-3.yml @@ -371,7 +371,7 @@ entities: - type: Transform pos: -4.5,0.5 parent: 10 -- proto: SalvageLootSpawner +- proto: SalvagePartsT2Spawner entities: - uid: 457 components: diff --git a/Resources/Maps/Salvage/small-ship-1.yml b/Resources/Maps/Salvage/small-ship-1.yml index ae6e53cd0e7040..ce4cb72669ba29 100644 --- a/Resources/Maps/Salvage/small-ship-1.yml +++ b/Resources/Maps/Salvage/small-ship-1.yml @@ -147,7 +147,7 @@ entities: - type: Transform pos: -0.5,-0.5 parent: 13 -- proto: SalvageLootSpawner +- proto: SalvagePartsT2Spawner entities: - uid: 8 components: diff --git a/Resources/Maps/Salvage/stationstation.yml b/Resources/Maps/Salvage/stationstation.yml index 82ed15f3537070..a732b93946d2a5 100644 --- a/Resources/Maps/Salvage/stationstation.yml +++ b/Resources/Maps/Salvage/stationstation.yml @@ -1955,7 +1955,7 @@ entities: - type: Transform pos: 13.460129,17.611423 parent: 179 -- proto: SalvageLootSpawner +- proto: SalvagePartsT2Spawner entities: - uid: 185 components: diff --git a/Resources/Maps/Salvage/tick-colony.yml b/Resources/Maps/Salvage/tick-colony.yml index 6b0922f3ccbe01..ec1e1be1e8f302 100644 --- a/Resources/Maps/Salvage/tick-colony.yml +++ b/Resources/Maps/Salvage/tick-colony.yml @@ -840,7 +840,7 @@ entities: - type: Transform pos: -0.5,2.5 parent: 119 -- proto: SalvageLootSpawner +- proto: SalvagePartsT2Spawner entities: - uid: 43 components: diff --git a/Resources/Maps/bagel.yml b/Resources/Maps/bagel.yml index d7e89cd035f784..7b6aa81b1e546d 100644 --- a/Resources/Maps/bagel.yml +++ b/Resources/Maps/bagel.yml @@ -125249,7 +125249,7 @@ entities: - type: Transform pos: 43.534462,13.459317 parent: 60 -- proto: SalvageLootSpawner +- proto: SalvagePartsT2Spawner entities: - uid: 5030 components: diff --git a/Resources/Maps/driller.yml b/Resources/Maps/driller.yml index 1953dac06f410c..33860da186868b 100644 --- a/Resources/Maps/driller.yml +++ b/Resources/Maps/driller.yml @@ -77661,7 +77661,7 @@ entities: - type: Transform pos: -27.629288,-40.354176 parent: 2 -- proto: SalvageLootSpawner +- proto: SalvagePartsT2Spawner entities: - uid: 4020 components: diff --git a/Resources/Maps/fland.yml b/Resources/Maps/fland.yml index a71c1c17f2781e..677fe3f224d612 100644 --- a/Resources/Maps/fland.yml +++ b/Resources/Maps/fland.yml @@ -188754,7 +188754,7 @@ entities: - type: Transform pos: 21.482563,-11.35629 parent: 13329 -- proto: SalvageLootSpawner +- proto: SalvagePartsT2Spawner entities: - uid: 29379 components: diff --git a/Resources/Maps/kilostation.yml b/Resources/Maps/kilostation.yml index e505a5e46f786c..05e486b2dc7534 100644 --- a/Resources/Maps/kilostation.yml +++ b/Resources/Maps/kilostation.yml @@ -158824,7 +158824,7 @@ entities: parent: 2 - type: Paper content: >- - Я хочу любить тебя, но мне лучше не прикасаться + Я хочу любить тебя, но мне лучше не прикасаться Я хочу обнять тебя, но мои чувства говорят мне остановиться @@ -173463,7 +173463,7 @@ entities: - type: Transform pos: 34.487278,-10.491542 parent: 2 -- proto: SalvageLootSpawner +- proto: SalvagePartsT2Spawner entities: - uid: 5702 components: diff --git a/Resources/Maps/saltern.yml b/Resources/Maps/saltern.yml index a9604c4a727428..11a0b69dabeff7 100644 --- a/Resources/Maps/saltern.yml +++ b/Resources/Maps/saltern.yml @@ -56976,7 +56976,7 @@ entities: - type: Transform pos: -11.5,-28.5 parent: 31 -- proto: SalvageLootSpawner +- proto: SalvagePartsT2Spawner entities: - uid: 592 components: diff --git a/Resources/migration.yml b/Resources/migration.yml index 9cbe22bc93f412..d1a5ea3957a43e 100644 --- a/Resources/migration.yml +++ b/Resources/migration.yml @@ -133,10 +133,6 @@ ClosetBase: ClosetSteelBase MonkeyCubeBox: VariantCubeBox # 2024-01-08 -SalvagePartsT4Spawner: SalvageLootSpawner -SalvagePartsT3Spawner: SalvageLootSpawner -SalvagePartsT3T4Spawner: SalvageLootSpawner -SalvagePartsT2Spawner: SalvageLootSpawner AdvancedCapacitorStockPart: CapacitorStockPart SuperCapacitorStockPart: CapacitorStockPart QuadraticCapacitorStockPart: CapacitorStockPart From 9e8944efca50e258f7b4be0104700ec96c3ea47c Mon Sep 17 00:00:00 2001 From: Ratyyy <138193222+Ratyyy@users.noreply.github.com> Date: Sun, 11 Feb 2024 21:27:33 +0200 Subject: [PATCH 07/17] Revert "Experimental Anomaly Vessel (#22233)" This reverts commit e7e7974a24d03e3da788cd55ff4987d278148927. # Conflicts: # Content.Shared/Radiation/Components/RadiationSourceComponent.cs # Resources/Prototypes/Recipes/Lathes/electronics.yml --- .../Anomaly/AnomalySystem.Vessel.cs | 9 ++++- Content.Server/Anomaly/AnomalySystem.cs | 3 +- .../Components/AnomalyVesselComponent.cs | 17 ++++++++- .../Systems/RadiationSystem.GridCast.cs | 3 -- .../Radiation/Systems/RadiationSystem.cs | 9 ----- .../Circuitboards/Machine/production.yml | 19 +--------- .../Structures/Machines/anomaly_equipment.yml | 34 ++++------------- .../Entities/Structures/Machines/lathe.yml | 1 - .../Prototypes/Recipes/Lathes/electronics.yml | 11 +----- .../Prototypes/Research/experimental.yml | 1 - .../adv_anomaly_vessel.rsi/anomaly-1.png | Bin 273 -> 0 bytes .../adv_anomaly_vessel.rsi/anomaly-2.png | Bin 259 -> 0 bytes .../adv_anomaly_vessel.rsi/anomaly-3.png | Bin 250 -> 0 bytes .../Anomaly/adv_anomaly_vessel.rsi/base.png | Bin 1075 -> 0 bytes .../Anomaly/adv_anomaly_vessel.rsi/meta.json | 35 ------------------ .../Anomaly/adv_anomaly_vessel.rsi/panel.png | Bin 223 -> 0 bytes .../adv_anomaly_vessel.rsi/powered-1.png | Bin 159 -> 0 bytes .../adv_anomaly_vessel.rsi/powered-2.png | Bin 176 -> 0 bytes .../adv_anomaly_vessel.rsi/powered-3.png | Bin 177 -> 0 bytes 19 files changed, 33 insertions(+), 109 deletions(-) delete mode 100644 Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/anomaly-1.png delete mode 100644 Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/anomaly-2.png delete mode 100644 Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/anomaly-3.png delete mode 100644 Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/base.png delete mode 100644 Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/meta.json delete mode 100644 Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/panel.png delete mode 100644 Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/powered-1.png delete mode 100644 Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/powered-2.png delete mode 100644 Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/powered-3.png diff --git a/Content.Server/Anomaly/AnomalySystem.Vessel.cs b/Content.Server/Anomaly/AnomalySystem.Vessel.cs index e1394ec44875d0..02c435d2425084 100644 --- a/Content.Server/Anomaly/AnomalySystem.Vessel.cs +++ b/Content.Server/Anomaly/AnomalySystem.Vessel.cs @@ -20,6 +20,7 @@ private void InitializeVessel() { SubscribeLocalEvent(OnVesselShutdown); SubscribeLocalEvent(OnVesselMapInit); + SubscribeLocalEvent(OnRefreshParts); SubscribeLocalEvent(OnUpgradeExamine); SubscribeLocalEvent(OnVesselInteractUsing); SubscribeLocalEvent(OnExamined); @@ -67,6 +68,12 @@ private void OnVesselMapInit(EntityUid uid, AnomalyVesselComponent component, Ma UpdateVesselAppearance(uid, component); } + private void OnRefreshParts(EntityUid uid, AnomalyVesselComponent component, RefreshPartsEvent args) + { + var modifierRating = args.PartRatings[component.MachinePartPointModifier] - 1; + component.PointMultiplier = MathF.Pow(component.PartRatingPointModifier, modifierRating); + } + private void OnUpgradeExamine(EntityUid uid, AnomalyVesselComponent component, UpgradeExamineEvent args) { args.AddPercentageUpgrade("anomaly-vessel-component-upgrade-output", component.PointMultiplier); @@ -86,7 +93,6 @@ private void OnVesselInteractUsing(EntityUid uid, AnomalyVesselComponent compone component.Anomaly = scanner.ScannedAnomaly; anomalyComponent.ConnectedVessel = uid; - _radiation.SetSourceEnabled(uid, true); UpdateVesselAppearance(uid, component); Popup.PopupEntity(Loc.GetString("anomaly-vessel-component-anomaly-assigned"), uid); } @@ -114,7 +120,6 @@ private void OnVesselAnomalyShutdown(ref AnomalyShutdownEvent args) component.Anomaly = null; UpdateVesselAppearance(ent, component); - _radiation.SetSourceEnabled(ent, false); if (!args.Supercritical) continue; diff --git a/Content.Server/Anomaly/AnomalySystem.cs b/Content.Server/Anomaly/AnomalySystem.cs index c3f19aa1777a71..bb7a7304d9bb45 100644 --- a/Content.Server/Anomaly/AnomalySystem.cs +++ b/Content.Server/Anomaly/AnomalySystem.cs @@ -3,13 +3,13 @@ using Content.Server.Audio; using Content.Server.Explosion.EntitySystems; using Content.Server.Materials; -using Content.Server.Radiation.Systems; using Content.Server.Radio.EntitySystems; using Content.Server.Station.Systems; using Content.Shared.Anomaly; using Content.Shared.Anomaly.Components; using Content.Shared.DoAfter; using Robust.Server.GameObjects; +using Robust.Shared.Audio; using Robust.Shared.Audio.Systems; using Robust.Shared.Configuration; using Robust.Shared.Physics.Events; @@ -33,7 +33,6 @@ public sealed partial class AnomalySystem : SharedAnomalySystem [Dependency] private readonly SharedPointLightSystem _pointLight = default!; [Dependency] private readonly StationSystem _station = default!; [Dependency] private readonly RadioSystem _radio = default!; - [Dependency] private readonly RadiationSystem _radiation = default!; [Dependency] private readonly SharedAudioSystem _audio = default!; [Dependency] private readonly UserInterfaceSystem _ui = default!; diff --git a/Content.Server/Anomaly/Components/AnomalyVesselComponent.cs b/Content.Server/Anomaly/Components/AnomalyVesselComponent.cs index 74c5e3e9ed2c1e..426e1d97d55d11 100644 --- a/Content.Server/Anomaly/Components/AnomalyVesselComponent.cs +++ b/Content.Server/Anomaly/Components/AnomalyVesselComponent.cs @@ -1,6 +1,8 @@ using Content.Shared.Anomaly; +using Content.Shared.Construction.Prototypes; using Robust.Shared.Audio; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; namespace Content.Server.Anomaly.Components; @@ -23,9 +25,22 @@ public sealed partial class AnomalyVesselComponent : Component /// /// A multiplier applied to the amount of points generated. /// - [DataField, ViewVariables(VVAccess.ReadWrite)] + [ViewVariables(VVAccess.ReadWrite)] public float PointMultiplier = 1; + /// + /// The machine part that affects the point multiplier of the vessel + /// + [DataField("machinePartPointModifier", customTypeSerializer: typeof(PrototypeIdSerializer))] + public string MachinePartPointModifier = "Capacitor"; + + /// + /// A value used to scale the point multiplier + /// with the corresponding part rating. + /// + [DataField("partRatingPointModifier")] + public float PartRatingPointModifier = 1.25f; + /// /// The maximum time between each beep /// diff --git a/Content.Server/Radiation/Systems/RadiationSystem.GridCast.cs b/Content.Server/Radiation/Systems/RadiationSystem.GridCast.cs index b8193c4d2f3972..1be8f0fb0400f0 100644 --- a/Content.Server/Radiation/Systems/RadiationSystem.GridCast.cs +++ b/Content.Server/Radiation/Systems/RadiationSystem.GridCast.cs @@ -44,9 +44,6 @@ private void UpdateGridcast() var sourcesData = new ValueList<(EntityUid, RadiationSourceComponent, TransformComponent, Vector2)>(); while (sources.MoveNext(out var uid, out var source, out var sourceTrs)) { - if (!source.Enabled) - continue; - var worldPos = _transform.GetWorldPosition(sourceTrs, transformQuery); var data = (uid, source, sourceTrs, worldPos); sourcesData.Add(data); diff --git a/Content.Server/Radiation/Systems/RadiationSystem.cs b/Content.Server/Radiation/Systems/RadiationSystem.cs index ffb7ab1a11f5bf..8e774c788dff24 100644 --- a/Content.Server/Radiation/Systems/RadiationSystem.cs +++ b/Content.Server/Radiation/Systems/RadiationSystem.cs @@ -1,5 +1,4 @@ using Content.Server.Radiation.Components; -using Content.Shared.Radiation.Components; using Content.Shared.Radiation.Events; using Robust.Shared.Configuration; using Robust.Shared.Map; @@ -46,14 +45,6 @@ public void IrradiateEntity(EntityUid uid, float radsPerSecond, float time) RaiseLocalEvent(uid, msg); } - public void SetSourceEnabled(Entity entity, bool val) - { - if (!Resolve(entity, ref entity.Comp, false)) - return; - - entity.Comp.Enabled = val; - } - /// /// Marks entity to receive/ignore radiation rays. /// diff --git a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/production.yml b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/production.yml index fccbdd787026b1..6ad9a906c79444 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/production.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/production.yml @@ -286,28 +286,11 @@ - type: MachineBoard prototype: MachineAnomalyVessel requirements: - Capacitor: 3 + Capacitor: 5 materialRequirements: Cable: 1 PlasmaGlass: 10 -- type: entity - parent: BaseMachineCircuitboard - id: AnomalyVesselExperimentalCircuitboard - name: experimental anomaly vessel machine board - description: A machine printed circuit board for an experimental anomaly vessel. - components: - - type: Sprite - state: science - - type: MachineBoard - prototype: MachineAnomalyVesselExperimental - requirements: - Capacitor: 3 - materialRequirements: - Cable: 5 - PlasmaGlass: 15 - MetalRod: 4 - - type: entity parent: BaseMachineCircuitboard id: AnomalySynchronizerCircuitboard diff --git a/Resources/Prototypes/Entities/Structures/Machines/anomaly_equipment.yml b/Resources/Prototypes/Entities/Structures/Machines/anomaly_equipment.yml index b1612cb6f47843..61891d9940632a 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/anomaly_equipment.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/anomaly_equipment.yml @@ -2,7 +2,7 @@ id: MachineAnomalyVessel parent: [ BaseMachinePowered, ConstructibleMachine ] name: anomaly vessel - description: A container able to harness a scan of an anomaly and turn it into research data. + description: A container able to harness a scan of an anomaly and turn it into research points. components: - type: Sprite noRot: true @@ -77,6 +77,12 @@ canCreateVacuum: false - type: Destructible thresholds: + - trigger: + !type:DamageTrigger + damage: 300 + behaviors: + - !type:DoActsBehavior + acts: [ "Destruction" ] - trigger: !type:DamageTrigger damage: 150 @@ -91,32 +97,6 @@ guides: - ScannersAndVessels -- type: entity - id: MachineAnomalyVesselExperimental - parent: MachineAnomalyVessel - name: experimental anomaly vessel - description: An advanced anomaly vessel capable of greater research potential at the cost of increased volatility and low-level radioactive decay into the environment. - components: - - type: Sprite - sprite: Structures/Machines/Anomaly/adv_anomaly_vessel.rsi - offset: 0,0.5 - drawdepth: Mobs - - type: SpriteFade - - type: AnomalyVessel - pointMultiplier: 2 - - type: RadiationSource - intensity: 0.75 - slope: 0.1 - enabled: false - - type: Machine - board: AnomalyVesselExperimentalCircuitboard - - type: Explosive - explosionType: Default - maxIntensity: 50 - intensitySlope: 7.5 - totalIntensity: 500 - canCreateVacuum: true - - type: entity id: MachineAPE parent: [ BaseMachinePowered, ConstructibleMachine ] diff --git a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml index 9e7194288662e3..8fc112a0a8bbba 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml @@ -415,7 +415,6 @@ - AnalysisComputerCircuitboard - ExosuitFabricatorMachineCircuitboard - AnomalyVesselCircuitboard - - AnomalyVesselExperimentalCircuitboard - AnomalySynchronizerCircuitboard - APECircuitboard - ArtifactAnalyzerMachineCircuitboard diff --git a/Resources/Prototypes/Recipes/Lathes/electronics.yml b/Resources/Prototypes/Recipes/Lathes/electronics.yml index c22565c61d65b8..10b3f700521b61 100644 --- a/Resources/Prototypes/Recipes/Lathes/electronics.yml +++ b/Resources/Prototypes/Recipes/Lathes/electronics.yml @@ -347,16 +347,6 @@ Steel: 100 Glass: 900 -- type: latheRecipe - id: AnomalyVesselExperimentalCircuitboard - result: AnomalyVesselExperimentalCircuitboard - category: Circuitry - completetime: 4 - materials: - Steel: 100 - Glass: 900 - Gold: 100 - - type: latheRecipe id: AnomalySynchronizerCircuitboard result: AnomalySynchronizerCircuitboard @@ -906,6 +896,7 @@ materials: Steel: 100 Glass: 900 + Gold: 100 Gold: 100 - type: latheRecipe diff --git a/Resources/Prototypes/Research/experimental.yml b/Resources/Prototypes/Research/experimental.yml index 4162f8f4686299..cf403302c1d4fa 100644 --- a/Resources/Prototypes/Research/experimental.yml +++ b/Resources/Prototypes/Research/experimental.yml @@ -123,7 +123,6 @@ recipeUnlocks: - WeaponPistolCHIMP - AnomalySynchronizerCircuitboard - - AnomalyVesselExperimentalCircuitboard technologyPrerequisites: - BasicAnomalousResearch diff --git a/Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/anomaly-1.png b/Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/anomaly-1.png deleted file mode 100644 index 75b33a1d8d29cc15cd8f5368175dff89f11b8327..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 273 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3HF&`%2dVDaPU;cPEB*=VV?2Ij22c978f1 z-(E4~JES1d_RzmxJSWNdlCfo_Fn>T_1N#eKt4a=kCntkU>%=(*zRR0-z4(6S!X5`k z1tlo>RX+O;XY%#!3A&XBWs+Oj z`W37b>bNhRntGzJ;NPq~N6!;lFL^7<&&0g*ulRjo#v=xxQ-0a{Ge3&|eEYICGtgTM Mp00i_>zopr0E^^j-~a#s diff --git a/Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/anomaly-2.png b/Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/anomaly-2.png deleted file mode 100644 index ffa6efd144ff3c0c4aa0e48b9e0e94a9200f1a12..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 259 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3HF&`%2dVDaPU;cPEB*=VV?2IeR@_978f1 z-(IojI%FWi_QC(YUR}$4UlZsN22WQ%mvv4FO#qsj BXYv35 diff --git a/Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/anomaly-3.png b/Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/anomaly-3.png deleted file mode 100644 index 4f17e843d53fd34954c5ce5a28d531319336d517..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 250 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3HF&`%2dVDaPU;cPEB*=VV?2Ia@qk978f1 z-(E4~I^-bG`fz#2(+t67f|s6Z#3gP&b5qAW{Da0zrc5V+xtFwh4=w85EyZ0MKQ+nh z=gme27Z~`TH?eBL`nk*u(mEYndFKU0`5AUQUp^yt;rh9o2@h*_E?UEt-^|J&AbNjm z@{PP}0;2PUHhOV(*xqqCQR`pSu%hDP^Zsd}5BCdwIK`F5+u^*UDTDR*I@x|pZI7b= r?0c+*qt(pj*qKb0bpYD9Kb=YNe&qfuZ;EaL-Ou3Z>gTe~DWM4fp|xPP diff --git a/Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/base.png b/Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/base.png deleted file mode 100644 index a69b856d65426a81cbc60d3d5fcbc4bf33b3bb8f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1075 zcmV-31kC%1P)Px&?MXyIRA_qx$gQyjX5fW%}=$D}iCB;J#JO)Af3rc^2 z2SMl$sCX#!kV4y|DG~gDT1dd0RO}@b2?Vj3t>&5@(phJA=WAnZd+>pns0eET%()3cMFfh# zRlrI>GL>rfbVuRTsnOP{Q}lF4t)pNRz??5EW^MQY01Jy*YY|2PJ>5}cW;52#88WjO z^mIp!c3J^!1d&L8U;(U;DGEvfEcES+o`FR{CqgNJIgdp8QLCK%3Mw!Fi)%bb8*X2u@8Rx>Ps#8UTRuUKwYN2An#@ z=x`FF!%5$ia_SUkjRwklWyB_9E{{%xQ~>Y1yjK?PnI6kaORrtQ01%suxgx9u@S|p+ z)bZU{38&NnAz_z;kA_wN%b(0KBeVe_VWA%%4R0L@Mac5UJ0~P8bhCV1Q0?n-PFYOydkKoAbpSwmY7WIxUf_{IS%l{V8uztvW1OPmI^uS}U=lP)$5Htd+6#TUas8VpH5n%ItWo6fA2ehVP z;0Rnqn!B zUrt3BEpMX&?<>%YNns-=gm7$R42MUDoG2=+f;I@W5T&Q)-1An5!$`!VzWb&Z?;C#cR%96Y2EVAG2~GT0WPjzcS;^)?iBrx!ai$EF3VSXwu7NCoiw zdfg~(|FE#-2m!5U!PDuq6>+EVC11eW>T;+H01ozdtX{P`iG%$e0Dn?&T&+qsmsbh) t-6;eBxBB`5f9>i7ex9C&{)JxwzX4oxO#q(RC4v9|002ovPDHLkV1i#M>2Lr5 diff --git a/Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/meta.json b/Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/meta.json deleted file mode 100644 index e7fe21e79a8410..00000000000000 --- a/Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/meta.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "version": 1, - "license": "CC0-1.0", - "copyright": "Created by EmoGarbage404 (github)", - "size": { - "x": 32, - "y": 64 - }, - "states": [ - { - "name": "anomaly-1" - }, - { - "name": "anomaly-2" - }, - { - "name": "anomaly-3" - }, - { - "name": "base" - }, - { - "name": "panel" - }, - { - "name": "powered-1" - }, - { - "name": "powered-2" - }, - { - "name": "powered-3" - } - ] -} diff --git a/Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/panel.png b/Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/panel.png deleted file mode 100644 index 5c11431bd78217437ebb1f9cff6e5e824f703f68..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 223 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3HF&`%2dVDaPU;cPEB*=VV?2IWs+7978f1 z-(Jz?YjzN6eHa}S{EeZsH1tg~%W16$t|r|Jr`EMEIjCT0!J?8N=sWWvpW}!6ym`-O zND2aV1HpqgdfV7PJ^1=_`#jUkP0@{ye(KeqZU4JCw(oKNl$rNl-V`z5++X=Gp*Swo zL3*9m1Erc`#_)%;xpwe~3+}v?Be(nH`lY+FnL@AqW4LVV{VIJ$X$2z#L%|NoeczQn Tr5=dL0$Jke>gTe~DWM4f?kHD4 diff --git a/Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/powered-1.png b/Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/powered-1.png deleted file mode 100644 index 504857312a4e86fcddfad61fb7e946e76765ee35..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 159 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3HF&`%2dVDaPU;cPEB*=VV?2Igy?&jv*P1 zZ!a72HW&!BU1Xb*(6mI`$e_`TM}a}uLo;|XpU#s8gFV~tl-&QeoCT&HVZ?E3}?GsG)9Cw<_4AcY$1{#)L zvFaO3dZrb4+`GCqQmf%V@2w3_H2$`KFODnw`floO*;i8YniYSl=kLG9_&}Il#95Pf SPqy=ZkZw;`KbLh*2~7aE%{z7g diff --git a/Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/powered-3.png b/Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/powered-3.png deleted file mode 100644 index 2c93f720c9bfba36dee1cf2c549685d0365c9c1d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 177 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3HF&`%2dVDaPU;cPEB*=VV?2IoX~rjv*P1 zZ!d4;ZBP(seR#P^QX`*7`1`^lrSFOSQo`vA4t5=z)A_8&?Em!%F%|u7!i+#&U{G+v zaBFVVtmVmHT0)zr1lfun_|KL-BRT7D`}g8|;h*14-7Wh}YF_iIhbM2ZFJ<^~gt3iT UBZlXcRyIhtr>mdKI;Vst0Gf9}FaQ7m From 874fc9c034210ef9a0c98554aee79791b0f2a772 Mon Sep 17 00:00:00 2001 From: Ratyyy <138193222+Ratyyy@users.noreply.github.com> Date: Sun, 11 Feb 2024 21:33:40 +0200 Subject: [PATCH 08/17] Revert "Revert "Hyper convection lathes and industrial ore processor (#23202)"" This reverts commit 1344105088d7e9fa9f0b7cbd8a03a28a0a45e149. # Conflicts: # Content.Server/Lathe/LatheSystem.cs --- .../Components/LatheHeatProducingComponent.cs | 21 ++++ Content.Server/Lathe/LatheSystem.cs | 107 +++++++++++++----- Content.Shared/Lathe/LatheComponent.cs | 34 ++---- .../Circuitboards/Machine/production.yml | 92 +++++++++++++++ .../Entities/Structures/Machines/lathe.yml | 71 +++++++++++- .../Prototypes/Recipes/Lathes/electronics.yml | 9 ++ Resources/Prototypes/Research/industrial.yml | 14 +-- .../autolathe_hypercon.rsi/building.png | Bin 0 -> 3124 bytes .../Machines/autolathe_hypercon.rsi/icon.png | Bin 0 -> 1319 bytes .../autolathe_hypercon.rsi/inserting.png | Bin 0 -> 711 bytes .../Machines/autolathe_hypercon.rsi/meta.json | 51 +++++++++ .../Machines/autolathe_hypercon.rsi/panel.png | Bin 0 -> 470 bytes .../Machines/autolathe_hypercon.rsi/unlit.png | Bin 0 -> 166 bytes .../ore_processor_industrial.rsi/building.png | Bin 0 -> 1421 bytes .../ore_processor_industrial.rsi/icon.png | Bin 0 -> 903 bytes .../inserting.png | Bin 0 -> 2948 bytes .../ore_processor_industrial.rsi/meta.json | 50 ++++++++ .../ore_processor_industrial.rsi/panel.png | Bin 0 -> 223 bytes .../ore_processor_industrial.rsi/unlit.png | Bin 0 -> 167 bytes .../protolathe_hypercon.rsi/building.png | Bin 0 -> 4341 bytes .../Machines/protolathe_hypercon.rsi/icon.png | Bin 0 -> 1199 bytes .../protolathe_hypercon.rsi/inserting.png | Bin 0 -> 652 bytes .../protolathe_hypercon.rsi/meta.json | 52 +++++++++ .../protolathe_hypercon.rsi/panel.png | Bin 0 -> 761 bytes .../protolathe_hypercon.rsi/unlit.png | Bin 0 -> 202 bytes 25 files changed, 433 insertions(+), 68 deletions(-) create mode 100644 Content.Server/Lathe/Components/LatheHeatProducingComponent.cs create mode 100644 Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/building.png create mode 100644 Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/icon.png create mode 100644 Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/inserting.png create mode 100644 Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/meta.json create mode 100644 Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/panel.png create mode 100644 Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/unlit.png create mode 100644 Resources/Textures/Structures/Machines/ore_processor_industrial.rsi/building.png create mode 100644 Resources/Textures/Structures/Machines/ore_processor_industrial.rsi/icon.png create mode 100644 Resources/Textures/Structures/Machines/ore_processor_industrial.rsi/inserting.png create mode 100644 Resources/Textures/Structures/Machines/ore_processor_industrial.rsi/meta.json create mode 100644 Resources/Textures/Structures/Machines/ore_processor_industrial.rsi/panel.png create mode 100644 Resources/Textures/Structures/Machines/ore_processor_industrial.rsi/unlit.png create mode 100644 Resources/Textures/Structures/Machines/protolathe_hypercon.rsi/building.png create mode 100644 Resources/Textures/Structures/Machines/protolathe_hypercon.rsi/icon.png create mode 100644 Resources/Textures/Structures/Machines/protolathe_hypercon.rsi/inserting.png create mode 100644 Resources/Textures/Structures/Machines/protolathe_hypercon.rsi/meta.json create mode 100644 Resources/Textures/Structures/Machines/protolathe_hypercon.rsi/panel.png create mode 100644 Resources/Textures/Structures/Machines/protolathe_hypercon.rsi/unlit.png diff --git a/Content.Server/Lathe/Components/LatheHeatProducingComponent.cs b/Content.Server/Lathe/Components/LatheHeatProducingComponent.cs new file mode 100644 index 00000000000000..9da535eed832b7 --- /dev/null +++ b/Content.Server/Lathe/Components/LatheHeatProducingComponent.cs @@ -0,0 +1,21 @@ +using Content.Shared.Lathe; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom; + +namespace Content.Server.Lathe.Components; + +/// +/// This is used for a that releases heat into the surroundings while producing items. +/// +[RegisterComponent] +[Access(typeof(LatheSystem))] +public sealed partial class LatheHeatProducingComponent : Component +{ + /// + /// The amount of energy produced each second when producing an item. + /// + [DataField, ViewVariables(VVAccess.ReadWrite)] + public float EnergyPerSecond = 30000; + + [DataField(customTypeSerializer: typeof(TimeOffsetSerializer))] + public TimeSpan NextSecond; +} diff --git a/Content.Server/Lathe/LatheSystem.cs b/Content.Server/Lathe/LatheSystem.cs index c05e2ce7c88097..d3996652df0e56 100644 --- a/Content.Server/Lathe/LatheSystem.cs +++ b/Content.Server/Lathe/LatheSystem.cs @@ -1,13 +1,16 @@ using System.Diagnostics.CodeAnalysis; using System.Linq; +using Content.Shared.Access.Systems; using Content.Server.Administration.Logs; -using Content.Server.Construction; +using Content.Server.Atmos; +using Content.Server.Atmos.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.Stack; -using Content.Server.UserInterface; +using Content.Shared.UserInterface; using Content.Shared.Database; using Content.Shared.Emag.Components; using Content.Shared.Lathe; @@ -16,7 +19,6 @@ using Content.Shared.Research.Prototypes; using JetBrains.Annotations; using Robust.Server.GameObjects; -using Robust.Shared.Audio; using Robust.Shared.Audio.Systems; using Robust.Shared.Prototypes; using Robust.Shared.Timing; @@ -51,12 +53,20 @@ public sealed class LatheSystem : SharedLatheSystem [Dependency] private readonly IGameTiming _timing = default!; [Dependency] private readonly IPrototypeManager _proto = default!; [Dependency] private readonly IAdminLogManager _adminLogger = default!; + [Dependency] private readonly AtmosphereSystem _atmosphere = default!; [Dependency] private readonly SharedAppearanceSystem _appearance = default!; + [Dependency] private readonly AccessReaderSystem _accessReaderSystem = default!; [Dependency] private readonly SharedAudioSystem _audio = default!; [Dependency] private readonly UserInterfaceSystem _uiSys = default!; + [Dependency] private readonly PopupSystem _popup = default!; [Dependency] private readonly MaterialStorageSystem _materialStorage = default!; [Dependency] private readonly StackSystem _stack = default!; - [Dependency] private readonly IPrototypeManager _prototypeManager = default!; + [Dependency] private readonly TransformSystem _transform = default!; + + /// + /// Per-tick cache + /// + private readonly List _environments = new(); public override void Initialize() { @@ -64,8 +74,6 @@ public override void Initialize() SubscribeLocalEvent(OnGetWhitelist); SubscribeLocalEvent(OnMapInit); SubscribeLocalEvent(OnPowerChanged); - SubscribeLocalEvent(OnPartsRefresh); - SubscribeLocalEvent(OnUpgradeExamine); SubscribeLocalEvent(OnDatabaseModified); SubscribeLocalEvent(OnResearchRegistrationChanged); @@ -90,6 +98,34 @@ public override void Update(float frameTime) if (_timing.CurTime - comp.StartTime >= comp.ProductionLength) FinishProducing(uid, lathe); } + + var heatQuery = EntityQueryEnumerator(); + while (heatQuery.MoveNext(out var uid, out var heatComp, out _, out var xform)) + { + if (_timing.CurTime < heatComp.NextSecond) + continue; + heatComp.NextSecond += TimeSpan.FromSeconds(1); + + var position = _transform.GetGridTilePositionOrDefault((uid, xform)); + _environments.Clear(); + + if (_atmosphere.GetTileMixture(xform.GridUid, xform.MapUid, position, true) is { } tileMix) + _environments.Add(tileMix); + + if (xform.GridUid != null) + { + _environments.AddRange(_atmosphere.GetAdjacentTileMixtures(xform.GridUid.Value, position, false, true)); + } + + if (_environments.Count > 0) + { + var heatPerTile = heatComp.EnergyPerSecond / _environments.Count; + foreach (var env in _environments) + { + _atmosphere.AddHeat(env, heatPerTile); + } + } + } } private void OnGetWhitelist(EntityUid uid, LatheComponent component, ref GetMaterialWhitelistEvent args) @@ -97,7 +133,7 @@ private void OnGetWhitelist(EntityUid uid, LatheComponent component, ref GetMate if (args.Storage != uid) return; var materialWhitelist = new List>(); - var recipes = GetAllBaseRecipes(component); + var recipes = GetAvailableRecipes(uid, component, true); foreach (var id in recipes) { if (!_proto.TryIndex(id, out var proto)) @@ -116,12 +152,12 @@ private void OnGetWhitelist(EntityUid uid, LatheComponent component, ref GetMate } [PublicAPI] - public bool TryGetAvailableRecipes(EntityUid uid, [NotNullWhen(true)] out List>? recipes, [NotNullWhen(true)] LatheComponent? component = null) + public bool TryGetAvailableRecipes(EntityUid uid, [NotNullWhen(true)] out List>? recipes, [NotNullWhen(true)] LatheComponent? component = null, bool getUnavailable = false) { recipes = null; if (!Resolve(uid, ref component)) return false; - recipes = GetAvailableRecipes(uid, component); + recipes = GetAvailableRecipes(uid, component, getUnavailable); return true; } @@ -167,7 +203,6 @@ public bool TryStartProducing(EntityUid uid, LatheComponent? component = null) return false; if (component.CurrentRecipe != null || component.Queue.Count <= 0 || !this.IsPowered(uid, EntityManager)) return false; - var recipe = component.Queue.First(); component.Queue.RemoveAt(0); @@ -176,6 +211,9 @@ public bool TryStartProducing(EntityUid uid, LatheComponent? component = null) lathe.ProductionLength = recipe.CompleteTime * component.TimeMultiplier; component.CurrentRecipe = recipe; + var ev = new LatheStartPrintingEvent(recipe); + RaiseLocalEvent(uid, ref ev); + _audio.PlayPvs(component.ProducingSound, uid); UpdateRunningAppearance(uid, true); UpdateUserInterfaceState(uid, component); @@ -223,7 +261,7 @@ private void OnGetRecipes(EntityUid uid, TechnologyDatabaseComponent component, foreach (var recipe in latheComponent.DynamicRecipes) { - if (!component.UnlockedRecipes.Contains(recipe) || args.Recipes.Contains(recipe)) + if (!(args.getUnavailable || component.UnlockedRecipes.Contains(recipe)) || args.Recipes.Contains(recipe)) continue; args.Recipes.Add(recipe); } @@ -233,11 +271,11 @@ private void GetEmagLatheRecipes(EntityUid uid, EmagLatheRecipesComponent compon { if (uid != args.Lathe || !TryComp(uid, out var technologyDatabase)) return; - if (!HasComp(uid)) + if (!args.getUnavailable && !HasComp(uid)) return; foreach (var recipe in component.EmagDynamicRecipes) { - if (!technologyDatabase.UnlockedRecipes.Contains(recipe) || args.Recipes.Contains(recipe)) + if (!(args.getUnavailable || technologyDatabase.UnlockedRecipes.Contains(recipe)) || args.Recipes.Contains(recipe)) continue; args.Recipes.Add(recipe); } @@ -247,6 +285,11 @@ private void GetEmagLatheRecipes(EntityUid uid, EmagLatheRecipesComponent compon } } + private void OnHeatStartPrinting(EntityUid uid, LatheHeatProducingComponent component, LatheStartPrintingEvent args) + { + component.NextSecond = _timing.CurTime; + } + private void OnMaterialAmountChanged(EntityUid uid, LatheComponent component, ref MaterialAmountChangedEvent args) { UpdateUserInterfaceState(uid, component); @@ -287,22 +330,6 @@ private void OnPowerChanged(EntityUid uid, LatheComponent component, ref PowerCh } } - private void OnPartsRefresh(EntityUid uid, LatheComponent component, RefreshPartsEvent args) - { - var printTimeRating = args.PartRatings[component.MachinePartPrintSpeed]; - var materialUseRating = args.PartRatings[component.MachinePartMaterialUse]; - - component.TimeMultiplier = MathF.Pow(component.PartRatingPrintTimeMultiplier, printTimeRating - 1); - component.MaterialUseMultiplier = MathF.Pow(component.PartRatingMaterialUseMultiplier, materialUseRating - 1); - Dirty(component); - } - - private void OnUpgradeExamine(EntityUid uid, LatheComponent component, UpgradeExamineEvent args) - { - args.AddPercentageUpgrade("lathe-component-upgrade-speed", 1 / component.TimeMultiplier); - args.AddPercentageUpgrade("lathe-component-upgrade-material-use", component.MaterialUseMultiplier); - } - private void OnDatabaseModified(EntityUid uid, LatheComponent component, ref TechnologyDatabaseModifiedEvent args) { UpdateUserInterfaceState(uid, component); @@ -321,6 +348,15 @@ protected override bool HasRecipe(EntityUid uid, LatheRecipePrototype recipe, La private void OnLatheQueueRecipeMessage(EntityUid uid, LatheComponent component, LatheQueueRecipeMessage args) { + if (args.Session.AttachedEntity is not {Valid: true} player) + return; + if (!_accessReaderSystem.IsAllowed(player, uid)) + { + ConsolePopup(args.Session, uid, Loc.GetString("lathe-production-not-allowed")); + PlayDenySound(uid, component); + return; + } + if (_proto.TryIndex(args.ID, out LatheRecipePrototype? recipe)) { var count = 0; @@ -341,6 +377,19 @@ private void OnLatheQueueRecipeMessage(EntityUid uid, LatheComponent component, UpdateUserInterfaceState(uid, component); } + private void ConsolePopup(ICommonSession session, EntityUid uid, string text) + { + _popup.PopupEntity(text, uid, session); + } + + private void PlayDenySound(EntityUid uid, LatheComponent component) + { + if (component.ErrorSound != null) + { + _audio.PlayEntity(_audio.GetSound(component.ErrorSound), Filter.Pvs(uid, entityManager: EntityManager), uid, false); + } + } + private void OnLatheSyncRequestMessage(EntityUid uid, LatheComponent component, LatheSyncRequestMessage args) { UpdateUserInterfaceState(uid, component); diff --git a/Content.Shared/Lathe/LatheComponent.cs b/Content.Shared/Lathe/LatheComponent.cs index 3ec4c8d98cd8f8..e8a92063e418da 100644 --- a/Content.Shared/Lathe/LatheComponent.cs +++ b/Content.Shared/Lathe/LatheComponent.cs @@ -59,39 +59,15 @@ public sealed partial class LatheComponent : Component /// /// A modifier that changes how long it takes to print a recipe /// - [ViewVariables(VVAccess.ReadWrite)] + [DataField, ViewVariables(VVAccess.ReadWrite)] public float TimeMultiplier = 1; - /// - /// The machine part that reduces how long it takes to print a recipe. - /// - [DataField] - public ProtoId MachinePartPrintSpeed = "Manipulator"; - - /// - /// The value that is used to calculate the modified - /// - [DataField] - public float PartRatingPrintTimeMultiplier = 0.5f; - /// /// A modifier that changes how much of a material is needed to print a recipe /// - [ViewVariables(VVAccess.ReadWrite), AutoNetworkedField] + [DataField, ViewVariables(VVAccess.ReadWrite), AutoNetworkedField] public float MaterialUseMultiplier = 1; - /// - /// The machine part that reduces how much material it takes to print a recipe. - /// - [DataField] - public ProtoId MachinePartMaterialUse = "MatterBin"; - - /// - /// The value that is used to calculate the modifier - /// - [DataField] - public float PartRatingMaterialUseMultiplier = DefaultPartRatingMaterialUseMultiplier; - public const float DefaultPartRatingMaterialUseMultiplier = 0.85f; #endregion @@ -113,4 +89,10 @@ public LatheGetRecipesEvent(EntityUid lathe, bool forced) getUnavailable = forced; } } + + /// + /// Event raised on a lathe when it starts producing a recipe. + /// + [ByRefEvent] + public readonly record struct LatheStartPrintingEvent(LatheRecipePrototype Recipe); } diff --git a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/production.yml b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/production.yml index 6ad9a906c79444..835b802da6ff0d 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/production.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/production.yml @@ -12,6 +12,24 @@ materialRequirements: Glass: 1 +- type: entity + parent: BaseMachineCircuitboard + id: AutolatheHyperConvectionMachineCircuitboard + name: hyper convection autolathe machine board + description: A machine printed circuit board for a hyper convection autolathe + components: + - type: MachineBoard + prototype: AutolatheHyperConvection + requirements: + MatterBin: 3 + materialRequirements: + Glass: 1 + tagRequirements: + Igniter: + Amount: 1 + DefaultPrototype: Igniter + ExamineName: Igniter + - type: entity id: ProtolatheMachineCircuitboard parent: BaseMachineCircuitboard @@ -364,6 +382,46 @@ deconstructionTarget: null node: heater +- type: entity + parent: BaseMachineCircuitboard + id: HellfireFreezerMachineCircuitBoard + name: hellfire freezer machine board + description: Looks like you could use a screwdriver to change the board type. + components: + - type: Sprite + state: engineering + - type: MachineBoard + prototype: GasThermoMachineHellfireFreezer + requirements: + MatterBin: 2 + Capacitor: 2 + materialRequirements: + Plasma: 1 + - type: Construction + deconstructionTarget: null + graph: ThermomachineBoard + node: hellfirefreezer + +- type: entity + parent: BaseMachineCircuitboard + id: HellfireHeaterMachineCircuitBoard + name: hellfire heater machine board + description: Looks like you could use a screwdriver to change the board type. + components: + - type: Sprite + state: engineering + - type: MachineBoard + prototype: GasThermoMachineHellfireHeater + requirements: + MatterBin: 2 + Capacitor: 2 + materialRequirements: + Plasma: 1 + - type: Construction + graph: ThermomachineBoard + deconstructionTarget: null + node: hellfireheater + - type: entity id: CondenserMachineCircuitBoard parent: BaseMachineCircuitboard @@ -660,6 +718,25 @@ - type: StaticPrice price: 15 +- type: entity + id: TurboItemRechargerCircuitboard + parent: BaseMachineCircuitboard + name: turbo recharger machine board + description: A machine printed circuit board for a turbo recharger. + components: + - type: Sprite + sprite: Objects/Misc/module.rsi + state: charger_APC + - type: MachineBoard + prototype: TurboItemRecharger + requirements: + Capacitor: 2 + materialRequirements: + CableMV: 5 + - type: PhysicalComposition + materialComposition: + Steel: 30 + Plastic: 30 - type: entity id: SubstationMachineCircuitboard @@ -924,6 +1001,21 @@ materialRequirements: Glass: 1 +- type: entity + parent: BaseMachineCircuitboard + id: OreProcessorIndustrialMachineCircuitboard + name: industrial ore processor machine board + components: + - type: Sprite + state: supply + - type: MachineBoard + prototype: OreProcessorIndustrial + requirements: + MatterBin: 1 + Manipulator: 3 + materialRequirements: + Glass: 1 + - type: entity id: SheetifierMachineCircuitboard parent: BaseMachineCircuitboard diff --git a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml index 8fc112a0a8bbba..c306bee8abceb8 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml @@ -204,6 +204,21 @@ - GrenadeEMP - GrenadeFlash +- type: entity + id: AutolatheHyperConvection + parent: Autolathe + name: hyper convection autolathe + description: A highly-experimental autolathe that harnesses the power of extreme heat to slowly create objects more cost-effectively. + components: + - type: Sprite + sprite: Structures/Machines/autolathe_hypercon.rsi + - type: Lathe + materialUseMultiplier: 0.5 + timeMultiplier: 1.5 + - type: LatheHeatProducing + - type: Machine + board: AutolatheHyperConvectionMachineCircuitboard + - type: entity id: Protolathe parent: BaseLathe @@ -316,6 +331,21 @@ - WeaponLaserCannon - WeaponXrayCannon +- type: entity + id: ProtolatheHyperConvection + parent: Protolathe + name: hyper convection protolathe + description: A highly-experimental protolathe that harnesses the power of extreme heat to slowly create objects more cost-effectively. + components: + - type: Sprite + sprite: Structures/Machines/protolathe_hypercon.rsi + - type: Lathe + materialUseMultiplier: 0.5 + timeMultiplier: 1.5 + - type: LatheHeatProducing + - type: Machine + board: ProtolatheHyperConvectionMachineCircuitboard + - type: entity id: CircuitImprinter parent: BaseLathe @@ -341,6 +371,11 @@ idleState: icon runningState: building staticRecipes: + - ProtolatheMachineCircuitboard + - AutolatheMachineCircuitboard + - CircuitImprinterMachineCircuitboard + - OreProcessorMachineCircuitboard + - MaterialReclaimerMachineCircuitboard - ElectrolysisUnitMachineCircuitboard - CentrifugeMachineCircuitboard - ChemDispenserMachineCircuitboard @@ -373,8 +408,8 @@ - SolarTrackerElectronics - TurboItemRechargerCircuitboard - PowerComputerCircuitboard - - AutolatheMachineCircuitboard - - ProtolatheMachineCircuitboard + - AutolatheHyperConvectionMachineCircuitboard + - ProtolatheHyperConvectionMachineCircuitboard - ReagentGrinderMachineCircuitboard - MicrowaveMachineCircuitboard - ElectricGrillMachineCircuitboard @@ -383,13 +418,11 @@ - SheetifierMachineCircuitboard - ShuttleConsoleCircuitboard - RadarConsoleCircuitboard - - CircuitImprinterMachineCircuitboard - TechDiskComputerCircuitboard - DawInstrumentMachineCircuitboard - CloningConsoleComputerCircuitboard - StasisBedMachineCircuitboard - - MaterialReclaimerMachineCircuitboard - - OreProcessorMachineCircuitboard + - OreProcessorIndustrialMachineCircuitboard - CargoTelepadMachineCircuitboard - RipleyCentralElectronics - RipleyPeripheralsElectronics @@ -1196,6 +1229,34 @@ - IngotSilver30 - MaterialBananium10 +- type: entity + parent: OreProcessor + id: OreProcessorIndustrial + name: industrial ore processor + description: An ore processor specifically designed for mass-producing metals in industrial applications. + components: + - type: Sprite + sprite: Structures/Machines/ore_processor_industrial.rsi + - type: Machine + board: OreProcessorIndustrialMachineCircuitboard + - type: Lathe + materialUseMultiplier: 0.75 + timeMultiplier: 0.5 + staticRecipes: + - SheetSteel30 + - SheetGlass30 + - SheetRGlass30 + - SheetPlasma30 + - SheetPGlass30 + - SheetRPGlass30 + - SheetPlasteel30 + - SheetUranium30 + - SheetUGlass30 + - SheetRUGlass30 + - IngotGold30 + - IngotSilver30 + - MaterialBananium10 + - type: entity parent: BaseLathe id: Sheetifier diff --git a/Resources/Prototypes/Recipes/Lathes/electronics.yml b/Resources/Prototypes/Recipes/Lathes/electronics.yml index 10b3f700521b61..3af1345de961c6 100644 --- a/Resources/Prototypes/Recipes/Lathes/electronics.yml +++ b/Resources/Prototypes/Recipes/Lathes/electronics.yml @@ -477,6 +477,15 @@ materials: Steel: 100 Glass: 900 + +- type: latheRecipe + id: OreProcessorIndustrialMachineCircuitboard + result: OreProcessorIndustrialMachineCircuitboard + category: Circuitry + completetime: 4 + materials: + Steel: 100 + Glass: 900 Gold: 100 - type: latheRecipe diff --git a/Resources/Prototypes/Research/industrial.yml b/Resources/Prototypes/Research/industrial.yml index 8035c9ffa9185b..e1bbbc3c210769 100644 --- a/Resources/Prototypes/Research/industrial.yml +++ b/Resources/Prototypes/Research/industrial.yml @@ -12,7 +12,7 @@ recipeUnlocks: - MiningDrill - BorgModuleMining - - OreProcessorMachineCircuitboard + - OreProcessorIndustrialMachineCircuitboard - OreBagOfHolding - type: technology @@ -44,16 +44,14 @@ id: IndustrialEngineering name: research-technology-industrial-engineering icon: - sprite: Structures/Machines/protolathe.rsi - state: icon + sprite: Structures/Machines/protolathe_hypercon.rsi + state: building discipline: Industrial tier: 1 - cost: 7500 + cost: 10000 recipeUnlocks: - - ProtolatheMachineCircuitboard - - AutolatheMachineCircuitboard - - CircuitImprinterMachineCircuitboard - - MaterialReclaimerMachineCircuitboard + - AutolatheHyperConvectionMachineCircuitboard + - ProtolatheHyperConvectionMachineCircuitboard - SheetifierMachineCircuitboard - type: technology diff --git a/Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/building.png b/Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/building.png new file mode 100644 index 0000000000000000000000000000000000000000..cb1abc7aa8e5c16ab9cc68f8c17361dd009c968d GIT binary patch literal 3124 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/icon.png b/Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..1cd22bea850ea63a2ca75d93b435e3ac43cb9cac GIT binary patch literal 1319 zcmV+?1=#wDP)Px(;Ymb6R9J=OmuqZOWf;eQ@7aa56VB<%*g7^c?wtX)L7Cx;Y~cecB+A8@-~}QY zP5dOV5TbaAF-Ap=CK?kZieFGvf=oW3iA=(Vj55YxYX>;SER&>lauJ?rT? zg;nAwpQL%u^PGR*=l?#pw}t<^h*ZEEHdbr*>+sv19~yk7r{cVN%PalBG((Q@FEeYH!$0NfdQjAFR={6S3pUa{}iy0goqUn^MvQoFcmX?+=I5@<~CLiTx zB}w z_LPcn&FU5Wy!U`18Zi`^XJXECuU3acD+jyMUo`u&09cM zS0@mSfGjKHa-Nlyg(OM$#D&9Q3JZ&vI8ip(u3Zb#+k44?O(_Kjf2+$GFZR$M2lbf{ zFYc20$qCqPS$f}kJQeyBv)i%&XlZFCGt*`oyYVtQI!rJaq_S!`Jw08xTm`6V0GF$P zKWl&I_1CuQ?QJ43Nsfd}QN{|%Zp+f`0Q-O0bC+`q9(i;n0O7E)P!%PIDS1NtJ+6ad$+U+3b*i%FfwB!-DOOy)Q# z0f6UU`iq@kE@9)#M@^M%RoU_HlD$`y9Qt~DOmUXLbc4%% z0bbqoj^#Y~Xve!u$(xF%Y0iB~n=N&#kR3Q6~}I>eo_yrwD+GC68$x9p@-7ub{E<7y#3!N3Puq7tSI{ zX%rXF0-(LU4M~zHE}k9L&mzPazP-H-Aw-;hmRQXQAyHnwn8wBiX3UtwvHAm%fIYWi zwKh6B$`88_h+L;rdv9~cC$91b2oe?F<6h)<^Payq#@Fd%aCXKO-0pL#B( d|EB+m`~%bd8hrpsXP^K8002ovPDHLkV1lAoaLoV! literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/inserting.png b/Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/inserting.png new file mode 100644 index 0000000000000000000000000000000000000000..8c927b29ceb1a3f06b68801c1c287005124fd15c GIT binary patch literal 711 zcmV;&0yzDNP)EX>4Tx04R}tkv&MmKpe$iQ>7vm2TK(Z%ut;yh>AFB6^c+H)C#RSm|Xe=O&XFE z7e~Rh;NZt%)xpJCR|i)?5c~jfbaGO3krMyc6k5c1aNLh~_a1le0HIc5n$C=Larhh zITlcc2D#w}|AXJ%TDi#yHz^ncI$s>;V+0870`;ond>=bb{RHqo16O*>U# zjOHnO-Q(R|?Y;ebrrF;QYqWBtL{jLA0002~NklpxQzW?*jKUvPX%Q^xG)(l{prk?v4RyBZ9N;-}sl~Q`|=V_DyxaBKoqye~P z0MU95fB=FCAXqbi^E`X*!}E_BtQmvMkHv^;4hkmWOjk tB7k552&N$utlAH7J{|x70002sI=`2Ba}ubIMLGZg002ovPDHLkV1h_IGcy1H literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/meta.json b/Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/meta.json new file mode 100644 index 00000000000000..3dfb0685f28a48 --- /dev/null +++ b/Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/meta.json @@ -0,0 +1,51 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Created by UbaserB (GitHub) for SS14", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "panel" + }, + { + "name": "unlit" + }, + { + "name": "building", + "delays": [ + [ + 0.5, + 0.5, + 0.5, + 0.5, + 0.5, + 0.5, + 0.5, + 0.5, + 0.5 + ] + ] + }, + { + "name": "inserting", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + } + ] +} diff --git a/Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/panel.png b/Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/panel.png new file mode 100644 index 0000000000000000000000000000000000000000..1e07131c13f38b7aa357372870b9086c613da367 GIT binary patch literal 470 zcmV;{0V)28P)Px$kV!;AR9J=W)lVqHVI0Tt_wzGbjmwhd#QG^&E=1XhaH6J!oy0+LktQc4c99}c zloNJSV+TeKEEnbGPYy2g?@HQ=9BlSDNW#Q^{#~Be?f3ki@Avuid+PfWq{-VqD$}ib zHZ?II-maO9G-_>evwv{><^5%)PL`HKDc@;E0{kRH0i=9?3sOp)-Zq@xwv;tOy!-lq zfh%y&_z1`(ns~{cNXE(YPZH|!JuO5cuWBN1o(%^GTP!lvgV$mDy@D`T07PrpA;#)4GCPs}+Ft_G0dOV*~?&?U;*TKrmfp zMtA5mxHFMbqG^(ZNu#6Wieb;uhdt8@Fc^&rfYb9+nmv-a13Liz!(2K`FPZ7urEj4e zfVGu4^_w@;jAvrYzW{Rr)-!Xqc67g>iAhizdzV@PnHl zZA`rzu~~K3pG~_0_PlzakmYo)KE*qsrbyO7xZ#b)qFOU9H%2iAhI`zK-%q4{iv`-n N;OXk;vd$@?2>|E|JBt7S literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Machines/ore_processor_industrial.rsi/building.png b/Resources/Textures/Structures/Machines/ore_processor_industrial.rsi/building.png new file mode 100644 index 0000000000000000000000000000000000000000..da9b15a9345d175843c2cb32df53123ac8bba1a7 GIT binary patch literal 1421 zcmaKsX;9J$7{>o-Y6l)2ws?hEYfSBwwS`&;YMN=1M~Iq|XovTaT9AQ|mZD{@t7+r0 z7M3WQZfq8N?0$IPcjkHC-!t#0H_Q8^oBn#! z^#B0qyB~M))lA~YTC1z+lXppWngL1jb#n&ldd+75K*!D9#R*3)oiD@2o4LX|)X}f8 zhsJu^FESpneaws75~4QXD1eNjWnk&IJF|3Qzg^O+7SXk%28hYNG22BcuMq(WPj2snWfWWXo5WgC5)VH9v+RAJs$P$fky!ZTbq#5j!@x3tS!shM-XD* zSNXh3c#zc>fy#)y@LD`_38a#Kqs5rBm8X2n(i4G*7lv1Hgqwk+vGi~cTik*h(h)=6 z=S8w7cO4_N3MXCv$ZWcoI#iF(^RS-}AI6UJZ<3Z$xi9_UwZ#|?#2ULJ+2rJT>_O8@ z<4A&S*dE07cjJr?;91ab2p&bhAZZnYvKyC^<*G{iuX!t+mFO59<{K6q-y@Hv&&)&y zH>PmwvjzB+LwV*2z04S-nJKnv4h{kM16sgHBb8sDcHL+ZoRPE{+bvf^uo5CHzrVU^ zoTLM5KR4-|nU$TY4cDls-Wn(Oc;?7pSpoNM)y zTW-eEzyTjg;Z!J(G91-ySl<+~y1g>eG^WNxXS>2;u^_28jV4fb^S1pGHrDpO(PYLVLoK1J^W*cC5aM(N zT<-&@P*QWP@VsRjrQwcUJ!+O%b_19D{QNtGE)CAQR@?u~^GurqzZ0fvq22>G$$r(V zd0RyI&PZ!C&e^>&0AaU5#?Oqc$qJ6clWFVNDyr~D=k4QMZ~j2*#ifQ>bj4If=L3nu zo`7oHQK6&pO0WO-83w~qOyBDEZ4+lQxG&3LW+jXfmgGuWu`w#X)}_^QqB+u*Nz4kx!0vM35%MS|ScH2zw4{QC#`z;fAj$7+%n$!S3oeq#tz3 zVi@efyjbmBptaDZZw8fhhrfi|?Kg&8yRC$&FPXd7*=}r1%c# zL2d|Y%PH{-;HtV*T5%)Es$(KfpUhl{=IjWW@7@26$mB?UvwALIR^Aj(Si8N9y+o}5 zc<-AVin2lL7daDHL>66NWHLkW1!Frp=h%v)%#nv*Y`P(G-jhbow= z&Ejkr+zgx2>FqNrwt;@@(kbnzkx41Q<8lS0EwxwAXvrS#IQRcT*B49(nmDLXUYJIIIVn><}9HGvx7TAHRLM_uwN6Gp*c7KO^5xPx&K}keGR9J=Wmd|e6Mi9n-YuK_Am0VLYQAaRhOK#$*JvIIFKrIj;mpqtHKE*(a z)-TXQdPrRujVdQGse-j=l2&X}A3!W;xHI!{c4l|sfBeS~0Ig3R zs*-j?z*->QJzy;qI=`NXWdN;O<^KI`TDvX!=WY>4t3Y!B0@UgTo!1@Syg3D6d3M6- z>2C-j08lEOnCyl=x$%X4B^hRx+&g)K!jO+F>j2f@uXOUWhqByf{ zmX;>`gTPOWA>#To+b&iE0PBWKEkmtt;JW>UPS@pJf=a1mA)cLO&Px&SeUG1BzD!LF ztKKkbk?z&;&vOZ6A*&7&1U5D{`26wXxdju)XYEf*1&2u%>-Bn~o0b8B!2p2oUc4ye zNGZjiA3l^OaPgyy5CSRJqnL>dNV#6x>EDF_FwIQ`&~88aSArfN{{n#H^lld0G&hwd z^|?k{jYed68`|whyt5`})ukUq`$6bG@O&JnCm^;F2_XnPKl51>b)$w-ik+RENS;Mh z19$GMr9J|@e}AbtW#H=Sy3pQT2IteAv)k<^nJhh|r4o72x%OLX^j>dT26SS2zFw002ovPDHLkV1k_Ls_Xy& literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Machines/ore_processor_industrial.rsi/inserting.png b/Resources/Textures/Structures/Machines/ore_processor_industrial.rsi/inserting.png new file mode 100644 index 0000000000000000000000000000000000000000..568e62f9a2ec6125eebca717f810c717ba9df192 GIT binary patch literal 2948 zcmai0c{mj879WvOKE@Z7P?Qj|Gxi~b8SAw~mJE?KWXLudYqHCikr0t($jDNZWsoHq zSu;q+n6dBsOvbqL-9PUA=RWuT@t*UZ-*cYxoaem1_xGG6OLHTxvjS%U000-%*uaYE z;eQ_vcBY+s8LGx~EC?$jJplH*&@uqP34t2ivI)yyFL>f7IDffUCu6<7K&@@pBLB!%Y`z*(+UVZ0`wKLAK+9FT0ZaE*|aY237`REg?4 zo#~PA@c>-r=JSsTdA_0(cNEmstri;F!BacI)&W;LX`GJmhsayD1gQTIAlBN?>8a`Z z1+ARAebHk)jn=8@A^GDRYM9e9>1>s!f4FP5^SiS(FCa4XEb$5}u8j1#Kz@S7=-lny z{IjEpMn=*;alUD|rPCa2*;zjPXMsuG;wdBUcO@Nloe3$z24B8-G*){sn|ju38<8#~ zIVpcQ24dHzHGm>@q#UEWZJ?S?zVu?wp^1sF=>?k7QcGgaj%FPlO(~tEKxjZQnmHGl z=YZMl92e{jQD;K#pu6cs_{uMSJq|vxOwVx*Tm}0LSbK1pG{%9#8C_QPLqpe&fX+BQ z^)r$$+AH|o0*%&##dv?%u%pyzR;L*(X-DAg`yL0(!!x~A%*7E{xXCR$JBf0m)Y{7B zCiEs~afdJ##+V)0%2=S97;^v%3i2S}C~SER8{e4UU>|;a(WNV%$IAyfjMUXK6E%PCj)ovMJ?=KyT;?IC2 zddr~YR(QOrj*WdLj9QQRgX{446~pEkI^ao$&7z93@RK;hnne6%To>Vxd)YlXP)*lq zbjWJRvE73728E>2?M?MLB<^nj9AhD;LLr7r$#RI5tyR%|g z{)sy`pE5SxVkoEjm}KWZZg|a9Oenu)?utWmV~MinUEBajV~-w^`X&@Kdhq=optDYz z$bR7tsdQ=c?mv}o070`+ueLuDWIbAO-E);%)jC*j3==M8U}6{p8@K``+_;SDLn)2GT;_HTV<+ z^rK}QrEm0;$-V^vN31s&elh?lw2wONZf)zJ_b>lHG{3$5;k)W0Xh|D=+=GeZ@v=6w zxVoa~=JM+M0H7zvMgoEZITN;}8Ge^w48L8+yQo*g`+0LUU0*p=dYvoqw0kAL{UAnx62QK3V0O@IE*P^hFLRZDx_qN+3TSN5~WCYvzSgmX1`>!RIGN{gNau0voIiI&t zgQIvzZC;E?K&i(Om?AEm)Eio2ZvH;p+A)OAB5`EIk3Kc#f&wYkKv;E;_YdE%SJ|;_ zF-!u^X;C>YuRpJ&weOI3EepEERjb4WjGgAl$Lx_Aj z#XM&D&Weh%vr3`#|3Z3nZ!bZEcmTA=Hy*QG*nNmJ z-%Fz+5sF_LVP$j{?!XJ!Af0J{*%Ea*LNNC5ck=zR|8x(kDD@fgDLg zm9|2;usZFfQqLgtdW?p-Q;1v=Yet>+$T!N%?Qb}6);@;;to2l@Pd;+ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Machines/ore_processor_industrial.rsi/meta.json b/Resources/Textures/Structures/Machines/ore_processor_industrial.rsi/meta.json new file mode 100644 index 00000000000000..30361f88d658bb --- /dev/null +++ b/Resources/Textures/Structures/Machines/ore_processor_industrial.rsi/meta.json @@ -0,0 +1,50 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Created by UbaserB (GitHub) for SS14, based on ore processor sprite from tgstation", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "inserting", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 5 + ] + ] + }, + { + "name": "building", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "icon" + }, + { + "name": "panel" + }, + { + "name": "unlit" + } + ] +} diff --git a/Resources/Textures/Structures/Machines/ore_processor_industrial.rsi/panel.png b/Resources/Textures/Structures/Machines/ore_processor_industrial.rsi/panel.png new file mode 100644 index 0000000000000000000000000000000000000000..eebe7218534173cd11b6bee74dde877a871a381f GIT binary patch literal 223 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}Gd*1#Ln2z= zUNYo5_ie4u z6{gwI2lH&04?JU=Jv(ff_~rwrY&T{fUefS#VGTd~-+rGj@&&0^&+Pl#(9!Yd4tME7 WwJXtU-#P&u$>8bg=d#Wzp$PyrGg|Ec literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Machines/ore_processor_industrial.rsi/unlit.png b/Resources/Textures/Structures/Machines/ore_processor_industrial.rsi/unlit.png new file mode 100644 index 0000000000000000000000000000000000000000..3b3190d1e7c10a80a7f58e28323b87ac6f8617a3 GIT binary patch literal 167 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Machines/protolathe_hypercon.rsi/meta.json b/Resources/Textures/Structures/Machines/protolathe_hypercon.rsi/meta.json new file mode 100644 index 00000000000000..b0326326f9792b --- /dev/null +++ b/Resources/Textures/Structures/Machines/protolathe_hypercon.rsi/meta.json @@ -0,0 +1,52 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Created by UbaserB (GitHub) for SS14", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "panel" + }, + { + "name": "unlit" + }, + { + "name": "building", + "delays": [ + [ + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0 + ] + ] + }, + { + "name": "inserting", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + } + ] +} diff --git a/Resources/Textures/Structures/Machines/protolathe_hypercon.rsi/panel.png b/Resources/Textures/Structures/Machines/protolathe_hypercon.rsi/panel.png new file mode 100644 index 0000000000000000000000000000000000000000..1d2d0020325fb63d6c784c4c5dcc16ec93f6ab45 GIT binary patch literal 761 zcmVEX>4Tx04R}tkv&MmKpe$iQ$>-gh#jOjWT;LSL`5963Pq?8YK2xEOfLO`CJjl7 zi=*ILaPVWX>fqw6tAnc`2!4P#IXWr2NQwVT3N2zhIPS;0dyl(!fKV?p&FUBjG~G5+ ziMW`_u8Li+2tmLABIuKuWz0!Z629Z>9s$1I#dwzgxj#p*nzI-X5Q%4*VcNtS#M7I$ z!FiuJ%!;x~d`>)O(glehxvqHp#<}3Kz%#>UIyFxmCKd~Ath6yJni}yGaa7fG$`>*o ztDLtuYvn3y-jlyDl+#z1xlVH!2`pj>5=1DdqJ%PR#Aww?v5=zuxQ{>L`XzEH8?JJM&@_EV0003nNklqusNpzuO6y7KxAGQ0|NsCgXfX=3~N_0G6aYHXV|_#kYV|q z2@L5buNXdkXv3K%g#>FWPEBU4uOA^ r8ZZh*!6+C7qhJ(_f>AIE1{weW&AnJ}vUs!M00000NkvXXu0mjfeF#-7 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Machines/protolathe_hypercon.rsi/unlit.png b/Resources/Textures/Structures/Machines/protolathe_hypercon.rsi/unlit.png new file mode 100644 index 0000000000000000000000000000000000000000..dd7d0d86435414a2e2c43ec95391faf393b30f05 GIT binary patch literal 202 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}EuJopArY-_ zFKy&)P!M3fu)fe*y+D#%d_xf%ck)YyjP+}8CzLt}a5cLL|Ib#4VPdao=;-Kpk$O{j z_O;NJ&aZv#=bk$~KjT4H2J`J3Sqv|(9lYcAENHj0p!S>FObh{=jk1lVNBO*1nY`~e z>wi_p;=}AW9{fyRby?iw!krI{W)=TDTvqZ;i83p{>saXubPt24tDnm{r-UW|lVeS4 literal 0 HcmV?d00001 From 157dc5604e61d52386d8f61b8d1f143a122e59cb Mon Sep 17 00:00:00 2001 From: Ratyyy <138193222+Ratyyy@users.noreply.github.com> Date: Sun, 11 Feb 2024 21:33:51 +0200 Subject: [PATCH 09/17] Revert "Revert "Experimental Anomaly Vessel (#22233)"" This reverts commit 9e8944efca50e258f7b4be0104700ec96c3ea47c. --- .../Anomaly/AnomalySystem.Vessel.cs | 9 +---- Content.Server/Anomaly/AnomalySystem.cs | 3 +- .../Components/AnomalyVesselComponent.cs | 17 +-------- .../Systems/RadiationSystem.GridCast.cs | 3 ++ .../Radiation/Systems/RadiationSystem.cs | 9 +++++ .../Circuitboards/Machine/production.yml | 19 +++++++++- .../Structures/Machines/anomaly_equipment.yml | 34 +++++++++++++---- .../Entities/Structures/Machines/lathe.yml | 1 + .../Prototypes/Recipes/Lathes/electronics.yml | 11 +++++- .../Prototypes/Research/experimental.yml | 1 + .../adv_anomaly_vessel.rsi/anomaly-1.png | Bin 0 -> 273 bytes .../adv_anomaly_vessel.rsi/anomaly-2.png | Bin 0 -> 259 bytes .../adv_anomaly_vessel.rsi/anomaly-3.png | Bin 0 -> 250 bytes .../Anomaly/adv_anomaly_vessel.rsi/base.png | Bin 0 -> 1075 bytes .../Anomaly/adv_anomaly_vessel.rsi/meta.json | 35 ++++++++++++++++++ .../Anomaly/adv_anomaly_vessel.rsi/panel.png | Bin 0 -> 223 bytes .../adv_anomaly_vessel.rsi/powered-1.png | Bin 0 -> 159 bytes .../adv_anomaly_vessel.rsi/powered-2.png | Bin 0 -> 176 bytes .../adv_anomaly_vessel.rsi/powered-3.png | Bin 0 -> 177 bytes 19 files changed, 109 insertions(+), 33 deletions(-) create mode 100644 Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/anomaly-1.png create mode 100644 Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/anomaly-2.png create mode 100644 Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/anomaly-3.png create mode 100644 Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/base.png create mode 100644 Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/meta.json create mode 100644 Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/panel.png create mode 100644 Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/powered-1.png create mode 100644 Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/powered-2.png create mode 100644 Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/powered-3.png diff --git a/Content.Server/Anomaly/AnomalySystem.Vessel.cs b/Content.Server/Anomaly/AnomalySystem.Vessel.cs index 02c435d2425084..e1394ec44875d0 100644 --- a/Content.Server/Anomaly/AnomalySystem.Vessel.cs +++ b/Content.Server/Anomaly/AnomalySystem.Vessel.cs @@ -20,7 +20,6 @@ private void InitializeVessel() { SubscribeLocalEvent(OnVesselShutdown); SubscribeLocalEvent(OnVesselMapInit); - SubscribeLocalEvent(OnRefreshParts); SubscribeLocalEvent(OnUpgradeExamine); SubscribeLocalEvent(OnVesselInteractUsing); SubscribeLocalEvent(OnExamined); @@ -68,12 +67,6 @@ private void OnVesselMapInit(EntityUid uid, AnomalyVesselComponent component, Ma UpdateVesselAppearance(uid, component); } - private void OnRefreshParts(EntityUid uid, AnomalyVesselComponent component, RefreshPartsEvent args) - { - var modifierRating = args.PartRatings[component.MachinePartPointModifier] - 1; - component.PointMultiplier = MathF.Pow(component.PartRatingPointModifier, modifierRating); - } - private void OnUpgradeExamine(EntityUid uid, AnomalyVesselComponent component, UpgradeExamineEvent args) { args.AddPercentageUpgrade("anomaly-vessel-component-upgrade-output", component.PointMultiplier); @@ -93,6 +86,7 @@ private void OnVesselInteractUsing(EntityUid uid, AnomalyVesselComponent compone component.Anomaly = scanner.ScannedAnomaly; anomalyComponent.ConnectedVessel = uid; + _radiation.SetSourceEnabled(uid, true); UpdateVesselAppearance(uid, component); Popup.PopupEntity(Loc.GetString("anomaly-vessel-component-anomaly-assigned"), uid); } @@ -120,6 +114,7 @@ private void OnVesselAnomalyShutdown(ref AnomalyShutdownEvent args) component.Anomaly = null; UpdateVesselAppearance(ent, component); + _radiation.SetSourceEnabled(ent, false); if (!args.Supercritical) continue; diff --git a/Content.Server/Anomaly/AnomalySystem.cs b/Content.Server/Anomaly/AnomalySystem.cs index bb7a7304d9bb45..c3f19aa1777a71 100644 --- a/Content.Server/Anomaly/AnomalySystem.cs +++ b/Content.Server/Anomaly/AnomalySystem.cs @@ -3,13 +3,13 @@ using Content.Server.Audio; using Content.Server.Explosion.EntitySystems; using Content.Server.Materials; +using Content.Server.Radiation.Systems; using Content.Server.Radio.EntitySystems; using Content.Server.Station.Systems; using Content.Shared.Anomaly; using Content.Shared.Anomaly.Components; using Content.Shared.DoAfter; using Robust.Server.GameObjects; -using Robust.Shared.Audio; using Robust.Shared.Audio.Systems; using Robust.Shared.Configuration; using Robust.Shared.Physics.Events; @@ -33,6 +33,7 @@ public sealed partial class AnomalySystem : SharedAnomalySystem [Dependency] private readonly SharedPointLightSystem _pointLight = default!; [Dependency] private readonly StationSystem _station = default!; [Dependency] private readonly RadioSystem _radio = default!; + [Dependency] private readonly RadiationSystem _radiation = default!; [Dependency] private readonly SharedAudioSystem _audio = default!; [Dependency] private readonly UserInterfaceSystem _ui = default!; diff --git a/Content.Server/Anomaly/Components/AnomalyVesselComponent.cs b/Content.Server/Anomaly/Components/AnomalyVesselComponent.cs index 426e1d97d55d11..74c5e3e9ed2c1e 100644 --- a/Content.Server/Anomaly/Components/AnomalyVesselComponent.cs +++ b/Content.Server/Anomaly/Components/AnomalyVesselComponent.cs @@ -1,8 +1,6 @@ using Content.Shared.Anomaly; -using Content.Shared.Construction.Prototypes; using Robust.Shared.Audio; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom; -using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; namespace Content.Server.Anomaly.Components; @@ -25,22 +23,9 @@ public sealed partial class AnomalyVesselComponent : Component /// /// A multiplier applied to the amount of points generated. /// - [ViewVariables(VVAccess.ReadWrite)] + [DataField, ViewVariables(VVAccess.ReadWrite)] public float PointMultiplier = 1; - /// - /// The machine part that affects the point multiplier of the vessel - /// - [DataField("machinePartPointModifier", customTypeSerializer: typeof(PrototypeIdSerializer))] - public string MachinePartPointModifier = "Capacitor"; - - /// - /// A value used to scale the point multiplier - /// with the corresponding part rating. - /// - [DataField("partRatingPointModifier")] - public float PartRatingPointModifier = 1.25f; - /// /// The maximum time between each beep /// diff --git a/Content.Server/Radiation/Systems/RadiationSystem.GridCast.cs b/Content.Server/Radiation/Systems/RadiationSystem.GridCast.cs index 1be8f0fb0400f0..b8193c4d2f3972 100644 --- a/Content.Server/Radiation/Systems/RadiationSystem.GridCast.cs +++ b/Content.Server/Radiation/Systems/RadiationSystem.GridCast.cs @@ -44,6 +44,9 @@ private void UpdateGridcast() var sourcesData = new ValueList<(EntityUid, RadiationSourceComponent, TransformComponent, Vector2)>(); while (sources.MoveNext(out var uid, out var source, out var sourceTrs)) { + if (!source.Enabled) + continue; + var worldPos = _transform.GetWorldPosition(sourceTrs, transformQuery); var data = (uid, source, sourceTrs, worldPos); sourcesData.Add(data); diff --git a/Content.Server/Radiation/Systems/RadiationSystem.cs b/Content.Server/Radiation/Systems/RadiationSystem.cs index 8e774c788dff24..ffb7ab1a11f5bf 100644 --- a/Content.Server/Radiation/Systems/RadiationSystem.cs +++ b/Content.Server/Radiation/Systems/RadiationSystem.cs @@ -1,4 +1,5 @@ using Content.Server.Radiation.Components; +using Content.Shared.Radiation.Components; using Content.Shared.Radiation.Events; using Robust.Shared.Configuration; using Robust.Shared.Map; @@ -45,6 +46,14 @@ public void IrradiateEntity(EntityUid uid, float radsPerSecond, float time) RaiseLocalEvent(uid, msg); } + public void SetSourceEnabled(Entity entity, bool val) + { + if (!Resolve(entity, ref entity.Comp, false)) + return; + + entity.Comp.Enabled = val; + } + /// /// Marks entity to receive/ignore radiation rays. /// diff --git a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/production.yml b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/production.yml index 835b802da6ff0d..632a98837bf6c6 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/production.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/production.yml @@ -304,11 +304,28 @@ - type: MachineBoard prototype: MachineAnomalyVessel requirements: - Capacitor: 5 + Capacitor: 3 materialRequirements: Cable: 1 PlasmaGlass: 10 +- type: entity + parent: BaseMachineCircuitboard + id: AnomalyVesselExperimentalCircuitboard + name: experimental anomaly vessel machine board + description: A machine printed circuit board for an experimental anomaly vessel. + components: + - type: Sprite + state: science + - type: MachineBoard + prototype: MachineAnomalyVesselExperimental + requirements: + Capacitor: 3 + materialRequirements: + Cable: 5 + PlasmaGlass: 15 + MetalRod: 4 + - type: entity parent: BaseMachineCircuitboard id: AnomalySynchronizerCircuitboard diff --git a/Resources/Prototypes/Entities/Structures/Machines/anomaly_equipment.yml b/Resources/Prototypes/Entities/Structures/Machines/anomaly_equipment.yml index 61891d9940632a..b1612cb6f47843 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/anomaly_equipment.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/anomaly_equipment.yml @@ -2,7 +2,7 @@ id: MachineAnomalyVessel parent: [ BaseMachinePowered, ConstructibleMachine ] name: anomaly vessel - description: A container able to harness a scan of an anomaly and turn it into research points. + description: A container able to harness a scan of an anomaly and turn it into research data. components: - type: Sprite noRot: true @@ -77,12 +77,6 @@ canCreateVacuum: false - type: Destructible thresholds: - - trigger: - !type:DamageTrigger - damage: 300 - behaviors: - - !type:DoActsBehavior - acts: [ "Destruction" ] - trigger: !type:DamageTrigger damage: 150 @@ -97,6 +91,32 @@ guides: - ScannersAndVessels +- type: entity + id: MachineAnomalyVesselExperimental + parent: MachineAnomalyVessel + name: experimental anomaly vessel + description: An advanced anomaly vessel capable of greater research potential at the cost of increased volatility and low-level radioactive decay into the environment. + components: + - type: Sprite + sprite: Structures/Machines/Anomaly/adv_anomaly_vessel.rsi + offset: 0,0.5 + drawdepth: Mobs + - type: SpriteFade + - type: AnomalyVessel + pointMultiplier: 2 + - type: RadiationSource + intensity: 0.75 + slope: 0.1 + enabled: false + - type: Machine + board: AnomalyVesselExperimentalCircuitboard + - type: Explosive + explosionType: Default + maxIntensity: 50 + intensitySlope: 7.5 + totalIntensity: 500 + canCreateVacuum: true + - type: entity id: MachineAPE parent: [ BaseMachinePowered, ConstructibleMachine ] diff --git a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml index c306bee8abceb8..c779b0f7d7e481 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml @@ -448,6 +448,7 @@ - AnalysisComputerCircuitboard - ExosuitFabricatorMachineCircuitboard - AnomalyVesselCircuitboard + - AnomalyVesselExperimentalCircuitboard - AnomalySynchronizerCircuitboard - APECircuitboard - ArtifactAnalyzerMachineCircuitboard diff --git a/Resources/Prototypes/Recipes/Lathes/electronics.yml b/Resources/Prototypes/Recipes/Lathes/electronics.yml index 3af1345de961c6..432178fa6d58c6 100644 --- a/Resources/Prototypes/Recipes/Lathes/electronics.yml +++ b/Resources/Prototypes/Recipes/Lathes/electronics.yml @@ -347,6 +347,16 @@ Steel: 100 Glass: 900 +- type: latheRecipe + id: AnomalyVesselExperimentalCircuitboard + result: AnomalyVesselExperimentalCircuitboard + category: Circuitry + completetime: 4 + materials: + Steel: 100 + Glass: 900 + Gold: 100 + - type: latheRecipe id: AnomalySynchronizerCircuitboard result: AnomalySynchronizerCircuitboard @@ -905,7 +915,6 @@ materials: Steel: 100 Glass: 900 - Gold: 100 Gold: 100 - type: latheRecipe diff --git a/Resources/Prototypes/Research/experimental.yml b/Resources/Prototypes/Research/experimental.yml index cf403302c1d4fa..4162f8f4686299 100644 --- a/Resources/Prototypes/Research/experimental.yml +++ b/Resources/Prototypes/Research/experimental.yml @@ -123,6 +123,7 @@ recipeUnlocks: - WeaponPistolCHIMP - AnomalySynchronizerCircuitboard + - AnomalyVesselExperimentalCircuitboard technologyPrerequisites: - BasicAnomalousResearch diff --git a/Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/anomaly-1.png b/Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/anomaly-1.png new file mode 100644 index 0000000000000000000000000000000000000000..75b33a1d8d29cc15cd8f5368175dff89f11b8327 GIT binary patch literal 273 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3HF&`%2dVDaPU;cPEB*=VV?2Ij22c978f1 z-(E4~JES1d_RzmxJSWNdlCfo_Fn>T_1N#eKt4a=kCntkU>%=(*zRR0-z4(6S!X5`k z1tlo>RX+O;XY%#!3A&XBWs+Oj z`W37b>bNhRntGzJ;NPq~N6!;lFL^7<&&0g*ulRjo#v=xxQ-0a{Ge3&|eEYICGtgTM Mp00i_>zopr0E^^j-~a#s literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/anomaly-2.png b/Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/anomaly-2.png new file mode 100644 index 0000000000000000000000000000000000000000..ffa6efd144ff3c0c4aa0e48b9e0e94a9200f1a12 GIT binary patch literal 259 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3HF&`%2dVDaPU;cPEB*=VV?2IeR@_978f1 z-(IojI%FWi_QC(YUR}$4UlZsN22WQ%mvv4FO#qsj BXYv35 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/anomaly-3.png b/Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/anomaly-3.png new file mode 100644 index 0000000000000000000000000000000000000000..4f17e843d53fd34954c5ce5a28d531319336d517 GIT binary patch literal 250 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3HF&`%2dVDaPU;cPEB*=VV?2Ia@qk978f1 z-(E4~I^-bG`fz#2(+t67f|s6Z#3gP&b5qAW{Da0zrc5V+xtFwh4=w85EyZ0MKQ+nh z=gme27Z~`TH?eBL`nk*u(mEYndFKU0`5AUQUp^yt;rh9o2@h*_E?UEt-^|J&AbNjm z@{PP}0;2PUHhOV(*xqqCQR`pSu%hDP^Zsd}5BCdwIK`F5+u^*UDTDR*I@x|pZI7b= r?0c+*qt(pj*qKb0bpYD9Kb=YNe&qfuZ;EaL-Ou3Z>gTe~DWM4fp|xPP literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/base.png b/Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/base.png new file mode 100644 index 0000000000000000000000000000000000000000..a69b856d65426a81cbc60d3d5fcbc4bf33b3bb8f GIT binary patch literal 1075 zcmV-31kC%1P)Px&?MXyIRA_qx$gQyjX5fW%}=$D}iCB;J#JO)Af3rc^2 z2SMl$sCX#!kV4y|DG~gDT1dd0RO}@b2?Vj3t>&5@(phJA=WAnZd+>pns0eET%()3cMFfh# zRlrI>GL>rfbVuRTsnOP{Q}lF4t)pNRz??5EW^MQY01Jy*YY|2PJ>5}cW;52#88WjO z^mIp!c3J^!1d&L8U;(U;DGEvfEcES+o`FR{CqgNJIgdp8QLCK%3Mw!Fi)%bb8*X2u@8Rx>Ps#8UTRuUKwYN2An#@ z=x`FF!%5$ia_SUkjRwklWyB_9E{{%xQ~>Y1yjK?PnI6kaORrtQ01%suxgx9u@S|p+ z)bZU{38&NnAz_z;kA_wN%b(0KBeVe_VWA%%4R0L@Mac5UJ0~P8bhCV1Q0?n-PFYOydkKoAbpSwmY7WIxUf_{IS%l{V8uztvW1OPmI^uS}U=lP)$5Htd+6#TUas8VpH5n%ItWo6fA2ehVP z;0Rnqn!B zUrt3BEpMX&?<>%YNns-=gm7$R42MUDoG2=+f;I@W5T&Q)-1An5!$`!VzWb&Z?;C#cR%96Y2EVAG2~GT0WPjzcS;^)?iBrx!ai$EF3VSXwu7NCoiw zdfg~(|FE#-2m!5U!PDuq6>+EVC11eW>T;+H01ozdtX{P`iG%$e0Dn?&T&+qsmsbh) t-6;eBxBB`5f9>i7ex9C&{)JxwzX4oxO#q(RC4v9|002ovPDHLkV1i#M>2Lr5 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/meta.json b/Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/meta.json new file mode 100644 index 00000000000000..e7fe21e79a8410 --- /dev/null +++ b/Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/meta.json @@ -0,0 +1,35 @@ +{ + "version": 1, + "license": "CC0-1.0", + "copyright": "Created by EmoGarbage404 (github)", + "size": { + "x": 32, + "y": 64 + }, + "states": [ + { + "name": "anomaly-1" + }, + { + "name": "anomaly-2" + }, + { + "name": "anomaly-3" + }, + { + "name": "base" + }, + { + "name": "panel" + }, + { + "name": "powered-1" + }, + { + "name": "powered-2" + }, + { + "name": "powered-3" + } + ] +} diff --git a/Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/panel.png b/Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/panel.png new file mode 100644 index 0000000000000000000000000000000000000000..5c11431bd78217437ebb1f9cff6e5e824f703f68 GIT binary patch literal 223 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3HF&`%2dVDaPU;cPEB*=VV?2IWs+7978f1 z-(Jz?YjzN6eHa}S{EeZsH1tg~%W16$t|r|Jr`EMEIjCT0!J?8N=sWWvpW}!6ym`-O zND2aV1HpqgdfV7PJ^1=_`#jUkP0@{ye(KeqZU4JCw(oKNl$rNl-V`z5++X=Gp*Swo zL3*9m1Erc`#_)%;xpwe~3+}v?Be(nH`lY+FnL@AqW4LVV{VIJ$X$2z#L%|NoeczQn Tr5=dL0$Jke>gTe~DWM4f?kHD4 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/powered-1.png b/Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/powered-1.png new file mode 100644 index 0000000000000000000000000000000000000000..504857312a4e86fcddfad61fb7e946e76765ee35 GIT binary patch literal 159 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3HF&`%2dVDaPU;cPEB*=VV?2Igy?&jv*P1 zZ!a72HW&!BU1Xb*(6mI`$e_`TM}a}uLo;|XpU#s8gFV~tl-&QeoCT&HVZ?E3}?GsG)9Cw<_4AcY$1{#)L zvFaO3dZrb4+`GCqQmf%V@2w3_H2$`KFODnw`floO*;i8YniYSl=kLG9_&}Il#95Pf SPqy=ZkZw;`KbLh*2~7aE%{z7g literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/powered-3.png b/Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/powered-3.png new file mode 100644 index 0000000000000000000000000000000000000000..2c93f720c9bfba36dee1cf2c549685d0365c9c1d GIT binary patch literal 177 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3HF&`%2dVDaPU;cPEB*=VV?2IoX~rjv*P1 zZ!d4;ZBP(seR#P^QX`*7`1`^lrSFOSQo`vA4t5=z)A_8&?Em!%F%|u7!i+#&U{G+v zaBFVVtmVmHT0)zr1lfun_|KL-BRT7D`}g8|;h*14-7Wh}YF_iIhbM2ZFJ<^~gt3iT UBZlXcRyIhtr>mdKI;Vst0Gf9}FaQ7m literal 0 HcmV?d00001 From 188eb5cceb23cc02c8da0e192095ea148bbce3c5 Mon Sep 17 00:00:00 2001 From: Ratyyy <138193222+Ratyyy@users.noreply.github.com> Date: Sun, 11 Feb 2024 21:46:02 +0200 Subject: [PATCH 10/17] Revert "Revert "Revert "Hyper convection lathes and industrial ore processor (#23202)""" This reverts commit 874fc9c034210ef9a0c98554aee79791b0f2a772. --- .../Components/LatheHeatProducingComponent.cs | 21 ---- Content.Server/Lathe/LatheSystem.cs | 107 +++++------------- Content.Shared/Lathe/LatheComponent.cs | 34 ++++-- .../Circuitboards/Machine/production.yml | 92 --------------- .../Entities/Structures/Machines/lathe.yml | 71 +----------- .../Prototypes/Recipes/Lathes/electronics.yml | 9 -- Resources/Prototypes/Research/industrial.yml | 14 ++- .../autolathe_hypercon.rsi/building.png | Bin 3124 -> 0 bytes .../Machines/autolathe_hypercon.rsi/icon.png | Bin 1319 -> 0 bytes .../autolathe_hypercon.rsi/inserting.png | Bin 711 -> 0 bytes .../Machines/autolathe_hypercon.rsi/meta.json | 51 --------- .../Machines/autolathe_hypercon.rsi/panel.png | Bin 470 -> 0 bytes .../Machines/autolathe_hypercon.rsi/unlit.png | Bin 166 -> 0 bytes .../ore_processor_industrial.rsi/building.png | Bin 1421 -> 0 bytes .../ore_processor_industrial.rsi/icon.png | Bin 903 -> 0 bytes .../inserting.png | Bin 2948 -> 0 bytes .../ore_processor_industrial.rsi/meta.json | 50 -------- .../ore_processor_industrial.rsi/panel.png | Bin 223 -> 0 bytes .../ore_processor_industrial.rsi/unlit.png | Bin 167 -> 0 bytes .../protolathe_hypercon.rsi/building.png | Bin 4341 -> 0 bytes .../Machines/protolathe_hypercon.rsi/icon.png | Bin 1199 -> 0 bytes .../protolathe_hypercon.rsi/inserting.png | Bin 652 -> 0 bytes .../protolathe_hypercon.rsi/meta.json | 52 --------- .../protolathe_hypercon.rsi/panel.png | Bin 761 -> 0 bytes .../protolathe_hypercon.rsi/unlit.png | Bin 202 -> 0 bytes 25 files changed, 68 insertions(+), 433 deletions(-) delete mode 100644 Content.Server/Lathe/Components/LatheHeatProducingComponent.cs delete mode 100644 Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/building.png delete mode 100644 Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/icon.png delete mode 100644 Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/inserting.png delete mode 100644 Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/meta.json delete mode 100644 Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/panel.png delete mode 100644 Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/unlit.png delete mode 100644 Resources/Textures/Structures/Machines/ore_processor_industrial.rsi/building.png delete mode 100644 Resources/Textures/Structures/Machines/ore_processor_industrial.rsi/icon.png delete mode 100644 Resources/Textures/Structures/Machines/ore_processor_industrial.rsi/inserting.png delete mode 100644 Resources/Textures/Structures/Machines/ore_processor_industrial.rsi/meta.json delete mode 100644 Resources/Textures/Structures/Machines/ore_processor_industrial.rsi/panel.png delete mode 100644 Resources/Textures/Structures/Machines/ore_processor_industrial.rsi/unlit.png delete mode 100644 Resources/Textures/Structures/Machines/protolathe_hypercon.rsi/building.png delete mode 100644 Resources/Textures/Structures/Machines/protolathe_hypercon.rsi/icon.png delete mode 100644 Resources/Textures/Structures/Machines/protolathe_hypercon.rsi/inserting.png delete mode 100644 Resources/Textures/Structures/Machines/protolathe_hypercon.rsi/meta.json delete mode 100644 Resources/Textures/Structures/Machines/protolathe_hypercon.rsi/panel.png delete mode 100644 Resources/Textures/Structures/Machines/protolathe_hypercon.rsi/unlit.png diff --git a/Content.Server/Lathe/Components/LatheHeatProducingComponent.cs b/Content.Server/Lathe/Components/LatheHeatProducingComponent.cs deleted file mode 100644 index 9da535eed832b7..00000000000000 --- a/Content.Server/Lathe/Components/LatheHeatProducingComponent.cs +++ /dev/null @@ -1,21 +0,0 @@ -using Content.Shared.Lathe; -using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom; - -namespace Content.Server.Lathe.Components; - -/// -/// This is used for a that releases heat into the surroundings while producing items. -/// -[RegisterComponent] -[Access(typeof(LatheSystem))] -public sealed partial class LatheHeatProducingComponent : Component -{ - /// - /// The amount of energy produced each second when producing an item. - /// - [DataField, ViewVariables(VVAccess.ReadWrite)] - public float EnergyPerSecond = 30000; - - [DataField(customTypeSerializer: typeof(TimeOffsetSerializer))] - public TimeSpan NextSecond; -} diff --git a/Content.Server/Lathe/LatheSystem.cs b/Content.Server/Lathe/LatheSystem.cs index d3996652df0e56..c05e2ce7c88097 100644 --- a/Content.Server/Lathe/LatheSystem.cs +++ b/Content.Server/Lathe/LatheSystem.cs @@ -1,16 +1,13 @@ using System.Diagnostics.CodeAnalysis; using System.Linq; -using Content.Shared.Access.Systems; using Content.Server.Administration.Logs; -using Content.Server.Atmos; -using Content.Server.Atmos.EntitySystems; +using Content.Server.Construction; 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.Stack; -using Content.Shared.UserInterface; +using Content.Server.UserInterface; using Content.Shared.Database; using Content.Shared.Emag.Components; using Content.Shared.Lathe; @@ -19,6 +16,7 @@ using Content.Shared.Research.Prototypes; using JetBrains.Annotations; using Robust.Server.GameObjects; +using Robust.Shared.Audio; using Robust.Shared.Audio.Systems; using Robust.Shared.Prototypes; using Robust.Shared.Timing; @@ -53,20 +51,12 @@ public sealed class LatheSystem : SharedLatheSystem [Dependency] private readonly IGameTiming _timing = default!; [Dependency] private readonly IPrototypeManager _proto = default!; [Dependency] private readonly IAdminLogManager _adminLogger = default!; - [Dependency] private readonly AtmosphereSystem _atmosphere = default!; [Dependency] private readonly SharedAppearanceSystem _appearance = default!; - [Dependency] private readonly AccessReaderSystem _accessReaderSystem = default!; [Dependency] private readonly SharedAudioSystem _audio = default!; [Dependency] private readonly UserInterfaceSystem _uiSys = default!; - [Dependency] private readonly PopupSystem _popup = default!; [Dependency] private readonly MaterialStorageSystem _materialStorage = default!; [Dependency] private readonly StackSystem _stack = default!; - [Dependency] private readonly TransformSystem _transform = default!; - - /// - /// Per-tick cache - /// - private readonly List _environments = new(); + [Dependency] private readonly IPrototypeManager _prototypeManager = default!; public override void Initialize() { @@ -74,6 +64,8 @@ public override void Initialize() SubscribeLocalEvent(OnGetWhitelist); SubscribeLocalEvent(OnMapInit); SubscribeLocalEvent(OnPowerChanged); + SubscribeLocalEvent(OnPartsRefresh); + SubscribeLocalEvent(OnUpgradeExamine); SubscribeLocalEvent(OnDatabaseModified); SubscribeLocalEvent(OnResearchRegistrationChanged); @@ -98,34 +90,6 @@ public override void Update(float frameTime) if (_timing.CurTime - comp.StartTime >= comp.ProductionLength) FinishProducing(uid, lathe); } - - var heatQuery = EntityQueryEnumerator(); - while (heatQuery.MoveNext(out var uid, out var heatComp, out _, out var xform)) - { - if (_timing.CurTime < heatComp.NextSecond) - continue; - heatComp.NextSecond += TimeSpan.FromSeconds(1); - - var position = _transform.GetGridTilePositionOrDefault((uid, xform)); - _environments.Clear(); - - if (_atmosphere.GetTileMixture(xform.GridUid, xform.MapUid, position, true) is { } tileMix) - _environments.Add(tileMix); - - if (xform.GridUid != null) - { - _environments.AddRange(_atmosphere.GetAdjacentTileMixtures(xform.GridUid.Value, position, false, true)); - } - - if (_environments.Count > 0) - { - var heatPerTile = heatComp.EnergyPerSecond / _environments.Count; - foreach (var env in _environments) - { - _atmosphere.AddHeat(env, heatPerTile); - } - } - } } private void OnGetWhitelist(EntityUid uid, LatheComponent component, ref GetMaterialWhitelistEvent args) @@ -133,7 +97,7 @@ private void OnGetWhitelist(EntityUid uid, LatheComponent component, ref GetMate if (args.Storage != uid) return; var materialWhitelist = new List>(); - var recipes = GetAvailableRecipes(uid, component, true); + var recipes = GetAllBaseRecipes(component); foreach (var id in recipes) { if (!_proto.TryIndex(id, out var proto)) @@ -152,12 +116,12 @@ private void OnGetWhitelist(EntityUid uid, LatheComponent component, ref GetMate } [PublicAPI] - public bool TryGetAvailableRecipes(EntityUid uid, [NotNullWhen(true)] out List>? recipes, [NotNullWhen(true)] LatheComponent? component = null, bool getUnavailable = false) + public bool TryGetAvailableRecipes(EntityUid uid, [NotNullWhen(true)] out List>? recipes, [NotNullWhen(true)] LatheComponent? component = null) { recipes = null; if (!Resolve(uid, ref component)) return false; - recipes = GetAvailableRecipes(uid, component, getUnavailable); + recipes = GetAvailableRecipes(uid, component); return true; } @@ -203,6 +167,7 @@ public bool TryStartProducing(EntityUid uid, LatheComponent? component = null) return false; if (component.CurrentRecipe != null || component.Queue.Count <= 0 || !this.IsPowered(uid, EntityManager)) return false; + var recipe = component.Queue.First(); component.Queue.RemoveAt(0); @@ -211,9 +176,6 @@ public bool TryStartProducing(EntityUid uid, LatheComponent? component = null) lathe.ProductionLength = recipe.CompleteTime * component.TimeMultiplier; component.CurrentRecipe = recipe; - var ev = new LatheStartPrintingEvent(recipe); - RaiseLocalEvent(uid, ref ev); - _audio.PlayPvs(component.ProducingSound, uid); UpdateRunningAppearance(uid, true); UpdateUserInterfaceState(uid, component); @@ -261,7 +223,7 @@ private void OnGetRecipes(EntityUid uid, TechnologyDatabaseComponent component, foreach (var recipe in latheComponent.DynamicRecipes) { - if (!(args.getUnavailable || component.UnlockedRecipes.Contains(recipe)) || args.Recipes.Contains(recipe)) + if (!component.UnlockedRecipes.Contains(recipe) || args.Recipes.Contains(recipe)) continue; args.Recipes.Add(recipe); } @@ -271,11 +233,11 @@ private void GetEmagLatheRecipes(EntityUid uid, EmagLatheRecipesComponent compon { if (uid != args.Lathe || !TryComp(uid, out var technologyDatabase)) return; - if (!args.getUnavailable && !HasComp(uid)) + if (!HasComp(uid)) return; foreach (var recipe in component.EmagDynamicRecipes) { - if (!(args.getUnavailable || technologyDatabase.UnlockedRecipes.Contains(recipe)) || args.Recipes.Contains(recipe)) + if (!technologyDatabase.UnlockedRecipes.Contains(recipe) || args.Recipes.Contains(recipe)) continue; args.Recipes.Add(recipe); } @@ -285,11 +247,6 @@ private void GetEmagLatheRecipes(EntityUid uid, EmagLatheRecipesComponent compon } } - private void OnHeatStartPrinting(EntityUid uid, LatheHeatProducingComponent component, LatheStartPrintingEvent args) - { - component.NextSecond = _timing.CurTime; - } - private void OnMaterialAmountChanged(EntityUid uid, LatheComponent component, ref MaterialAmountChangedEvent args) { UpdateUserInterfaceState(uid, component); @@ -330,6 +287,22 @@ private void OnPowerChanged(EntityUid uid, LatheComponent component, ref PowerCh } } + private void OnPartsRefresh(EntityUid uid, LatheComponent component, RefreshPartsEvent args) + { + var printTimeRating = args.PartRatings[component.MachinePartPrintSpeed]; + var materialUseRating = args.PartRatings[component.MachinePartMaterialUse]; + + component.TimeMultiplier = MathF.Pow(component.PartRatingPrintTimeMultiplier, printTimeRating - 1); + component.MaterialUseMultiplier = MathF.Pow(component.PartRatingMaterialUseMultiplier, materialUseRating - 1); + Dirty(component); + } + + private void OnUpgradeExamine(EntityUid uid, LatheComponent component, UpgradeExamineEvent args) + { + args.AddPercentageUpgrade("lathe-component-upgrade-speed", 1 / component.TimeMultiplier); + args.AddPercentageUpgrade("lathe-component-upgrade-material-use", component.MaterialUseMultiplier); + } + private void OnDatabaseModified(EntityUid uid, LatheComponent component, ref TechnologyDatabaseModifiedEvent args) { UpdateUserInterfaceState(uid, component); @@ -348,15 +321,6 @@ protected override bool HasRecipe(EntityUid uid, LatheRecipePrototype recipe, La private void OnLatheQueueRecipeMessage(EntityUid uid, LatheComponent component, LatheQueueRecipeMessage args) { - if (args.Session.AttachedEntity is not {Valid: true} player) - return; - if (!_accessReaderSystem.IsAllowed(player, uid)) - { - ConsolePopup(args.Session, uid, Loc.GetString("lathe-production-not-allowed")); - PlayDenySound(uid, component); - return; - } - if (_proto.TryIndex(args.ID, out LatheRecipePrototype? recipe)) { var count = 0; @@ -377,19 +341,6 @@ private void OnLatheQueueRecipeMessage(EntityUid uid, LatheComponent component, UpdateUserInterfaceState(uid, component); } - private void ConsolePopup(ICommonSession session, EntityUid uid, string text) - { - _popup.PopupEntity(text, uid, session); - } - - private void PlayDenySound(EntityUid uid, LatheComponent component) - { - if (component.ErrorSound != null) - { - _audio.PlayEntity(_audio.GetSound(component.ErrorSound), Filter.Pvs(uid, entityManager: EntityManager), uid, false); - } - } - private void OnLatheSyncRequestMessage(EntityUid uid, LatheComponent component, LatheSyncRequestMessage args) { UpdateUserInterfaceState(uid, component); diff --git a/Content.Shared/Lathe/LatheComponent.cs b/Content.Shared/Lathe/LatheComponent.cs index e8a92063e418da..3ec4c8d98cd8f8 100644 --- a/Content.Shared/Lathe/LatheComponent.cs +++ b/Content.Shared/Lathe/LatheComponent.cs @@ -59,15 +59,39 @@ public sealed partial class LatheComponent : Component /// /// A modifier that changes how long it takes to print a recipe /// - [DataField, ViewVariables(VVAccess.ReadWrite)] + [ViewVariables(VVAccess.ReadWrite)] public float TimeMultiplier = 1; + /// + /// The machine part that reduces how long it takes to print a recipe. + /// + [DataField] + public ProtoId MachinePartPrintSpeed = "Manipulator"; + + /// + /// The value that is used to calculate the modified + /// + [DataField] + public float PartRatingPrintTimeMultiplier = 0.5f; + /// /// A modifier that changes how much of a material is needed to print a recipe /// - [DataField, ViewVariables(VVAccess.ReadWrite), AutoNetworkedField] + [ViewVariables(VVAccess.ReadWrite), AutoNetworkedField] public float MaterialUseMultiplier = 1; + /// + /// The machine part that reduces how much material it takes to print a recipe. + /// + [DataField] + public ProtoId MachinePartMaterialUse = "MatterBin"; + + /// + /// The value that is used to calculate the modifier + /// + [DataField] + public float PartRatingMaterialUseMultiplier = DefaultPartRatingMaterialUseMultiplier; + public const float DefaultPartRatingMaterialUseMultiplier = 0.85f; #endregion @@ -89,10 +113,4 @@ public LatheGetRecipesEvent(EntityUid lathe, bool forced) getUnavailable = forced; } } - - /// - /// Event raised on a lathe when it starts producing a recipe. - /// - [ByRefEvent] - public readonly record struct LatheStartPrintingEvent(LatheRecipePrototype Recipe); } diff --git a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/production.yml b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/production.yml index 632a98837bf6c6..fccbdd787026b1 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/production.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/production.yml @@ -12,24 +12,6 @@ materialRequirements: Glass: 1 -- type: entity - parent: BaseMachineCircuitboard - id: AutolatheHyperConvectionMachineCircuitboard - name: hyper convection autolathe machine board - description: A machine printed circuit board for a hyper convection autolathe - components: - - type: MachineBoard - prototype: AutolatheHyperConvection - requirements: - MatterBin: 3 - materialRequirements: - Glass: 1 - tagRequirements: - Igniter: - Amount: 1 - DefaultPrototype: Igniter - ExamineName: Igniter - - type: entity id: ProtolatheMachineCircuitboard parent: BaseMachineCircuitboard @@ -399,46 +381,6 @@ deconstructionTarget: null node: heater -- type: entity - parent: BaseMachineCircuitboard - id: HellfireFreezerMachineCircuitBoard - name: hellfire freezer machine board - description: Looks like you could use a screwdriver to change the board type. - components: - - type: Sprite - state: engineering - - type: MachineBoard - prototype: GasThermoMachineHellfireFreezer - requirements: - MatterBin: 2 - Capacitor: 2 - materialRequirements: - Plasma: 1 - - type: Construction - deconstructionTarget: null - graph: ThermomachineBoard - node: hellfirefreezer - -- type: entity - parent: BaseMachineCircuitboard - id: HellfireHeaterMachineCircuitBoard - name: hellfire heater machine board - description: Looks like you could use a screwdriver to change the board type. - components: - - type: Sprite - state: engineering - - type: MachineBoard - prototype: GasThermoMachineHellfireHeater - requirements: - MatterBin: 2 - Capacitor: 2 - materialRequirements: - Plasma: 1 - - type: Construction - graph: ThermomachineBoard - deconstructionTarget: null - node: hellfireheater - - type: entity id: CondenserMachineCircuitBoard parent: BaseMachineCircuitboard @@ -735,25 +677,6 @@ - type: StaticPrice price: 15 -- type: entity - id: TurboItemRechargerCircuitboard - parent: BaseMachineCircuitboard - name: turbo recharger machine board - description: A machine printed circuit board for a turbo recharger. - components: - - type: Sprite - sprite: Objects/Misc/module.rsi - state: charger_APC - - type: MachineBoard - prototype: TurboItemRecharger - requirements: - Capacitor: 2 - materialRequirements: - CableMV: 5 - - type: PhysicalComposition - materialComposition: - Steel: 30 - Plastic: 30 - type: entity id: SubstationMachineCircuitboard @@ -1018,21 +941,6 @@ materialRequirements: Glass: 1 -- type: entity - parent: BaseMachineCircuitboard - id: OreProcessorIndustrialMachineCircuitboard - name: industrial ore processor machine board - components: - - type: Sprite - state: supply - - type: MachineBoard - prototype: OreProcessorIndustrial - requirements: - MatterBin: 1 - Manipulator: 3 - materialRequirements: - Glass: 1 - - type: entity id: SheetifierMachineCircuitboard parent: BaseMachineCircuitboard diff --git a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml index c779b0f7d7e481..9e7194288662e3 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml @@ -204,21 +204,6 @@ - GrenadeEMP - GrenadeFlash -- type: entity - id: AutolatheHyperConvection - parent: Autolathe - name: hyper convection autolathe - description: A highly-experimental autolathe that harnesses the power of extreme heat to slowly create objects more cost-effectively. - components: - - type: Sprite - sprite: Structures/Machines/autolathe_hypercon.rsi - - type: Lathe - materialUseMultiplier: 0.5 - timeMultiplier: 1.5 - - type: LatheHeatProducing - - type: Machine - board: AutolatheHyperConvectionMachineCircuitboard - - type: entity id: Protolathe parent: BaseLathe @@ -331,21 +316,6 @@ - WeaponLaserCannon - WeaponXrayCannon -- type: entity - id: ProtolatheHyperConvection - parent: Protolathe - name: hyper convection protolathe - description: A highly-experimental protolathe that harnesses the power of extreme heat to slowly create objects more cost-effectively. - components: - - type: Sprite - sprite: Structures/Machines/protolathe_hypercon.rsi - - type: Lathe - materialUseMultiplier: 0.5 - timeMultiplier: 1.5 - - type: LatheHeatProducing - - type: Machine - board: ProtolatheHyperConvectionMachineCircuitboard - - type: entity id: CircuitImprinter parent: BaseLathe @@ -371,11 +341,6 @@ idleState: icon runningState: building staticRecipes: - - ProtolatheMachineCircuitboard - - AutolatheMachineCircuitboard - - CircuitImprinterMachineCircuitboard - - OreProcessorMachineCircuitboard - - MaterialReclaimerMachineCircuitboard - ElectrolysisUnitMachineCircuitboard - CentrifugeMachineCircuitboard - ChemDispenserMachineCircuitboard @@ -408,8 +373,8 @@ - SolarTrackerElectronics - TurboItemRechargerCircuitboard - PowerComputerCircuitboard - - AutolatheHyperConvectionMachineCircuitboard - - ProtolatheHyperConvectionMachineCircuitboard + - AutolatheMachineCircuitboard + - ProtolatheMachineCircuitboard - ReagentGrinderMachineCircuitboard - MicrowaveMachineCircuitboard - ElectricGrillMachineCircuitboard @@ -418,11 +383,13 @@ - SheetifierMachineCircuitboard - ShuttleConsoleCircuitboard - RadarConsoleCircuitboard + - CircuitImprinterMachineCircuitboard - TechDiskComputerCircuitboard - DawInstrumentMachineCircuitboard - CloningConsoleComputerCircuitboard - StasisBedMachineCircuitboard - - OreProcessorIndustrialMachineCircuitboard + - MaterialReclaimerMachineCircuitboard + - OreProcessorMachineCircuitboard - CargoTelepadMachineCircuitboard - RipleyCentralElectronics - RipleyPeripheralsElectronics @@ -1230,34 +1197,6 @@ - IngotSilver30 - MaterialBananium10 -- type: entity - parent: OreProcessor - id: OreProcessorIndustrial - name: industrial ore processor - description: An ore processor specifically designed for mass-producing metals in industrial applications. - components: - - type: Sprite - sprite: Structures/Machines/ore_processor_industrial.rsi - - type: Machine - board: OreProcessorIndustrialMachineCircuitboard - - type: Lathe - materialUseMultiplier: 0.75 - timeMultiplier: 0.5 - staticRecipes: - - SheetSteel30 - - SheetGlass30 - - SheetRGlass30 - - SheetPlasma30 - - SheetPGlass30 - - SheetRPGlass30 - - SheetPlasteel30 - - SheetUranium30 - - SheetUGlass30 - - SheetRUGlass30 - - IngotGold30 - - IngotSilver30 - - MaterialBananium10 - - type: entity parent: BaseLathe id: Sheetifier diff --git a/Resources/Prototypes/Recipes/Lathes/electronics.yml b/Resources/Prototypes/Recipes/Lathes/electronics.yml index 432178fa6d58c6..c22565c61d65b8 100644 --- a/Resources/Prototypes/Recipes/Lathes/electronics.yml +++ b/Resources/Prototypes/Recipes/Lathes/electronics.yml @@ -487,15 +487,6 @@ materials: Steel: 100 Glass: 900 - -- type: latheRecipe - id: OreProcessorIndustrialMachineCircuitboard - result: OreProcessorIndustrialMachineCircuitboard - category: Circuitry - completetime: 4 - materials: - Steel: 100 - Glass: 900 Gold: 100 - type: latheRecipe diff --git a/Resources/Prototypes/Research/industrial.yml b/Resources/Prototypes/Research/industrial.yml index e1bbbc3c210769..8035c9ffa9185b 100644 --- a/Resources/Prototypes/Research/industrial.yml +++ b/Resources/Prototypes/Research/industrial.yml @@ -12,7 +12,7 @@ recipeUnlocks: - MiningDrill - BorgModuleMining - - OreProcessorIndustrialMachineCircuitboard + - OreProcessorMachineCircuitboard - OreBagOfHolding - type: technology @@ -44,14 +44,16 @@ id: IndustrialEngineering name: research-technology-industrial-engineering icon: - sprite: Structures/Machines/protolathe_hypercon.rsi - state: building + sprite: Structures/Machines/protolathe.rsi + state: icon discipline: Industrial tier: 1 - cost: 10000 + cost: 7500 recipeUnlocks: - - AutolatheHyperConvectionMachineCircuitboard - - ProtolatheHyperConvectionMachineCircuitboard + - ProtolatheMachineCircuitboard + - AutolatheMachineCircuitboard + - CircuitImprinterMachineCircuitboard + - MaterialReclaimerMachineCircuitboard - SheetifierMachineCircuitboard - type: technology diff --git a/Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/building.png b/Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/building.png deleted file mode 100644 index cb1abc7aa8e5c16ab9cc68f8c17361dd009c968d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3124 zcmb7{X*d+>7rZ6bS?kuhTzS!%|!NLNR?7~ zRpe@FSej0VuZjyeO|ZF*-w?W3PT-Yocq)82>N=jT8&%|uANA3hIDES?RVq(2PS)m` zluBZbifW6Hw7;@0xidjQG`xwoxPG=NoV4W?Y(?aK_BcV}{6ZDOakEjyvpm!mP$jjG zydMK?aT}NZ;vmHTJ)VPcb6G_`JVnJ_sK>Olv}7(|RDoAs{)*Si!UYNe$P`Mw`!YNw zg0rb_d;39#C5OF?yVo?SId8QFI+jP#!r|DqhOrD9jc}s}1^l$O3Su7AT?MOUY+HbbJ?hfX4&f|BjB&Un9~3LPPiMx~x)S zf{;E#>bR>Kog(H~w1Egpdf80$?%{nOACC<)NotP6S)j_~ z1t{kJeMFAV?M%3jSr@5FKBEwKMJ3l8`S}upU2nviTq2~DDQ70vpDMWE*C<;WYP1ks zgxvvI;AM}Ov7sBWra|QuLdoQHsF=98-Nm~!ZuxPgUbm%MQugA;wtbGcz?g1&RK9p@ zG;gLt%4GDrA9QyA-DKoxrJ=_lSt|)fwO8-eEtd38vWuxluC-cKRc%SxqE&>88sjrS zNNB>GMRpE8>2x({l+8oExK{KbUQ{S0VtI&U7`bU}ziqvw9x6KXHY&W+JDdwI_@*wA zL1Zkc$F=-mr-=0p4P>R#w_Z0@eM?u%zQA>7i?5pU)4lMd)U5R}b^w{er^z=OVof!ciR0!Q$!9@8dYYK+;^^6Oo6 z$Lj2tV3BB*%jvzJY>slF&fE_NP}i>;2>Kfsce(8S=I`t*F%r7TtfX2=%`1`?&hBk) z_H0A&OONl~*3uPKb#)`3t`cErJA2~^;8RiccWmX$;_8)B(#K^6Hp{bfnPKPbyte}%3C^&boSr`L z?V8f5ynwwcD~3={ib8O3y-bF)N*CpP??{=SHVkFJe!`$453U5y>Qy|Mg{v_JjRNX? zr)Pb?bKe#MlNR?^XJ=B^(*6D4HZo!w1e(64jZP~EY-uqDnx}QL@6#3UTu7b_+j#9^ zX=F5*3Pf8PkcRFv{%{^0K<|(Xeb_hU7ZM)$01p-a0Y3NgOmid76uDN?lJ9slP1emt z$%I87Iq@}I#u7+yqz(%J65C`EqAr|3KVOvNBK`veQ6fcZmDn2VW;Ir4ajQ60Zj9v5 z0YpQ)25zvt5;UebP2+q7+Kftx5gATm71BLpyMi9y!zL+QHc_!#_vsxuCm7w8bOaDw zR=xT53IV@=5QIK37+x3Z{)l}WXG`w^m9cZILH%Lmy=;77$hGUqx`45}XwuksRHl&l z+Ei13F2Lcg4C2=#x`(`)ove(^X`o?HsSLK?+@hyuK14oN55wg5Q4}k#dusUlwIk_LW0Dl?FlqVIi%`L&#Z=VAm+*7{(wyFAB zyNxaIDU~@BE6^MnneZoSN21@Yj=KGz;B>JrAk#WeQ#95j2Vt+Fc_JI|_sVY}SG%B- z6P>1Qp}%sMLOdQ3RB!}|? zSb`x-^8YQw&t(h#jRU7YBy9%z_LMy?#YQlyrW%&9Z&n$KIIzU~#geAFyo{XhW=?rJ z1b+1PF)OE#`$pOKbO)Erm|UjQI6Wf|qIAmiZhgoqqbCOF>*Qps`K3p9ZYRJzBPpfO zgyNkAIfgbly3IA_ov^$~o++ys+OooEr`}v_;#eH`H=@g)^~%ln0% zk&Rb|?(?x*l!AuWpNRQwxBM;!TJizF-wxi-wpqjJ*T>YKrb6DAV?=c%%}VJ^b5_Dd zUM+wO*UTzSMrd@JHG&S-W}x|b1u_GwP`BO3%};+f`RsDVnU^)GK*;+th!cO5;L=lJ zE^=FT5Yz%z>owd~w)nR-cY|-27}`eIM{OP^@Ai~F9AmPfG@XdQn9Q{$$z1zzaY5tO zgWj3wPds1_2@DJPcVD<>$aApbP^}3>y%@}2C{SZ8OOhOYjNYGxQz};&y*h(%YMBxw z9imh|)c&%jNV12?5nSK7bl?@bX3!z(^}QY2d7bv zn+s7g#lcADXB3|!6tsIb)#I6L9wnJAShY^LK{aEGE^DcTu_Ytlu&emdiTI{HUMcee zaucn1NAKMl4{RfyUMYUq%1_iY(gsXzw|9@6^kcGgEm(r~EbyqFQ+lB*dmp-EM+X)j zg?z!#75_)4>2->zgot%1K0iH26<+ydzy+RX>_bNnBL8DZ@ie+)Em(YF!OAhQ)%w97 zk5>a0U5!mIHaNV~`zwu49)(Q*46Y-m8GPx4MbH5aA2RTL7wVskv)q>?HTq7eNH9;f zQVbWi+d@$7=+bjfK0t3-X5ic|1bq}WzcV#F4IKHwG1R17PU_;Zni`FI1#Pu#-=0)D%9OCH%-;3(^%VsC87{;5eC z*%WS3FjLg^935Y~QVmhU%uTG#*Vd7fvUcWwLpmtI_ZpokF#TP;4!NURXwrY}PMy#uLK8FHMmEyKGc)4c83l2RAl36IlZ}ri5lK}7 z+=K_RmuND|YW#xEemm7cMQpehRAz@8A6f0H7Av%xg_uWB&&bk6vd0 diff --git a/Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/icon.png b/Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/icon.png deleted file mode 100644 index 1cd22bea850ea63a2ca75d93b435e3ac43cb9cac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1319 zcmV+?1=#wDP)Px(;Ymb6R9J=OmuqZOWf;eQ@7aa56VB<%*g7^c?wtX)L7Cx;Y~cecB+A8@-~}QY zP5dOV5TbaAF-Ap=CK?kZieFGvf=oW3iA=(Vj55YxYX>;SER&>lauJ?rT? zg;nAwpQL%u^PGR*=l?#pw}t<^h*ZEEHdbr*>+sv19~yk7r{cVN%PalBG((Q@FEeYH!$0NfdQjAFR={6S3pUa{}iy0goqUn^MvQoFcmX?+=I5@<~CLiTx zB}w z_LPcn&FU5Wy!U`18Zi`^XJXECuU3acD+jyMUo`u&09cM zS0@mSfGjKHa-Nlyg(OM$#D&9Q3JZ&vI8ip(u3Zb#+k44?O(_Kjf2+$GFZR$M2lbf{ zFYc20$qCqPS$f}kJQeyBv)i%&XlZFCGt*`oyYVtQI!rJaq_S!`Jw08xTm`6V0GF$P zKWl&I_1CuQ?QJ43Nsfd}QN{|%Zp+f`0Q-O0bC+`q9(i;n0O7E)P!%PIDS1NtJ+6ad$+U+3b*i%FfwB!-DOOy)Q# z0f6UU`iq@kE@9)#M@^M%RoU_HlD$`y9Qt~DOmUXLbc4%% z0bbqoj^#Y~Xve!u$(xF%Y0iB~n=N&#kR3Q6~}I>eo_yrwD+GC68$x9p@-7ub{E<7y#3!N3Puq7tSI{ zX%rXF0-(LU4M~zHE}k9L&mzPazP-H-Aw-;hmRQXQAyHnwn8wBiX3UtwvHAm%fIYWi zwKh6B$`88_h+L;rdv9~cC$91b2oe?F<6h)<^Payq#@Fd%aCXKO-0pL#B( d|EB+m`~%bd8hrpsXP^K8002ovPDHLkV1lAoaLoV! diff --git a/Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/inserting.png b/Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/inserting.png deleted file mode 100644 index 8c927b29ceb1a3f06b68801c1c287005124fd15c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 711 zcmV;&0yzDNP)EX>4Tx04R}tkv&MmKpe$iQ>7vm2TK(Z%ut;yh>AFB6^c+H)C#RSm|Xe=O&XFE z7e~Rh;NZt%)xpJCR|i)?5c~jfbaGO3krMyc6k5c1aNLh~_a1le0HIc5n$C=Larhh zITlcc2D#w}|AXJ%TDi#yHz^ncI$s>;V+0870`;ond>=bb{RHqo16O*>U# zjOHnO-Q(R|?Y;ebrrF;QYqWBtL{jLA0002~NklpxQzW?*jKUvPX%Q^xG)(l{prk?v4RyBZ9N;-}sl~Q`|=V_DyxaBKoqye~P z0MU95fB=FCAXqbi^E`X*!}E_BtQmvMkHv^;4hkmWOjk tB7k552&N$utlAH7J{|x70002sI=`2Ba}ubIMLGZg002ovPDHLkV1h_IGcy1H diff --git a/Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/meta.json b/Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/meta.json deleted file mode 100644 index 3dfb0685f28a48..00000000000000 --- a/Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/meta.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "version": 1, - "license": "CC-BY-SA-3.0", - "copyright": "Created by UbaserB (GitHub) for SS14", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "icon" - }, - { - "name": "panel" - }, - { - "name": "unlit" - }, - { - "name": "building", - "delays": [ - [ - 0.5, - 0.5, - 0.5, - 0.5, - 0.5, - 0.5, - 0.5, - 0.5, - 0.5 - ] - ] - }, - { - "name": "inserting", - "delays": [ - [ - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1 - ] - ] - } - ] -} diff --git a/Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/panel.png b/Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/panel.png deleted file mode 100644 index 1e07131c13f38b7aa357372870b9086c613da367..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 470 zcmV;{0V)28P)Px$kV!;AR9J=W)lVqHVI0Tt_wzGbjmwhd#QG^&E=1XhaH6J!oy0+LktQc4c99}c zloNJSV+TeKEEnbGPYy2g?@HQ=9BlSDNW#Q^{#~Be?f3ki@Avuid+PfWq{-VqD$}ib zHZ?II-maO9G-_>evwv{><^5%)PL`HKDc@;E0{kRH0i=9?3sOp)-Zq@xwv;tOy!-lq zfh%y&_z1`(ns~{cNXE(YPZH|!JuO5cuWBN1o(%^GTP!lvgV$mDy@D`T07PrpA;#)4GCPs}+Ft_G0dOV*~?&?U;*TKrmfp zMtA5mxHFMbqG^(ZNu#6Wieb;uhdt8@Fc^&rfYb9+nmv-a13Liz!(2K`FPZ7urEj4e zfVGu4^_w@;jAvrYzW{Rr)-!Xqc67g>iAhizdzV@PnHl zZA`rzu~~K3pG~_0_PlzakmYo)KE*qsrbyO7xZ#b)qFOU9H%2iAhI`zK-%q4{iv`-n N;OXk;vd$@?2>|E|JBt7S diff --git a/Resources/Textures/Structures/Machines/ore_processor_industrial.rsi/building.png b/Resources/Textures/Structures/Machines/ore_processor_industrial.rsi/building.png deleted file mode 100644 index da9b15a9345d175843c2cb32df53123ac8bba1a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1421 zcmaKsX;9J$7{>o-Y6l)2ws?hEYfSBwwS`&;YMN=1M~Iq|XovTaT9AQ|mZD{@t7+r0 z7M3WQZfq8N?0$IPcjkHC-!t#0H_Q8^oBn#! z^#B0qyB~M))lA~YTC1z+lXppWngL1jb#n&ldd+75K*!D9#R*3)oiD@2o4LX|)X}f8 zhsJu^FESpneaws75~4QXD1eNjWnk&IJF|3Qzg^O+7SXk%28hYNG22BcuMq(WPj2snWfWWXo5WgC5)VH9v+RAJs$P$fky!ZTbq#5j!@x3tS!shM-XD* zSNXh3c#zc>fy#)y@LD`_38a#Kqs5rBm8X2n(i4G*7lv1Hgqwk+vGi~cTik*h(h)=6 z=S8w7cO4_N3MXCv$ZWcoI#iF(^RS-}AI6UJZ<3Z$xi9_UwZ#|?#2ULJ+2rJT>_O8@ z<4A&S*dE07cjJr?;91ab2p&bhAZZnYvKyC^<*G{iuX!t+mFO59<{K6q-y@Hv&&)&y zH>PmwvjzB+LwV*2z04S-nJKnv4h{kM16sgHBb8sDcHL+ZoRPE{+bvf^uo5CHzrVU^ zoTLM5KR4-|nU$TY4cDls-Wn(Oc;?7pSpoNM)y zTW-eEzyTjg;Z!J(G91-ySl<+~y1g>eG^WNxXS>2;u^_28jV4fb^S1pGHrDpO(PYLVLoK1J^W*cC5aM(N zT<-&@P*QWP@VsRjrQwcUJ!+O%b_19D{QNtGE)CAQR@?u~^GurqzZ0fvq22>G$$r(V zd0RyI&PZ!C&e^>&0AaU5#?Oqc$qJ6clWFVNDyr~D=k4QMZ~j2*#ifQ>bj4If=L3nu zo`7oHQK6&pO0WO-83w~qOyBDEZ4+lQxG&3LW+jXfmgGuWu`w#X)}_^QqB+u*Nz4kx!0vM35%MS|ScH2zw4{QC#`z;fAj$7+%n$!S3oeq#tz3 zVi@efyjbmBptaDZZw8fhhrfi|?Kg&8yRC$&FPXd7*=}r1%c# zL2d|Y%PH{-;HtV*T5%)Es$(KfpUhl{=IjWW@7@26$mB?UvwALIR^Aj(Si8N9y+o}5 zc<-AVin2lL7daDHL>66NWHLkW1!Frp=h%v)%#nv*Y`P(G-jhbow= z&Ejkr+zgx2>FqNrwt;@@(kbnzkx41Q<8lS0EwxwAXvrS#IQRcT*B49(nmDLXUYJIIIVn><}9HGvx7TAHRLM_uwN6Gp*c7KO^5xPx&K}keGR9J=Wmd|e6Mi9n-YuK_Am0VLYQAaRhOK#$*JvIIFKrIj;mpqtHKE*(a z)-TXQdPrRujVdQGse-j=l2&X}A3!W;xHI!{c4l|sfBeS~0Ig3R zs*-j?z*->QJzy;qI=`NXWdN;O<^KI`TDvX!=WY>4t3Y!B0@UgTo!1@Syg3D6d3M6- z>2C-j08lEOnCyl=x$%X4B^hRx+&g)K!jO+F>j2f@uXOUWhqByf{ zmX;>`gTPOWA>#To+b&iE0PBWKEkmtt;JW>UPS@pJf=a1mA)cLO&Px&SeUG1BzD!LF ztKKkbk?z&;&vOZ6A*&7&1U5D{`26wXxdju)XYEf*1&2u%>-Bn~o0b8B!2p2oUc4ye zNGZjiA3l^OaPgyy5CSRJqnL>dNV#6x>EDF_FwIQ`&~88aSArfN{{n#H^lld0G&hwd z^|?k{jYed68`|whyt5`})ukUq`$6bG@O&JnCm^;F2_XnPKl51>b)$w-ik+RENS;Mh z19$GMr9J|@e}AbtW#H=Sy3pQT2IteAv)k<^nJhh|r4o72x%OLX^j>dT26SS2zFw002ovPDHLkV1k_Ls_Xy& diff --git a/Resources/Textures/Structures/Machines/ore_processor_industrial.rsi/inserting.png b/Resources/Textures/Structures/Machines/ore_processor_industrial.rsi/inserting.png deleted file mode 100644 index 568e62f9a2ec6125eebca717f810c717ba9df192..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2948 zcmai0c{mj879WvOKE@Z7P?Qj|Gxi~b8SAw~mJE?KWXLudYqHCikr0t($jDNZWsoHq zSu;q+n6dBsOvbqL-9PUA=RWuT@t*UZ-*cYxoaem1_xGG6OLHTxvjS%U000-%*uaYE z;eQ_vcBY+s8LGx~EC?$jJplH*&@uqP34t2ivI)yyFL>f7IDffUCu6<7K&@@pBLB!%Y`z*(+UVZ0`wKLAK+9FT0ZaE*|aY237`REg?4 zo#~PA@c>-r=JSsTdA_0(cNEmstri;F!BacI)&W;LX`GJmhsayD1gQTIAlBN?>8a`Z z1+ARAebHk)jn=8@A^GDRYM9e9>1>s!f4FP5^SiS(FCa4XEb$5}u8j1#Kz@S7=-lny z{IjEpMn=*;alUD|rPCa2*;zjPXMsuG;wdBUcO@Nloe3$z24B8-G*){sn|ju38<8#~ zIVpcQ24dHzHGm>@q#UEWZJ?S?zVu?wp^1sF=>?k7QcGgaj%FPlO(~tEKxjZQnmHGl z=YZMl92e{jQD;K#pu6cs_{uMSJq|vxOwVx*Tm}0LSbK1pG{%9#8C_QPLqpe&fX+BQ z^)r$$+AH|o0*%&##dv?%u%pyzR;L*(X-DAg`yL0(!!x~A%*7E{xXCR$JBf0m)Y{7B zCiEs~afdJ##+V)0%2=S97;^v%3i2S}C~SER8{e4UU>|;a(WNV%$IAyfjMUXK6E%PCj)ovMJ?=KyT;?IC2 zddr~YR(QOrj*WdLj9QQRgX{446~pEkI^ao$&7z93@RK;hnne6%To>Vxd)YlXP)*lq zbjWJRvE73728E>2?M?MLB<^nj9AhD;LLr7r$#RI5tyR%|g z{)sy`pE5SxVkoEjm}KWZZg|a9Oenu)?utWmV~MinUEBajV~-w^`X&@Kdhq=optDYz z$bR7tsdQ=c?mv}o070`+ueLuDWIbAO-E);%)jC*j3==M8U}6{p8@K``+_;SDLn)2GT;_HTV<+ z^rK}QrEm0;$-V^vN31s&elh?lw2wONZf)zJ_b>lHG{3$5;k)W0Xh|D=+=GeZ@v=6w zxVoa~=JM+M0H7zvMgoEZITN;}8Ge^w48L8+yQo*g`+0LUU0*p=dYvoqw0kAL{UAnx62QK3V0O@IE*P^hFLRZDx_qN+3TSN5~WCYvzSgmX1`>!RIGN{gNau0voIiI&t zgQIvzZC;E?K&i(Om?AEm)Eio2ZvH;p+A)OAB5`EIk3Kc#f&wYkKv;E;_YdE%SJ|;_ zF-!u^X;C>YuRpJ&weOI3EepEERjb4WjGgAl$Lx_Aj z#XM&D&Weh%vr3`#|3Z3nZ!bZEcmTA=Hy*QG*nNmJ z-%Fz+5sF_LVP$j{?!XJ!Af0J{*%Ea*LNNC5ck=zR|8x(kDD@fgDLg zm9|2;usZFfQqLgtdW?p-Q;1v=Yet>+$T!N%?Qb}6);@;;to2l@Pd;+ diff --git a/Resources/Textures/Structures/Machines/ore_processor_industrial.rsi/meta.json b/Resources/Textures/Structures/Machines/ore_processor_industrial.rsi/meta.json deleted file mode 100644 index 30361f88d658bb..00000000000000 --- a/Resources/Textures/Structures/Machines/ore_processor_industrial.rsi/meta.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "version": 1, - "license": "CC-BY-SA-3.0", - "copyright": "Created by UbaserB (GitHub) for SS14, based on ore processor sprite from tgstation", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "inserting", - "delays": [ - [ - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 5 - ] - ] - }, - { - "name": "building", - "delays": [ - [ - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1 - ] - ] - }, - { - "name": "icon" - }, - { - "name": "panel" - }, - { - "name": "unlit" - } - ] -} diff --git a/Resources/Textures/Structures/Machines/ore_processor_industrial.rsi/panel.png b/Resources/Textures/Structures/Machines/ore_processor_industrial.rsi/panel.png deleted file mode 100644 index eebe7218534173cd11b6bee74dde877a871a381f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 223 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}Gd*1#Ln2z= zUNYo5_ie4u z6{gwI2lH&04?JU=Jv(ff_~rwrY&T{fUefS#VGTd~-+rGj@&&0^&+Pl#(9!Yd4tME7 WwJXtU-#P&u$>8bg=d#Wzp$PyrGg|Ec diff --git a/Resources/Textures/Structures/Machines/ore_processor_industrial.rsi/unlit.png b/Resources/Textures/Structures/Machines/ore_processor_industrial.rsi/unlit.png deleted file mode 100644 index 3b3190d1e7c10a80a7f58e28323b87ac6f8617a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 167 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 diff --git a/Resources/Textures/Structures/Machines/protolathe_hypercon.rsi/meta.json b/Resources/Textures/Structures/Machines/protolathe_hypercon.rsi/meta.json deleted file mode 100644 index b0326326f9792b..00000000000000 --- a/Resources/Textures/Structures/Machines/protolathe_hypercon.rsi/meta.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "version": 1, - "license": "CC-BY-SA-3.0", - "copyright": "Created by UbaserB (GitHub) for SS14", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "icon" - }, - { - "name": "panel" - }, - { - "name": "unlit" - }, - { - "name": "building", - "delays": [ - [ - 1.0, - 1.0, - 1.0, - 1.0, - 1.0, - 1.0, - 1.0, - 1.0, - 1.0, - 1.0 - ] - ] - }, - { - "name": "inserting", - "delays": [ - [ - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1 - ] - ] - } - ] -} diff --git a/Resources/Textures/Structures/Machines/protolathe_hypercon.rsi/panel.png b/Resources/Textures/Structures/Machines/protolathe_hypercon.rsi/panel.png deleted file mode 100644 index 1d2d0020325fb63d6c784c4c5dcc16ec93f6ab45..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 761 zcmVEX>4Tx04R}tkv&MmKpe$iQ$>-gh#jOjWT;LSL`5963Pq?8YK2xEOfLO`CJjl7 zi=*ILaPVWX>fqw6tAnc`2!4P#IXWr2NQwVT3N2zhIPS;0dyl(!fKV?p&FUBjG~G5+ ziMW`_u8Li+2tmLABIuKuWz0!Z629Z>9s$1I#dwzgxj#p*nzI-X5Q%4*VcNtS#M7I$ z!FiuJ%!;x~d`>)O(glehxvqHp#<}3Kz%#>UIyFxmCKd~Ath6yJni}yGaa7fG$`>*o ztDLtuYvn3y-jlyDl+#z1xlVH!2`pj>5=1DdqJ%PR#Aww?v5=zuxQ{>L`XzEH8?JJM&@_EV0003nNklqusNpzuO6y7KxAGQ0|NsCgXfX=3~N_0G6aYHXV|_#kYV|q z2@L5buNXdkXv3K%g#>FWPEBU4uOA^ r8ZZh*!6+C7qhJ(_f>AIE1{weW&AnJ}vUs!M00000NkvXXu0mjfeF#-7 diff --git a/Resources/Textures/Structures/Machines/protolathe_hypercon.rsi/unlit.png b/Resources/Textures/Structures/Machines/protolathe_hypercon.rsi/unlit.png deleted file mode 100644 index dd7d0d86435414a2e2c43ec95391faf393b30f05..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 202 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}EuJopArY-_ zFKy&)P!M3fu)fe*y+D#%d_xf%ck)YyjP+}8CzLt}a5cLL|Ib#4VPdao=;-Kpk$O{j z_O;NJ&aZv#=bk$~KjT4H2J`J3Sqv|(9lYcAENHj0p!S>FObh{=jk1lVNBO*1nY`~e z>wi_p;=}AW9{fyRby?iw!krI{W)=TDTvqZ;i83p{>saXubPt24tDnm{r-UW|lVeS4 From af59b7eda39dbad8f38cbb978d0c3c7bda45c41c Mon Sep 17 00:00:00 2001 From: Ratyyy <138193222+Ratyyy@users.noreply.github.com> Date: Sun, 11 Feb 2024 23:16:42 +0200 Subject: [PATCH 11/17] some things --- .../Components/LatheHeatProducingComponent.cs | 21 +++++++ Content.Server/Lathe/LatheSystem.cs | 56 +++++++++++++++++- Content.Shared/Lathe/LatheComponent.cs | 3 - .../Circuitboards/Machine/production.yml | 20 ++++++- .../Entities/Structures/Machines/lathe.yml | 37 ++++++++++++ .../Prototypes/Recipes/Lathes/electronics.yml | 19 ++++-- Resources/Prototypes/Research/industrial.yml | 2 + .../autolathe_hypercon.rsi/building.png | Bin 0 -> 3124 bytes .../Machines/autolathe_hypercon.rsi/icon.png | Bin 0 -> 1319 bytes .../autolathe_hypercon.rsi/inserting.png | Bin 0 -> 711 bytes .../Machines/autolathe_hypercon.rsi/meta.json | 51 ++++++++++++++++ .../Machines/autolathe_hypercon.rsi/panel.png | Bin 0 -> 470 bytes .../Machines/autolathe_hypercon.rsi/unlit.png | Bin 0 -> 166 bytes .../protolathe_hypercon.rsi/building.png | Bin 0 -> 4341 bytes .../Machines/protolathe_hypercon.rsi/icon.png | Bin 0 -> 1199 bytes .../protolathe_hypercon.rsi/inserting.png | Bin 0 -> 652 bytes .../protolathe_hypercon.rsi/meta.json | 52 ++++++++++++++++ .../protolathe_hypercon.rsi/panel.png | Bin 0 -> 761 bytes .../protolathe_hypercon.rsi/unlit.png | Bin 0 -> 202 bytes 19 files changed, 250 insertions(+), 11 deletions(-) create mode 100644 Content.Server/Lathe/Components/LatheHeatProducingComponent.cs create mode 100644 Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/building.png create mode 100644 Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/icon.png create mode 100644 Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/inserting.png create mode 100644 Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/meta.json create mode 100644 Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/panel.png create mode 100644 Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/unlit.png create mode 100644 Resources/Textures/Structures/Machines/protolathe_hypercon.rsi/building.png create mode 100644 Resources/Textures/Structures/Machines/protolathe_hypercon.rsi/icon.png create mode 100644 Resources/Textures/Structures/Machines/protolathe_hypercon.rsi/inserting.png create mode 100644 Resources/Textures/Structures/Machines/protolathe_hypercon.rsi/meta.json create mode 100644 Resources/Textures/Structures/Machines/protolathe_hypercon.rsi/panel.png create mode 100644 Resources/Textures/Structures/Machines/protolathe_hypercon.rsi/unlit.png diff --git a/Content.Server/Lathe/Components/LatheHeatProducingComponent.cs b/Content.Server/Lathe/Components/LatheHeatProducingComponent.cs new file mode 100644 index 00000000000000..ea5912ad2fb33c --- /dev/null +++ b/Content.Server/Lathe/Components/LatheHeatProducingComponent.cs @@ -0,0 +1,21 @@ +using Content.Shared.Lathe; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom; + +namespace Content.Server.Lathe.Components; + +/// +/// This is used for a that releases heat into the surroundings while producing items. +/// +[RegisterComponent] +[Access(typeof(LatheSystem))] +public sealed partial class LatheHeatProducingComponent : Component +{ + /// + /// The amount of energy produced each second when producing an item. + /// + [DataField, ViewVariables(VVAccess.ReadWrite)] + public float EnergyPerSecond = 40000; + + [DataField(customTypeSerializer: typeof(TimeOffsetSerializer))] + public TimeSpan NextSecond; +} diff --git a/Content.Server/Lathe/LatheSystem.cs b/Content.Server/Lathe/LatheSystem.cs index c05e2ce7c88097..2a01a9ed1e41d1 100644 --- a/Content.Server/Lathe/LatheSystem.cs +++ b/Content.Server/Lathe/LatheSystem.cs @@ -42,6 +42,28 @@ using Robust.Shared.Audio.Systems; using Robust.Shared.Prototypes; using Robust.Shared.Timing; +using System.Diagnostics.CodeAnalysis; +using System.Linq; +using Content.Server.Administration.Logs; +using Content.Server.Atmos; +using Content.Server.Atmos.EntitySystems; +using Content.Server.Lathe.Components; +using Content.Server.Materials; +using Content.Server.Power.Components; +using Content.Server.Power.EntitySystems; +using Content.Server.Stack; +using Content.Server.UserInterface; +using Content.Shared.Database; +using Content.Shared.Emag.Components; +using Content.Shared.Lathe; +using Content.Shared.Materials; +using Content.Shared.Research.Components; +using Content.Shared.Research.Prototypes; +using JetBrains.Annotations; +using Robust.Server.GameObjects; +using Robust.Shared.Audio.Systems; +using Robust.Shared.Prototypes; +using Robust.Shared.Timing; namespace Content.Server.Lathe { @@ -57,7 +79,12 @@ public sealed class LatheSystem : SharedLatheSystem [Dependency] private readonly MaterialStorageSystem _materialStorage = default!; [Dependency] private readonly StackSystem _stack = default!; [Dependency] private readonly IPrototypeManager _prototypeManager = default!; - + [Dependency] private readonly TransformSystem _transform = default!; + [Dependency] private readonly AtmosphereSystem _atmosphere = default!; + /// + /// Per-tick cache + /// + private readonly List _environments = new(); public override void Initialize() { base.Initialize(); @@ -90,6 +117,33 @@ public override void Update(float frameTime) if (_timing.CurTime - comp.StartTime >= comp.ProductionLength) FinishProducing(uid, lathe); } + var heatQuery = EntityQueryEnumerator(); + while (heatQuery.MoveNext(out var uid, out var heatComp, out _, out var xform)) + { + if (_timing.CurTime < heatComp.NextSecond) + continue; + heatComp.NextSecond += TimeSpan.FromSeconds(1); + + var position = _transform.GetGridTilePositionOrDefault((uid, xform)); + _environments.Clear(); + + if (_atmosphere.GetTileMixture(xform.GridUid, xform.MapUid, position, true) is { } tileMix) + _environments.Add(tileMix); + + if (xform.GridUid != null) + { + _environments.AddRange(_atmosphere.GetAdjacentTileMixtures(xform.GridUid.Value, position, false, true)); + } + + if (_environments.Count > 0) + { + var heatPerTile = heatComp.EnergyPerSecond / _environments.Count; + foreach (var env in _environments) + { + _atmosphere.AddHeat(env, heatPerTile); + } + } + } } private void OnGetWhitelist(EntityUid uid, LatheComponent component, ref GetMaterialWhitelistEvent args) diff --git a/Content.Shared/Lathe/LatheComponent.cs b/Content.Shared/Lathe/LatheComponent.cs index 3ec4c8d98cd8f8..4993a4e6aeaab1 100644 --- a/Content.Shared/Lathe/LatheComponent.cs +++ b/Content.Shared/Lathe/LatheComponent.cs @@ -94,9 +94,6 @@ public sealed partial class LatheComponent : Component public const float DefaultPartRatingMaterialUseMultiplier = 0.85f; #endregion - - [DataField("machinePartMinTemp", customTypeSerializer: typeof(PrototypeIdSerializer))] - public string MachinePartMinTemp = "Capacitor"; } public sealed class LatheGetRecipesEvent : EntityEventArgs diff --git a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/production.yml b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/production.yml index fccbdd787026b1..ee5c37f54548cd 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/production.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/production.yml @@ -1257,4 +1257,22 @@ materialRequirements: Steel: 5 CableHV: 2 - \ No newline at end of file + +- type: entity + parent: BaseMachineCircuitboard + id: AutolatheHyperConvectionMachineCircuitboard + name: hyper convection autolathe machine board + description: A machine printed circuit board for a hyper convection autolathe + components: + - type: MachineBoard + prototype: AutolatheHyperConvection + requirements: + MatterBin: 3 + materialRequirements: + Glass: 1 + tagRequirements: + Igniter: + Amount: 1 + DefaultPrototype: Igniter + ExamineName: Igniter + diff --git a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml index 9e7194288662e3..e13302ec9bf4c4 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml @@ -341,6 +341,10 @@ idleState: icon runningState: building staticRecipes: + - ProtolatheMachineCircuitboard + - AutolatheMachineCircuitboard + - CircuitImprinterMachineCircuitboard + - MaterialReclaimerMachineCircuitboard - ElectrolysisUnitMachineCircuitboard - CentrifugeMachineCircuitboard - ChemDispenserMachineCircuitboard @@ -374,6 +378,9 @@ - TurboItemRechargerCircuitboard - PowerComputerCircuitboard - AutolatheMachineCircuitboard + - AutolatheHyperConvectionMachineCircuitboard + - ProtolatheMachineCircuitboard + - ProtolatheHyperConvectionMachineCircuitboard - ProtolatheMachineCircuitboard - ReagentGrinderMachineCircuitboard - MicrowaveMachineCircuitboard @@ -754,6 +761,36 @@ - RawMaterial - Ingot +- type: entity + id: ProtolatheHyperConvection + parent: Protolathe + name: hyper convection protolathe + description: A highly-experimental protolathe that harnesses the power of extreme heat to slowly create objects more cost-effectively. + components: + - type: Sprite + sprite: Structures/Machines/protolathe_hypercon.rsi + - type: Lathe + materialUseMultiplier: 0.70 + timeMultiplier: 1.5 + - type: LatheHeatProducing + - type: Machine + board: ProtolatheHyperConvectionMachineCircuitboard + +- type: entity + id: AutolatheHyperConvection + parent: Autolathe + name: hyper convection autolathe + description: A highly-experimental autolathe that harnesses the power of extreme heat to slowly create objects more cost-effectively. + components: + - type: Sprite + sprite: Structures/Machines/autolathe_hypercon.rsi + - type: Lathe + materialUseMultiplier: 0.70 + timeMultiplier: 1.5 + - type: LatheHeatProducing + - type: Machine + board: AutolatheHyperConvectionMachineCircuitboard + # Machine which makes weapons and ammunition - type: entity parent: Protolathe diff --git a/Resources/Prototypes/Recipes/Lathes/electronics.yml b/Resources/Prototypes/Recipes/Lathes/electronics.yml index c22565c61d65b8..0408db803fe398 100644 --- a/Resources/Prototypes/Recipes/Lathes/electronics.yml +++ b/Resources/Prototypes/Recipes/Lathes/electronics.yml @@ -242,8 +242,8 @@ Glass: 900 - type: latheRecipe - id: AutolatheHyperConvectionMachineCircuitboard - result: AutolatheHyperConvectionMachineCircuitboard + id: ProtolatheHyperConvectionMachineCircuitboard + result: ProtolatheHyperConvectionMachineCircuitboard category: Circuitry completetime: 4 materials: @@ -252,9 +252,8 @@ Gold: 100 - type: latheRecipe - id: ProtolatheHyperConvectionMachineCircuitboard - result: ProtolatheHyperConvectionMachineCircuitboard - category: Circuitry + id: AutolatheHyperConvectionMachineCircuitboard + result: AutolatheHyperConvectionMachineCircuitboard completetime: 4 materials: Steel: 100 @@ -412,7 +411,15 @@ materials: Steel: 100 Glass: 900 - Gold: 100 + +- type: latheRecipe + id: OreProcessorIndustrialMachineCircuitboard + result: OreProcessorIndustrialMachineCircuitboard + completetime: 4 + materials: + Steel: 100 + Glass: 900 + Gold: 100 - type: latheRecipe id: ShuttleConsoleCircuitboard diff --git a/Resources/Prototypes/Research/industrial.yml b/Resources/Prototypes/Research/industrial.yml index 8035c9ffa9185b..8b9971e97c1458 100644 --- a/Resources/Prototypes/Research/industrial.yml +++ b/Resources/Prototypes/Research/industrial.yml @@ -55,6 +55,8 @@ - CircuitImprinterMachineCircuitboard - MaterialReclaimerMachineCircuitboard - SheetifierMachineCircuitboard + - AutolatheHyperConvectionMachineCircuitboard + - ProtolatheHyperConvectionMachineCircuitboard - type: technology id: PowerGeneration diff --git a/Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/building.png b/Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/building.png new file mode 100644 index 0000000000000000000000000000000000000000..cb1abc7aa8e5c16ab9cc68f8c17361dd009c968d GIT binary patch literal 3124 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/icon.png b/Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..1cd22bea850ea63a2ca75d93b435e3ac43cb9cac GIT binary patch literal 1319 zcmV+?1=#wDP)Px(;Ymb6R9J=OmuqZOWf;eQ@7aa56VB<%*g7^c?wtX)L7Cx;Y~cecB+A8@-~}QY zP5dOV5TbaAF-Ap=CK?kZieFGvf=oW3iA=(Vj55YxYX>;SER&>lauJ?rT? zg;nAwpQL%u^PGR*=l?#pw}t<^h*ZEEHdbr*>+sv19~yk7r{cVN%PalBG((Q@FEeYH!$0NfdQjAFR={6S3pUa{}iy0goqUn^MvQoFcmX?+=I5@<~CLiTx zB}w z_LPcn&FU5Wy!U`18Zi`^XJXECuU3acD+jyMUo`u&09cM zS0@mSfGjKHa-Nlyg(OM$#D&9Q3JZ&vI8ip(u3Zb#+k44?O(_Kjf2+$GFZR$M2lbf{ zFYc20$qCqPS$f}kJQeyBv)i%&XlZFCGt*`oyYVtQI!rJaq_S!`Jw08xTm`6V0GF$P zKWl&I_1CuQ?QJ43Nsfd}QN{|%Zp+f`0Q-O0bC+`q9(i;n0O7E)P!%PIDS1NtJ+6ad$+U+3b*i%FfwB!-DOOy)Q# z0f6UU`iq@kE@9)#M@^M%RoU_HlD$`y9Qt~DOmUXLbc4%% z0bbqoj^#Y~Xve!u$(xF%Y0iB~n=N&#kR3Q6~}I>eo_yrwD+GC68$x9p@-7ub{E<7y#3!N3Puq7tSI{ zX%rXF0-(LU4M~zHE}k9L&mzPazP-H-Aw-;hmRQXQAyHnwn8wBiX3UtwvHAm%fIYWi zwKh6B$`88_h+L;rdv9~cC$91b2oe?F<6h)<^Payq#@Fd%aCXKO-0pL#B( d|EB+m`~%bd8hrpsXP^K8002ovPDHLkV1lAoaLoV! literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/inserting.png b/Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/inserting.png new file mode 100644 index 0000000000000000000000000000000000000000..8c927b29ceb1a3f06b68801c1c287005124fd15c GIT binary patch literal 711 zcmV;&0yzDNP)EX>4Tx04R}tkv&MmKpe$iQ>7vm2TK(Z%ut;yh>AFB6^c+H)C#RSm|Xe=O&XFE z7e~Rh;NZt%)xpJCR|i)?5c~jfbaGO3krMyc6k5c1aNLh~_a1le0HIc5n$C=Larhh zITlcc2D#w}|AXJ%TDi#yHz^ncI$s>;V+0870`;ond>=bb{RHqo16O*>U# zjOHnO-Q(R|?Y;ebrrF;QYqWBtL{jLA0002~NklpxQzW?*jKUvPX%Q^xG)(l{prk?v4RyBZ9N;-}sl~Q`|=V_DyxaBKoqye~P z0MU95fB=FCAXqbi^E`X*!}E_BtQmvMkHv^;4hkmWOjk tB7k552&N$utlAH7J{|x70002sI=`2Ba}ubIMLGZg002ovPDHLkV1h_IGcy1H literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/meta.json b/Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/meta.json new file mode 100644 index 00000000000000..3dfb0685f28a48 --- /dev/null +++ b/Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/meta.json @@ -0,0 +1,51 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Created by UbaserB (GitHub) for SS14", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "panel" + }, + { + "name": "unlit" + }, + { + "name": "building", + "delays": [ + [ + 0.5, + 0.5, + 0.5, + 0.5, + 0.5, + 0.5, + 0.5, + 0.5, + 0.5 + ] + ] + }, + { + "name": "inserting", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + } + ] +} diff --git a/Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/panel.png b/Resources/Textures/Structures/Machines/autolathe_hypercon.rsi/panel.png new file mode 100644 index 0000000000000000000000000000000000000000..1e07131c13f38b7aa357372870b9086c613da367 GIT binary patch literal 470 zcmV;{0V)28P)Px$kV!;AR9J=W)lVqHVI0Tt_wzGbjmwhd#QG^&E=1XhaH6J!oy0+LktQc4c99}c zloNJSV+TeKEEnbGPYy2g?@HQ=9BlSDNW#Q^{#~Be?f3ki@Avuid+PfWq{-VqD$}ib zHZ?II-maO9G-_>evwv{><^5%)PL`HKDc@;E0{kRH0i=9?3sOp)-Zq@xwv;tOy!-lq zfh%y&_z1`(ns~{cNXE(YPZH|!JuO5cuWBN1o(%^GTP!lvgV$mDy@D`T07PrpA;#)4GCPs}+Ft_G0dOV*~?&?U;*TKrmfp zMtA5mxHFMbqG^(ZNu#6Wieb;uhdt8@Fc^&rfYb9+nmv-a13Liz!(2K`FPZ7urEj4e zfVGu4^_w@;jAvrYzW{Rr)-!Xqc67g>iAhizdzV@PnHl zZA`rzu~~K3pG~_0_PlzakmYo)KE*qsrbyO7xZ#b)qFOU9H%2iAhI`zK-%q4{iv`-n N;OXk;vd$@?2>|E|JBt7S literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Machines/protolathe_hypercon.rsi/building.png b/Resources/Textures/Structures/Machines/protolathe_hypercon.rsi/building.png new file mode 100644 index 0000000000000000000000000000000000000000..8cb211454566f7d6f5a3563aecdaa7259003571a GIT binary patch literal 4341 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Machines/protolathe_hypercon.rsi/meta.json b/Resources/Textures/Structures/Machines/protolathe_hypercon.rsi/meta.json new file mode 100644 index 00000000000000..b0326326f9792b --- /dev/null +++ b/Resources/Textures/Structures/Machines/protolathe_hypercon.rsi/meta.json @@ -0,0 +1,52 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Created by UbaserB (GitHub) for SS14", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "panel" + }, + { + "name": "unlit" + }, + { + "name": "building", + "delays": [ + [ + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0 + ] + ] + }, + { + "name": "inserting", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + } + ] +} diff --git a/Resources/Textures/Structures/Machines/protolathe_hypercon.rsi/panel.png b/Resources/Textures/Structures/Machines/protolathe_hypercon.rsi/panel.png new file mode 100644 index 0000000000000000000000000000000000000000..1d2d0020325fb63d6c784c4c5dcc16ec93f6ab45 GIT binary patch literal 761 zcmVEX>4Tx04R}tkv&MmKpe$iQ$>-gh#jOjWT;LSL`5963Pq?8YK2xEOfLO`CJjl7 zi=*ILaPVWX>fqw6tAnc`2!4P#IXWr2NQwVT3N2zhIPS;0dyl(!fKV?p&FUBjG~G5+ ziMW`_u8Li+2tmLABIuKuWz0!Z629Z>9s$1I#dwzgxj#p*nzI-X5Q%4*VcNtS#M7I$ z!FiuJ%!;x~d`>)O(glehxvqHp#<}3Kz%#>UIyFxmCKd~Ath6yJni}yGaa7fG$`>*o ztDLtuYvn3y-jlyDl+#z1xlVH!2`pj>5=1DdqJ%PR#Aww?v5=zuxQ{>L`XzEH8?JJM&@_EV0003nNklqusNpzuO6y7KxAGQ0|NsCgXfX=3~N_0G6aYHXV|_#kYV|q z2@L5buNXdkXv3K%g#>FWPEBU4uOA^ r8ZZh*!6+C7qhJ(_f>AIE1{weW&AnJ}vUs!M00000NkvXXu0mjfeF#-7 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Machines/protolathe_hypercon.rsi/unlit.png b/Resources/Textures/Structures/Machines/protolathe_hypercon.rsi/unlit.png new file mode 100644 index 0000000000000000000000000000000000000000..dd7d0d86435414a2e2c43ec95391faf393b30f05 GIT binary patch literal 202 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}EuJopArY-_ zFKy&)P!M3fu)fe*y+D#%d_xf%ck)YyjP+}8CzLt}a5cLL|Ib#4VPdao=;-Kpk$O{j z_O;NJ&aZv#=bk$~KjT4H2J`J3Sqv|(9lYcAENHj0p!S>FObh{=jk1lVNBO*1nY`~e z>wi_p;=}AW9{fyRby?iw!krI{W)=TDTvqZ;i83p{>saXubPt24tDnm{r-UW|lVeS4 literal 0 HcmV?d00001 From d7f56bebb8840e7491213e0c684263cbdc2a3856 Mon Sep 17 00:00:00 2001 From: Ratyyy <138193222+Ratyyy@users.noreply.github.com> Date: Sun, 11 Feb 2024 23:35:45 +0200 Subject: [PATCH 12/17] mo more turbo recharger --- .../Entities/Structures/Power/chargers.yml | 26 ------------------- .../Prototypes/Recipes/Lathes/electronics.yml | 18 +++---------- Resources/Prototypes/Research/industrial.yml | 1 - 3 files changed, 4 insertions(+), 41 deletions(-) diff --git a/Resources/Prototypes/Entities/Structures/Power/chargers.yml b/Resources/Prototypes/Entities/Structures/Power/chargers.yml index 22ffce67d8f28f..4d5ef0b5076507 100644 --- a/Resources/Prototypes/Entities/Structures/Power/chargers.yml +++ b/Resources/Prototypes/Entities/Structures/Power/chargers.yml @@ -147,32 +147,6 @@ - ProjectileBatteryAmmoProvider - Stunbaton -- type: entity - parent: BaseItemRecharger - id: TurboItemRecharger - name: turbo recharger - description: An overclocked recharger that's been adapted with a global port. - components: - - type: Sprite - sprite: Structures/Power/turbo_recharger.rsi - - type: Machine - board: TurboItemRechargerCircuitboard - - type: Charger - chargeRate: 100 - - type: ItemSlots - slots: - charger_slot: - ejectOnInteract: true - whitelist: - components: - - HitscanBatteryAmmoProvider - - ProjectileBatteryAmmoProvider - - Stunbaton - - PowerCell - blacklist: - tags: - - PotatoBattery - - type: entity parent: BaseItemRecharger id: WallWeaponCapacitorRecharger diff --git a/Resources/Prototypes/Recipes/Lathes/electronics.yml b/Resources/Prototypes/Recipes/Lathes/electronics.yml index 0408db803fe398..33e9643e7f2580 100644 --- a/Resources/Prototypes/Recipes/Lathes/electronics.yml +++ b/Resources/Prototypes/Recipes/Lathes/electronics.yml @@ -43,16 +43,6 @@ Steel: 50 Plastic: 50 -- type: latheRecipe - id: TurboItemRechargerCircuitboard - result: TurboItemRechargerCircuitboard - category: Circuitry - completetime: 2 - materials: - Steel: 500 - Plastic: 500 - Gold: 100 - - type: latheRecipe id: DoorElectronics result: DoorElectronics @@ -930,7 +920,7 @@ materials: Steel: 100 Glass: 900 - + - type: latheRecipe id: ShuttleGunPerforatorCircuitboard result: ShuttleGunPerforatorCircuitboard @@ -939,7 +929,7 @@ Steel: 100 Glass: 900 Gold: 100 - + - type: latheRecipe id: ShuttleGunKineticCircuitboard result: ShuttleGunKineticCircuitboard @@ -947,7 +937,7 @@ materials: Steel: 100 Glass: 900 - + - type: latheRecipe id: ShuttleGunFriendshipCircuitboard result: ShuttleGunFriendshipCircuitboard @@ -956,7 +946,7 @@ Steel: 100 Glass: 900 Gold: 50 - + - type: latheRecipe id: ShuttleGunDusterCircuitboard result: ShuttleGunDusterCircuitboard diff --git a/Resources/Prototypes/Research/industrial.yml b/Resources/Prototypes/Research/industrial.yml index 8b9971e97c1458..1d2167b272d6c1 100644 --- a/Resources/Prototypes/Research/industrial.yml +++ b/Resources/Prototypes/Research/industrial.yml @@ -26,7 +26,6 @@ cost: 7500 recipeUnlocks: - PowerCellHigh - - TurboItemRechargerCircuitboard - type: technology id: MechanicalCompression From 94246e5f7518edaca51c490a98c5ecceebc6a1c1 Mon Sep 17 00:00:00 2001 From: Ratyyy <138193222+Ratyyy@users.noreply.github.com> Date: Mon, 12 Feb 2024 02:07:02 +0200 Subject: [PATCH 13/17] bamm --- .../Circuitboards/Machine/production.yml | 41 ++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/production.yml b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/production.yml index ee5c37f54548cd..821a7601579b0c 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/production.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/production.yml @@ -1,4 +1,4 @@ -- type: entity +- type: entity id: AutolatheMachineCircuitboard parent: BaseMachineCircuitboard name: autolathe machine board @@ -1276,3 +1276,42 @@ DefaultPrototype: Igniter ExamineName: Igniter +- type: entity + parent: BaseMachineCircuitboard + id: HellfireFreezerMachineCircuitBoard + name: hellfire freezer machine board + description: Looks like you could use a screwdriver to change the board type. + components: + - type: Sprite + state: engineering + - type: MachineBoard + prototype: GasThermoMachineHellfireFreezer + requirements: + MatterBin: 2 + Capacitor: 2 + materialRequirements: + Plasma: 1 + - type: Construction + deconstructionTarget: null + graph: ThermomachineBoard + node: hellfirefreezer + +- type: entity + parent: BaseMachineCircuitboard + id: HellfireHeaterMachineCircuitBoard + name: hellfire heater machine board + description: Looks like you could use a screwdriver to change the board type. + components: + - type: Sprite + state: engineering + - type: MachineBoard + prototype: GasThermoMachineHellfireHeater + requirements: + MatterBin: 2 + Capacitor: 2 + materialRequirements: + Plasma: 1 + - type: Construction + graph: ThermomachineBoard + deconstructionTarget: null + node: hellfireheater \ No newline at end of file From ad21cdad2839fb2e54c5b28c412290f1b2eb77c1 Mon Sep 17 00:00:00 2001 From: Ratyyy <138193222+Ratyyy@users.noreply.github.com> Date: Mon, 12 Feb 2024 02:17:54 +0200 Subject: [PATCH 14/17] no --- .../objects/devices/circuitboards/machine/production.ftl | 4 ---- .../objects/devices/circuitboards/machine/production.ftl | 4 ---- .../Prototypes/Entities/Structures/Machines/lathe.yml | 1 - Resources/Prototypes/Recipes/Lathes/electronics.yml | 8 -------- 4 files changed, 17 deletions(-) diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/entities/objects/devices/circuitboards/machine/production.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/entities/objects/devices/circuitboards/machine/production.ftl index 02a2400b15d7f4..6b54d71e6519ec 100644 --- a/Resources/Locale/en-US/ss14-ru/prototypes/entities/objects/devices/circuitboards/machine/production.ftl +++ b/Resources/Locale/en-US/ss14-ru/prototypes/entities/objects/devices/circuitboards/machine/production.ftl @@ -82,8 +82,6 @@ ent-BorgChargerCircuitboard = cyborg recharging station machine board .desc = A machine printed circuit board for a robot recharging station. ent-WeaponCapacitorRechargerCircuitboard = recharger machine board .desc = A machine printed circuit board for a recharger. -ent-TurboItemRechargerCircuitboard = turbo recharger machine board - .desc = A machine printed circuit board for a turbo recharger. ent-SubstationMachineCircuitboard = substation machine board .desc = A machine printed circuit board for a substation. ent-DawInstrumentMachineCircuitboard = digital audio workstation machine board @@ -114,8 +112,6 @@ ent-MaterialReclaimerMachineCircuitboard = material reclaimer machine board .desc = { ent-BaseMachineCircuitboard.desc } ent-OreProcessorMachineCircuitboard = ore processor machine board .desc = { ent-BaseMachineCircuitboard.desc } -ent-OreProcessorIndustrialMachineCircuitboard = industrial ore processor machine board - .desc = { ent-BaseMachineCircuitboard.desc } ent-SheetifierMachineCircuitboard = sheet-meister 2000 machine board .desc = { ent-BaseMachineCircuitboard.desc } ent-MicrowaveMachineCircuitboard = microwave machine board diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/objects/devices/circuitboards/machine/production.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/objects/devices/circuitboards/machine/production.ftl index 013d5a62bbf916..4bc4ad8f3d64f0 100644 --- a/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/objects/devices/circuitboards/machine/production.ftl +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/objects/devices/circuitboards/machine/production.ftl @@ -82,8 +82,6 @@ ent-BorgChargerCircuitboard = станция зарядки киборгов (м .desc = Печатная плата для станции зарядки киборгов. ent-WeaponCapacitorRechargerCircuitboard = зарядник .desc = Печатная плата зарядника. -ent-TurboItemRechargerCircuitboard = турбозарядник (машинная плата) - .desc = Печатная плата турбозарядника. ent-SubstationMachineCircuitboard = подстанция (машинная плата) .desc = { ent-BaseMachineCircuitboard.desc } ent-DawInstrumentMachineCircuitboard = цифровая звуковая рабочая станция (машинная плата) @@ -114,8 +112,6 @@ ent-MaterialReclaimerMachineCircuitboard = измельчитель матери .desc = { ent-BaseMachineCircuitboard.desc } ent-OreProcessorMachineCircuitboard = переработчик руды (машинная плата) .desc = { ent-BaseMachineCircuitboard.desc } -ent-OreProcessorIndustrialMachineCircuitboard = промышленный переработчик руды (машинная плата) - .desc = { ent-BaseMachineCircuitboard.desc } ent-SheetifierMachineCircuitboard = лист-мастер 2000 (машинная плата) .desc = { ent-BaseMachineCircuitboard.desc } ent-MicrowaveMachineCircuitboard = микроволновка (машинная плата) diff --git a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml index e13302ec9bf4c4..936be6f8e34932 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml @@ -375,7 +375,6 @@ - HydroponicsTrayMachineCircuitboard - SolarControlComputerCircuitboard - SolarTrackerElectronics - - TurboItemRechargerCircuitboard - PowerComputerCircuitboard - AutolatheMachineCircuitboard - AutolatheHyperConvectionMachineCircuitboard diff --git a/Resources/Prototypes/Recipes/Lathes/electronics.yml b/Resources/Prototypes/Recipes/Lathes/electronics.yml index 33e9643e7f2580..44bb5c71c53f8d 100644 --- a/Resources/Prototypes/Recipes/Lathes/electronics.yml +++ b/Resources/Prototypes/Recipes/Lathes/electronics.yml @@ -402,14 +402,6 @@ Steel: 100 Glass: 900 -- type: latheRecipe - id: OreProcessorIndustrialMachineCircuitboard - result: OreProcessorIndustrialMachineCircuitboard - completetime: 4 - materials: - Steel: 100 - Glass: 900 - Gold: 100 - type: latheRecipe id: ShuttleConsoleCircuitboard From 68945595ed307244b40fde969bb9f77de5b56bbe Mon Sep 17 00:00:00 2001 From: Ratyyy <138193222+Ratyyy@users.noreply.github.com> Date: Fri, 16 Feb 2024 04:20:24 +0200 Subject: [PATCH 15/17] turbo recharger --- .../Power/Components/ChargerComponent.cs | 21 ++++++++++++ .../Power/EntitySystems/ChargerSystem.cs | 13 ++++++++ .../Circuitboards/Machine/production.yml | 22 ++++++++++++- .../Entities/Structures/Machines/lathe.yml | 1 + .../Entities/Structures/Power/chargers.yml | 32 +++++++++++++++++-- .../Prototypes/Recipes/Lathes/electronics.yml | 9 ++++++ Resources/Prototypes/Research/industrial.yml | 1 + 7 files changed, 95 insertions(+), 4 deletions(-) diff --git a/Content.Server/Power/Components/ChargerComponent.cs b/Content.Server/Power/Components/ChargerComponent.cs index af4498f01bae63..7e8534753bd708 100644 --- a/Content.Server/Power/Components/ChargerComponent.cs +++ b/Content.Server/Power/Components/ChargerComponent.cs @@ -1,5 +1,7 @@ using Content.Shared.Power; using Content.Shared.Whitelist; +using Content.Shared.Construction.Prototypes; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; namespace Content.Server.Power.Components { @@ -15,6 +17,25 @@ public sealed partial class ChargerComponent : Component [DataField("chargeRate")] public float ChargeRate = 20.0f; + /// + /// The charge rate with no machine upgrades + /// + [DataField("baseChargeRate")] + public float BaseChargeRate = 20.0f; + + /// + /// The machine part that affects the charge rate multiplier of the charger + /// + [DataField("machinePartChargeRateModifier", customTypeSerializer: typeof(PrototypeIdSerializer))] + public string MachinePartChargeRateModifier = "Capacitor"; + + /// + /// A value used to scale the charge rate multiplier + /// with the corresponding part rating. + /// + [DataField("partRatingChargeRateModifier")] + public float PartRatingChargeRateModifier = 1.5f; + /// /// The container ID that is holds the entities being charged. /// diff --git a/Content.Server/Power/EntitySystems/ChargerSystem.cs b/Content.Server/Power/EntitySystems/ChargerSystem.cs index 7926e1a84d9c07..15369e3d4d4d69 100644 --- a/Content.Server/Power/EntitySystems/ChargerSystem.cs +++ b/Content.Server/Power/EntitySystems/ChargerSystem.cs @@ -1,4 +1,5 @@ using Content.Server.Power.Components; +using Content.Server.Construction; using Content.Server.PowerCell; using Content.Shared.Examine; using Content.Shared.Power; @@ -22,6 +23,8 @@ internal sealed class ChargerSystem : EntitySystem public override void Initialize() { SubscribeLocalEvent(OnStartup); + SubscribeLocalEvent(OnRefreshParts); + SubscribeLocalEvent(OnUpgradeExamine); SubscribeLocalEvent(OnPowerChanged); SubscribeLocalEvent(OnInserted); SubscribeLocalEvent(OnRemoved); @@ -34,6 +37,16 @@ private void OnStartup(EntityUid uid, ChargerComponent component, ComponentStart { UpdateStatus(uid, component); } + private void OnRefreshParts(EntityUid uid, ChargerComponent component, RefreshPartsEvent args) + { + var modifierRating = args.PartRatings[component.MachinePartChargeRateModifier]; + component.ChargeRate = component.BaseChargeRate * MathF.Pow(component.PartRatingChargeRateModifier, modifierRating - 1); + } + + private void OnUpgradeExamine(EntityUid uid, ChargerComponent component, UpgradeExamineEvent args) + { + args.AddPercentageUpgrade("charger-component-charge-rate", component.ChargeRate / component.BaseChargeRate); + } private void OnChargerExamine(EntityUid uid, ChargerComponent component, ExaminedEvent args) { diff --git a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/production.yml b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/production.yml index 821a7601579b0c..d537de218465bd 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/production.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/production.yml @@ -1,4 +1,4 @@ -- type: entity +- type: entity id: AutolatheMachineCircuitboard parent: BaseMachineCircuitboard name: autolathe machine board @@ -754,6 +754,26 @@ - type: StaticPrice price: 40 +- type: entity + id: TurboItemRechargerCircuitboard + parent: BaseMachineCircuitboard + name: turbo recharger machine board + description: A machine printed circuit board for a turbo recharger. + components: + - type: Sprite + sprite: Objects/Misc/module.rsi + state: charger_APC + - type: MachineBoard + prototype: TurboItemRecharger + requirements: + Capacitor: 2 + materialRequirements: + CableMV: 5 + - type: PhysicalComposition + materialComposition: + Steel: 30 + Plastic: 30 + - type: entity id: ThrusterMachineCircuitboard parent: BaseMachineCircuitboard diff --git a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml index 936be6f8e34932..e13302ec9bf4c4 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml @@ -375,6 +375,7 @@ - HydroponicsTrayMachineCircuitboard - SolarControlComputerCircuitboard - SolarTrackerElectronics + - TurboItemRechargerCircuitboard - PowerComputerCircuitboard - AutolatheMachineCircuitboard - AutolatheHyperConvectionMachineCircuitboard diff --git a/Resources/Prototypes/Entities/Structures/Power/chargers.yml b/Resources/Prototypes/Entities/Structures/Power/chargers.yml index 4d5ef0b5076507..eedc854e2c5ca3 100644 --- a/Resources/Prototypes/Entities/Structures/Power/chargers.yml +++ b/Resources/Prototypes/Entities/Structures/Power/chargers.yml @@ -109,7 +109,7 @@ color: "#03fc4e" energy: 0.7 - type: Charger - chargeRate: 50 + BaseChargeRate: 50 - type: Sprite sprite: Structures/Power/cage_recharger.rsi - type: PowerCellSlot @@ -162,7 +162,7 @@ shader: "unshaded" - type: WallMount - type: Charger - chargeRate: 25 + BaseChargeRate: 25 - type: ItemSlots slots: charger_slot: @@ -195,7 +195,7 @@ map: ["enum.WiresVisualLayers.MaintenancePanel"] visible: false - type: Charger - chargeRate: 30 + BaseChargeRate: 30 slotId: entity_storage whitelist: components: @@ -250,3 +250,29 @@ entity_storage: !type:Container machine_board: !type:Container machine_parts: !type:Container + +- type: entity + parent: BaseItemRecharger + id: TurboItemRecharger + name: turbo recharger + description: An overclocked recharger that's been adapted with a global port. + components: + - type: Sprite + sprite: Structures/Power/turbo_recharger.rsi + - type: Machine + board: TurboItemRechargerCircuitboard + - type: Charger + BaseChargeRate: 100 + - type: ItemSlots + slots: + charger_slot: + ejectOnInteract: true + whitelist: + components: + - HitscanBatteryAmmoProvider + - ProjectileBatteryAmmoProvider + - Stunbaton + - PowerCell + blacklist: + tags: + - PotatoBattery \ No newline at end of file diff --git a/Resources/Prototypes/Recipes/Lathes/electronics.yml b/Resources/Prototypes/Recipes/Lathes/electronics.yml index 44bb5c71c53f8d..223bde22a07981 100644 --- a/Resources/Prototypes/Recipes/Lathes/electronics.yml +++ b/Resources/Prototypes/Recipes/Lathes/electronics.yml @@ -34,6 +34,15 @@ Steel: 50 Plastic: 50 +- type: latheRecipe + id: TurboItemRechargerCircuitboard + result: TurboItemRechargerCircuitboard + completetime: 2 + materials: + Steel: 500 + Plastic: 500 + Gold: 100 + - type: latheRecipe id: WeaponCapacitorRechargerCircuitboard result: WeaponCapacitorRechargerCircuitboard diff --git a/Resources/Prototypes/Research/industrial.yml b/Resources/Prototypes/Research/industrial.yml index 1d2167b272d6c1..8b9971e97c1458 100644 --- a/Resources/Prototypes/Research/industrial.yml +++ b/Resources/Prototypes/Research/industrial.yml @@ -26,6 +26,7 @@ cost: 7500 recipeUnlocks: - PowerCellHigh + - TurboItemRechargerCircuitboard - type: technology id: MechanicalCompression From 67b873662db3a7fb3e6a842cfeffe6f8847f5bf8 Mon Sep 17 00:00:00 2001 From: Ratyyy <138193222+Ratyyy@users.noreply.github.com> Date: Mon, 19 Feb 2024 20:53:00 +0200 Subject: [PATCH 16/17] turbo crharger 2 --- Resources/Prototypes/Entities/Structures/Power/chargers.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Prototypes/Entities/Structures/Power/chargers.yml b/Resources/Prototypes/Entities/Structures/Power/chargers.yml index eedc854e2c5ca3..703758e40e2425 100644 --- a/Resources/Prototypes/Entities/Structures/Power/chargers.yml +++ b/Resources/Prototypes/Entities/Structures/Power/chargers.yml @@ -262,7 +262,7 @@ - type: Machine board: TurboItemRechargerCircuitboard - type: Charger - BaseChargeRate: 100 + BaseChargeRate: 70 - type: ItemSlots slots: charger_slot: From 6017206289bb6af57ddd92fefd13ee277a2b978e Mon Sep 17 00:00:00 2001 From: Ratyyy <138193222+Ratyyy@users.noreply.github.com> Date: Mon, 19 Feb 2024 20:53:53 +0200 Subject: [PATCH 17/17] fix --- .../Entities/Structures/Power/chargers.yml | 28 +------------------ 1 file changed, 1 insertion(+), 27 deletions(-) diff --git a/Resources/Prototypes/Entities/Structures/Power/chargers.yml b/Resources/Prototypes/Entities/Structures/Power/chargers.yml index 67511094acd03d..00e0c3fd89641e 100644 --- a/Resources/Prototypes/Entities/Structures/Power/chargers.yml +++ b/Resources/Prototypes/Entities/Structures/Power/chargers.yml @@ -161,7 +161,7 @@ - type: Machine board: TurboItemRechargerCircuitboard - type: Charger - chargeRate: 100 + chargeRate: 70 - type: ItemSlots slots: charger_slot: @@ -281,29 +281,3 @@ entity_storage: !type:Container machine_board: !type:Container machine_parts: !type:Container - -- type: entity - parent: BaseItemRecharger - id: TurboItemRecharger - name: turbo recharger - description: An overclocked recharger that's been adapted with a global port. - components: - - type: Sprite - sprite: Structures/Power/turbo_recharger.rsi - - type: Machine - board: TurboItemRechargerCircuitboard - - type: Charger - BaseChargeRate: 70 - - type: ItemSlots - slots: - charger_slot: - ejectOnInteract: true - whitelist: - components: - - HitscanBatteryAmmoProvider - - ProjectileBatteryAmmoProvider - - Stunbaton - - PowerCell - blacklist: - tags: - - PotatoBattery \ No newline at end of file